shoulda 3.5.0 → 3.6.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.
Files changed (54) hide show
  1. checksums.yaml +6 -14
  2. data/.gitignore +7 -7
  3. data/.hound.yml +3 -0
  4. data/.hound/ruby.yml +1042 -0
  5. data/.rubocop.yml +13 -0
  6. data/.travis.yml +11 -7
  7. data/Appraisals +13 -10
  8. data/CONTRIBUTING.md +6 -1
  9. data/Gemfile +8 -1
  10. data/README.md +58 -73
  11. data/Rakefile +21 -12
  12. data/gemfiles/4.2.gemfile +17 -0
  13. data/gemfiles/4.2.gemfile.lock +174 -0
  14. data/gemfiles/5.0.gemfile +17 -0
  15. data/gemfiles/5.0.gemfile.lock +179 -0
  16. data/lib/shoulda/version.rb +1 -1
  17. data/shoulda.gemspec +23 -23
  18. data/test/acceptance/rails_integration_test.rb +76 -0
  19. data/test/acceptance_test_helper.rb +17 -0
  20. data/test/report_warnings.rb +7 -0
  21. data/test/support/acceptance/add_shoulda_to_project.rb +78 -0
  22. data/test/support/acceptance/helpers.rb +19 -0
  23. data/test/support/acceptance/helpers/active_model_helpers.rb +11 -0
  24. data/test/support/acceptance/helpers/array_helpers.rb +13 -0
  25. data/test/support/acceptance/helpers/base_helpers.rb +14 -0
  26. data/test/support/acceptance/helpers/command_helpers.rb +54 -0
  27. data/test/support/acceptance/helpers/file_helpers.rb +19 -0
  28. data/test/support/acceptance/helpers/gem_helpers.rb +31 -0
  29. data/test/support/acceptance/helpers/pluralization_helpers.rb +13 -0
  30. data/test/support/acceptance/helpers/step_helpers.rb +69 -0
  31. data/test/support/acceptance/matchers/have_output.rb +31 -0
  32. data/test/support/acceptance/matchers/indicate_number_of_tests_was_run_matcher.rb +54 -0
  33. data/test/support/acceptance/matchers/indicate_that_tests_were_run_matcher.rb +75 -0
  34. data/test/support/tests/bundle.rb +94 -0
  35. data/test/support/tests/command_runner.rb +230 -0
  36. data/test/support/tests/current_bundle.rb +61 -0
  37. data/test/support/tests/filesystem.rb +100 -0
  38. data/test/support/tests/version.rb +45 -0
  39. data/test/test_helper.rb +18 -0
  40. data/test/warnings_spy.rb +62 -0
  41. data/test/warnings_spy/filesystem.rb +45 -0
  42. data/test/warnings_spy/partitioner.rb +36 -0
  43. data/test/warnings_spy/reader.rb +53 -0
  44. data/test/warnings_spy/reporter.rb +88 -0
  45. metadata +80 -121
  46. data/features/rails_integration.feature +0 -87
  47. data/features/step_definitions/rails_steps.rb +0 -77
  48. data/features/support/env.rb +0 -14
  49. data/gemfiles/3.0.gemfile +0 -7
  50. data/gemfiles/3.0.gemfile.lock +0 -127
  51. data/gemfiles/3.1.gemfile +0 -9
  52. data/gemfiles/3.1.gemfile.lock +0 -148
  53. data/gemfiles/3.2.gemfile +0 -9
  54. data/gemfiles/3.2.gemfile.lock +0 -146
@@ -0,0 +1,13 @@
1
+ inherit_from: .hound/ruby.yml
2
+ Style/AlignParameters:
3
+ EnforcedStyle: with_fixed_indentation
4
+ Style/CollectionMethods:
5
+ PreferredMethods:
6
+ find: detect
7
+ reduce: inject
8
+ collect: map
9
+ find_all: select
10
+ Style/FrozenStringLiteralComment:
11
+ Enabled: false
12
+ Style/StringLiterals:
13
+ EnforcedStyle: single_quotes
@@ -1,8 +1,12 @@
1
+ language: ruby
2
+ sudo: false
3
+ cache: bundler
4
+ script: "bundle exec rake"
1
5
  rvm:
