rfix 1.0.15 → 1.1.0.pre.147

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -0
  3. data/.rspec +0 -1
  4. data/.rubocop.yml +46 -31
  5. data/.travis.yml +5 -12
  6. data/Gemfile.base +10 -3
  7. data/Gemfile.base.lock +172 -0
  8. data/Gemfile.lock +28 -7
  9. data/Guardfile +1 -1
  10. data/Makefile +4 -13
  11. data/Rakefile +16 -95
  12. data/ci/Gemfile.rubocop-0.80.lock +16 -1
  13. data/ci/Gemfile.rubocop-0.81.lock +16 -1
  14. data/ci/Gemfile.rubocop-0.82.lock +16 -1
  15. data/ci/Gemfile.rubocop-0.83.lock +19 -4
  16. data/ci/Gemfile.rubocop-0.84.lock +19 -4
  17. data/ci/Gemfile.rubocop-0.85.1.lock +19 -4
  18. data/ci/Gemfile.rubocop-0.85.lock +16 -1
  19. data/exe/rfix +18 -144
  20. data/lib/rfix.rb +10 -3
  21. data/lib/rfix/box.rb +112 -0
  22. data/lib/rfix/branch.rb +30 -0
  23. data/lib/rfix/branches/base.rb +29 -0
  24. data/lib/rfix/branches/head.rb +11 -0
  25. data/lib/rfix/branches/main.rb +33 -0
  26. data/lib/rfix/branches/name.rb +21 -0
  27. data/lib/rfix/branches/reference.rb +19 -0
  28. data/lib/rfix/branches/upstream.rb +11 -0
  29. data/lib/rfix/cmd.rb +9 -14
  30. data/lib/rfix/commands/all.rb +26 -0
  31. data/lib/rfix/commands/branch.rb +15 -0
  32. data/lib/rfix/commands/extensions/options.rb +8 -0
  33. data/lib/rfix/commands/help.rb +7 -0
  34. data/lib/rfix/commands/helper/args.rb +137 -0
  35. data/lib/rfix/commands/helper/help.rb +6 -0
  36. data/lib/rfix/commands/helper/loader.rb +6 -0
  37. data/lib/rfix/commands/helper/option.rb +0 -0
  38. data/lib/rfix/commands/helper/params.rb +0 -0
  39. data/lib/rfix/commands/helper/rubocop.rb +17 -0
  40. data/lib/rfix/commands/info.rb +30 -0
  41. data/lib/rfix/commands/lint.rb +23 -0
  42. data/lib/rfix/commands/local.rb +12 -0
  43. data/lib/rfix/commands/origin.rb +19 -0
  44. data/lib/rfix/commands/setup.rb +29 -0
  45. data/lib/rfix/commands/welcome.rb +24 -0
  46. data/lib/rfix/deleted.rb +13 -0
  47. data/lib/rfix/error.rb +2 -0
  48. data/lib/rfix/extensions/extensions.rb +4 -26
  49. data/lib/rfix/extensions/offense.rb +2 -1
  50. data/lib/rfix/extensions/string.rb +8 -0
  51. data/lib/rfix/file.rb +46 -0
  52. data/lib/rfix/file_cache.rb +59 -0
  53. data/lib/rfix/formatter.rb +37 -10
  54. data/lib/rfix/git_helper.rb +13 -1
  55. data/lib/rfix/log.rb +104 -7
  56. data/lib/rfix/no_file.rb +13 -0
  57. data/lib/rfix/rake/paths.rb +50 -0
  58. data/lib/rfix/rake/support.rb +75 -0
  59. data/lib/rfix/repository.rb +201 -0
  60. data/lib/rfix/rfix.rb +7 -198
  61. data/lib/rfix/tracked.rb +76 -0
  62. data/lib/rfix/tracked_file.rb +1 -1
  63. data/lib/rfix/untracked.rb +13 -0
  64. data/lib/rfix/version.rb +1 -1
  65. data/path.rb +7 -0
  66. data/rfix.gemspec +6 -2
  67. data/rugged.rb +206 -0
  68. data/tasks/bump.rake +11 -0
  69. data/tasks/bundle.rake +17 -0
  70. data/tasks/complex.rake +54 -0
  71. data/tasks/simple.rake +58 -0
  72. data/tasks/travis.rake +74 -0
  73. data/tasks/vendor.rake +34 -0
  74. metadata +136 -13
  75. data/file.rb +0 -1
  76. data/lib/rfix/gem_helper.rb +0 -12
  77. data/lib/rfix/git_file.rb +0 -36
  78. data/lib/rfix/rake_helper.rb +0 -56
  79. data/lib/rfix/untracked_file.rb +0 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f66d49622b2d3173a8f76e81202218924859cfd4ca216887b9ff505bedf7d012
