transpec 1.1.1 → 1.1.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d51fbf6111c8bb052b53353d56c3f50016252f70
4
- data.tar.gz: 79b7518a8f6b3f70cc019196e874ef342a4b3b69
3
+ metadata.gz: e4b8ad9709db52ce5becc1fe21c78454138667a5
4
+ data.tar.gz: 91977cdc9490c4fd3878769d0308cc01f551a7ff
5
5
  SHA512:
6
- metadata.gz: cb6b058d22be9aa35e1503982c4527ebe44ea19d87f8f2574190d025a9d2721e7ea1bee327be30dcba0ba4bdaf7395d658def09682d4349aa58476b4fc46564c
7
- data.tar.gz: de624193ea2e966b865e4c1102ff0be66fd813b8af4a3843ee650401122eb1607fcaee113050c1d12972f77e66263eccf0a5c70f7583d3ed5083c6f894edfd23
6
+ metadata.gz: 1656fc0b87a530e09d986213f76cb3ec52efd78d7fc5106ddb4d555461f8699ad10f2bd23c4fe4b8ca49a3fe78bd926b2123231e95a9cefc6ce69bf9cc5ec6db
7
+ data.tar.gz: efa265154035cc620e19e4b7ce0e87345337c152f34f737a87c85820d96e02421002b5f596292ab9ceba1810292f8dfb3b53314168050719c69e195905eef2b3
data/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## Master
4
4
 
