transpec 1.10.3 → 1.10.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +4 -0
  3. data/CHANGELOG.md +5 -0
  4. data/Gemfile +2 -0
  5. data/README.md +11 -5
  6. data/README.md.erb +11 -5
  7. data/lib/transpec.rb +1 -19
  8. data/lib/transpec/base_rewriter.rb +1 -1
  9. data/lib/transpec/converter.rb +2 -3
  10. data/lib/transpec/dynamic_analyzer/rewriter.rb +2 -2
  11. data/lib/transpec/option_parser.rb +2 -2
  12. data/lib/transpec/parser.rb +9 -0
  13. data/lib/transpec/record.rb +45 -7
  14. data/lib/transpec/syntax.rb +15 -21
  15. data/lib/transpec/syntax/allow.rb +2 -2
  16. data/lib/transpec/syntax/be_boolean.rb +2 -2
  17. data/lib/transpec/syntax/be_close.rb +2 -2
  18. data/lib/transpec/syntax/current_example.rb +5 -6
  19. data/lib/transpec/syntax/double.rb +2 -2
  20. data/lib/transpec/syntax/example.rb +13 -14
  21. data/lib/transpec/syntax/expect.rb +2 -2
  22. data/lib/transpec/syntax/have.rb +5 -8
  23. data/lib/transpec/syntax/have/{dynamic_inspector.rb → dynamic_analysis.rb} +25 -47
  24. data/lib/transpec/syntax/have/have_record.rb +12 -16
  25. data/lib/transpec/syntax/its.rb +5 -5
  26. data/lib/transpec/syntax/matcher_definition.rb +2 -2
  27. data/lib/transpec/syntax/method_stub.rb +29 -28
  28. data/lib/transpec/syntax/mixin/any_instance_block.rb +2 -2
  29. data/lib/transpec/syntax/mixin/matcher_owner.rb +16 -13
  30. data/lib/transpec/syntax/mixin/monkey_patch.rb +2 -2
  31. data/lib/transpec/syntax/mixin/monkey_patch_any_instance.rb +1 -1
  32. data/lib/transpec/syntax/mixin/send.rb +42 -30
  33. data/lib/transpec/syntax/mixin/useless_and_return.rb +2 -4
  34. data/lib/transpec/syntax/oneliner_should.rb +17 -19
  35. data/lib/transpec/syntax/operator.rb +9 -14
  36. data/lib/transpec/syntax/pending.rb +27 -18
  37. data/lib/transpec/syntax/raise_error.rb +2 -2
  38. data/lib/transpec/syntax/receive.rb +2 -2
  39. data/lib/transpec/syntax/rspec_configure.rb +2 -2
  40. data/lib/transpec/syntax/should.rb +9 -9
  41. data/lib/transpec/syntax/should_receive.rb +18 -16
  42. data/lib/transpec/version.rb +1 -1
  43. data/spec/spec_helper.rb +7 -0
  44. data/spec/support/shared_context.rb +4 -4
  45. data/spec/transpec/cli_spec.rb +1 -1
  46. data/spec/transpec/converter_spec.rb +1 -1
  47. data/spec/transpec/dynamic_analyzer/rewriter_spec.rb +8 -8
  48. data/spec/transpec/syntax/current_example_spec.rb +75 -19
  49. data/spec/transpec/syntax/double_spec.rb +11 -11
  50. data/spec/transpec/syntax/example_spec.rb +8 -4
  51. data/spec/transpec/syntax/have_spec.rb +1 -1
  52. data/spec/transpec/syntax/method_stub_spec.rb +14 -20
  53. data/spec/transpec/syntax/oneliner_should_spec.rb +51 -0
  54. data/spec/transpec/syntax/pending_spec.rb +8 -4
  55. data/spec/transpec_spec.rb +4 -6
  56. data/tasks/demo.rake +2 -2
  57. data/tasks/lib/transpec_demo.rb +1 -1
  58. data/tasks/lib/transpec_test.rb +1 -1
  59. data/tasks/test.rake +2 -2
  60. metadata +4 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 81c1501cb0bedfa4aa3c8a489b27cff42d227aa0
