Я пытаюсь написать DSL, который позволяет мне делать
Policy.name do
author "Foo"
reviewed_by "Bar"
end
Следующий код может почти обработать его:
class Policy
include Singleton
def self.method_missing(name,&block)
puts name
puts "#{yield}"
end
def self.author(name)
puts name
end
def self.reviewed_by(name)
puts name
end
end
Определяя мой метод как методы класса (self.method_name), я могу получить к нему доступ, используя следующий синтаксис:
Policy.name do
Policy.author "Foo"
Policy.reviewed_by "Bar"
end
Если я удаляю «self» из имен методов и пытаюсь использовать свой желаемый синтаксис, то я получаю ошибку «Method not Found» в Main, поэтому он не может найти мою функцию до ядра модуля. Хорошо, я понимаю ошибку. Но как я могу это исправить? Как я могу исправить свой класс, чтобы он работал с моим желаемым синтаксисом, что?