4
- data.tar.gz: 33f02bc18c137a7d6bd943de07d7947bb5c275cb99635743072daf30de66f1e8
3
+ metadata.gz: 146c6ec27a43d207f55a8c52da5d59b7033414b6f3b8219b79842b7ebdc0ff56
4
+ data.tar.gz: 56270507f4346f5a2b6747dcaca7e2f9376b578edef1673a6cbdb5a9cedd21ae
5
5
  SHA512:
6
- metadata.gz: ed91cea00b13371dd5faf6fbbd671409fda7886e21ba3e56fdabe9e923bcdbcebcbe2e4231d9be09f2508c701baf93c33e2597faa9afbfd7d9ee7cda78488597
7
- data.tar.gz: 0b723a5d0011bf4d0f3df50723baea13a562e1c1088a0092fb90ac962fc139b7cfd97749e402b6dcd977ca53bb4fe683b6046024f1a0af415aa99bf8a8246bcc
6
+ metadata.gz: 5ca98082f6aabcc6475f4ca2688e67d8accbc6716f2c35ee709638e752632605d840f39243cc4aba65562f114769cec7336efe9b27d15d58358b10ba461279d1
7
+ data.tar.gz: 43b809200c5cba10cda32528aad9b79ea03a61ce63c5b1bcf4895215747be373ff24351e3d5ab6c8ab249b58b453d709ec55e594720414072395c68c961a06a5
data/.gitignore CHANGED
@@ -36,3 +36,8 @@ bin/ruby-parse
36
36
  bin/ruby-rewrite
37
37
  bin/thor
38
38
  ci/vendor/
39
+ git
40
+
41
+ spec/fixtures/complex.bundle
42
+ spec/fixtures/simple.bundle
43
+ spec/support/g.rb
data/.rspec CHANGED
@@ -1,3 +1,2 @@
1
1
  --color
2
2
  --require spec_helper
3
- --format doc
@@ -1,30 +1,10 @@
1
1
  AllCops:
2
2
  Exclude:
3
- - 'Rakefile'
4
- - 'Gemfile'
3
+ - 'ci/*'
5
4
  - 'bin/*'
6
5
  - 'vendor/bundle/**/*'
7
- - 'db/**/*'
8
6
  - 'node_modules/**/*'
9
- - 'spec/rails_helper.rb'
10
- - 'lib/tasks/*'
11
-
12
- Layout/LineLength:
13
- Max: 120
14
- Exclude:
15
- - 'config/**/*'
16
-
17
- Metrics/BlockLength:
18
- Exclude:
19
- - 'config/**/*'
20
- - 'spec/**/*'
21
- - 'lib/tasks/*'
22
- - 'lib/capistrano/**/*'
23
-
24
- Metrics/ClassLength:
25
- Max: 150
26
- Exclude:
27
- - 'config/**/*'
7
+ - 'spec/fixtures/**'
28
8
 
29
9
  Metrics/MethodLength:
30
10
  Enabled: false
@@ -38,15 +18,6 @@ Style/Documentation:
38
18
  Style/FrozenStringLiteralComment:
39
19
  Enabled: false
40
20
 
41
- Style/HashEachMethods:
42
- Enabled: true
43
-
44
- Style/HashTransformKeys:
45
- Enabled: true
46
-
47
- Style/HashTransformValues:
48
- Enabled: true
49
-
50
21
  Style/NumericLiterals:
51
22
  Enabled: false
52
23
 
@@ -70,3 +41,47 @@ Lint/AmbiguousBlockAssociation:
70
41
  Enabled: false
71
42
  Style/Semicolon:
72
43
  Enabled: false
