Class: Transpec::Converter

Inherits:
BaseRewriter show all
Defined in:
lib/transpec/converter.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from BaseRewriter

#rewrite, #rewrite_file!

Constructor Details

#initialize(configuration = nil, rspec_version = nil, runtime_data = nil, report = nil) ⇒ Converter

Returns a new instance of Converter.



26
27
28
29
30
31
32
# File 'lib/transpec/converter.rb', line 26

def initialize(configuration = nil, rspec_version = nil, runtime_data = nil, report = nil)
  @configuration = configuration || Configuration.new
  @rspec_version = rspec_version || Transpec.current_rspec_version
  @runtime_data = runtime_data
  @report = report || Report.new
  @invalid_context_errors = []
end

Instance Attribute Details

#configurationObject (readonly)

Returns the value of attribute configuration.



21
22
23
# File 'lib/transpec/converter.rb', line 21

def configuration
  @configuration
end

#invalid_context_errorsObject (readonly)

Returns the value of attribute invalid_context_errors.



21
22
23
# File 'lib/transpec/converter.rb', line 21

def invalid_context_errors
  @invalid_context_errors
end

#reportObject (readonly)

Returns the value of attribute report.



21
22
23
# File 'lib/transpec/converter.rb', line 21

def report
  @report
end

#rspec_versionObject (readonly)

Returns the value of attribute rspec_version.



21
22
23
# File 'lib/transpec/converter.rb', line 21

def rspec_version
  @rspec_version
end

#runtime_dataObject (readonly)

Returns the value of attribute runtime_data.



21
22
23
# File 'lib/transpec/converter.rb', line 21

def runtime_data
  @runtime_data
end

Instance Method Details

#dispatch_node(node, source_rewriter) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/transpec/converter.rb', line 41

def dispatch_node(node, source_rewriter)
  Syntax.standalone_syntaxes.each do |syntax_class|
    next unless syntax_class.target_node?(node, @runtime_data)

    syntax = syntax_class.new(node, source_rewriter, @runtime_data, @report)

    handler_name = "process_#{syntax_class.snake_case_name}"
    send(handler_name, syntax)

    break
  end
rescue OverlappedRewriteError # rubocop:disable HandleExceptions
rescue Syntax::InvalidContextError => error
  @invalid_context_errors << error
end

#need_to_modify_expectation_syntax_configuration?(rspec_configure) ⇒ Boolean

Returns:

  • (Boolean)


143
144
145
146
147
148
# File 'lib/transpec/converter.rb', line 143

def need_to_modify_expectation_syntax_configuration?(rspec_configure)
  return false unless @configuration.convert_should?
  rspec_configure.expectation_syntaxes == [:should]
rescue Syntax::RSpecConfigure::UnknownSyntaxError
  false
end

#need_to_modify_mock_syntax_configuration?(rspec_configure) ⇒ Boolean

Returns:

  • (Boolean)


150
151
152
153
154
155
156
# File 'lib/transpec/converter.rb', line 150

def need_to_modify_mock_syntax_configuration?(rspec_configure)
  return false if !@configuration.convert_should_receive? &&
                  !@configuration.convert_stub?
  rspec_configure.mock_syntaxes == [:should]
rescue Syntax::RSpecConfigure::UnknownSyntaxError
  false
end

#process(ast, source_rewriter) ⇒ Object



34
35
36
37
38
39
# File 'lib/transpec/converter.rb', line 34

def process(ast, source_rewriter)
  return unless ast
  ast.each_node do |node|
    dispatch_node(node, source_rewriter)
  end
end

#process_be_boolean(be_boolean) ⇒ Object



107
108
109
110
111
112
113
114
115
116
117
# File 'lib/transpec/converter.rb', line 107

def process_be_boolean(be_boolean)
  return unless @rspec_version.be_truthy_available?
  return unless @configuration.convert_deprecated_method?

  case @configuration.boolean_matcher_type
  when :conditional
    be_boolean.convert_to_conditional_matcher!(@configuration.form_of_be_falsey)
  when :exact
    be_boolean.convert_to_exact_matcher!
  end
end

#process_be_close(be_close) ⇒ Object



119
120
121
# File 'lib/transpec/converter.rb', line 119

def process_be_close(be_close)
  be_close.convert_to_be_within! if @configuration.convert_deprecated_method?
end

#process_double(double) ⇒ Object



93
94
95
# File 'lib/transpec/converter.rb', line 93

def process_double(double)
  double.convert_to_double! if @configuration.convert_deprecated_method?
end

#process_expect(expect) ⇒ Object



71
72
73
74
75
# File 'lib/transpec/converter.rb', line 71

def process_expect(expect)
  if expect.have_matcher && @configuration.convert_have_items?
    expect.have_matcher.convert_to_standard_expectation!
  end
end

#process_its(its) ⇒ Object



129
130
131
# File 'lib/transpec/converter.rb', line 129

def process_its(its)
  its.convert_to_describe_subject_it! if @configuration.convert_its?
end

#process_method_stub(method_stub) ⇒ Object



97
98
99
100
101
102
103
104
105
# File 'lib/transpec/converter.rb', line 97

def process_method_stub(method_stub)
  if @configuration.convert_stub?
    method_stub.allowize!(@rspec_version.receive_messages_available?)
  elsif @configuration.convert_deprecated_method?
    method_stub.convert_deprecated_method!
  end

  method_stub.remove_allowance_for_no_message! if @configuration.convert_deprecated_method?
end

#process_raise_error(raise_error) ⇒ Object



123
124
125
126
127
# File 'lib/transpec/converter.rb', line 123

def process_raise_error(raise_error)
  if @configuration.convert_deprecated_method?
    raise_error.remove_error_specification_with_negative_expectation!
  end
end

#process_rspec_configure(rspec_configure) ⇒ Object



133
134
135
136
137
138
139
140
141
# File 'lib/transpec/converter.rb', line 133

def process_rspec_configure(rspec_configure)
  if need_to_modify_expectation_syntax_configuration?(rspec_configure)
    rspec_configure.modify_expectation_syntaxes!(:expect)
  end

  if need_to_modify_mock_syntax_configuration?(rspec_configure)
    rspec_configure.modify_mock_syntaxes!(:expect)
  end
end

#process_should(should) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/transpec/converter.rb', line 57

def process_should(should)
  if @configuration.convert_should?
    should.expectize!(
      @configuration.negative_form_of_to,
      @configuration.parenthesize_matcher_arg?
    )
  end

  if should.have_matcher && @configuration.convert_have_items?
    parenthesize_matcher_arg = @configuration.parenthesize_matcher_arg
    should.have_matcher.convert_to_standard_expectation!(parenthesize_matcher_arg)
  end
end

#process_should_receive(should_receive) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/transpec/converter.rb', line 77

def process_should_receive(should_receive)
  if should_receive.useless_expectation?
    if @configuration.convert_deprecated_method?
      if @configuration.convert_stub?
        should_receive.allowize_useless_expectation!(@configuration.negative_form_of_to)
      else
        should_receive.stubize_useless_expectation!
      end
    elsif @configuration.convert_should_receive?
      should_receive.expectize!(@configuration.negative_form_of_to)
    end
  elsif @configuration.convert_should_receive?
    should_receive.expectize!(@configuration.negative_form_of_to)
  end
end