Class: FunctionObject::Macro
- Inherits:
-
Object
- Object
- FunctionObject::Macro
- Defined in:
- lib/function_object/macro.rb
Instance Method Summary collapse
- #class_mixin ⇒ Object
-
#initialize(arg_descs) ⇒ Macro
constructor
A new instance of Macro.
- #sclass_mixin ⇒ Object
Constructor Details
#initialize(arg_descs) ⇒ Macro
Returns a new instance of Macro.
2 3 4 5 6 7 8 |
# File 'lib/function_object/macro.rb', line 2 def initialize(arg_descs) @arg_descs = arg_descs @has_defaults = arg_descs.any?(&:default?) @arg_descs_without_defaults = arg_descs.take_while { |d| !d.default? } @arg_descs_with_defaults = arg_descs[arg_descs_without_defaults.length .. -1] end |
Instance Method Details
#class_mixin ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/function_object/macro.rb', line 10 def class_mixin Module.new.tap do |mixin| arg_descs_with_defaults.each do |desc| mixin.module_eval do private define_method("_default_#{desc.name}", &desc.default) end end arg_descs.each do |desc| mixin.module_eval do attr_reader desc.name end end mixin.module_eval " def initialize(\#{arg_list_stmt})\n \#{ivar_assign_stmt}\n end\n RUBY\n end\nend\n", __FILE__, __LINE__ + 1 |
#sclass_mixin ⇒ Object
32 33 34 35 36 37 38 39 40 |
# File 'lib/function_object/macro.rb', line 32 def sclass_mixin Module.new.tap do |mixin| mixin.module_eval " def call(\#{arg_list_stmt})\n new(\#{arg_list_stmt}).call\n end\n RUBY\n end\nend\n", __FILE__, __LINE__ + 1 |