lib/danica/dsl.rb in danica-2.6.1 vs lib/danica/dsl.rb in danica-2.6.2

- old
+ new

@@ -1,19 +1,33 @@ module Danica module DSL - def self.register_operator(method, clazz=nil) - register(method, clazz, 'Danica::Operator') - end + class << self + def register_operator(method, clazz=nil) + register(method, clazz, 'Danica::Operator') + end - def self.register_wrapper(method, clazz=nil) - register(method, clazz, 'Danica::Wrapper') - end + def register_wrapper(method, clazz=nil) + register(method, clazz, 'Danica::Wrapper') + end - def self.register(method, clazz=nil, base=nil) - define_method method do |*args| - clazz = [base.to_s, method.to_s.camelize].compact.join('::').constantize unless clazz - clazz = [base, clazz.to_s].compact.join('::').constantize unless clazz.is_a? Class - clazz.new(*args) + def register(method, clazz=nil, base=nil) + define_method method do |*args| + clazz = [base.to_s, method.to_s.camelize].compact.join('::').constantize unless clazz + clazz = [base, clazz.to_s].compact.join('::').constantize unless clazz.is_a? Class + clazz.new(*args) + end + end + + def build(&block) + builder.instance_eval(&block) + end + + private + + def builder + @builder ||= Class.new do + include DSL + end.new end end def function(*variables, &block) Function.build(*variables, &block).new