transpec 2.1.0 → 2.2.0

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: 2402b33bb816bb8834d369cd49ea5b93199f0c7f
4
- data.tar.gz: 3fc7140d2ebbf711de884459b1a8d424ce073a1f
3
+ metadata.gz: d068540b9a2d9d54a04b4314bd3c5156c423ba4f
4
+ data.tar.gz: cbbb7e6061a8d5cf4ee52054e1e7bb1da4ea8a08
5
5
  SHA512:
6
- metadata.gz: e023997e0b62507e833df7fe92a7fad689c2aa6fc601378df904e54d66d8122ea97af22eec4ca8c0c901aa043c7717221188dba3871828e0822e104b4d6e93f2
7
- data.tar.gz: 1c2c697e5f2d143be79ecc6d8718e488466eb3f53c3d9629fd94c447529ab5c0c1423f4333c28b6af07f4a657aac48b37d291a25e69dde1b01b51ad0699f6ca9
6
+ metadata.gz: bb03eeaa658581eb344bafff2a1bd0e38931bdd804b76be305fab9154efdb858306f8a5db2c7292210289ba5dfe74af02797a9d49896aab229c46af6ae2124a7
7
+ data.tar.gz: e7c2dfa4ba98e945c3d0d9363a1151d68eba25ea8c869191212b8dbc6cca7b04fd64b51af38c8b0f3855288b798f74c06719d234ab7a1723acdbed1421533802
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## Development
4
4
 
5
+ ## v2.2.0
6
+
7
+ * Add descriptive comments to auto-added configurations in `RSpec.configure`.
8
+ * Deprecate `--no-parentheses-matcher-arg` option in favor of `--no-parens-matcher-arg`.
9
+ * Remove consecutive white spaces between `its` and the block.
10
+
5
11
  ## v2.1.0
6
12
 
