Class: Zapata::RZpec::Writer
- Inherits:
-
Object
- Object
- Zapata::RZpec::Writer
- Defined in:
- lib/zapata/rzpec/writer.rb
Class Attribute Summary collapse
-
.ivars ⇒ Object
Returns the value of attribute ivars.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(file, _code, subject_analysis, whole_analysis, spec_analysis = nil) ⇒ Writer
constructor
A new instance of Writer.
- #initialize_def(klass) ⇒ Object
- #klass_defs(klass) ⇒ Object
- #klasses ⇒ Object
- #write_class(klass) ⇒ Object
- #write_equal(method_name) ⇒ Object
- #write_instance_let(klass) ⇒ Object
- #write_let(name, block) ⇒ Object
- #write_let_from_initialize(initialize_def) ⇒ Object
- #write_method(primitive_def) ⇒ Object
- #write_require ⇒ Object
Constructor Details
#initialize(file, _code, subject_analysis, whole_analysis, spec_analysis = nil) ⇒ Writer
Returns a new instance of Writer.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/zapata/rzpec/writer.rb', line 14 def initialize(file, _code, subject_analysis, whole_analysis, spec_analysis = nil) self.class.reset_ivars @subject_analysis = subject_analysis @whole_analysis = whole_analysis @spec_analysis = spec_analysis @writer = Core::Writer.new(file) @result = {} write_require klasses.each do |klass| write_class(klass) end self.class.reset_ivars end |
Class Attribute Details
.ivars ⇒ Object
Returns the value of attribute ivars.
7 8 9 |
# File 'lib/zapata/rzpec/writer.rb', line 7 def ivars @ivars end |
Class Method Details
.reset_ivars ⇒ Object
9 10 11 |
# File 'lib/zapata/rzpec/writer.rb', line 9 def reset_ivars @ivars = [] end |
Instance Method Details
#initialize_def(klass) ⇒ Object
46 47 48 |
# File 'lib/zapata/rzpec/writer.rb', line 46 def initialize_def(klass) klass_defs(klass).detect { |method| method.name == :initialize } end |
#klass_defs(klass) ⇒ Object
39 40 41 42 43 44 |
# File 'lib/zapata/rzpec/writer.rb', line 39 def klass_defs(klass) @subject_analysis.select do |method| [Primitive::Def, Primitive::Defs].include?(method.class) && method.public? && method.klass.name == klass.name end end |
#klasses ⇒ Object
35 36 37 |
# File 'lib/zapata/rzpec/writer.rb', line 35 def klasses @subject_analysis.select { |obj| obj.is_a?(Primitive::Klass) } end |
#write_class(klass) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/zapata/rzpec/writer.rb', line 50 def write_class(klass) @writer.append_line @writer.append_line("describe #{klass.name} do") write_instance_let(klass) klass_defs(klass).each do |primitive_def| write_method(primitive_def) end self.class.ivars.each do |ivar| predicted_value = Predictor::Value.new(ivar.value, ivar).choose literal_predicted_value = Printer.print(predicted_value.to_raw) write_let(ivar.value, literal_predicted_value) end @writer.append_line('end') end |
#write_equal(method_name) ⇒ Object
108 109 110 111 112 113 114 |
# File 'lib/zapata/rzpec/writer.rb', line 108 def write_equal(method_name) if @spec_analysis Printer.print(Primitive::Raw.new(:literal, @spec_analysis.expected(method_name))) else Printer.print(Primitive::Raw.new(:str, 'Fill this in by hand')) end end |
#write_instance_let(klass) ⇒ Object
69 70 71 72 73 74 75 |
# File 'lib/zapata/rzpec/writer.rb', line 69 def write_instance_let(klass) if initialize_def = initialize_def(klass) write_let_from_initialize(initialize_def) else write_let(klass.name, "#{klass.name}.new") end end |
#write_let(name, block) ⇒ Object
77 78 79 80 81 |
# File 'lib/zapata/rzpec/writer.rb', line 77 def write_let(name, block) @writer.append_line("let(:#{Printer.to_var_name(name)}) do") @writer.append_line(block) @writer.append_line('end') end |
#write_let_from_initialize(initialize_def) ⇒ Object
83 84 85 86 |
# File 'lib/zapata/rzpec/writer.rb', line 83 def write_let_from_initialize(initialize_def) block = "#{initialize_def.klass.name}.new#{initialize_def.literal_predicted_args}" write_let(initialize_def.klass.name, block) end |
#write_method(primitive_def) ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/zapata/rzpec/writer.rb', line 88 def write_method(primitive_def) return unless primitive_def.node.body return if primitive_def.name == :initialize @writer.append_line @writer.append_line("it '##{primitive_def.name}' do") receiver = if primitive_def.self? primitive_def.klass.name else Printer.to_var_name(primitive_def.klass.name) end @writer.append_line( "expect(#{receiver}.#{primitive_def.name}#{primitive_def.literal_predicted_args}).to eq(#{write_equal(primitive_def.name)})" ) @writer.append_line('end') end |
#write_require ⇒ Object
31 32 33 |
# File 'lib/zapata/rzpec/writer.rb', line 31 def write_require @writer.append_line("require '#{Core::Loader.helper_name}'") end |