https://github.com/zhum/img
Last synced: over 1 year ago
JSON representation
- Host: GitHub
- URL: https://github.com/zhum/img
- Owner: zhum
- Created: 2019-11-19T13:05:35.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2021-07-13T08:29:30.000Z (almost 5 years ago)
- Last Synced: 2025-01-30T20:15:03.793Z (over 1 year ago)
- Language: Ruby
- Size: 13.7 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Классы и методы
----------------
Главный класс - 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)
TODO
-----
[+] для filter сделать обработку всех элементов хеша, а не только первого
[ ] для условий сделать сравнения (больше/меньше/и т.п.)
[ ] добавить тип "дата-время"