Динамически генерируемые классы ORM - PullRequest
2 голосов
/ 07 июня 2011

Я работаю над проектом на основе Sinatra, который использует DataMpper ORM.Я хотел бы иметь возможность определить критерии проверки DM во внешнем файле YAML, чтобы менее опытные пользователи системы могли легко настроить настройку.У меня это работает довольно хорошо, как подтверждение концепции, но я подозреваю, что может быть гораздо более простой или наименее ресурсоемкий подход к этому.

Прямо сейчас, скрипт загружает файл YAML и генерирует классы DM с рядом операторов eval (я знаю, что это уже ставит меня на тонкий лед).Проблема в том, что этот процесс должен происходить с каждым запросом.Моя яркая идея - проверить YAML на наличие изменений, заново создать классы и экспортировать в статический источник, если изменения обнаружены, и включить статические файлы, если не обнаружено никаких изменений.

Это оказывается сложнее, чем я ожидал, потому чтоэкспорт блоков кода в строки для сериализации не так прост, как я ожидал.

Это смешно?Я подхожу к этому совершенно неправильно?

Я новичок в Ruby и мире ORM, поэтому, пожалуйста, прости мое невежество.

Спасибо!

Ответы [ 2 ]

1 голос
/ 07 июня 2011

Проверки DM во внешнем файле YAML, так что менее опытные пользователи системы могут легко настроить

DSL для DSL. Не видя ваш YAML, я все еще задаюсь вопросом, насколько проще, чем DM Validations, он действительно может получить?

require 'dm-validations'
class User
  include DataMapper::Resource

  property :name, String
  # Manual validation
  validates_length_of :name, :max => 42

  # Auto-validation 
  property :bio, Text, :length => 100..500
end

Вместо того, чтобы перейти на YAML, я бы предоставил менее опытным пользователям пару соответствующих примеров валидации и, возможно, также краткое руководство на основе документации по валидации dm .

0 голосов
/ 07 июня 2011

Кажется немного сумасшедшим идти и помещать все в YAML, так как это лишь немного проще, чем писать валидации в Ruby.То, что вы могли бы сделать, - это создать DSL в Ruby, который значительно упростит определение проверок, а затем предоставить его пользователям вместо всего класса.

...