Class: DSL
- Inherits:
-
Object
- Object
- DSL
- Defined in:
- lib/dsl.rb
Class Method Summary collapse
- .call(parent, &blk) ⇒ Object
-
.def_dsl_delegator(*method_names) ⇒ Object
Defines a method that accepts a variable number of arguments that will delegate to the parent.
Instance Method Summary collapse
-
#initialize(parent) ⇒ DSL
constructor
A new instance of DSL.
Constructor Details
#initialize(parent) ⇒ DSL
Returns a new instance of DSL.
34 35 36 |
# File 'lib/dsl.rb', line 34 def initialize(parent) @parent = parent end |
Class Method Details
.call(parent, &blk) ⇒ Object
5 6 7 8 |
# File 'lib/dsl.rb', line 5 def call(parent, &blk) # `instance_eval` returns the last thing in the block whereas `tap` return the Object that was tapped new(parent).tap { |instance| instance.instance_eval(&blk) } end |
.def_dsl_delegator(*method_names) ⇒ Object
Defines a method that accepts a variable number of arguments that will delegate to the parent. This will attempt to call the setter/getter method before attempting to access the instance variable. This way, any modifications you do to the instance variables in those methods will be used.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/dsl.rb', line 15 def def_dsl_delegator(*method_names) method_names.each do |method_name| raise TypeError unless method_name.respond_to?(:to_sym) method_name = method_name.to_sym define_method(method_name) do |*args| unless args.empty? args = args.first if args.length == 1 @parent.respond_to?("#{method_name}=") ? @parent.send("#{method_name}=", args) : @parent.instance_variable_set("@#{method_name}", args) end @parent.respond_to?(method_name) ? @parent.send(method_name) : @parent.instance_variable_get("@#{method_name}") end end end |