4
- data.tar.gz: bebe4a68c3997619529e74e6bcdca7cda64fe5c1
3
+ metadata.gz: 10bda7931ceab8672bcf49f68c925b59448543b4
4
+ data.tar.gz: acf1950a6c9b917d2af8fc16ea292c7ec91aa2b8
5
5
  SHA512:
6
- metadata.gz: 63483d99b750ee2ac2db638fdbe1b654151bb0960609595243b49083238117fca9d975710221aa34ea5e57aa53ec65d6b09c7a51b06685f890220ca09692de45
7
- data.tar.gz: 0c99b74e4fdfef91915484fc71a6f5579625849c9f7cd3ea82fb12d254109c13f77cd3721908e69d7ca362cf5879150fc75ae7d1e328b0c8619b602b348af7f2
6
+ metadata.gz: 02b7167fc857ccb4956f439dd793eeae452d2e71e0666be7c6419f571e6b4facb026cd5a649f41fb07b1bf87ac493177deed91e1ee51945442f191d097689c93
7
+ data.tar.gz: 1ce039438135ccbccdeecc92b73812650d86a811671a9d7e2ec67f1907912c04b59efe753f2394aa434911e25d6f9bde82c9614aa40d5da3376b5f5cab45087f
data/.travis.yml CHANGED
@@ -3,6 +3,10 @@ rvm:
3
3
  - 1.9.3
4
4
  - 2.0.0
5
5
  - 2.1.1
6
+ - ruby-head
6
7
  - jruby
8
+ matrix:
9
+ allow_failures:
10
+ - rvm: ruby-head
7
11
  before_install: gem update --remote bundler
8
12
  script: bundle exec rake ci
data/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## Development
4
4
 
