Class: Initializer::Macro::InitializerDefinition
- Inherits:
-
Object
- Object
- Initializer::Macro::InitializerDefinition
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
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
#parameters ⇒ Object
Returns the value of attribute parameters.
50
51
52
|
# File 'lib/initializer/macro.rb', line 50
def parameters
@parameters
end
|
#target_class ⇒ Object
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|
parameter.extend InitializerParameter
end
instance = new target_class, parameters
instance.define_initializer
end
|
Instance Method Details
#build_initializer_definition ⇒ Object
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_initializer ⇒ Object
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_definitions ⇒ Object
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_statements ⇒ Object
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
|