Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Явное лучше, чем неявное.
Простое лучше, чем сложное.
StateBuilder.build('CA') do
company do
edd { format '\d{3}-\d{4}-\d' }
sos { format '[A-Z]\d{7}' }
end
employee do
...
end
end
на это:StateBuilder.build('CA') do
company do
field edd, format: '\d{3}-\d{4}-\d'
field sos, format: '[A-Z]\d{7}'
end
employee do
...
end
end
validates :name, presence: true
Ну все-таки на самом деле можно, только осторожно. Смотрим примеры из роутов:state 'CA' { # вот и пригодилось знание про «почему тут нельзя do» company edd: '\d{3}-\d{4}-\d', sos: '[A-Z]\d{7}' }
namespace :nspace do
resources :resname do
get 'path', on: :collection
end
end
Главное, не пытаться что-то сделать с результатом выполнения этого когда (тогда будет указанный Вами упс).Они плясали от старого кода к DSL. Нужно было написать идеальный DSL, а потом его запрограммировать. Правда, пошаговую статью тогда было бы не написать.
В данном случае, мы будем работать «задом наперед»: вместо того, чтобы начинать с создания классов и методов, мы разработаем идеальный синтаксис и будем строить все остальное вокруг него.
Далее, про принципы:
в чем разница между
MyClass.new.instance_eval { say_hello } # => 'Hello!'
и
MyClass.new.say_hello # => 'Hello!'
не ясно
Как быстро и просто написать DSL на Ruby