Class: Initializer::Generator::Define

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

Defined Under Namespace

Modules: InitializerParameter

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(target_class, parameters) ⇒ Define

Returns a new instance of Define.



52
53
54
55
# File 'lib/initializer/generator.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/generator.rb', line 50

def parameters
  @parameters
end

#target_classObject (readonly)

Returns the value of attribute target_class.



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

def target_class
  @target_class
end

Class Method Details

.call(target_class, parameters) ⇒ Object



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

def self.call(target_class, parameters)
  parameters = parameters.map do |parameter|
    parameter.extend InitializerParameter
  end
  instance = new target_class, parameters
  instance.()
end

Instance Method Details

#callObject



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

def call
  target_class.class_eval(initializer_definition)
end

#initializer_definitionObject



82
83
84
85
86
87
88
# File 'lib/initializer/generator.rb', line 82

def initializer_definition
  "
    def initialize(#{parameter_list})
      #{variable_assignment_statements}
    end
  "
end

#parameter_listObject



76
77
78
79
80
# File 'lib/initializer/generator.rb', line 76

def parameter_list
  parameter_names = parameters.map { |p| p.name }
  parameter_names = parameter_names.join(", ")
  parameter_names
end

#variable_assignment_statementsObject



69
70
71
72
73
74
# File 'lib/initializer/generator.rb', line 69

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