5
+ ## v1.10.4
6
+
7
+ * Avoid confusing methods defined with `#let` or `#subject` by user with RSpec built-in methods ([#55](https://github.com/yujinakayama/transpec/issues/55))
8
+ * Add experimental support for Ruby 2.2 (development version) by falling back to Ruby 2.1 parser
9
+
5
10
  ## v1.10.3
6
11
 
7
12
  * Suggest using `-c/--rspec-command` option and exit gracefully when dynamic analysis failed ([#52](https://github.com/yujinakayama/transpec/issues/52))
data/Gemfile CHANGED
@@ -2,6 +2,8 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
+ gem 'rubocop', github: 'bbatsov/rubocop' if RUBY_VERSION.start_with?('2.2')
6
+
5
7
  group :test do
6
8
  gem 'coveralls', '~> 0.6'
7
9
  gem 'simplecov-rcov', '~> 0.2'
data/README.md CHANGED
@@ -1,4 +1,8 @@
1
- [![Gem Version](https://badge.fury.io/rb/transpec.png)](http://badge.fury.io/rb/transpec) [![Dependency Status](https://gemnasium.com/yujinakayama/transpec.png)](https://gemnasium.com/yujinakayama/transpec) [![Build Status](https://travis-ci.org/yujinakayama/transpec.png?branch=master)](https://travis-ci.org/yujinakayama/transpec) [![Coverage Status](https://coveralls.io/repos/yujinakayama/transpec/badge.png)](https://coveralls.io/r/yujinakayama/transpec) [![Code Climate](https://codeclimate.com/github/yujinakayama/transpec.png)](https://codeclimate.com/github/yujinakayama/transpec)
1
+ [![Gem Version](http://img.shields.io/gem/v/transpec.svg)](http://badge.fury.io/rb/transpec)
2
+ [![Dependency Status](http://img.shields.io/gemnasium/yujinakayama/transpec.svg)](https://gemnasium.com/yujinakayama/transpec)
3
+ [![Build Status](https://travis-ci.org/yujinakayama/transpec.svg?branch=master)](https://travis-ci.org/yujinakayama/transpec)
4
+ [![Coverage Status](http://img.shields.io/coveralls/yujinakayama/transpec/master.svg)](https://coveralls.io/r/yujinakayama/transpec)
5
+ [![Code Climate](http://img.shields.io/codeclimate/github/yujinakayama/transpec.svg)](https://codeclimate.com/github/yujinakayama/transpec)
2
6
 
3
7
  # Transpec
4
8
 
@@ -402,14 +406,14 @@ end
402
406
 
403
407
  The monkey-patched `obj.should`:
404
408
 
405
- * Is provided by `rspec-expectations` gem.
409
+ * Is defined on `BasicObject` (or `Kernel`) and provided by `rspec-expectations` gem.
406
410
  * Is deprecated in RSpec 3.
407
411
  * Has [the issue](http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax#delegation_issues) with delegate/proxy objects.
408
412
  * There's the alternative syntax [`expect(obj).to`](#standard-expectations) since RSpec 2.11.
409
413
 
410
414
  The one-liner (implicit receiver) `should`:
411
415
 
412
- * Is provided by `rspec-core` gem.
416
+ * Is defined on `RSpec::Core::ExampleGroup` and provided by `rspec-core` gem.
413
417
  * Is _not_ deprecated in RSpec 3.
414
418
  * Does _not_ have the issue with delegate/proxy objects.
415
419
  * There's the alternative syntax [`is_expected.to`](#one-liner-expectations) since RSpec 2.99.beta2.
@@ -481,9 +485,11 @@ it { is_expected.to_not matcher } # with `--negative-form to_not`
481
485
 
482
486
  `is_expected.to` is designed for the consistency with the `expect` syntax.
483
487
  However the one-liner `should` is still _not_ deprecated in RSpec 3.0
484
- and available even if the `should` syntax is disabled with `RSpec.configure`.
488
+ and available even if the `should` syntax is
489
+ [disabled with `RSpec.configure`](https://www.relishapp.com/rspec/rspec-expectations/v/3-0/docs/syntax-configuration#disable-should-syntax).
485
490
  So if you think `is_expected.to` is verbose,
486
491
  feel free to disable this conversion and continue using the one-liner `should`.
492
+ See [Two Types of `should`](#two-types-of-should) also.
487
493
 
488
494
  * This conversion can be disabled by: `--keep oneliner`
489
495
  * Deprecation: Not deprecated
@@ -1191,6 +1197,6 @@ Tested on MRI 1.9, 2.0, 2.1 and JRuby in 1.9 mode.
1191
1197
 
1192
1198
  ## License
1193
1199
 
1194
- Copyright (c) 2013 Yuji Nakayama
1200
+ Copyright (c) 2013–2014 Yuji Nakayama
1195
1201
 
1196
1202
  See the [LICENSE.txt](LICENSE.txt) for details.
data/README.md.erb CHANGED
@@ -1,4 +1,8 @@
1
- [![Gem Version](https://badge.fury.io/rb/transpec.png)](http://badge.fury.io/rb/transpec) [![Dependency Status](https://gemnasium.com/yujinakayama/transpec.png)](https://gemnasium.com/yujinakayama/transpec) [![Build Status](https://travis-ci.org/yujinakayama/transpec.png?branch=master)](https://travis-ci.org/yujinakayama/transpec) [![Coverage Status](https://coveralls.io/repos/yujinakayama/transpec/badge.png)](https://coveralls.io/r/yujinakayama/transpec) [![Code Climate](https://codeclimate.com/github/yujinakayama/transpec.png)](https://codeclimate.com/github/yujinakayama/transpec)
1
+ [![Gem Version](http://img.shields.io/gem/v/transpec.svg)](http://badge.fury.io/rb/transpec)
2
+ [![Dependency Status](http://img.shields.io/gemnasium/yujinakayama/transpec.svg)](https://gemnasium.com/yujinakayama/transpec)
3
+ [![Build Status](https://travis-ci.org/yujinakayama/transpec.svg?branch=master)](https://travis-ci.org/yujinakayama/transpec)
4
+ [![Coverage Status](http://img.shields.io/coveralls/yujinakayama/transpec/master.svg)](https://coveralls.io/r/yujinakayama/transpec)
5
+ [![Code Climate](http://img.shields.io/codeclimate/github/yujinakayama/transpec.svg)](https://codeclimate.com/github/yujinakayama/transpec)
2
6
 
3
7
  # Transpec
4
8
 
@@ -399,14 +403,14 @@ end
399
403
 
400
404
  The monkey-patched `obj.should`:
401
405
 
402
- * Is provided by `rspec-expectations` gem.
406
+ * Is defined on `BasicObject` (or `Kernel`) and provided by `rspec-expectations` gem.
403
407
  * Is deprecated in RSpec 3.
404
408
  * Has [the issue](http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax#delegation_issues) with delegate/proxy objects.
405
409
  * There's the alternative syntax [`expect(obj).to`](#standard-expectations) since RSpec 2.11.
406
410
 
407
411
  The one-liner (implicit receiver) `should`:
408
412
 
409
- * Is provided by `rspec-core` gem.
413
+ * Is defined on `RSpec::Core::ExampleGroup` and provided by `rspec-core` gem.
410
414
  * Is _not_ deprecated in RSpec 3.
411
415
  * Does _not_ have the issue with delegate/proxy objects.
412
416
  * There's the alternative syntax [`is_expected.to`](#one-liner-expectations) since RSpec 2.99.beta2.
@@ -460,9 +464,11 @@ it { is_expected.to_not matcher } # with `--negative-form to_not`
460
464
 
461
465
  `is_expected.to` is designed for the consistency with the `expect` syntax.
462
466
  However the one-liner `should` is still _not_ deprecated in RSpec 3.0
463
- and available even if the `should` syntax is disabled with `RSpec.configure`.
467
+ and available even if the `should` syntax is
468
+ [disabled with `RSpec.configure`](https://www.relishapp.com/rspec/rspec-expectations/v/3-0/docs/syntax-configuration#disable-should-syntax).
464
469
  So if you think `is_expected.to` is verbose,
465
470
  feel free to disable this conversion and continue using the one-liner `should`.
471
+ See [Two Types of `should`](#two-types-of-should) also.
466
472
 
467
473
  * This conversion can be disabled by: `--keep oneliner`
468
474
  * Deprecation: Not deprecated
@@ -1127,6 +1133,6 @@ Tested on MRI 1.9, 2.0, 2.1 and JRuby in 1.9 mode.
1127
1133
 
1128
1134
  ## License
1129
1135
 
1130
- Copyright (c) 2013 Yuji Nakayama
1136
+ Copyright (c) 2013–<%= DateTime.now.year %> Yuji Nakayama
1131
1137
 
1132
1138
  See the [LICENSE.txt](LICENSE.txt) for details.
data/lib/transpec.rb CHANGED
@@ -8,24 +8,6 @@ module Transpec
8
8
  end
9
9
 
10
10
  def self.required_rspec_version
11
- @required_rspec_version ||= begin
12
- gemspec_path = File.join(root, 'transpec.gemspec')
13
- gem_specification = Gem::Specification.load(gemspec_path)
14
- rspec_dependency = gem_specification.dependencies.find { |d| d.name == 'rspec' }
15
-
16
- if rspec_dependency
17
- rspec_requirement = rspec_dependency.requirement
18
- gem_version = rspec_requirement.requirements.first.find { |r| r.is_a?(Gem::Version) }
19
- RSpecVersion.new(gem_version)
20
- else
21
- # Using development version of RSpec with Bundler.
22
- current_rspec_version
23
- end
24
- end
25
- end
26
-
27
- def self.current_rspec_version
28
- require 'rspec/version'
29
- RSpecVersion.new(RSpec::Version::STRING)
11
+ @required_rspec_version ||= RSpecVersion.new('2.14')
30
12
  end
31
13
  end
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
 
3
3
  require 'transpec/ast/builder'
4
- require 'parser/current'
4
+ require 'transpec/parser'
5
5
 
6
6
  module Transpec
7
7
  class BaseRewriter
@@ -17,7 +17,7 @@ module Transpec
17
17
 
18
18
  def initialize(configuration = nil, rspec_version = nil, runtime_data = nil)
19
19
  @configuration = configuration || Configuration.new
20
- @rspec_version = rspec_version || Transpec.current_rspec_version
20
+ @rspec_version = rspec_version || Transpec.required_rspec_version
21
21
  @runtime_data = runtime_data
22
22
  @report = Report.new
23
23
  end
@@ -31,9 +31,8 @@ module Transpec
31
31
 
32
32
  def dispatch_node(node, source_rewriter)
33
33
  Syntax.standalone_syntaxes.each do |syntax_class|
34
- next unless syntax_class.conversion_target_node?(node, runtime_data)
35
-
36
34
  syntax = syntax_class.new(node, source_rewriter, runtime_data, report)
35
+ next unless syntax.conversion_target?
37
36
 
38
37
  handler_name = "process_#{syntax_class.snake_case_name}"
39
38
  send(handler_name, syntax)
@@ -45,9 +45,9 @@ module Transpec
45
45
 
46
46
  ast.each_node do |node|
47
47
  Syntax.standalone_syntaxes.each do |syntax_class|
48
- next unless syntax_class.dynamic_analysis_target_node?(node)
49
48
  syntax = syntax_class.new(node)
50
- syntax.register_request_for_dynamic_analysis(self)
49
+ next unless syntax.dynamic_analysis_target?
50
+ syntax.register_dynamic_analysis_request(self)
51
51
  end
52
52
  end
53
53
  end
@@ -206,8 +206,8 @@ module Transpec
206
206
  args.reject do |arg|
207
207
  case arg
208
208
  when '-m', '--generate-commit-message'
209
- warn 'DEPRECATION: -m/--generate-commit-message option is deprecated. ' \
210
- 'A commit message will always be generated.'
209
+ warn 'DEPRECATION: The -m/--generate-commit-message option is deprecated. ' \
210
+ 'Now Transpec always generates the commit message.'
211
211
  true
212
212
  else
213
213
  false
@@ -0,0 +1,9 @@
1
+ # coding: utf-8
2
+
3
+ begin
4
+ require 'parser/current'
5
+ rescue NotImplementedError
6
+ warn 'Falling back to Ruby 2.1 parser.'
7
+ require 'parser/ruby21'
8
+ Parser::CurrentRuby = Parser::Ruby21 # rubocop:disable ConstantName
9
+ end
@@ -4,28 +4,66 @@ require 'transpec/annotatable'
4
4
 
5
5
  module Transpec
6
6
  class Record
7
- attr_reader :original_syntax, :converted_syntax, :annotation
7
+ OVERRIDDE_FORBIDDEN_METHODS = [
8
+ :original_syntax,
9
+ :original_syntax_type,
10
+ :converted_syntax,
11
+ :converted_syntax_type
12
+ ]
13
+
14
+ attr_reader :original_syntax_type, :converted_syntax_type, :annotation
8
15
 
9
16
  def initialize(original_syntax, converted_syntax, annotation = nil)
10
- @original_syntax = original_syntax
11
- @converted_syntax = converted_syntax
17
+ @original_syntax_type = original_syntax.to_sym
18
+ @converted_syntax_type = converted_syntax.to_sym
12
19
  @annotation = annotation
13
20
  end
14
21
 
22
+ def original_syntax
23
+ original_syntax_type.to_s
24
+ end
25
+
26
+ def converted_syntax
27
+ converted_syntax_type.to_s
28
+ end
29
+
30
+ def original_syntax_type
31
+ @original_syntax_type ||= build_original_syntax.to_sym
32
+ end
33
+
34
+ def converted_syntax_type
35
+ @converted_syntax_type ||= build_converted_syntax.to_sym
36
+ end
37
+
15
38
  def ==(other)
16
39
  self.class == other.class &&
17
- original_syntax == other.original_syntax &&
18
- converted_syntax == other.converted_syntax
40
+ original_syntax_type == other.original_syntax_type &&
41
+ converted_syntax_type == other.converted_syntax_type
19
42
  end
20
43
 
21
44
  alias_method :eql?, :==
22
45
 
23
46
  def hash
24
- original_syntax.hash ^ converted_syntax.hash
47
+ original_syntax_type.hash ^ converted_syntax_type.hash
25
48
  end
26
49
 
27
50
  def to_s
28
- "`#{original_syntax}` -> `#{converted_syntax}`"
51
+ "`#{original_syntax_type}` -> `#{converted_syntax_type}`"
52
+ end
53
+
54
+ private
55
+
56
+ def build_original_syntax
57
+ fail NotImplementedError
58
+ end
59
+
60
+ def build_converted_syntax
61
+ fail NotImplementedError
62
+ end
63
+
64
+ def self.method_added(method_name)
65
+ return unless OVERRIDDE_FORBIDDEN_METHODS.include?(method_name)
66
+ fail "Do not override Record##{method_name}."
29
67
  end
30
68
  end
31
69
 
@@ -62,22 +62,18 @@ module Transpec
62
62
  extend ActiveSupport::Concern
63
63
 
64
64
  module ClassMethods
65
- def define_dynamic_analysis_request(&block)
66
- dynamic_analysis_requests << block
65
+ def define_dynamic_analysis(&block)
66
+ dynamic_analyses << block
67
67
  end
68
68
 
69
- def dynamic_analysis_requests
70
- @dynamic_analysis_requests ||= []
71
- end
72
-
73
- def dynamic_analysis_target_node?(node)
74
- target_node?(node)
69
+ def dynamic_analyses
70
+ @dynamic_analyses ||= []
75
71
  end
76
72
  end
77
73
 
78
- def register_request_for_dynamic_analysis(rewriter)
79
- self.class.dynamic_analysis_requests.each do |request|
80
- instance_exec(rewriter, &request)
74
+ def register_dynamic_analysis_request(rewriter)
75
+ self.class.dynamic_analyses.each do |analysis|
76
+ instance_exec(rewriter, &analysis)
81
77
  end
82
78
  end
83
79
  end
@@ -102,16 +98,6 @@ module Transpec
102
98
  end
103
99
  end
104
100
 
105
- # The default common method for .conversion_target_node? and .dynamic_analysis_target_node?.
106
- # If they should behave differently, override either or both.
107
- def self.target_node?(node, runtime_data = nil)
108
- false
109
- end
110
-
111
- def self.conversion_target_node?(node, runtime_data = nil)
112
- target_node?(node, runtime_data)
113
- end
114
-
115
101
  def initialize(node, source_rewriter = nil, runtime_data = nil, report = nil)
116
102
  @node = node
117
103
  @source_rewriter = source_rewriter
@@ -119,6 +105,14 @@ module Transpec
119
105
  @report = report || Report.new
120
106
  end
121
107
 
108
+ def dynamic_analysis_target?
109
+ false
110
+ end
111
+
112
+ def conversion_target?
113
+ dynamic_analysis_target?
114
+ end
115
+
122
116
  def static_context_inspector
123
117
  @static_context_inspector ||= StaticContextInspector.new(node)
124
118
  end
@@ -8,8 +8,8 @@ module Transpec
8
8
  class Allow < Syntax
9
9
  include Mixin::ExpectBase
10
10
 
11
- def self.target_method?(receiver_node, method_name)
12
- receiver_node.nil? && [:allow, :allow_any_instance_of].include?(method_name)
11
+ def dynamic_analysis_target?
12
+ super && receiver_node.nil? && [:allow, :allow_any_instance_of].include?(method_name)
13
13
  end
14
14
 
15
15
  def method_name_for_instance
@@ -8,8 +8,8 @@ module Transpec
8
8
  class BeBoolean < Syntax
9
9
  include Mixin::Send
10
10
 
11
- def self.target_method?(receiver_node, method_name)
12
- receiver_node.nil? && [:be_true, :be_false].include?(method_name)
11
+ def dynamic_analysis_target?
12
+ super && receiver_node.nil? && [:be_true, :be_false].include?(method_name)
13
13
  end
14
14
 
15
15
  def be_true?
@@ -8,8 +8,8 @@ module Transpec
8
8
  class BeClose < Syntax
9
9
  include Mixin::Send
10
10
 
11
- def self.target_method?(receiver_node, method_name)
12
- receiver_node.nil? && method_name == :be_close
11
+ def dynamic_analysis_target?
12
+ super && receiver_node.nil? && method_name == :be_close
13
13
  end
14
14
 
15
15
  def convert_to_be_within!
@@ -12,12 +12,11 @@ module Transpec
12
12
 
13
13
  METHODS_YIELD_EXAMPLE = (EXAMPLE_METHODS + HOOK_METHODS + HELPER_METHODS).freeze
14
14
 
15
- def self.check_target_node_statically(node)
16
- super(node) && Util.block_node_taken_by_method(node).nil?
17
- end
18
-
19
- def self.target_method?(receiver_node, method_name)
20
- receiver_node.nil? && [:example, :running_example].include?(method_name)
15
+ def dynamic_analysis_target?
16
+ super &&
17
+ receiver_node.nil? &&
18
+ [:example, :running_example].include?(method_name) &&
19
+ block_node_taken_by_method(node).nil?
21
20
  end
22
21
 
23
22
  def convert!
@@ -8,8 +8,8 @@ module Transpec
8
8
  class Double < Syntax
9
9
  include Mixin::Send
10
10
 
11
- def self.target_method?(receiver_node, method_name)
12
- receiver_node.nil? && [:double, :mock, :stub].include?(method_name)
11
+ def dynamic_analysis_target?
12
+ super && receiver_node.nil? && [:double, :mock, :stub].include?(method_name)
13
13
  end
14
14
 
15
15
  def convert_to_double!
@@ -9,31 +9,30 @@ module Transpec
9
9
  class Example < Syntax
10
10
  include Mixin::Send, RSpecDSL
11
11
 
12
- def self.conversion_target_node?(node, runtime_data = nil)
13
- return false unless target_node?(node, runtime_data)
12
+ define_dynamic_analysis do |rewriter|
13
+ code = "is_a?(Class) && ancestors.any? { |a| a.name == 'RSpec::Core::ExampleGroup' }"
14
+ rewriter.register_request(node, :example_group_context?, code, :context)
15
+ end
16
+
17
+ def dynamic_analysis_target?
18
+ super && receiver_node.nil? && EXAMPLE_METHODS.include?(method_name)
19
+ end
20
+
21
+ def conversion_target?
22
+ return false unless dynamic_analysis_target?
14
23
 
15
24
  # Check whether the context is example group to differenciate
16
25
  # RSpec::Core::ExampleGroup.pending (a relative of #it) and
17
26
  # RSpec::Core::ExampleGroup#pending (marks the example as pending in #it block).
18
- if runtime_data && runtime_data.run?(node)
27
+ if runtime_data.run?(node)
19
28
  # If we have runtime data, check with it.
20
29
  runtime_data[node, :example_group_context?]
21
30
  else
22
31
  # Otherwise check statically.
23
- inspector = StaticContextInspector.new(node)
24
- inspector.scopes.last == :example_group
32
+ static_context_inspector.scopes.last == :example_group
25
33
  end
26
34
  end
27
35
 
28
- def self.target_method?(receiver_node, method_name)
29
- receiver_node.nil? && EXAMPLE_METHODS.include?(method_name)
30
- end
31
-
32
- define_dynamic_analysis_request do |rewriter|
33
- code = "is_a?(Class) && ancestors.any? { |a| a.name == 'RSpec::Core::ExampleGroup' }"
34
- rewriter.register_request(node, :example_group_context?, code, :context)
35
- end
36
-
37
36
  def convert_pending_to_skip!
38
37
  convert_pending_selector_to_skip!
39
38
  convert_pending_metadata_to_skip!