44
+ Style/StructInheritance:
45
+ Enabled: false
46
+ Style/IfUnlessModifier:
47
+ Enabled: false
48
+ Layout/LineLength:
49
+ Enabled: false
50
+ Style/SymbolArray:
51
+ EnforcedStyle: brackets
52
+
53
+ Style/RedundantReturn:
54
+ Enabled: false
55
+ Style/EmptyLiteral:
56
+ Enabled: false
57
+
58
+ # TODOs
59
+ Metrics/BlockLength:
60
+ Enabled: false
61
+ Metrics/ClassLength:
62
+ Enabled: false
63
+ Style/MixinUsage:
64
+ Enabled: false
65
+ Naming/AccessorMethodName:
66
+ Enabled: false
67
+ Security/Eval:
68
+ Enabled: false
69
+ Style/OptionalArguments:
70
+ Enabled: false
71
+ Metrics/PerceivedComplexity:
72
+ Enabled: false
73
+ Metrics/ParameterLists:
74
+ Enabled: false
75
+ Metrics/CyclomaticComplexity:
76
+ Enabled: false
77
+ Style/FormatStringToken:
78
+ Enabled: false
79
+ Style/StderrPuts:
80
+ Enabled: false
81
+
82
+
83
+ Layout/ParameterAlignment:
84
+ EnforcedStyle: with_fixed_indentation
85
+ Layout/HashAlignment:
86
+ Enabled: false
87
+ EnforcedColonStyle: key
@@ -1,11 +1,4 @@
1
1
  language: ruby
2
- # cache:
3
- # bundler: true
4
- # directories:
5
- # - $HOME/.rvm
6
- # - $HOME/Library/Caches/Homebrew
7
- before_cache:
8
- - brew cleanup
9
2
  rvm:
10
3
  - 2.5.0
11
4
  - 2.6.2
@@ -23,14 +16,14 @@ gemfile:
23
16
  - ci/Gemfile.rubocop-0.85.1
24
17
  before_install:
25
18
  - yes | gem update --system --force
26
- - make dir fetch
27
19
  install:
28
20
  - bundle install
21
+ - gem install colorize
22
+ - gem install rake
23
+ - rake travis:setup
29
24
  script:
30
- - bundle exec rake git:config
31
- - bundle exec rake spec
32
- - bundle exec rake install
33
- - rfix info
25
+ - bundle exec rake travis:spec
26
+ - bundle exec rake travis:verify
34
27
  jobs:
35
28
  include:
36
29
  deploy:
@@ -1,7 +1,14 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- gem "guard", require: false
4
- gem "guard-rspec", require: false
5
- gem "gem-release", require: false
3
+
4
+ group :development do
5
+ gem "pry"
6
+ gem "colorize"
7
+ gem "faker"
8
+ gem "gem-release", require: false
9
+ gem "guard", require: false
10
+ gem "guard-rspec", require: false
11
+ gem "jsonpath"
12
+ end
6
13
 
7
14
  gemspec path: __dir__
@@ -0,0 +1,172 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ rfix (1.0.20)
5
+ cri (~> 2.15.10)
6
+ listen (~> 3.0)
7
+ rainbow (~> 3.0)
8
+ rouge (~> 3.20)
9
+ rubocop (>= 0.80)
10
+ rugged (~> 1.0.0)
11
+
12
+ GEM
13
+ remote: https://rubygems.org/
14
+ specs:
15
+ activesupport (6.0.3.2)
16
+ concurrent-ruby (~> 1.0, >= 1.0.2)
17
+ i18n (>= 0.7, < 2)
18
+ minitest (~> 5.1)
19
+ tzinfo (~> 1.1)
20
+ zeitwerk (~> 2.2, >= 2.2.2)
21
+ aruba (1.0.2)
22
+ childprocess (>= 2.0, < 5.0)
23
+ contracts (~> 0.16.0)
24
+ cucumber (>= 2.4, < 5.0)
25
+ ffi (~> 1.9)
26
+ rspec-expectations (~> 3.4)
27
+ thor (~> 1.0)
28
+ ast (2.4.1)
29
+ builder (3.2.4)
30
+ childprocess (4.0.0)
31
+ coderay (1.1.3)
32
+ colorize (0.8.1)
33
+ concurrent-ruby (1.1.6)
34
+ contracts (0.16.0)
35
+ cri (2.15.10)
36
+ cucumber (4.0.1)
37
+ builder (~> 3.2, >= 3.2.3)
38
+ cucumber-core (~> 7.0, >= 7.0.0)
39
+ cucumber-cucumber-expressions (~> 10.1, >= 10.1.0)
40
+ cucumber-gherkin (~> 13.0, >= 13.0.0)
41
+ cucumber-html-formatter (~> 6.0, >= 6.0.1)
42
+ cucumber-messages (~> 12.1, >= 12.1.1)
43
+ cucumber-wire (~> 3.0, >= 3.0.0)
44
+ diff-lcs (~> 1.3, >= 1.3, < 1.4)
45
+ multi_test (~> 0.1, >= 0.1.2)
46
+ sys-uname (~> 1.0, >= 1.0.2)
47
+ cucumber-core (7.0.0)
48
+ cucumber-gherkin (~> 13.0, >= 13.0.0)
49
+ cucumber-messages (~> 12.1, >= 12.1.1)
50
+ cucumber-tag-expressions (~> 2.0, >= 2.0.4)
51
+ cucumber-cucumber-expressions (10.2.1)
52
+ cucumber-gherkin (13.0.0)
53
+ cucumber-messages (~> 12.0, >= 12.0.0)
54
+ cucumber-html-formatter (6.0.3)
55
+ cucumber-messages (~> 12.1, >= 12.1.1)
56
+ cucumber-messages (12.2.0)
57
+ protobuf-cucumber (~> 3.10, >= 3.10.8)
58
+ cucumber-tag-expressions (2.0.4)
59
+ cucumber-wire (3.0.0)
60
+ cucumber-core (~> 7.0, >= 7.0.0)
61
+ cucumber-cucumber-expressions (~> 10.1, >= 10.1.0)
62
+ cucumber-messages (~> 12.1, >= 12.1.1)
63
+ diff-lcs (1.3)
64
+ faker (2.13.0)
65
+ i18n (>= 1.6, < 2)
66
+ ffi (1.13.1)
67
+ formatador (0.2.5)
68
+ gem-release (2.1.1)
69
+ git (1.7.0)
70
+ rchardet (~> 1.8)
71
+ guard (2.16.2)
72
+ formatador (>= 0.2.4)
73
+ listen (>= 2.7, < 4.0)
74
+ lumberjack (>= 1.0.12, < 2.0)
75
+ nenv (~> 0.1)
76
+ notiffany (~> 0.0)
77
+ pry (>= 0.9.12)
78
+ shellany (~> 0.0)
79
+ thor (>= 0.18.1)
80
+ guard-compat (1.2.1)
81
+ guard-rspec (4.7.3)
82
+ guard (~> 2.1)
83
+ guard-compat (~> 1.1)
84
+ rspec (>= 2.99.0, < 4.0)
85
+ i18n (1.8.3)
86
+ concurrent-ruby (~> 1.0)
87
+ listen (3.2.1)
88
+ rb-fsevent (~> 0.10, >= 0.10.3)
89
+ rb-inotify (~> 0.9, >= 0.9.10)
90
+ lumberjack (1.2.6)
91
+ method_source (1.0.0)
92
+ middleware (0.1.0)
93
+ minitest (5.14.1)
94
+ multi_test (0.1.2)
95
+ nenv (0.3.0)
96
+ notiffany (0.1.3)
97
+ nenv (~> 0.1)
98
+ shellany (~> 0.0)
99
+ parallel (1.19.2)
100
+ parser (2.7.1.4)
101
+ ast (~> 2.4.1)
102
+ protobuf-cucumber (3.10.8)
103
+ activesupport (>= 3.2)
104
+ middleware
105
+ thor
106
+ thread_safe
107
+ pry (0.13.1)
108
+ coderay (~> 1.1)
109
+ method_source (~> 1.0)
110
+ rainbow (3.0.0)
111
+ rake (12.3.3)
112
+ rb-fsevent (0.10.4)
113
+ rb-inotify (0.10.1)
114
+ ffi (~> 1.0)
115
+ rchardet (1.8.0)
116
+ regexp_parser (1.7.1)
117
+ rexml (3.2.4)
118
+ rouge (3.20.0)
119
+ rspec (3.9.0)
120
+ rspec-core (~> 3.9.0)
121
+ rspec-expectations (~> 3.9.0)
122
+ rspec-mocks (~> 3.9.0)
123
+ rspec-core (3.9.2)
124
+ rspec-support (~> 3.9.3)
125
+ rspec-expectations (3.9.2)
126
+ diff-lcs (>= 1.2.0, < 2.0)
127
+ rspec-support (~> 3.9.0)
128
+ rspec-mocks (3.9.1)
129
+ diff-lcs (>= 1.2.0, < 2.0)
130
+ rspec-support (~> 3.9.0)
131
+ rspec-support (3.9.3)
132
+ rubocop (0.86.0)
133
+ parallel (~> 1.10)
134
+ parser (>= 2.7.0.1)
135
+ rainbow (>= 2.2.2, < 4.0)
136
+ regexp_parser (>= 1.7)
137
+ rexml
138
+ rubocop-ast (>= 0.0.3, < 1.0)
139
+ ruby-progressbar (~> 1.7)
140
+ unicode-display_width (>= 1.4.0, < 2.0)
141
+ rubocop-ast (0.1.0)
142
+ parser (>= 2.7.0.1)
143
+ ruby-progressbar (1.10.1)
144
+ rugged (1.0.1)
145
+ shellany (0.0.1)
146
+ sys-uname (1.2.1)
147
+ ffi (>= 1.0.0)
148
+ thor (1.0.1)
149
+ thread_safe (0.3.6)
150
+ tzinfo (1.2.7)
151
+ thread_safe (~> 0.1)
152
+ unicode-display_width (1.7.0)
153
+ zeitwerk (2.3.0)
154
+
155
+ PLATFORMS
156
+ ruby
157
+
158
+ DEPENDENCIES
159
+ aruba (~> 1.0)
160
+ colorize
161
+ faker
162
+ gem-release
163
+ git (~> 1.7.0)
164
+ guard
165
+ guard-rspec
166
+ pry
167
+ rake (~> 12.3)
168
+ rfix!
169
+ rspec (~> 3.0)
170
+
171
+ BUNDLED WITH
172
+ 2.1.4
@@ -1,10 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rfix (1.0.15)
4
+ rfix (1.1.0)
5
+ cri (~> 2.15.10)
6
+ listen (~> 3.0)
5
7
  rainbow (~> 3.0)
