Я хочу написать DSL
, который работает вот так.Очень простой DSL в Ruby
text = Screen.write do
label text: 'Something'
label text: 'stupid'
end
puts text => Somethingstupid
Я не знаю много метапрограммирования (я начинаю изучать его сейчас) и DSL-уроки онлайн не были действительно хороши. Я думаю, что я должен что-то вроде этого:
class Screen
attr_accessor :content
def initialize
@content = ""
end
def self.draw (&block)
self.instance_eval(&block)
@content
end
проблема, я понятия не имею о label text:
части. Это, возможно, самая важная часть, потому что я должен позже добавить к ней функциональность, например, label text: 'border', border: '|' => |border|
и label text: 'UPCASE', style: :downcase => upcase
. Итак, как мне решить эту проблему. Любые идеи и помощь приветствуются.
Я добавил "вертикальный" метод записи. –