Class: FunctionObject::Macro

Inherits:
Object
  • Object
show all
Defined in:
lib/function_object/macro.rb

Instance Method Summary collapse

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_mixinObject



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_mixinObject



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