6
8
  rouge (~> 3.20)
7
9
  rubocop (>= 0.80)
10
+ rugged (~> 1.0.0)
8
11
 
9
12
  GEM
10
13
  remote: https://rubygems.org/
@@ -26,9 +29,11 @@ GEM
26
29
  builder (3.2.4)
27
30
  childprocess (4.0.0)
28
31
  coderay (1.1.3)
32
+ colorize (0.8.1)
29
33
  concurrent-ruby (1.1.6)
30
34
  contracts (0.16.0)
31
- cucumber (4.0.0)
35
+ cri (2.15.10)
36
+ cucumber (4.0.1)
32
37
  builder (~> 3.2, >= 3.2.3)
33
38
  cucumber-core (~> 7.0, >= 7.0.0)
34
39
  cucumber-cucumber-expressions (~> 10.1, >= 10.1.0)
@@ -36,14 +41,14 @@ GEM
36
41
  cucumber-html-formatter (~> 6.0, >= 6.0.1)
37
42
  cucumber-messages (~> 12.1, >= 12.1.1)
38
43
  cucumber-wire (~> 3.0, >= 3.0.0)
39
- diff-lcs (~> 1.3, >= 1.3)
44
+ diff-lcs (~> 1.3, >= 1.3, < 1.4)
40
45
  multi_test (~> 0.1, >= 0.1.2)
41
46
  sys-uname (~> 1.0, >= 1.0.2)
42
47
  cucumber-core (7.0.0)
43
48
  cucumber-gherkin (~> 13.0, >= 13.0.0)
44
49
  cucumber-messages (~> 12.1, >= 12.1.1)
45
50
  cucumber-tag-expressions (~> 2.0, >= 2.0.4)
