Главный класс - Img::Img. Перед началом работы нужно вызвать его метод класса init, передав путь к файлу конфигурации:
Img::Img.init('schema.yml')
После этого можно получить объект "таблицы" по её имени:
table=Img::Img.data('ИМЯ')
Для таблицы доступны методы получения данных:
- filter(hash) получить данные с фильтром. Каждый ключ хэша - имя столбца, значение - условие. Условие может быть равенством, массивом или диапазоном. Если столбец является отношением к другой таблице, то условие указывается в виде аналогичного хэша, но для другой таблицы;
- all получить все данные.
Все возвращаемые данные являются ROM Datasets, поэтому для получения реального значения нужно вызвать .one, .to_a, или методы типа map/each/итп.
puts Img::Img.data('tasks').filter('owner' => {'email' => 'qwe'}).to_a.inspect
puts Img::Img.data('users').filter('tasks' => {'descr' => 'task number 1'}).inspect
tables:
ИМЯ_ТАБЛИЦЫ:
driver: yaml # имя драйвера источника данных
location: 'data.yml' # адрес источника данных
schema: # описание полей
id: int # пример: поле id типа int
name: str # пример: поле name типа str
author_id: int
descr: str
relations: # ссылки на другие таблицы
owner: # имя поля
type: :belongs_to # вид отношения
table: users # имя таблицы
my_field: :author_id # поле ключа (обязательно с :)
key: :id # поле внешнего ключа (обязательно с :)
users:
driver: sql
location: 'sqlite://test.db'
schema:
id: int
name: str
email: str
relations:
tasks:
type: :has_many
table: tasks
my_field: :id
key: :author_id
options:
foo: bar
- :belongs_to ссылка на один внешний объект, его id указывается в поле с именем, заданным в my_field, а имя поля, в котором записан id - в key.
- :has_many все объекты из другой таблицы, где в поле, заданном в key, указан наш идентификатор (имя поля идентификатора задано в my_field)
[+] для filter сделать обработку всех элементов хеша, а не только первого [ ] для условий сделать сравнения (больше/меньше/и т.п.) [ ] добавить тип "дата-время"