Class: JavaTestingGuff::RealBuilderGuffGenerator

Inherits:
GuffGenerator show all
Defined in:
lib/java_testing_guff.rb

Instance Method Summary collapse

Methods inherited from GuffGenerator

#add_specific_selector_stuff, #constructor_arguments_for_builder, #generate_guff_foreach, #generate_selector_foreach, #initialize, #save_in, #use_package

Constructor Details

This class inherits a constructor from JavaTestingGuff::GuffGenerator

Instance Method Details

#builder_name(currentClass) ⇒ Object



134
135
136
# File 'lib/java_testing_guff.rb', line 134

def builder_name(currentClass)
    "Generated#{currentClass.name}Builder"
end

#builder_selector_nameObject



138
139
140
# File 'lib/java_testing_guff.rb', line 138

def builder_selector_name
    "GeneratedBuilderSelector"
end

#generate_specific_guff(source, currentClass) ⇒ Object



142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# File 'lib/java_testing_guff.rb', line 142

def generate_specific_guff(source, currentClass)
    generated_name = builder_name(currentClass)
    source.begin_class(generated_name) {|generated_class|
        generated_class.genericized_using("<T extends #{generated_name}>")

        generated_class.add_method("build").returns(currentClass.fully_qualified_name).body {|body|
            variable_name = currentClass.add_simplest_instantiation_line_to(body);
            currentClass.with_self_and_supers {|self_or_super|
                self_or_super.add_reflective_field_assignments_to(variable_name, body)
            }
            body.line("return #{variable_name};")
        }

        currentClass.with_self_and_supers {|self_or_super|
            self_or_super.add_field_definitions_to(generated_class)
        }

        currentClass.with_self_and_supers {|self_or_super|
            self_or_super.add_setter_method_definitions_to('with', generated_class)
        }
        generated_class.add_method("apply").returns('T').takes("stuff", "org.rubyforge.javatestingguff.Command").body {|body|
            body.line("stuff.execute(this);")
            body.line("return (T) this;")
        }
    }
end