46
- cucumber-cucumber-expressions (10.2.0)
51
+ cucumber-cucumber-expressions (10.2.1)
47
52
  cucumber-gherkin (13.0.0)
48
53
  cucumber-messages (~> 12.0, >= 12.0.0)
49
54
  cucumber-html-formatter (6.0.3)
@@ -56,9 +61,13 @@ GEM
56
61
  cucumber-cucumber-expressions (~> 10.1, >= 10.1.0)
57
62
  cucumber-messages (~> 12.1, >= 12.1.1)
58
63
  diff-lcs (1.3)
64
+ faker (2.13.0)
65
+ i18n (>= 1.6, < 2)
59
66
  ffi (1.13.1)
60
67
  formatador (0.2.5)
61
68
  gem-release (2.1.1)
69
+ git (1.7.0)
70
+ rchardet (~> 1.8)
62
71
  guard (2.16.2)
63
72
  formatador (>= 0.2.4)
64
73
  listen (>= 2.7, < 4.0)
@@ -75,6 +84,9 @@ GEM
75
84
  rspec (>= 2.99.0, < 4.0)
76
85
  i18n (1.8.3)
77
86
  concurrent-ruby (~> 1.0)
87
+ jsonpath (1.0.5)
88
+ multi_json
89
+ to_regexp (~> 0.2.1)
78
90
  listen (3.2.1)
79
91
  rb-fsevent (~> 0.10, >= 0.10.3)
80
92
  rb-inotify (~> 0.9, >= 0.9.10)
@@ -82,6 +94,7 @@ GEM
82
94
  method_source (1.0.0)
83
95
  middleware (0.1.0)
84
96
  minitest (5.14.1)
97
+ multi_json (1.14.1)
85
98
  multi_test (0.1.2)
86
99
  nenv (0.3.0)
87
100
  notiffany (0.1.3)
@@ -103,9 +116,10 @@ GEM
103
116
  rb-fsevent (0.10.4)
104
117
  rb-inotify (0.10.1)
105
118
  ffi (~> 1.0)
119
+ rchardet (1.8.0)
106
120
  regexp_parser (1.7.1)
107
121
  rexml (3.2.4)
108
- rouge (3.20.0)
122
+ rouge (3.21.0)
109
123
  rspec (3.9.0)
110
124
  rspec-core (~> 3.9.0)
111
125
  rspec-expectations (~> 3.9.0)
@@ -119,23 +133,25 @@ GEM
119
133
  diff-lcs (>= 1.2.0, < 2.0)
120
134
  rspec-support (~> 3.9.0)
121
135
  rspec-support (3.9.3)
122
- rubocop (0.85.1)
136
+ rubocop (0.86.0)
123
137
  parallel (~> 1.10)
124
138
  parser (>= 2.7.0.1)
125
139
  rainbow (>= 2.2.2, < 4.0)
126
140
  regexp_parser (>= 1.7)
127
141
  rexml
128
- rubocop-ast (>= 0.0.3)
142
+ rubocop-ast (>= 0.0.3, < 1.0)
129
143
  ruby-progressbar (~> 1.7)
130
144
  unicode-display_width (>= 1.4.0, < 2.0)
131
145
  rubocop-ast (0.0.3)
132
146
  parser (>= 2.7.0.1)
133
147
  ruby-progressbar (1.10.1)
148
+ rugged (1.0.1)
134
149
  shellany (0.0.1)
135
150
  sys-uname (1.2.1)
136
151
  ffi (>= 1.0.0)
137
152
  thor (1.0.1)
138
153
  thread_safe (0.3.6)
154
+ to_regexp (0.2.1)
139
155
  tzinfo (1.2.7)
140
156
  thread_safe (~> 0.1)
141
157
  unicode-display_width (1.7.0)
@@ -146,9 +162,14 @@ PLATFORMS
146
162
 
147
163
  DEPENDENCIES
148
164
  aruba (~> 1.0)
165
+ colorize
166
+ faker
149
167
  gem-release
168
+ git (~> 1.7.0)
150
169
  guard
151
170
  guard-rspec
171
+ jsonpath
172
+ pry
152
173
  rake (~> 12.3)
153
174
  rfix!
154
175
  rspec (~> 3.0)