Обзор:Ruby: создавать объекты из файлов
main.rb
items/
one.rb
two.rb
three.rb
Каждый файл в items/
должен иметь удобочитаемое описание (сериализации выходит), как и (но, возможно, DSL будет лучше?):
class One < BaseItem
name "Item one"
def meth
"something"
end
main.rb
должен иметь возможность создавать экземпляры всех объектов из каталога items/
. Как это можно сделать? Не знакомый с Ruby, я вижу, что объектная модель допускает некоторые довольно классные вещи (те крючки класса и т. Д.), Но мне трудно найти способ решить эту проблему.
Любой способ ввода оценен.
EDIT:
Стреляй, я, возможно, пропустил его суть - то, что я не упомянул был материал в items/
директории будет динамическим - относиться к вещи как плагины, я хочу main.rb
автоопределение все в этом каталоге во время выполнения (возможно, перезагрузка во время выполнения). main.rb
не имеет предварительного знания объектов там, он просто знает, какие методы ожидать от них.
Я посмотрел на создание DSL, учитывая определение (в main.rb
) функции spawn
, которая принимает блок. Пример файл в items/
будет выглядеть примерно так:
spawn do
name "Item name"
def foo
"!"
end
end
И внутренности spawn
бы создать новый объект базового типа и передать блок instance_eval
. Это означало, что для установки значения мне понадобится метод name
, но, кстати, я также хотел, чтобы значение было доступно под name
, поэтому мне пришлось его переименовать в attr.
Я также пробовал маршрут наследования: сделайте каждый файл элемента содержащим класс, который наследуется от типа BaseItem
, и подключайтесь к нему через inherited
... но это не сработало (крючок никогда не запускался, я теперь я потерял код).
EDIT2:
Вы можете посмотреть на то, что homebrew делает со своими формулами, что очень близко к тому, что я хочу - я просто не рубиновый доблесть перепроектировать, как она обрабатывает формулу.
Вы не говорите, что ваши исследования в решении этого привели вас, и почему эти вещи не сработали для вас. Скажите нам, поэтому мы не получаем 20 вопросов. –