2
- - 1.8.7
3
- - 1.9.3
4
- - 2.0.0
5
-
6
- matrix:
7
- allow_failures:
8
- - rvm: 1.8.7
6
+ - 2.2.6
7
+ - 2.3.3
8
+ - 2.4.0
9
+ - 2.5.1
10
+ gemfile:
11
+ - gemfiles/4.2.gemfile
12
+ - gemfiles/5.0.gemfile
data/Appraisals CHANGED
@@ -1,15 +1,18 @@
1
- appraise '3.0' do
2
- gem 'rails', '3.0.12'
1
+ shared_dependencies = proc do
2
+ gem 'listen'
3
+ gem 'sass-rails'
4
+ gem 'sqlite3'
5
+ gem 'rspec', '~> 3.0'
6
+ gem 'shoulda-context'
7
+ gem 'shoulda-matchers', '~> 3.0'
3
8
  end
4
9
 
5
- appraise '3.1' do
6
- gem 'rails', '3.1.4'
7
- gem 'jquery-rails'
8
- gem 'sass-rails'
10
+ appraise '4.2' do
11
+ instance_eval(&shared_dependencies)
12
+ gem 'rails', '4.2.10'
9
13
  end
10
14
 
11
- appraise '3.2' do
12
- gem 'rails', '3.2.3'
13
- gem 'jquery-rails'
14
- gem 'sass-rails'
15
+ appraise '5.0' do
16
+ instance_eval(&shared_dependencies)
17
+ gem 'rails', '5.0.1'
15
18
  end
@@ -1,4 +1,9 @@
1
- We love pull requests. Here's a quick guide:
1
+ We love pull requests from everyone. By participating in this project, you
2
+ agree to abide by the thoughtbot [code of conduct].
3
+
4
+ [code of conduct]: https://thoughtbot.com/open-source-code-of-conduct
5
+
6
+ Here's a quick guide:
2
7
 
3
8
  1. Fork the repo.
4
9
 
data/Gemfile CHANGED
@@ -1,3 +1,10 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gemspec
3
+ gem 'appraisal', '~> 2.1'
4
+ gem 'rails', '>= 4.2', '< 6'
5
+ gem 'pry'
6
+ gem 'pry-byebug'
7
+ gem 'sqlite3', '~> 1.3.11'
8
+ gem 'minitest', '~> 5.0'
9
+ gem 'minitest-reporters', '~> 1.0'
10
+ gem 'm'
data/README.md CHANGED
@@ -1,103 +1,88 @@
1
- # shoulda [![Gem Version](https://badge.fury.io/rb/shoulda.png)](http://badge.fury.io/rb/shoulda) [![Build Status](https://secure.travis-ci.org/thoughtbot/shoulda.png)](http://travis-ci.org/thoughtbot/shoulda)
1
+ # Shoulda [![Gem Version][version-badge]][rubygems] [![Build Status][travis-badge]][travis] ![Downloads][downloads-badge]
2
2
 
3
- The shoulda gem is a meta gem with two dependencies:
3
+ [version-badge]: http://img.shields.io/gem/v/shoulda.svg
4
+ [rubygems]: http://rubygems.org/gems/shoulda
5
+ [travis-badge]: http://img.shields.io/travis/thoughtbot/shoulda/master.svg
6
+ [travis]: http://travis-ci.org/thoughtbot/shoulda
7
+ [downloads-badge]: http://img.shields.io/gem/dtv/shoulda.svg
4
8
 
