Skip to content

Latest commit

 

History

19 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

💎 MicroORM

MicroORM — это легкая, идиоматичная Object-Relational Mapping (ORM) библиотека на Ruby, разработанная для глубокого понимания механизмов метапрограммирования, паттерна Active Record, ленивых вычислений и архитектуры гемов.

Библиотека наглядно демонстрирует внутреннее устройство современных ORM (таких как Rails Active Record): маппинг строк SQLite в объекты Ruby, динамическую генерацию методов, цепочки ленивых запросов, валидации, коллбеки жизненного цикла, DSL-спецификации для тестов на RSpec и управление миграциями через CLI.


🛠 Технологический стек

  • Язык: Ruby 3.x
  • База данных: SQLite3 (>= 2.0)
  • Тестирование: RSpec 3.x
  • Инструменты: OptionParser, Bundler / Gem Specification
  • Паттерны: Active Record Pattern, Domain Specific Language (DSL), Lazy Evaluation, Closures / Procs.

✨ Реализованный функционал

1. Архитектурный каркас и маппинг БД

  • Автоматическое сопоставление таблиц: Класс User автоматически связывается с таблицей "users", BlogPost $\rightarrow$ "blog_posts".
  • Безопасный SQL: Все запросы используют биндинги параметров (prepared statements ?) для защиты от SQL-инъекций.
  • Единый коннектор: MicroORM::Connection управляет потокобезопасным подключением к SQLite3.

2. Динамические атрибуты и Поиск

  • Фоллбэк через method_missing: Динамическое чтение и запись атрибутов (user.name = "Alex", user.name).
  • DSL columns: Опциональная явная генерация геттеров и сеттеров при необходимости.
  • Динамический поиск: Методы find(id), all и find_by(...) по произвольному набору параметров.

3. Ленивые запросы (Lazy Query Builder)

  • Класс MicroORM::Relation: Построение цепочек методов (.where(...), .limit(...), .order(...)) без моментального обращения к БД.
  • Интеграция с Enumerable: Запрос выполняется отложено — только в момент реального обращения к данным (.each, .first, .map).

4. Persistence & Полноценный CRUD

  • Умный save: Автоматически определяет тип операции: INSERT (для новых объектов) или UPDATE (при наличии id).
  • Методы жизненного цикла: create, update, destroy с заморозкой состояния объекта (@attributes.freeze) после удаления.

5. Ассоциации (Associations)

  • has_many и belongs_to: Связывание моделей между собой.
  • Гибкая настройка: Поддержка кастомных параметров class_name и foreign_key.
  • Цепочки связей: Вызов user.posts возвращает Relation, позволяя выполнять запросы вида user.posts.where(...).

6. Валидации и Ошибки (Validations)

  • DSL validates: Проверка обязательных полей (presence: true).
  • Хэш ошибок @errors и метод valid?: Блокировка сохранения невалидных данных в БД со сбором понятных сообщений об ошибках.

7. Коллбеки жизненного цикла (Callbacks)

  • Хуки before_save и after_create: Автоматический запуск кода перед сохранением или сразу после создания записи.
  • Поддержка типов: Принимает как символы методов (:strip_name), так и анонимные блоки (Proc / lambda).

📁 Структура проекта

micro_orm/

├── lib/
│   ├── micro_orm.rb         # Главная точка входа гема
│   └── micro_orm/
│       ├── base.rb          # Основной класс модели (ActiveRecord)
│       ├── connection.rb    # Синглтон подключения к SQLite3
│       └── relation.rb      # Ленивый конструктор запросов

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages