transpec 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
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