7
13
  * Disable invalid conversion of `expect(model).to have(n).errors_on(:attr)`. ([#62](https://github.com/yujinakayama/transpec/issues/62))
data/README.md CHANGED
@@ -8,17 +8,20 @@
8
8
 
9
9
  **Transpec** is a tool for converting your specs to the latest [RSpec](http://rspec.info/) syntax with static and dynamic code analysis.
10
10
 
11
- This aims to facilitate a smooth transition to RSpec 3, and it's now ready for RSpec 2.99 and 3.0 beta!
11
+ With Transpec you can upgrade your RSpec 2 specs to RSpec 3 in no time.
12
+ It supports [conversions](#supported-conversions) for almost all of the RSpec 3 changes – not only the `expect` syntax.
13
+ Also, you can use it on your RSpec 2 project even if you're not going to upgrade it to RSpec 3 for now.
12
14
 
13
- See the following pages for the new RSpec syntax and the plan for RSpec 3:
15
+ Check out the following pages for the new RSpec syntax and the changes in RSpec 3:
14
16
 
15
17
  * [Myron Marston » RSpec's New Expectation Syntax](http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax)
16
18
  * [RSpec's new message expectation syntax - Tea is awesome.](http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/)
17
- * [Myron Marston » The Plan for RSpec 3](http://myronmars.to/n/dev-blog/2013/07/the-plan-for-rspec-3)
19
+ * [Myron Marston » Notable Changes in RSpec 3](http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3)
18
20
 
19
- Transpec now supports conversions for almost all of the RSpec 3 changes,
20
- but the changes are not fixed and may vary in the future.
21
- So it's recommended to follow updates of both RSpec and Transpec.
21
+ If you are going to use Transpec in the upgrade process to RSpec 3,
22
+ read the RSpec official guide:
23
+
24
+ * https://relishapp.com/rspec/docs/upgrade
22
25
 
23
26
  ## Examples
24
27
 
@@ -193,13 +196,6 @@ $ transpec --keep its --convert example_group
193
196
 
194
197
  See [`-k/--keep`](#-k--keep) and [`-v/--convert`](#-v--convert) for more details.
195
198
 
196
- ## Upgrade Process to RSpec 3 beta
197
-
198
- If you are going to use Transpec in the upgrade process to RSpec 3 beta,
199
- read this article by [Myron Marston](https://github.com/myronmarston), who is the lead maintainer of RSpec:
200
-
201
- * [Myron Marston » RSpec 2.99 and 3.0 betas have been released!](http://myronmars.to/n/dev-blog/2013/11/rspec-2-99-and-3-0-betas-have-been-released)
202
-
203
199
  ## Options
204
200
 
205
201
  Though Transpec ships with sensible defaults that essentially conform to the RSpec 3 defaults,
@@ -329,7 +325,7 @@ Note that this is not same as `--keep deprecated` since this configures `yield_r
329
325
 
330
326
  See [Supported Conversions - `any_instance` implementation blocks](#any_instance-implementation-blocks) for more details.
331
327
 
332
- ### `-p/--no-parentheses-matcher-arg`
328
+ ### `-p/--no-parens-matcher-arg`
333
329
 
334
330
  Suppress parenthesizing arguments of matchers when converting
335
331
  `should` with operator matcher to `expect` with non-operator matcher
@@ -358,7 +354,7 @@ describe 'converted spec' do
358
354
  end
359
355
  end
360
356
 
361
- describe 'converted spec with -p/--no-parentheses-matcher-arg option' do
357
+ describe 'converted spec with -p/--no-parens-matcher-arg option' do
362
358
  it 'is an example' do
363
359
  expect(1).to eq 1
364
360
  expect(2).to be > 1
@@ -483,7 +479,7 @@ The one-liner (implicit receiver) `should`:
483
479
  * [Current example object](#current-example-object)
484
480
  * [Custom matcher DSL](#custom-matcher-dsl)
485
481
  * [Implicit spec types in rspec-rails](#implicit-spec-types-in-rspec-rails)
486
- * [Example groups](#example-groups)
482
+ * [Monkey-patched example groups](#monkey-patched-example-groups)
487
483
  * [Hook scope aliases](#hook-scope-aliases)
488
484
 
489
485
  ### Standard expectations
@@ -509,7 +505,7 @@ expect(obj).to_not matcher # with `--negative-form to_not`
509
505
 
510
506
  ### One-liner expectations
511
507
 
512
- **This conversion is available only if your project's RSpec is `2.99.0.beta2` or later.**
508
+ This conversion is available only if your project's RSpec is **2.99.0.beta2 or later**.
513
509
 
514
510
  Targets:
515
511
 
@@ -566,7 +562,7 @@ This conversion is combined with the conversion of [standard expectations](#stan
566
562
 
567
563
  ### Boolean matchers
568
564
 
569
- **This conversion is available only if your project's RSpec is `2.99.0.beta1` or later.**
565
+ This conversion is available only if your project's RSpec is **2.99.0.beta1 or later**.
570
566
 
571
567
  Targets:
572
568
 
@@ -622,7 +618,7 @@ expect(1.0 / 3.0).to be_within(0.001).of(0.333)
622
618
 
623
619
  ### `have(n).items` matcher
624
620
 
625
- **This conversion will be disabled automatically if `rspec-collection_matchers` is loaded in your spec.**
621
+ This conversion will be **disabled automatically if `rspec-collection_matchers` is loaded** in your spec.
626
622
 
627
623
  Targets:
628
624
 
@@ -696,7 +692,7 @@ So using rspec-collection_matchers gem is recommended for now.
696
692
 
697
693
  ### One-liner expectations with `have(n).items` matcher
698
694
 
699
- **This conversion will be disabled automatically if `rspec-collection_matchers` is loaded in your spec.**
695
+ This conversion will be **disabled automatically if `rspec-collection_matchers` is loaded** in your spec.
700
696
 
701
697
  Targets:
702
698
 
@@ -746,7 +742,7 @@ expect { do_something }.to raise_error
746
742
 
747
743
  ### Expectations on attribute of subject with `its`
748
744
 
749
- **This conversion will be disabled automatically if `rspec-its` is loaded in your spec.**
745
+ This conversion will be **disabled automatically if `rspec-its` is loaded** in your spec.
750
746
 
751
747
  Targets:
752
748
 
@@ -791,7 +787,9 @@ If you choose to do so, disable this conversion by either:
791
787
  * Specify `--keep its` option manually.
792
788
  * Require `rspec-its` in your spec so that Transpec automatically disables this conversion.
793
789
 
794
- ---
790
+ Note that this conversion is a sort of first-aid
791
+ and ideally the expectations should be rewritten to be more expressive by yourself.
792
+ Read [this post](https://gist.github.com/myronmarston/4503509) for the rationale.
795
793
 
796
794
  * This conversion can be disabled by: `--keep its`
797
795
  * Deprecation: deprecated since RSpec 2.99, removed in RSpec 3.0
@@ -1008,7 +1006,7 @@ allow(obj).to receive(:message)
1008
1006
 
1009
1007
  ### `any_instance` implementation blocks
1010
1008
 
1011
- **This conversion is available only if your project's RSpec is `>= 2.99.0.beta1` and `< 3.0.0.beta1`.**
1009
+ This conversion is available only if your project's RSpec is **`>= 2.99.0.beta1` and `< 3.0.0.beta1`**.
1012
1010
 
1013
1011
  Targets:
1014
1012
 
@@ -1029,6 +1027,13 @@ Will be converted to:
1029
1027
  ```ruby
1030
1028
  RSpec.configure do |rspec|
1031
1029
  rspec.mock_with :rspec do |mocks|
1030
+ # In RSpec 3, `any_instance` implementation blocks will be yielded the receiving
1031
+ # instance as the first block argument to allow the implementation block to use
1032
+ # the state of the receiver.
1033
+ # In RSpec 2.99, to maintain compatibility with RSpec 3 you need to either set
1034
+ # this config option to `false` OR set this to `true` and update your
1035
+ # `any_instance` implementation blocks to account for the first block argument
1036
+ # being the receiving instance.
1032
1037
  mocks.yield_receiver_to_any_instance_implementation_blocks = true
1033
1038
  end
1034
1039
  end
@@ -1039,10 +1044,20 @@ describe 'example' do
1039
1044
  allow_any_instance_of(Klass).to receive(:message) { |instance, arg| puts arg }
1040
1045
  end
1041
1046
  end
1047
+ ```
1048
+
1049
+ Or with `--no-yield-any-instance` option they will be converted to:
1042
1050
 
1043
- # With `--no-yield-any-instance`
1051
+ ```
1044
1052
  RSpec.configure do |rspec|
1045
1053
  rspec.mock_with :rspec do |mocks|
1054
+ # In RSpec 3, `any_instance` implementation blocks will be yielded the receiving
1055
+ # instance as the first block argument to allow the implementation block to use
1056
+ # the state of the receiver.
1057
+ # In RSpec 2.99, to maintain compatibility with RSpec 3 you need to either set
1058
+ # this config option to `false` OR set this to `true` and update your
1059
+ # `any_instance` implementation blocks to account for the first block argument
1060
+ # being the receiving instance.
1046
1061
  mocks.yield_receiver_to_any_instance_implementation_blocks = false
1047
1062
  end
1048
1063
  end
@@ -1055,25 +1070,6 @@ describe 'example' do
1055
1070
  end
1056
1071
  ```
1057
1072
 
1058
- Here's an excerpt from [the warning](https://github.com/rspec/rspec-mocks/blob/aab8dc9/lib/rspec/mocks/message_expectation.rb#L478-L491) for `any_instance` implementation blocks in RSpec 2.99:
1059
-
1060
- > In RSpec 3, `any_instance` implementation blocks will be yielded the receiving
1061
- > instance as the first block argument to allow the implementation block to use
1062
- > the state of the receiver. To maintain compatibility with RSpec 3 you need to
1063
- > either set rspec-mocks' `yield_receiver_to_any_instance_implementation_blocks`
1064
- > config option to `false` OR set it to `true` and update your `any_instance`
1065
- > implementation blocks to account for the first block argument being the receiving instance.
1066
- >
1067
- > To set the config option, use a snippet like:
1068
- >
1069
- > ```ruby
1070
- > RSpec.configure do |rspec|
1071
- > rspec.mock_with :rspec do |mocks|
1072
- > mocks.yield_receiver_to_any_instance_implementation_blocks = false
1073
- > end
1074
- > end
1075
- > ```
1076
-
1077
1073
  * This conversion can be disabled by: `--keep deprecated`
1078
1074
  * Deprecation: deprecated since RSpec 2.99
1079
1075
  * See also: [Mocks: `any_instance` block implementations will yield the receiver](http://myronmars.to/n/dev-blog/2013/07/the-plan-for-rspec-3#mocks__block_implementations_will_yield_the_receiver)
@@ -1099,7 +1095,7 @@ double('something')
1099
1095
 
1100
1096
  ### Pending examples
1101
1097
 
1102
- **This conversion is available only if your project's RSpec is `>= 2.99.0.beta1` and `< 3.0.0.beta1`.**
1098
+ This conversion is available only if your project's RSpec is **`>= 2.99.0.beta1` and `< 3.0.0.beta1`**.
1103
1099
 
1104
1100
  Targets:
1105
1101
 
@@ -1168,7 +1164,7 @@ Here's an excerpt from [the warning](https://github.com/rspec/rspec-core/blob/v2
1168
1164
 
1169
1165
  ### Current example object
1170
1166
 
1171
- **This conversion is available only if your project's RSpec is `2.99.0.beta1` or later.**
1167
+ This conversion is available only if your project's RSpec is **2.99.0.beta1 or later**.
1172
1168
 
1173
1169
  Targets:
1174
1170
 
@@ -1226,7 +1222,7 @@ Here's an excerpt from [the warning](https://github.com/rspec/rspec-core/blob/7d
1226
1222
 
1227
1223
  ### Custom matcher DSL
1228
1224
 
1229
- **This conversion is available only if your project's RSpec is `3.0.0.beta2` or later.**
1225
+ This conversion is available only if your project's RSpec is **3.0.0.beta2 or later**.
1230
1226
 
1231
1227
  Targets:
1232
1228
 
@@ -1256,7 +1252,7 @@ end
1256
1252
 
1257
1253
  ### Implicit spec types in rspec-rails
1258
1254
 
1259
- **This conversion is available only if `rspec-rails` is loaded in your spec and your project's RSpec is `2.99.0.rc1` or later.**
1255
+ This conversion is **available only if `rspec-rails` is loaded** in your spec and your project's RSpec is **2.99.0.rc1 or later**.
1260
1256
 
1261
1257
  Targets:
1262
1258
 
@@ -1277,9 +1273,21 @@ end
1277
1273
 
1278
1274
  describe SomeModel, :type => :model do
1279
1275
  end
1276
+ ```
1280
1277
 
1281
- # With `--no-explicit-spec-type`
1278
+ Or with `--no-explicit-spec-type` option they will be converted to:
1279
+
1280
+ ```
1282
1281
  RSpec.configure do |rspec|
1282
+ # rspec-rails 3 will no longer automatically infer an example group's spec type
1283
+ # from the file location. You can explicitly opt-in to the feature using this
1284
+ # config option.
1285
+ # To explicitly tag specs without using automatic inference, set the `:type`
1286
+ # metadata manually:
1287
+ #
1288
+ # describe ThingsController, :type => :controller do
1289
+ # # Equivalent to being in spec/controllers
1290
+ # end
1283
1291
  rspec.infer_spec_type_from_file_location!
1284
1292
  end
1285
1293
 
@@ -1287,25 +1295,13 @@ describe SomeModel do
1287
1295
  end
1288
1296
  ```
1289
1297
 
1290
- Here's an excerpt from [the warning](https://github.com/rspec/rspec-rails/blob/ab6313b/lib/rspec/rails/infer_type_configuration.rb#L13-L22) in RSpec 2.99:
1291
-
1292
- > rspec-rails 3 will no longer automatically infer an example group's spec type from the file location. You can explicitly opt-in to this feature using this snippet:
1293
- >
1294
- > ```ruby
1295
- > RSpec.configure do |config|
1296
- > config.infer_spec_type_from_file_location!
1297
- > end
1298
- > ```
1299
- >
1300
- > If you wish to manually label spec types via metadata you can safely ignore this warning and continue upgrading to RSpec 3 without addressing it.
1301
-
1302
1298
  * This conversion can be disabled by: `--keep deprecated`
1303
1299
  * Deprecation: deprecated since RSpec 2.99, removed in RSpec 3.0
1304
1300
  * See also: [Consider making example group mixins more explicit · rspec/rspec-rails](https://github.com/rspec/rspec-rails/issues/662)
1305
1301
 
1306
- ### Example groups
1302
+ ### Monkey-patched example groups
1307
1303
 
1308
- **This conversion is disabled by default and available only if your project's RSpec is `3.0.0.beta2` or later.**
1304
+ This conversion is **disabled by default** and available only if your project's RSpec is **3.0.0.beta2 or later**.
1309
1305
 
1310
1306
  Targets:
1311
1307
 
@@ -1326,6 +1322,13 @@ Will be converted to:
1326
1322
 
1327
1323
  ```ruby
1328
1324
  RSpec.configure do |rspec|
1325
+ # Setting this config option `false` removes rspec-core's monkey patching of the
1326
+ # top level methods like `describe`, `shared_examples_for` and `shared_context`
1327
+ # on `main` and `Module`. The methods are always available through the `RSpec`
1328
+ # module like `RSpec.describe` regardless of this setting.
1329
+ # For backwards compatibility this defaults to `true`.
1330
+ #
1331
+ # https://relishapp.com/rspec/rspec-core/v/3-0/docs/configuration/global-namespace-dsl
1329
1332
  rspec.expose_dsl_globally = false
1330
1333
  end
1331
1334
 
@@ -1344,7 +1347,7 @@ end
1344
1347
 
1345
1348
  ### Hook scope aliases
1346
1349
 
1347
- **This conversion is disabled by default and available only if your project's RSpec is `3.0.0.beta2` or later.**
1350
+ This conversion is **disabled by default** and available only if your project's RSpec is **3.0.0.beta2 or later**.
1348
1351
 
1349
1352
  Targets:
1350
1353
 
data/README.md.erb CHANGED
@@ -8,17 +8,20 @@
8
8
 
9
9
  **Transpec** is a tool for converting your specs to the latest [RSpec](http://rspec.info/) syntax with static and dynamic code analysis.
10
10
 
11
- This aims to facilitate a smooth transition to RSpec 3, and it's now ready for RSpec 2.99 and 3.0 beta!
11
+ With Transpec you can upgrade your RSpec 2 specs to RSpec 3 in no time.
12
+ It supports [conversions](#supported-conversions) for almost all of the RSpec 3 changes – not only the `expect` syntax.
13
+ Also, you can use it on your RSpec 2 project even if you're not going to upgrade it to RSpec 3 for now.
12
14
 
13
- See the following pages for the new RSpec syntax and the plan for RSpec 3:
15
+ Check out the following pages for the new RSpec syntax and the changes in RSpec 3:
14
16
 
15
17
  * [Myron Marston » RSpec's New Expectation Syntax](http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax)
16
18
  * [RSpec's new message expectation syntax - Tea is awesome.](http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/)
17
- * [Myron Marston » The Plan for RSpec 3](http://myronmars.to/n/dev-blog/2013/07/the-plan-for-rspec-3)
19
+ * [Myron Marston » Notable Changes in RSpec 3](http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3)
18
20
 
19
- Transpec now supports conversions for almost all of the RSpec 3 changes,
20
- but the changes are not fixed and may vary in the future.
21
- So it's recommended to follow updates of both RSpec and Transpec.
21
+ If you are going to use Transpec in the upgrade process to RSpec 3,
22
+ read the RSpec official guide:
23
+
24
+ * https://relishapp.com/rspec/docs/upgrade
22
25
 
23
26
  ## Examples
24
27
 
@@ -167,13 +170,6 @@ $ transpec --keep its --convert example_group
167
170
 
168
171
  See [`-k/--keep`](#-k--keep) and [`-v/--convert`](#-v--convert) for more details.
169
172
 
170
- ## Upgrade Process to RSpec 3 beta
171
-
172
- If you are going to use Transpec in the upgrade process to RSpec 3 beta,
173
- read this article by [Myron Marston](https://github.com/myronmarston), who is the lead maintainer of RSpec:
174
-
175
- * [Myron Marston » RSpec 2.99 and 3.0 betas have been released!](http://myronmars.to/n/dev-blog/2013/11/rspec-2-99-and-3-0-betas-have-been-released)
176
-
177
173
  ## Options
178
174
 
179
175
  Though Transpec ships with sensible defaults that essentially conform to the RSpec 3 defaults,
@@ -317,7 +313,7 @@ Note that this is not same as `--keep deprecated` since this configures `yield_r
317
313
 
318
314
  See [Supported Conversions - `any_instance` implementation blocks](#any_instance-implementation-blocks) for more details.
319
315
 
320
- ### `-p/--no-parentheses-matcher-arg`
316
+ ### `-p/--no-parens-matcher-arg`
321
317
 
322
318
  Suppress parenthesizing arguments of matchers when converting
323
319
  `should` with operator matcher to `expect` with non-operator matcher
@@ -346,7 +342,7 @@ END
346
342
  convert(example, cli: ['-p'])
347
343
  .gsub(
348
344
  'original spec',
349
- 'converted spec with -p/--no-parentheses-matcher-arg option'
345
+ 'converted spec with -p/--no-parens-matcher-arg option'
350
346
  )
351
347
  .gsub(/^.+\{ key: value \}/) do |match|
352
348
  " # With non-operator method, the parentheses are always required\n" +
@@ -481,7 +477,7 @@ Will be converted to:
481
477
 
482
478
  ### One-liner expectations
483
479
 
484
- **This conversion is available only if your project's RSpec is `<%= rspec_version = Transpec::RSpecVersion.oneliner_is_expected_available_version %>` or later.**
480
+ This conversion is available only if your project's RSpec is **<%= rspec_version = Transpec::RSpecVersion.oneliner_is_expected_available_version %> or later**.
485
481
 
486
482
  Targets:
487
483
 
@@ -546,7 +542,7 @@ This conversion is combined with the conversion of [standard expectations](#stan
546
542
 
547
543
  ### Boolean matchers
548
544
 
549
- **This conversion is available only if your project's RSpec is `<%= rspec_version = Transpec::RSpecVersion.be_truthy_available_version %>` or later.**
545
+ This conversion is available only if your project's RSpec is **<%= rspec_version = Transpec::RSpecVersion.be_truthy_available_version %> or later**.
550
546
 
551
547
  Targets:
552
548
 
@@ -607,7 +603,7 @@ Will be converted to:
607
603
 
608
604
  ### `have(n).items` matcher
609
605
 
610
- **This conversion will be disabled automatically if `rspec-collection_matchers` is loaded in your spec.**
606
+ This conversion will be **disabled automatically if `rspec-collection_matchers` is loaded** in your spec.
611
607
 
612
608
  Targets:
613
609
 
@@ -751,7 +747,7 @@ So using rspec-collection_matchers gem is recommended for now.
751
747
 
752
748
  ### One-liner expectations with `have(n).items` matcher
753
749
 
754
- **This conversion will be disabled automatically if `rspec-collection_matchers` is loaded in your spec.**
750
+ This conversion will be **disabled automatically if `rspec-collection_matchers` is loaded** in your spec.
755
751
 
756
752
  Targets:
757
753
 
@@ -819,7 +815,7 @@ Will be converted to:
819
815
 
820
816
  ### Expectations on attribute of subject with `its`
821
817
 
822
- **This conversion will be disabled automatically if `rspec-its` is loaded in your spec.**
818
+ This conversion will be **disabled automatically if `rspec-its` is loaded** in your spec.
823
819
 
824
820
  Targets:
825
821
 
@@ -848,7 +844,9 @@ If you choose to do so, disable this conversion by either:
848
844
  * Specify `--keep its` option manually.
849
845
  * Require `rspec-its` in your spec so that Transpec automatically disables this conversion.
850
846
 
851
- ---
847
+ Note that this conversion is a sort of first-aid
848
+ and ideally the expectations should be rewritten to be more expressive by yourself.
849
+ Read [this post](https://gist.github.com/myronmarston/4503509) for the rationale.
852
850
 
853
851
  * This conversion can be disabled by: `--keep its`
854
852
  * Deprecation: deprecated since RSpec 2.99, removed in RSpec 3.0
@@ -1110,7 +1108,7 @@ Will be converted to:
1110
1108
 
1111
1109
  ### `any_instance` implementation blocks
1112
1110
 
1113
- **This conversion is available only if your project's RSpec is `>= <%= Transpec::RSpecVersion::RSPEC_2_99 %>` and `< <%= Transpec::RSpecVersion::RSPEC_3_0 %>`.**
1111
+ This conversion is available only if your project's RSpec is **`>= <%= Transpec::RSpecVersion::RSPEC_2_99 %>` and `< <%= Transpec::RSpecVersion::RSPEC_3_0 %>`**.
1114
1112
 
1115
1113
  Targets:
1116
1114
 
@@ -1135,29 +1133,13 @@ Will be converted to:
1135
1133
  ```ruby
1136
1134
  <% rspec_version = Transpec::RSpecVersion.yielding_receiver_to_any_instance_implementation_block_available_version -%>
1137
1135
  <%= convert(example, rspec_version: rspec_version) -%>
1138
-
1139
- # With `--no-yield-any-instance`
1140
- <%= convert(example, cli: ['--no-yield-any-instance'], rspec_version: rspec_version) -%>
1141
1136
  ```
1142
1137
 
1143
- Here's an excerpt from [the warning](https://github.com/rspec/rspec-mocks/blob/aab8dc9/lib/rspec/mocks/message_expectation.rb#L478-L491) for `any_instance` implementation blocks in RSpec 2.99:
1138
+ Or with `--no-yield-any-instance` option they will be converted to:
1144
1139
 
1145
- > In RSpec 3, `any_instance` implementation blocks will be yielded the receiving
1146
- > instance as the first block argument to allow the implementation block to use
1147
- > the state of the receiver. To maintain compatibility with RSpec 3 you need to
1148
- > either set rspec-mocks' `yield_receiver_to_any_instance_implementation_blocks`
1149
- > config option to `false` OR set it to `true` and update your `any_instance`
1150
- > implementation blocks to account for the first block argument being the receiving instance.
1151
- >
1152
- > To set the config option, use a snippet like:
1153
- >
1154
- > ```ruby
1155
- > RSpec.configure do |rspec|
1156
- > rspec.mock_with :rspec do |mocks|
1157
- > mocks.yield_receiver_to_any_instance_implementation_blocks = false
1158
- > end
1159
- > end
1160
- > ```
1140
+ ```
1141
+ <%= convert(example, cli: ['--no-yield-any-instance'], rspec_version: rspec_version) -%>
1142
+ ```
1161
1143
 
1162
1144
  * This conversion can be disabled by: `--keep deprecated`
1163
1145
  * Deprecation: deprecated since RSpec 2.99
@@ -1188,7 +1170,7 @@ Will be converted to:
1188
1170
 
1189
1171
  ### Pending examples
1190
1172
 
1191
- **This conversion is available only if your project's RSpec is `>= <%= Transpec::RSpecVersion::RSPEC_2_99 %>` and `< <%= Transpec::RSpecVersion::RSPEC_3_0 %>`.**
1173
+ This conversion is available only if your project's RSpec is **`>= <%= Transpec::RSpecVersion::RSPEC_2_99 %>` and `< <%= Transpec::RSpecVersion::RSPEC_3_0 %>`**.
1192
1174
 
1193
1175
  Targets:
1194
1176
 
@@ -1246,7 +1228,7 @@ Here's an excerpt from [the warning](https://github.com/rspec/rspec-core/blob/v2
1246
1228
 
1247
1229
  ### Current example object
1248
1230
 
1249
- **This conversion is available only if your project's RSpec is `<%= rspec_version = Transpec::RSpecVersion.yielded_example_available_version %>` or later.**
1231
+ This conversion is available only if your project's RSpec is **<%= rspec_version = Transpec::RSpecVersion.yielded_example_available_version %> or later**.
1250
1232
 
1251
1233
  Targets:
1252
1234
 
@@ -1296,7 +1278,7 @@ Here's an excerpt from [the warning](https://github.com/rspec/rspec-core/blob/7d
1296
1278
 
1297
1279
  ### Custom matcher DSL
1298
1280
 
1299
- **This conversion is available only if your project's RSpec is `<%= rspec_version = Transpec::RSpecVersion.non_should_matcher_protocol_available_version %>` or later.**
1281
+ This conversion is available only if your project's RSpec is **<%= rspec_version = Transpec::RSpecVersion.non_should_matcher_protocol_available_version %> or later**.
1300
1282
 
1301
1283
  Targets:
1302
1284
 
@@ -1325,7 +1307,7 @@ Will be converted to:
1325
1307
 
1326
1308
  ### Implicit spec types in rspec-rails
1327
1309
 
1328
- **This conversion is available only if `rspec-rails` is loaded in your spec and your project's RSpec is `<%= rspec_version = Transpec::RSpecVersion.implicit_spec_type_disablement_available_version %>` or later.**
1310
+ This conversion is **available only if `rspec-rails` is loaded** in your spec and your project's RSpec is **<%= rspec_version = Transpec::RSpecVersion.implicit_spec_type_disablement_available_version %> or later**.
1329
1311
 
1330
1312
  Targets:
1331
1313
 
@@ -1346,30 +1328,21 @@ Will be converted to:
1346
1328
 
1347
1329
  ```ruby
1348
1330
  <%= convert(example, rspec_version: rspec_version, path: 'spec/models/some_model_spec.rb') -%>
1349
-
1350
- # With `--no-explicit-spec-type`
1351
- <%= convert(example, rspec_version: rspec_version, path: 'spec/models/some_model_spec.rb', cli: ['--no-explicit-spec-type']) -%>
1352
1331
  ```
1353
1332
 
1354
- Here's an excerpt from [the warning](https://github.com/rspec/rspec-rails/blob/ab6313b/lib/rspec/rails/infer_type_configuration.rb#L13-L22) in RSpec 2.99:
1333
+ Or with `--no-explicit-spec-type` option they will be converted to:
1355
1334
 
1356
- > rspec-rails 3 will no longer automatically infer an example group's spec type from the file location. You can explicitly opt-in to this feature using this snippet:
1357
- >
1358
- > ```ruby
1359
- > RSpec.configure do |config|
1360
- > config.infer_spec_type_from_file_location!
1361
- > end
1362
- > ```
1363
- >
1364
- > If you wish to manually label spec types via metadata you can safely ignore this warning and continue upgrading to RSpec 3 without addressing it.
1335
+ ```
1336
+ <%= convert(example, rspec_version: rspec_version, path: 'spec/models/some_model_spec.rb', cli: ['--no-explicit-spec-type']) -%>
1337
+ ```
1365
1338
 
1366
1339
  * This conversion can be disabled by: `--keep deprecated`
1367
1340
  * Deprecation: deprecated since RSpec 2.99, removed in RSpec 3.0
1368
1341
  * See also: [Consider making example group mixins more explicit · rspec/rspec-rails](https://github.com/rspec/rspec-rails/issues/662)
1369
1342
 
1370
- ### Example groups
1343
+ ### Monkey-patched example groups
1371
1344
 
1372
- **This conversion is disabled by default and available only if your project's RSpec is `<%= rspec_version = Transpec::RSpecVersion.non_monkey_patch_example_group_available_version %>` or later.**
1345
+ This conversion is **disabled by default** and available only if your project's RSpec is **<%= rspec_version = Transpec::RSpecVersion.non_monkey_patch_example_group_available_version %> or later**.
1373
1346
 
1374
1347
  Targets:
1375
1348
 
@@ -1402,7 +1375,7 @@ Will be converted to:
1402
1375
 
1403
1376
  ### Hook scope aliases
1404
1377
 
1405
- **This conversion is disabled by default and available only if your project's RSpec is `<%= rspec_version = Transpec::RSpecVersion.hook_scope_alias_available_version %>` or later.**
1378
+ This conversion is **disabled by default** and available only if your project's RSpec is **<%= rspec_version = Transpec::RSpecVersion.hook_scope_alias_available_version %> or later**.
1406
1379
 
1407
1380
  Targets:
1408
1381
 
@@ -95,7 +95,7 @@ module Transpec
95
95
  config.add_explicit_type_metadata_to_example_group = false
96
96
  end
97
97
 
98
- define_option('-p', '--no-parentheses-matcher-arg') do
98
+ define_option('-p', '--no-parens-matcher-arg') do
99
99
  config.parenthesize_matcher_arg = false
100
100
  end
101
101
 
@@ -207,12 +207,20 @@ module Transpec
207
207
  end
208
208
 
209
209
  def convert_deprecated_options(raw_args)
210
- raw_args.dup
210
+ raw_args.each_with_object([]) do |arg, args|
211
+ case arg
212
+ when '--no-parentheses-matcher-arg'
213
+ deprecate('--no-parentheses-matcher-arg option', '--no-parens-matcher-arg')
214
+ args << '--no-parens-matcher-arg'
215
+ else
216
+ args << arg
217
+ end
218
+ end
211
219
  end
212
220
 
213
221
  def deprecate(subject, alternative = nil)
214
222
  message = "DEPRECATION: #{subject} is deprecated."
215
- message << " Please use #{alternative} instead." if alternative
223
+ message << " Use #{alternative} instead." if alternative
216
224
  warn message
217
225
  end
218
226
 
@@ -27,7 +27,7 @@ module Transpec
27
27
  front, rear = build_wrapper_codes
28
28
 
29
29
  insert_before(beginning_of_line_range(block_node), front)
30
- replace(expression_range, 'it')
30
+ replace(range_from_its_to_front_of_block, 'it ')
31
31
  insert_after(block_node.loc.expression, rear)
32
32
 
33
33
  register_record
@@ -89,6 +89,10 @@ module Transpec
89
89
  @base_indentation ||= indentation_of_line(node)
90
90
  end
91
91
 
92
+ def range_from_its_to_front_of_block
93
+ expression_range.join(block_node.loc.begin.begin)
94
+ end
95
+
92
96
  def register_record
93
97
  report.records << Record.new(original_syntax, converted_syntax)
94
98
  end
@@ -26,13 +26,43 @@ module Transpec
26
26
  end
27
27
 
28
28
  def expose_dsl_globally=(boolean)
29
- set_config!(:expose_dsl_globally, boolean)
29
+ comment = <<-END.gsub(/^\s+\|/, '').chomp
30
+ |Setting this config option `false` removes rspec-core's monkey patching of the
31
+ |top level methods like `describe`, `shared_examples_for` and `shared_context`
32
+ |on `main` and `Module`. The methods are always available through the `RSpec`
33
+ |module like `RSpec.describe` regardless of this setting.
34
+ |For backwards compatibility this defaults to `true`.
35
+ |
36
+ |https://relishapp.com/rspec/rspec-core/v/3-0/docs/configuration/global-namespace-dsl
37
+ END
38
+ set_config!(:expose_dsl_globally, boolean, comment)
30
39
  end
31
40
 
32
41
  def infer_spec_type_from_file_location!
33
42
  return if infer_spec_type_from_file_location?
34
43
  return unless rspec_rails?
35
- add_config!(:infer_spec_type_from_file_location!)
44
+
45
+ # rubocop:disable LineLength
46
+ #
47
+ # Based on the deprecation warning in RSpec 2.99:
48
+ # https://github.com/rspec/rspec-rails/blob/ab6313b/lib/rspec/rails/infer_type_configuration.rb#L13-L22
49
+ # and the Myron's post:
50
+ # http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#filetype_inference_disabled_by_default
51
+ #
52
+ # rubocop:enable LineLength
53
+ comment = <<-END.gsub(/^\s+\|/, '').chomp
54
+ |rspec-rails 3 will no longer automatically infer an example group's spec type
55
+ |from the file location. You can explicitly opt-in to the feature using this
56
+ |config option.
57
+ |To explicitly tag specs without using automatic inference, set the `:type`
58
+ |metadata manually:
59
+ |
60
+ | describe ThingsController, :type => :controller do
61
+ | # Equivalent to being in spec/controllers
62
+ | end
63
+ END
64
+
65
+ add_config!(:infer_spec_type_from_file_location!, nil, comment)
36
66
  end
37
67
 
38
68
  def infer_spec_type_from_file_location?
@@ -15,14 +15,14 @@ module Transpec
15
15
 
16
16
  private
17
17
 
18
- def set_config!(config_name, value)
18
+ def set_config!(config_name, value, comment = nil)
19
19
  setter_node = find_config_node("#{config_name}=")
20
20
 
21
21
  if setter_node
22
22
  arg_node = setter_node.children[2]
23
23
  source_rewriter.replace(arg_node.loc.expression, value.to_s)
24
24
  else
25
- add_config!(config_name, value)
25
+ add_config!(config_name, value, comment)
26
26
  end
27
27
  end
28
28
 
@@ -46,8 +46,8 @@ module Transpec
46
46
 
47
47
  # TODO: Refactor this to remove messy overrides in Framework.
48
48
  module ConfigAddition
49
- def add_config!(config_name, value = nil)
50
- lines = generate_config_lines(config_name, value)
49
+ def add_config!(config_name, value = nil, comment = nil)
50
+ lines = generate_config_lines(config_name, value, comment)
51
51
  lines.unshift('') unless empty_block_body?
52
52
  lines.map! { |line| line + "\n" }
53
53
 
@@ -57,10 +57,21 @@ module Transpec
57
57
  block_node_to_insert_code.metadata[:added_config] = true
58
58
  end
59
59
 
60
- def generate_config_lines(config_name, value = nil)
61
- line = body_indentation + "#{config_variable_name}.#{config_name}"
62
- line << " = #{value}" unless value.nil?
63
- [line]
60
+ def generate_config_lines(config_name, value = nil, comment = nil)
61
+ lines = []
62
+
63
+ if comment
64
+ comment_lines = comment.each_line.map do |line|
65
+ "#{body_indentation}# #{line.chomp}".rstrip
66
+ end
67
+ lines.concat(comment_lines)
68
+ end
69
+
70
+ config_line = body_indentation + "#{config_variable_name}.#{config_name}"
71
+ config_line << " = #{value}" unless value.nil?
72
+ lines << config_line
73
+
74
+ lines
64
75
  end
65
76
 
66
77
  def config_variable_name
@@ -34,7 +34,7 @@ module Transpec
34
34
  fail NotImplementedError
35
35
  end
36
36
 
37
- def generate_config_lines(config_name, value = nil)
37
+ def generate_config_lines(config_name, value = nil, comment = nil)
38
38
  lines = super
39
39
 
40
40
  unless block_node
@@ -11,7 +11,22 @@ module Transpec
11
11
  end
12
12
 
13
13
  def yield_receiver_to_any_instance_implementation_blocks=(boolean)
14
- set_config!(:yield_receiver_to_any_instance_implementation_blocks, boolean)
14
+ # rubocop:disable LineLength
15
+ #
16
+ # Based on the deprecation warning in RSpec 2.99:
17
+ # https://github.com/rspec/rspec-mocks/blob/aab8dc9/lib/rspec/mocks/message_expectation.rb#L478-L491
18
+ #
19
+ # rubocop:enable LineLength
20
+ comment = <<-END.gsub(/^\s+\|/, '').chomp
21
+ |In RSpec 3, `any_instance` implementation blocks will be yielded the receiving
22
+ |instance as the first block argument to allow the implementation block to use
23
+ |the state of the receiver.
24
+ |In RSpec 2.99, to maintain compatibility with RSpec 3 you need to either set
25
+ |this config option to `false` OR set this to `true` and update your
26
+ |`any_instance` implementation blocks to account for the first block argument
27
+ |being the receiving instance.
28
+ END
29
+ set_config!(:yield_receiver_to_any_instance_implementation_blocks, boolean, comment)
15
30
  end
16
31
  end
17
32
  end
@@ -4,7 +4,7 @@ module Transpec
4
4
  # http://semver.org/
5
5
  module Version
6
6
  MAJOR = 2
7
- MINOR = 1
7
+ MINOR = 2
8
8
  PATCH = 0
9
9
 
10
10
  def self.to_s
@@ -48,6 +48,13 @@ module Transpec
48
48
  File.read('spec/spec_helper.rb').should == <<-END
49
49
  RSpec.configure do |config|
50
50
  config.mock_with :rspec do |mocks|
51
+ # In RSpec 3, `any_instance` implementation blocks will be yielded the receiving
52
+ # instance as the first block argument to allow the implementation block to use
53
+ # the state of the receiver.
54
+ # In RSpec 2.99, to maintain compatibility with RSpec 3 you need to either set
55
+ # this config option to `false` OR set this to `true` and update your
56
+ # `any_instance` implementation blocks to account for the first block argument
57
+ # being the receiving instance.
51
58
  mocks.yield_receiver_to_any_instance_implementation_blocks = true
52
59
  end
53
60
  end
@@ -97,6 +104,13 @@ module Transpec
97
104
  File.read(spec_helper_path).should == <<-END
98
105
  RSpec.configure do |config|
99
106
  config.mock_with :rspec do |mocks|
107
+ # In RSpec 3, `any_instance` implementation blocks will be yielded the receiving
108
+ # instance as the first block argument to allow the implementation block to use
109
+ # the state of the receiver.
110
+ # In RSpec 2.99, to maintain compatibility with RSpec 3 you need to either set
111
+ # this config option to `false` OR set this to `true` and update your
112
+ # `any_instance` implementation blocks to account for the first block argument
113
+ # being the receiving instance.
100
114
  mocks.yield_receiver_to_any_instance_implementation_blocks = true
101
115
  end
102
116
  end
@@ -172,13 +172,34 @@ module Transpec
172
172
  end
173
173
  end
174
174
 
175
- describe '-p/--no-parentheses-matcher-arg option' do
175
+ describe '-p/--no-parens-matcher-arg option' do
176
+ let(:args) { ['--no-parens-matcher-arg'] }
177
+
178
+ it 'sets Config#parenthesize_matcher_arg? false' do
179
+ parser.parse(args)
180
+ config.parenthesize_matcher_arg.should be_false
181
+ end
182
+ end
183
+
184
+ describe '--no-parentheses-matcher-arg option' do
176
185
  let(:args) { ['--no-parentheses-matcher-arg'] }
177
186
 
187
+ before do
188
+ parser.stub(:warn)
189
+ end
190
+
178
191
  it 'sets Config#parenthesize_matcher_arg? false' do
179
192
  parser.parse(args)
180
193
  config.parenthesize_matcher_arg.should be_false
181
194
  end
195
+
196
+ it 'is deprecated' do
197
+ parser.should_receive(:warn) do |message|
198
+ message.should =~ /--no-parentheses-matcher-arg.+deprecated/i
199
+ end
200
+
201
+ parser.parse(args)
202
+ end
182
203
  end
183
204
 
184
205
  describe '--no-color option' do
@@ -92,6 +92,34 @@ module Transpec
92
92
  record.converted_syntax.should == "describe '#attr' do subject { super().attr }; it { } end"
93
93
  end
94
94
 
95
+ context 'and there are consecutive blanks between the #its and the block' do
96
+ let(:source) do
97
+ <<-END
98
+ describe 'example' do
99
+ subject { ['foo'] }
100
+ its(:size) { should == 1 }
101
+ end
102
+ END
103
+ end
104
+
105
+ let(:expected_source) do
106
+ <<-END
107
+ describe 'example' do
108
+ subject { ['foo'] }
109
+
110
+ describe '#size' do
111
+ subject { super().size }
112
+ it { should == 1 }
113
+ end
114
+ end
115
+ END
116
+ end
117
+
118
+ it 'removes the redundant blanks' do
119
+ rewritten_source.should == expected_source
120
+ end
121
+ end
122
+
95
123
  context 'and there is no blank line before #its' do
96
124
  context 'and the indentation level of the previous line is same as the target line' do
97
125
  let(:source) do
@@ -25,8 +25,24 @@ module Transpec
25
25
  let(:expected_source) do
26
26
  <<-END
27
27
  RSpec.configure do |config|
28
+ # Setting this config option `false` removes rspec-core's monkey patching of the
29
+ # top level methods like `describe`, `shared_examples_for` and `shared_context`
30
+ # on `main` and `Module`. The methods are always available through the `RSpec`
31
+ # module like `RSpec.describe` regardless of this setting.
32
+ # For backwards compatibility this defaults to `true`.
33
+ #
34
+ # https://relishapp.com/rspec/rspec-core/v/3-0/docs/configuration/global-namespace-dsl
28
35
  config.expose_dsl_globally = true
29
36
 
37
+ # rspec-rails 3 will no longer automatically infer an example group's spec type
38
+ # from the file location. You can explicitly opt-in to the feature using this
39
+ # config option.
40
+ # To explicitly tag specs without using automatic inference, set the `:type`
41
+ # metadata manually:
42
+ #
43
+ # describe ThingsController, :type => :controller do
44
+ # # Equivalent to being in spec/controllers
45
+ # end
30
46
  config.infer_spec_type_from_file_location!
31
47
  end
32
48
  END
@@ -75,12 +91,19 @@ module Transpec
75
91
  let(:expected_source) do
76
92
  <<-END
77
93
  RSpec.configure do |config|
94
+ # Setting this config option `false` removes rspec-core's monkey patching of the
95
+ # top level methods like `describe`, `shared_examples_for` and `shared_context`
96
+ # on `main` and `Module`. The methods are always available through the `RSpec`
97
+ # module like `RSpec.describe` regardless of this setting.
98
+ # For backwards compatibility this defaults to `true`.
99
+ #
100
+ # https://relishapp.com/rspec/rspec-core/v/3-0/docs/configuration/global-namespace-dsl
78
101
  config.expose_dsl_globally = true
79
102
  end
80
103
  END
81
104
  end
82
105
 
83
- it 'adds #expose_dsl_globally= statement' do
106
+ it 'adds #expose_dsl_globally= statement along with comment' do
84
107
  rewritten_source.should == expected_source
85
108
  end
86
109
  end
@@ -99,6 +122,13 @@ module Transpec
99
122
  RSpec.configure do |config|
100
123
  config.foo = 1
101
124
 
125
+ # Setting this config option `false` removes rspec-core's monkey patching of the
126
+ # top level methods like `describe`, `shared_examples_for` and `shared_context`
127
+ # on `main` and `Module`. The methods are always available through the `RSpec`
128
+ # module like `RSpec.describe` regardless of this setting.
129
+ # For backwards compatibility this defaults to `true`.
130
+ #
131
+ # https://relishapp.com/rspec/rspec-core/v/3-0/docs/configuration/global-namespace-dsl
102
132
  config.expose_dsl_globally = true
103
133
  end
104
134
  END
@@ -126,12 +156,21 @@ module Transpec
126
156
  let(:expected_source) do
127
157
  <<-END
128
158
  RSpec.configure do |config|
159
+ # rspec-rails 3 will no longer automatically infer an example group's spec type
160
+ # from the file location. You can explicitly opt-in to the feature using this
161
+ # config option.
162
+ # To explicitly tag specs without using automatic inference, set the `:type`
163
+ # metadata manually:
164
+ #
165
+ # describe ThingsController, :type => :controller do
166
+ # # Equivalent to being in spec/controllers
167
+ # end
129
168
  config.infer_spec_type_from_file_location!
130
169
  end
131
170
  END
132
171
  end
133
172
 
134
- it 'adds #infer_spec_type_from_file_location! statement' do
173
+ it 'adds #infer_spec_type_from_file_location! statement along with comment' do
135
174
  rewritten_source.should == expected_source
136
175
  end
137
176
  end
@@ -174,6 +213,15 @@ module Transpec
174
213
  end
175
214
 
176
215
  RSpec.configure do |config|
216
+ # rspec-rails 3 will no longer automatically infer an example group's spec type
217
+ # from the file location. You can explicitly opt-in to the feature using this
218
+ # config option.
219
+ # To explicitly tag specs without using automatic inference, set the `:type`
220
+ # metadata manually:
221
+ #
222
+ # describe ThingsController, :type => :controller do
223
+ # # Equivalent to being in spec/controllers
224
+ # end
177
225
  config.infer_spec_type_from_file_location!
178
226
  end
179
227
  END
@@ -498,13 +546,20 @@ module Transpec
498
546
  <<-END
499
547
  RSpec.configure do |config|
500
548
  config.mock_with :rspec do |c|
549
+ # In RSpec 3, `any_instance` implementation blocks will be yielded the receiving
550
+ # instance as the first block argument to allow the implementation block to use
551
+ # the state of the receiver.
552
+ # In RSpec 2.99, to maintain compatibility with RSpec 3 you need to either set
553
+ # this config option to `false` OR set this to `true` and update your
554
+ # `any_instance` implementation blocks to account for the first block argument
555
+ # being the receiving instance.
501
556
  c.yield_receiver_to_any_instance_implementation_blocks = true
502
557
  end
503
558
  end
504
559
  END
505
560
  end
506
561
 
507
- it 'adds #yield_receiver_to_any_instance_implementation_blocks= statement' do
562
+ it 'adds #yield_receiver_to_any_instance_implementation_blocks= statement along with comment' do
508
563
  rewritten_source.should == expected_source
509
564
  end
510
565
  end
@@ -523,6 +578,13 @@ module Transpec
523
578
  <<-END
524
579
  RSpec.configure do |config|
525
580
  config.mock_with :rspec do |mocks|
581
+ # In RSpec 3, `any_instance` implementation blocks will be yielded the receiving
582
+ # instance as the first block argument to allow the implementation block to use
583
+ # the state of the receiver.
584
+ # In RSpec 2.99, to maintain compatibility with RSpec 3 you need to either set
585
+ # this config option to `false` OR set this to `true` and update your
586
+ # `any_instance` implementation blocks to account for the first block argument
587
+ # being the receiving instance.
526
588
  mocks.yield_receiver_to_any_instance_implementation_blocks = true
527
589
  end
528
590
  end
@@ -530,7 +592,7 @@ module Transpec
530
592
  end
531
593
 
532
594
  it 'adds #mock_with block ' \
533
- 'and #yield_receiver_to_any_instance_implementation_blocks= statement' do
595
+ 'and #yield_receiver_to_any_instance_implementation_blocks= statement along with comment' do
534
596
  rewritten_source.should == expected_source
535
597
  end
536
598
 
@@ -546,6 +608,13 @@ module Transpec
546
608
  <<-END
547
609
  RSpec.configure do |mocks|
548
610
  mocks.mock_with :rspec do |config|
611
+ # In RSpec 3, `any_instance` implementation blocks will be yielded the receiving
612
+ # instance as the first block argument to allow the implementation block to use
613
+ # the state of the receiver.
614
+ # In RSpec 2.99, to maintain compatibility with RSpec 3 you need to either set
615
+ # this config option to `false` OR set this to `true` and update your
616
+ # `any_instance` implementation blocks to account for the first block argument
617
+ # being the receiving instance.
549
618
  config.yield_receiver_to_any_instance_implementation_blocks = true
550
619
  end
551
620
  end
@@ -576,9 +645,23 @@ module Transpec
576
645
  let(:expected_source) do
577
646
  <<-END
578
647
  RSpec.configure do |config|
648
+ # Setting this config option `false` removes rspec-core's monkey patching of the
649
+ # top level methods like `describe`, `shared_examples_for` and `shared_context`
650
+ # on `main` and `Module`. The methods are always available through the `RSpec`
651
+ # module like `RSpec.describe` regardless of this setting.
652
+ # For backwards compatibility this defaults to `true`.
653
+ #
654
+ # https://relishapp.com/rspec/rspec-core/v/3-0/docs/configuration/global-namespace-dsl
579
655
  config.expose_dsl_globally = true
580
656
 
581
657
  config.mock_with :rspec do |mocks|
658
+ # In RSpec 3, `any_instance` implementation blocks will be yielded the receiving
659
+ # instance as the first block argument to allow the implementation block to use
660
+ # the state of the receiver.
661
+ # In RSpec 2.99, to maintain compatibility with RSpec 3 you need to either set
662
+ # this config option to `false` OR set this to `true` and update your
663
+ # `any_instance` implementation blocks to account for the first block argument
664
+ # being the receiving instance.
582
665
  mocks.yield_receiver_to_any_instance_implementation_blocks = false
583
666
  end
584
667
  end
data/transpec.gemspec CHANGED
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
29
29
  spec.add_runtime_dependency 'activesupport', '>= 3.0', '< 5.0'
30
30
 
31
31
  spec.add_development_dependency 'rake', '~> 10.1'
32
- spec.add_development_dependency 'rspec', '~> 2.14'
32
+ spec.add_development_dependency 'rspec', '~> 2.14.0'
33
33
  spec.add_development_dependency 'fuubar', '~> 1.3'
34
34
  spec.add_development_dependency 'simplecov', '~> 0.7'
35
35
  spec.add_development_dependency 'rubocop', '~> 0.19'
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: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuji Nakayama
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-23 00:00:00.000000000 Z
11
+ date: 2014-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -118,14 +118,14 @@ dependencies:
118
118
  requirements:
119
119
  - - "~>"
120
120
  - !ruby/object:Gem::Version
121
- version: '2.14'
121
+ version: 2.14.0
122
122
  type: :development
123
123
  prerelease: false
124
124
  version_requirements: !ruby/object:Gem::Requirement
125
125
  requirements:
126
126
  - - "~>"
127
127
  - !ruby/object:Gem::Version
128
- version: '2.14'
128
+ version: 2.14.0
129
129
  - !ruby/object:Gem::Dependency
130
130
  name: fuubar
131
131
  requirement: !ruby/object:Gem::Requirement