5
+ ## v1.1.2
6
+
7
+ * Allow use of non monkey patch syntaxes in non example group contexts by including `RSpec::Matchers` ([#15](https://github.com/yujinakayama/transpec/issues/15))
8
+
5
9
  ## v1.1.1
6
10
 
7
11
  * Fix failure of dynamic analysis when cwd was changed at exit of rspec
data/README.md CHANGED
@@ -295,14 +295,26 @@ end
295
295
  ### Reason
296
296
 
297
297
  * `should` is defined on `BasicObject` class, so you can use `should` everywhere.
298
- * `expect` is defined on `RSpec::Matchers` module that is included by `RSpec::Core::ExampleGroup` class, so you can use `expect` only where `self` is an instance of `RSpec::Core::ExampleGroup` (i.e. in `it` blocks, `:each` hook blocks or included module methods).
298
+ * `expect` is defined on `RSpec::Matchers` module that is included by `RSpec::Core::ExampleGroup` class, so you can use `expect` only where `self` is an instance of `RSpec::Core::ExampleGroup` (i.e. in `it` blocks, `:each` hook blocks or included module methods) or other classes that include `RSpec::Matchers`.
299
299
 
300
300
  With the above example, in the context of `1.should == 1`, the `self` is an instance of `MyAwesomeTestRunner`.
301
301
  Transpec tracks contexts and skips conversion if the target syntax cannot be converted in a case like this.
302
302
 
303
303
  ### Solution
304
304
 
305
- You need to rewrite the spec by yourself.
305
+ Include or extend `RSpec::Matchers` module to make `expect` available in the context:
306
+
307
+ ```ruby
308
+ class MyAwesomeTestRunner
309
+ include RSpec::Matchers
310
+
311
+ def run
312
+ 1.should == 1
313
+ end
314
+ end
315
+ ```
316
+
317
+ Then run `transpec` again.
306
318
 
307
319
  ## Supported Conversions
308
320
 
data/README.md.erb CHANGED
@@ -291,14 +291,26 @@ end
291
291
  ### Reason
292
292
 
293
293
  * `should` is defined on `BasicObject` class, so you can use `should` everywhere.
294
- * `expect` is defined on `RSpec::Matchers` module that is included by `RSpec::Core::ExampleGroup` class, so you can use `expect` only where `self` is an instance of `RSpec::Core::ExampleGroup` (i.e. in `it` blocks, `:each` hook blocks or included module methods).
294
+ * `expect` is defined on `RSpec::Matchers` module that is included by `RSpec::Core::ExampleGroup` class, so you can use `expect` only where `self` is an instance of `RSpec::Core::ExampleGroup` (i.e. in `it` blocks, `:each` hook blocks or included module methods) or other classes that include `RSpec::Matchers`.
295
295
 
296
296
  With the above example, in the context of `1.should == 1`, the `self` is an instance of `MyAwesomeTestRunner`.
297
297
  Transpec tracks contexts and skips conversion if the target syntax cannot be converted in a case like this.
298
298
 
299
299
  ### Solution
300
300
 
301
- You need to rewrite the spec by yourself.
301
+ Include or extend `RSpec::Matchers` module to make `expect` available in the context:
302
+
303
+ ```ruby
304
+ class MyAwesomeTestRunner
305
+ include RSpec::Matchers
306
+
307
+ def run
308
+ 1.should == 1
309
+ end
310
+ end
311
+ ```
312
+
313
+ Then run `transpec` again.
302
314
 
303
315
  ## Supported Conversions
304
316
 
@@ -5,7 +5,7 @@ module Transpec
5
5
  module Mixin
6
6
  module MonkeyPatch
7
7
  def register_request_of_syntax_availability_inspection(rewriter, key, methods)
8
- code = "self.class.name.start_with?('RSpec::')"
8
+ code = "self.class.ancestors.any? { |a| a.name.start_with?('RSpec::') }"
9
9
 
10
10
  methods.each do |method|
11
11
  code << " && respond_to?(#{method.inspect})"
@@ -24,7 +24,7 @@ module Transpec
24
24
  rewriter.register_request(arg_node, :arg_is_enumerable?, 'is_a?(Enumerable)')
25
25
  end
26
26
 
27
- def correct_operator!(parenthesize_arg = true)
27
+ def convert_operator!(parenthesize_arg = true)
28
28
  case method_name
29
29
  when :==
30
30
  convert_to_eq!(parenthesize_arg)
@@ -59,7 +59,7 @@ module Transpec
59
59
  @current_syntax_type = :expect
60
60
  register_record(negative_form)
61
61
 
62
- operator_matcher.correct_operator!(parenthesize_matcher_arg) if operator_matcher
62
+ operator_matcher.convert_operator!(parenthesize_matcher_arg) if operator_matcher
63
63
  end
64
64
 
65
65
  def operator_matcher
@@ -5,7 +5,7 @@ module Transpec
5
5
  module Version
6
6
  MAJOR = 1
7
7
  MINOR = 1
8
- PATCH = 1
8
+ PATCH = 2
9
9
 
10
10
  def self.to_s
11
11
  [MAJOR, MINOR, PATCH].join('.')
@@ -28,7 +28,7 @@ module Transpec
28
28
  <<-END
29
29
  describe 'example' do
30
30
  it 'is foo' do
31
- transpec_analysis((transpec_analysis((subject), self, { :should_source_location => [:object, "method(:should).source_location"] }, __FILE__, 79, 86).should be(foo)), self, { :expect_available? => [:context, "self.class.name.start_with?('RSpec::') && respond_to?(:expect)"] }, __FILE__, 79, 101)
31
+ transpec_analysis((transpec_analysis((subject), self, { :should_source_location => [:object, "method(:should).source_location"] }, __FILE__, 79, 86).should be(foo)), self, { :expect_available? => [:context, "self.class.ancestors.any? { |a| a.name.start_with?('RSpec::') } && respond_to?(:expect)"] }, __FILE__, 79, 101)
32
32
  end
33
33
  end
34
34
  END
@@ -57,7 +57,7 @@ module Transpec
57
57
  <<-END
58
58
  describe 'example' do
59
59
  it 'matches to foo' do
60
- transpec_analysis((transpec_analysis((subject), self, { :should_source_location => [:object, "method(:should).source_location"] }, __FILE__, 93, 100).should), self, { :expect_available? => [:context, "self.class.name.start_with?('RSpec::') && respond_to?(:expect)"] }, __FILE__, 93, 107) =~ transpec_analysis((<<-HEREDOC.gsub('foo', 'bar')
60
+ transpec_analysis((transpec_analysis((subject), self, { :should_source_location => [:object, "method(:should).source_location"] }, __FILE__, 93, 100).should), self, { :expect_available? => [:context, "self.class.ancestors.any? { |a| a.name.start_with?('RSpec::') } && respond_to?(:expect)"] }, __FILE__, 93, 107) =~ transpec_analysis((<<-HEREDOC.gsub('foo', 'bar')
61
61
  foo
62
62
  HEREDOC
63
63
  ), self, { :arg_is_enumerable? => [:object, "is_a?(Enumerable)"] }, __FILE__, 111, 188)
@@ -70,9 +70,9 @@ module Transpec
70
70
  end
71
71
  end
72
72
 
73
- describe '#correct_operator!' do
73
+ describe '#convert_operator!' do
74
74
  before do
75
- matcher.correct_operator!(parenthesize_arg)
75
+ matcher.convert_operator!(parenthesize_arg)
76
76
  end
77
77
 
78
78
  let(:parenthesize_arg) { true }
@@ -189,8 +189,8 @@ module Transpec
189
189
  END
190
190
  end
191
191
 
192
- it 'invokes OperatorMatcher#correct_operator!' do
193
- should_object.operator_matcher.should_receive(:correct_operator!)
192
+ it 'invokes OperatorMatcher#convert_operator!' do
193
+ should_object.operator_matcher.should_receive(:convert_operator!)
194
194
  should_object.expectize!
195
195
  end
196
196
 
@@ -226,6 +226,40 @@ module Transpec
226
226
  record.converted_syntax.should == 'expect(obj).to'
227
227
  end
228
228
 
229
+ context 'and #expect is available in the context by including RSpec::Matchers' do
230
+ let(:source) do
231
+ <<-END
232
+ describe 'example' do
233
+ class TestRunner
234
+ include RSpec::Matchers
235
+
236
+ def run
237
+ 1.should == 1
238
+ end
239
+ end
240
+
241
+ it 'is 1' do
242
+ TestRunner.new.run
243
+ end
244
+ end
245
+ END
246
+ end
247
+
248
+ context 'with runtime information' do
249
+ include_context 'dynamic analysis objects'
250
+
251
+ it 'does not raise InvalidContextError' do
252
+ -> { should_object.expectize! }.should_not raise_error
253
+ end
254
+ end
255
+
256
+ context 'without runtime information' do
257
+ it 'raises InvalidContextError' do
258
+ -> { should_object.expectize! }.should raise_error(InvalidContextError)
259
+ end
260
+ end
261
+ end
262
+
229
263
  context 'and #expect is not available in the context' do
230
264
  context 'and the context is determinable statically' do
231
265
  let(:source) do
data/transpec.gemspec CHANGED
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
9
9
  spec.version = Transpec::Version.to_s
10
10
  spec.authors = ['Yuji Nakayama']
11
11
  spec.email = ['nkymyj@gmail.com']
12
- spec.summary = 'RSpec syntax converter'
13
- spec.description = 'Transpec automatically converts your specs into latest RSpec syntax ' +
12
+ spec.summary = 'A RSpec syntax converter'
13
+ spec.description = 'Transpec converts your specs into latest RSpec syntax ' +
14
14
  'with static and dynamic code analysis.'
15
15
  spec.homepage = 'https://github.com/yujinakayama/transpec'
16
16
  spec.license = 'MIT'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: transpec
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuji Nakayama
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-02 00:00:00.000000000 Z
11
+ date: 2013-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -164,8 +164,8 @@ dependencies:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0.3'
167
- description: Transpec automatically converts your specs into latest RSpec syntax with
168
- static and dynamic code analysis.
167
+ description: Transpec converts your specs into latest RSpec syntax with static and
168
+ dynamic code analysis.
169
169
  email:
170
170
  - nkymyj@gmail.com
171
171
  executables:
@@ -281,7 +281,7 @@ rubyforge_project:
281
281
  rubygems_version: 2.0.3
282
282
  signing_key:
283
283
  specification_version: 4
284
- summary: RSpec syntax converter
284
+ summary: A RSpec syntax converter
285
285
  test_files:
286
286
  - spec/.rubocop.yml
287
287
  - spec/spec_helper.rb