5
- * [shoulda-context](https://github.com/thoughtbot/shoulda-context) ([official documentation](http://rubydoc.info/github/thoughtbot/shoulda-context/master/frames))
6
- * [shoulda-matchers](https://github.com/thoughtbot/shoulda-matchers) ([official documentation](http://rubydoc.info/github/thoughtbot/shoulda-matchers/master/frames))
9
+ Shoulda helps you write more understandable, maintainable Rails-specific tests
10
+ using Minitest.
7
11
 
8
- The following describes different use cases and combinations.
12
+ The `shoulda` gem doesn't contain any code of its own; it actually brings
13
+ behavior from two other gems:
9
14
 
10
- rspec with shoulda-matchers
11
- ---------------------------
15
+ * [Shoulda Context]
16
+ * [Shoulda Matchers]
12
17
 
13
- This is what thoughtbot currently does. We write tests like:
18
+ See the READMEs for these projects for more information.
14
19
 
15
- ```ruby
16
- describe Post do
17
- it { should belong_to(:user) }
18
- it { should validate_presence_of(:title) }
19
- end
20
- ```
21
-
22
- The belong_to and validate_presence_of methods are the matchers.
23
- All matchers are Rails 3-specific.
20
+ [Shoulda Context]: https://github.com/thoughtbot/shoulda-context
21
+ [Shoulda Matchers]: https://github.com/thoughtbot/shoulda-matchers
24
22
 
25
- Add rspec-rails and shoulda-matchers to the project's Gemfile:
23
+ ## Overview
26
24
 
27
25
  ```ruby
28
- group :test do
29
- gem 'rspec-rails'
30
- gem 'shoulda-matchers'
31
- end
32
- ```
26
+ require "test_helper"
33
27
 
34
- test/unit with shoulda
35
- ----------------------
28
+ class UserTest < ActiveSupport::TestCase
29
+ context "associations" do
30
+ should have_many(:posts)
31
+ end
36
32
 
37
- For the folks who prefer Test::Unit, they'd write tests like:
33
+ context "validations" do
34
+ should validate_presence_of(:email)
35
+ should allow_value("user@example.com").for(:email)
36
+ should_not allow_value("not-an-email").for(:email)
37
+ end
38
38
 
39
- ```ruby
40
- class UserTest < Test::Unit::TestCase
41
- should have_many(:posts)
42
- should_not allow_value("blah").for(:email)
39
+ context "#name" do
40
+ should "consist of first and last name" do
41
+ user = User.new(first_name: "John", last_name: "Smith")
42
+ assert_equal "John Smith", user.name
43
+ end
44
+ end
43
45
  end
44
46
  ```
45
47
 
46
- The have_many and allow_value methods are the same kind of matchers
47
- seen in the RSpec example. They come from the shoulda-matchers gem.
48
+ Here, the `context` and `should` methods come from Shoulda Context; matchers
49
+ (e.g. `have_many`, `allow_value`) come from Shoulda Matchers.
48
50
 
49
- Add shoulda to the project's Gemfile:
51
+ ## Compatibility
50
52
 
51
- ```ruby
52
- group :test do
53
- gem 'shoulda'
54
- end
55
- ```
56
-
57
- test/unit with shoulda-context
58
- ------------------------------
53
+ Shoulda is tested and supported against Ruby 2.2-2.4, Rails 4.2-5.0, and
54
+ Minitest 5.
59
55
 
60
- If you're not testing a Rails project or don't want to use the matchers,
61
- you can use shoulda-context independently to write tests like:
56
+ ## Contributing
62
57
 
63
- ```ruby
64
- class CalculatorTest < Test::Unit::TestCase
65
- context "a calculator" do
66
- setup do
67
- @calculator = Calculator.new
68
- end
58
+ Shoulda is open source, and we are grateful for [everyone][contributors] who's
59
+ contributed so far.
69
60
 
70
- should "add two numbers for the sum" do
71
- assert_equal 4, @calculator.sum(2, 2)
72
- end
61
+ If you'd like to contribute, please take a look at the
62
+ [instructions](CONTRIBUTING.md) for installing dependencies and crafting a good
63
+ pull request.
73
64
 
74
- should "multiply two numbers for the product" do
75
- assert_equal 10, @calculator.product(2, 5)
76
- end
77
- end
78
- end
79
- ```
65
+ [contributors]: https://github.com/thoughtbot/shoulda/contributors
80
66
 
81
- Add shoulda-context to the project's Gemfile:
67
+ ## Versioning
82
68
 
83
- ```ruby
84
- group :test do
85
- gem 'shoulda-context'
86
- end
87
- ```
69
+ Shoulda follows Semantic Versioning 2.0 as defined at <http://semver.org>.
88
70
 
89
- Credits
90
- -------
71
+ ## License
91
72
 
92
- ![thoughtbot](http://thoughtbot.com/assets/tm/logo.png)
73
+ Shoulda is copyright © 2006-2017 [thoughtbot, inc][thoughtbot]. It is free
74
+ software, and may be redistributed under the terms specified in the
75
+ [MIT-LICENSE](MIT-LICENSE) file.
93
76
 
94
- Shoulda is maintained and funded by [thoughtbot, inc](http://thoughtbot.com/community)
77
+ ## About thoughtbot
95
78
 
96
- Thank you to all [the contributors](https://github.com/thoughtbot/shoulda/contributors)!
79
+ [<img src="http://presskit.thoughtbot.com/images/signature.svg" width="250" alt="thoughtbot logo">][thoughtbot]
97
80
 
98
- The names and logos for thoughtbot are trademarks of thoughtbot, inc.
81
+ Shoulda is maintained and funded by thoughtbot, inc. The names and logos for
82
+ thoughtbot are trademarks of thoughtbot, inc.
99
83
 
100
- License
101
- -------
84
+ We are passionate about open source software. See [our other
85
+ projects][community]. We are [available for hire][thoughtbot].
102
86
 
103
- Shoulda is Copyright © 2006-2013 Tammer Saleh and thoughtbot, inc. It is free software, and may be redistributed under the terms specified in the MIT-LICENSE file.
87
+ [community]: https://thoughtbot.com/community?utm_source=github
88
+ [thoughtbot]: https://thoughtbot.com?utm_source=github
data/Rakefile CHANGED
@@ -1,17 +1,26 @@
1
- require 'bundler/setup'
2
- require 'bundler/gem_tasks'
3
- require 'cucumber/rake/task'
4
1
  require 'appraisal'
2
+ require 'bundler/gem_tasks'
3
+ require 'bundler/setup'
4
+ require 'rake/testtask'
5
+ require_relative 'test/support/tests/current_bundle'
5
6
 
6
- Cucumber::Rake::Task.new do |t|
7
- t.fork = true
8
- t.cucumber_opts = ['--format', (ENV['CUCUMBER_FORMAT'] || 'progress')]
7
+ Rake::TestTask.new('test:acceptance') do |t|
8
+ t.libs << 'test'
9
+ # t.ruby_opts += ['-w', '-r', './test/report_warnings']
10
+ t.ruby_opts += ['-w']
11
+ t.pattern = 'test/acceptance/**/*_test.rb'
12
+ t.verbose = false
9
13
  end
10
14
 
11
- desc 'Test the plugin under all supported Rails versions.'
12
- task :all => ["appraisal:cleanup", "appraisal:install"] do
13
- exec('rake appraisal cucumber')
15
+ task :default do
16
+ if Tests::CurrentBundle.instance.appraisal_in_use?
17
+ sh 'rake test:acceptance --trace'
18
+ else
19
+ if ENV['CI']
20
+ exec "appraisal install && appraisal rake --trace"
21
+ else
22
+ appraisal = Tests::CurrentBundle.instance.latest_appraisal
23
+ exec "appraisal install && appraisal #{appraisal} rake --trace"
24
+ end
25
+ end
14
26
  end
15
-
16
- desc 'Default: run cucumber features'
17
- task :default => [:all]
@@ -0,0 +1,17 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "appraisal", "~> 2.1"
6
+ gem "rails", "4.2.10"
7
+ gem "pry"
8
+ gem "pry-byebug"
9
+ gem "sqlite3"
10
+ gem "minitest", "~> 5.0"
11
+ gem "minitest-reporters", "~> 1.0"
12
+ gem "m"
13
+ gem "listen"
14
+ gem "sass-rails"
15
+ gem "rspec", "~> 3.0"
16
+ gem "shoulda-context"
17
+ gem "shoulda-matchers", "~> 3.0"
@@ -0,0 +1,174 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ actionmailer (4.2.10)
5
+ actionpack (= 4.2.10)
6
+ actionview (= 4.2.10)
7
+ activejob (= 4.2.10)
8
+ mail (~> 2.5, >= 2.5.4)
9
+ rails-dom-testing (~> 1.0, >= 1.0.5)
10
+ actionpack (4.2.10)
11
+ actionview (= 4.2.10)
12
+ activesupport (= 4.2.10)
13
+ rack (~> 1.6)
14
+ rack-test (~> 0.6.2)
15
+ rails-dom-testing (~> 1.0, >= 1.0.5)
16
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
17
+ actionview (4.2.10)
18
+ activesupport (= 4.2.10)
19
+ builder (~> 3.1)
20
+ erubis (~> 2.7.0)
21
+ rails-dom-testing (~> 1.0, >= 1.0.5)
22
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
23
+ activejob (4.2.10)
24
+ activesupport (= 4.2.10)
25
+ globalid (>= 0.3.0)
26
+ activemodel (4.2.10)
27
+ activesupport (= 4.2.10)
28
+ builder (~> 3.1)
29
+ activerecord (4.2.10)
30
+ activemodel (= 4.2.10)
31
+ activesupport (= 4.2.10)
32
+ arel (~> 6.0)
33
+ activesupport (4.2.10)
34
+ i18n (~> 0.7)
35
+ minitest (~> 5.1)
36
+ thread_safe (~> 0.3, >= 0.3.4)
37
+ tzinfo (~> 1.1)
38
+ ansi (1.5.0)
39
+ appraisal (2.1.0)
40
+ bundler
41
+ rake
42
+ thor (>= 0.14.0)
43
+ arel (6.0.4)
44
+ builder (3.2.3)
45
+ byebug (9.0.6)
46
+ coderay (1.1.2)
47
+ concurrent-ruby (1.0.4)
48
+ crass (1.0.4)
49
+ diff-lcs (1.3)
50
+ erubis (2.7.0)
51
+ ffi (1.9.17)
52
+ globalid (0.4.1)
53
+ activesupport (>= 4.2.0)
54
+ i18n (0.9.5)
55
+ concurrent-ruby (~> 1.0)
56
+ listen (3.1.5)
57
+ rb-fsevent (~> 0.9, >= 0.9.4)
58
+ rb-inotify (~> 0.9, >= 0.9.7)
59
+ ruby_dep (~> 1.2)
60
+ loofah (2.2.2)
61
+ crass (~> 1.0.2)
62
+ nokogiri (>= 1.5.9)
63
+ m (1.5.0)
64
+ method_source (>= 0.6.7)
65
+ rake (>= 0.9.2.2)
66
+ mail (2.7.0)
67
+ mini_mime (>= 0.1.1)
68
+ method_source (0.8.2)
69
+ mini_mime (1.0.0)
70
+ mini_portile2 (2.3.0)
71
+ minitest (5.10.1)
72
+ minitest-reporters (1.1.14)
73
+ ansi
74
+ builder
75
+ minitest (>= 5.0)
76
+ ruby-progressbar
77
+ nokogiri (1.8.4)
78
+ mini_portile2 (~> 2.3.0)
79
+ pry (0.11.0)
80
+ coderay (~> 1.1.0)
81
+ method_source (~> 0.8.1)
82
+ pry-byebug (3.4.2)
83
+ byebug (~> 9.0)
84
+ pry (~> 0.10)
85
+ rack (1.6.5)
86
+ rack-test (0.6.3)
87
+ rack (>= 1.0)
88
+ rails (4.2.10)
89
+ actionmailer (= 4.2.10)
90
+ actionpack (= 4.2.10)
91
+ actionview (= 4.2.10)
92
+ activejob (= 4.2.10)
93
+ activemodel (= 4.2.10)
94
+ activerecord (= 4.2.10)
95
+ activesupport (= 4.2.10)
96
+ bundler (>= 1.3.0, < 2.0)
97
+ railties (= 4.2.10)
98
+ sprockets-rails
99
+ rails-deprecated_sanitizer (1.0.3)
100
+ activesupport (>= 4.2.0.alpha)
101
+ rails-dom-testing (1.0.9)
102
+ activesupport (>= 4.2.0, < 5.0)
103
+ nokogiri (~> 1.6)
104
+ rails-deprecated_sanitizer (>= 1.0.1)
105
+ rails-html-sanitizer (1.0.4)
106
+ loofah (~> 2.2, >= 2.2.2)
107
+ railties (4.2.10)
108
+ actionpack (= 4.2.10)
109
+ activesupport (= 4.2.10)
110
+ rake (>= 0.8.7)
111
+ thor (>= 0.18.1, < 2.0)
112
+ rake (12.0.0)
113
+ rb-fsevent (0.9.8)
114
+ rb-inotify (0.9.8)
115
+ ffi (>= 0.5.0)
116
+ rspec (3.5.0)
117
+ rspec-core (~> 3.5.0)
118
+ rspec-expectations (~> 3.5.0)
119
+ rspec-mocks (~> 3.5.0)
120
+ rspec-core (3.5.4)
121
+ rspec-support (~> 3.5.0)
122
+ rspec-expectations (3.5.0)
123
+ diff-lcs (>= 1.2.0, < 2.0)
124
+ rspec-support (~> 3.5.0)
125
+ rspec-mocks (3.5.0)
126
+ diff-lcs (>= 1.2.0, < 2.0)
127
+ rspec-support (~> 3.5.0)
128
+ rspec-support (3.5.0)
129
+ ruby-progressbar (1.8.1)
130
+ ruby_dep (1.5.0)
131
+ sass (3.4.23)
132
+ sass-rails (5.0.6)
133
+ railties (>= 4.0.0, < 6)
134
+ sass (~> 3.1)
135
+ sprockets (>= 2.8, < 4.0)
136
+ sprockets-rails (>= 2.0, < 4.0)
137
+ tilt (>= 1.1, < 3)
138
+ shoulda-context (1.2.2)
139
+ shoulda-matchers (3.1.1)
140
+ activesupport (>= 4.0.0)
141
+ sprockets (3.7.1)
142
+ concurrent-ruby (~> 1.0)
143
+ rack (> 1, < 3)
144
+ sprockets-rails (3.2.0)
145
+ actionpack (>= 4.0)
146
+ activesupport (>= 4.0)
147
+ sprockets (>= 3.0.0)
148
+ sqlite3 (1.3.13)
149
+ thor (0.19.4)
150
+ thread_safe (0.3.6)
151
+ tilt (2.0.6)
152
+ tzinfo (1.2.5)
153
+ thread_safe (~> 0.1)
154
+
155
+ PLATFORMS
156
+ ruby
157
+
158
+ DEPENDENCIES
159
+ appraisal (~> 2.1)
160
+ listen
161
+ m
162
+ minitest (~> 5.0)
163
+ minitest-reporters (~> 1.0)
164
+ pry
165
+ pry-byebug
166
+ rails (= 4.2.10)
167
+ rspec (~> 3.0)
168
+ sass-rails
169
+ shoulda-context
170
+ shoulda-matchers (~> 3.0)
171
+ sqlite3
172
+
173
+ BUNDLED WITH
174
+ 1.16.2