Пятница, 13й digest #wpp :-)
==============================
1050 коммитов
==============================
Отметка в 1000 коммитов уже перешагнута.
Если быть точным, сейчас в пакетах 1055 коммитов + 248 коммитов в старом репозитории xcms.
==============================
FS
==============================
В бранчах сделан новый пакет FS, который очень скоро будет слит в trunk (дата в календаре - 7е июня 2011).
Суть пакета очень проста - он предоставляет объектную оболочку над понятием файл, директория. Различает файлы-картинки разных форматов, соответственно, разные методы. Например, есть классы:
FS_File - позволяет узнать isExists(), checkExists(), getSize(), getName(), getExtension(), getPath(), …
FS_Directory - аналогично
FS_FileImage - расширяет FS_File и добавляет getWidth(), getHeight(), …
FS_FileImageJPEG - расширяет FS_FileImage и добавляет чтение meta-данных из JPEG'a.
Например, можно написать FS_File::Open(path) - и на выходе будет объект класса FS_File, причем обязательно провериться файл на существование, и что это файл, а не директория.
FS - пакет для внутреннего пользования. Очень скоро он будет интегрирован в Engine, SQLObject2, SQLObjectSync и т.д. (сейчас он уже в SQLProcessor'e). Как только разработчик передает где-то имя/путь файла, он заворачивается в FS и внутри храниться уже в виде объекта. Это просто удобно, объектно и "кошерно" :-)
FS - это концепция, количество классов будет постоянно добавляться под новые форматы. Жду ваших предложений по форматам и их возможностям.
Бранч пакета FS:
svn://
svn.webproduction.com.ua/packages/branches/FS/
---
Немного истории:
в packages-1 по адресам приведенным ниже уже был пакет FS. Его разработчик (Igor L. @dfox) закладывал в него очень схожую концепцию, но все-таки на тот момент основной целью пакета FS была работа с TAR/GZ.
svn://
svn.webproduction.com.ua/packages/tags/packages-1/FS/
http://office.webproduction.com.ua:3000/projects/packages/repository/show/tags/packages-1/FS
==============================
SQLProcessor
==============================
Изначально планировалась переделка SQLObject и SQLObjectSync так, чтобы они поддерживали все типы соединений с базами данных и могли универсально оперировать любыми таблицами. К сожалению, это оказалось возможным только в теории и на очень жестких правилах, которые мало кого устроят.
В процессе переработки SQLObjectSync была принята новая концепция пакета-процессора (
http://packages.webproduction.com.ua/package/PackageLoader/article/global-wpp-sr-packages.txt/) и бранч SQLObjectSync был переименован в SQLProcessor.
Несмотря на то, что пакет еще в бранче, он уже полностью может заменить SQLObjectSync в плане синхронизации структуры таблиц.
Пример:
// получаем соединение с БД (ЛЮБОГО типа)
$connection = ConnectionManager::Get()->getConnectionDatabase();
// создаем процессор
$p = new SQLProcessor($connection);
// добавляем в процессор заявку на таблицу mytable для MySQL
$table = new SQLProcessor_TableStructureMySQL('mytable');
$p->addAction($table);
// далее уже в саму таблицу добавляем поля
$field = $table->addField(new SQLProcessor_Field('id', 'int(11)', 'auto_increment'), true);
// а также в сам процессор добавляем индексы на поля
$index = new SQLProcessor_TableIndexMySQL($table, $field);
$p->addAction($index);
$table->addField(new SQLProcessor_Field('name', 'varchar(255)'));
$table->addField(new SQLProcessor_Field('name2', 'varchar(32)'));
$table->addField(new SQLProcessor_Field('cdate', 'datetime'));
// синхронизируемая
$p->process();
В итоге получается, что процессор состоит из команд Action, каждая из которых выполняет свою операцию. Есть комманды:
SQLProcessor_TableStructureMySQL - синхронизировать структуру таблицы (внутрь которой вкладываются поля таблицы),
SQLProcessor_TableIndexMySQL - создать индекс на поле.
Также в будущем будут добавлены коммнды для синхронизации данных (поддержка миграций и фикстур), разные типы таблиц и так далее.
Бранч:
svn://
svn.webproduction.com.ua/packages/branches/SQLProcessor
==============================
SQLObjectSync default id
==============================
Ранее в SQLObjectSync был баг-фича: первое поле он всегда доблял id и делал его primary.
В ревизии r1045 исправление: теперь SQLObjectSync по дефолту не добавляет никаких полей.
Что это означает для разработчиков:
Это означает, что можно просто написать:
$sqlobject->addTable('table', 'XClassname');
и построиться корректный X-класс с описанной таблицей (имена полей возьмутся из таблицы).
==============================
SQLObject2Pg
==============================
В бранче svn://
svn.webproduction.com.ua/packages/branches/SQLObject2Pg/ был сделан форк trunk/SQLObject2 и полученный пакет адаптирован для PgSQL.
К сожалению, универсальный SQLObject один под все виды таблиц пока не получается сделать даже теоретически, из-за особенностей построения таблиц, индексов в MySQL, PgSQL и других СУБД.
==============================
Правила trunk-release для #wpp
==============================
Опубликованы предварительные правила релизов пакетов после "судного дня".
Правила:
http://packages.webproduction.com.ua/package/PackageLoader/article/global-wpp-sr-repository.txt/
Подробности:
https://groups.google.com/d/topic/wp-packages/OGdlxsD6Yd0/discussion
--
With best regards,
Maxim Miroshnichenko,
WebProduction, co-founder & technical director
http://webproduction.com.ua/
m...@webproduction.com.ua
Office:
off...@webproduction.com.ua
+38 (050) 447-95-30
+38 (0462) 61-42-61