Class: Initializer::Macro::InitializerDefinition

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

Defined Under Namespace

Modules: InitializerParameter

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(target_class, parameters) ⇒ InitializerDefinition

Returns a new instance of InitializerDefinition.



52
53
54
55
# File 'lib/initializer/macro.rb', line 52

def initialize(target_class, parameters)
  @target_class = target_class
  @parameters = parameters
end

Instance Attribute Details

#parametersObject (readonly)

Returns the value of attribute parameters.



50
51
52
# File 'lib/initializer/macro.rb', line 50

def parameters
  @parameters
end

#target_classObject (readonly)

Returns the value of attribute target_class.



49
50
51
# File 'lib/initializer/macro.rb', line 49

def target_class
  @target_class
end

Class Method Details

.define_initializer(target_class, parameters) ⇒ Object



57
58
59
60
61
62
63
# File 'lib/initializer/macro.rb', line 57

def self.define_initializer(target_class, parameters)
  parameters = parameters.map do |parameter|
    Extension.! parameter, InitializerParameter
  end
  instance = new target_class, parameters
  instance.define_initializer
end

Instance Method Details

#build_initializer_definitionObject



83
84
85
86
87
88
89
90
# File 'lib/initializer/macro.rb', line 83

def build_initializer_definition
  body =
<<CTOR
  def initialize(#{parameter_definitions})
    #{variable_assignment_statements}
  end
CTOR
end

#define_initializerObject



65
66
67
68
# File 'lib/initializer/macro.rb', line 65

def define_initializer
  body = build_initializer_definition 
  target_class.class_eval body
end

#parameter_definitionsObject



77
78
79
80
81
# File 'lib/initializer/macro.rb', line 77

def parameter_definitions
  parameter_names = parameters.map{ |item| item.argument_definition }.to_a
  parameter_names = parameter_names.join(", ")
  parameter_names
end

#variable_assignment_statementsObject



70
71
72
73
74
75
# File 'lib/initializer/macro.rb', line 70

def variable_assignment_statements
  variable_assignments = parameters.inject("") do |assignments, parameter|
    "#{assignments}#{parameter.assignment_statement}\n"
  end
  variable_assignments
end