shoulda-matchers 1.4.1 → 1.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +2 -2
- data/NEWS.md +3 -0
- data/README.md +60 -41
- data/gemfiles/3.0.gemfile.lock +11 -12
- data/gemfiles/3.1.gemfile.lock +16 -17
- data/gemfiles/3.2.gemfile.lock +17 -18
- data/lib/shoulda/matchers/active_model.rb +2 -0
- data/lib/shoulda/matchers/active_model/disallow_value_matcher.rb +33 -0
- data/lib/shoulda/matchers/active_model/only_integer_matcher.rb +33 -0
- data/lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb +44 -25
- data/lib/shoulda/matchers/independent.rb +9 -0
- data/lib/shoulda/matchers/independent/delegate_matcher.rb +124 -0
- data/lib/shoulda/matchers/integrations/rspec.rb +5 -0
- data/lib/shoulda/matchers/integrations/test_unit.rb +11 -0
- data/lib/shoulda/matchers/version.rb +1 -1
- data/shoulda-matchers.gemspec +1 -1
- data/spec/shoulda/active_model/disallow_value_matcher_spec.rb +65 -0
- data/spec/shoulda/active_model/only_integer_matcher_spec.rb +69 -0
- data/spec/shoulda/active_model/validate_numericality_of_matcher_spec.rb +62 -12
- data/spec/shoulda/independent/delegate_matcher_spec.rb +183 -0
- metadata +28 -18
data/Gemfile.lock
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
shoulda-matchers (1.4.
|
4
|
+
shoulda-matchers (1.4.2)
|
5
5
|
activesupport (>= 3.0.0)
|
6
|
+
bourne (~> 1.1.2)
|
6
7
|
|
7
8
|
GEM
|
8
9
|
remote: http://rubygems.org/
|
@@ -137,7 +138,6 @@ DEPENDENCIES
|
|
137
138
|
activerecord-jdbcsqlite3-adapter
|
138
139
|
appraisal (~> 0.4.0)
|
139
140
|
aruba
|
140
|
-
bourne (~> 1.1.2)
|
141
141
|
bundler (~> 1.1)
|
142
142
|
cucumber (~> 1.1.9)
|
143
143
|
jdbc-sqlite3
|
data/NEWS.md
CHANGED
data/README.md
CHANGED
@@ -12,64 +12,83 @@ about using shoulda with Test::Unit.
|
|
12
12
|
|
13
13
|
Matchers to test associations:
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
```ruby
|
16
|
+
describe Post do
|
17
|
+
it { should belong_to(:user) }
|
18
|
+
it { should have_many(:tags).through(:taggings) }
|
19
|
+
end
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
|
21
|
+
describe User do
|
22
|
+
it { should have_many(:posts) }
|
23
|
+
end
|
24
|
+
```
|
23
25
|
|
24
26
|
## ActiveModel Matchers
|
25
27
|
|
26
28
|
Matchers to test validations and mass assignments:
|
27
29
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
30
|
+
```ruby
|
31
|
+
describe Post do
|
32
|
+
it { should validate_uniqueness_of(:title) }
|
33
|
+
it { should validate_uniqueness_of(:title).scoped_to(:user_id, :category_id) }
|
34
|
+
it { should validate_presence_of(:body).with_message(/wtf/) }
|
35
|
+
it { should validate_presence_of(:title) }
|
36
|
+
it { should validate_numericality_of(:user_id) }
|
37
|
+
it { should ensure_inclusion_of(:status).in_array(['draft', 'public']) }
|
38
|
+
end
|
39
|
+
|
40
|
+
describe User do
|
41
|
+
it { should_not allow_value("blah").for(:email) }
|
42
|
+
it { should allow_value("a@b.com").for(:email) }
|
43
|
+
it { should ensure_inclusion_of(:age).in_range(1..100) }
|
44
|
+
it { should_not allow_mass_assignment_of(:password) }
|
45
|
+
end
|
46
|
+
```
|
42
47
|
|
43
48
|
## ActionController Matchers
|
44
49
|
|
45
50
|
Matchers to test common patterns:
|
46
51
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
it { should assign_to(:user) }
|
54
|
-
it { should respond_with(:success) }
|
55
|
-
it { should render_template(:show) }
|
56
|
-
it { should_not set_the_flash }
|
57
|
-
end
|
52
|
+
```ruby
|
53
|
+
describe PostsController, "#show" do
|
54
|
+
context "for a fictional user" do
|
55
|
+
before do
|
56
|
+
get :show, :id => 1
|
58
57
|
end
|
59
58
|
|
59
|
+
it { should assign_to(:user) }
|
60
|
+
it { should respond_with(:success) }
|
61
|
+
it { should render_template(:show) }
|
62
|
+
it { should_not set_the_flash }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
```
|
66
|
+
|
67
|
+
## Independent Matchers
|
68
|
+
|
69
|
+
Matchers to test non-Rails-dependent code:
|
70
|
+
|
71
|
+
```ruby
|
72
|
+
describe Human do
|
73
|
+
it { should delegate_method(:work).to(:robot) }
|
74
|
+
end
|
75
|
+
```
|
76
|
+
|
60
77
|
## Installation
|
61
78
|
|
62
79
|
In Rails 3 and Bundler, add the following to your Gemfile:
|
63
80
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
81
|
+
```ruby
|
82
|
+
group :test do
|
83
|
+
gem "shoulda-matchers"
|
84
|
+
end
|
85
|
+
|
86
|
+
# rspec-rails needs to be in the development group so that Rails generators
|
87
|
+
# work.
|
88
|
+
group :development, :test do
|
89
|
+
gem "rspec-rails"
|
90
|
+
end
|
91
|
+
```
|
73
92
|
|
74
93
|
Shoulda will automatically include matchers into the appropriate example groups.
|
75
94
|
|
data/gemfiles/3.0.gemfile.lock
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: /Users/draper/Dropbox/Development/shoulda-matchers
|
3
3
|
specs:
|
4
|
-
shoulda-matchers (1.4.
|
4
|
+
shoulda-matchers (1.4.1)
|
5
5
|
activesupport (>= 3.0.0)
|
6
|
+
bourne (~> 1.1.2)
|
6
7
|
|
7
8
|
GEM
|
8
9
|
remote: http://rubygems.org/
|
@@ -38,16 +39,15 @@ GEM
|
|
38
39
|
bundler
|
39
40
|
rake
|
40
41
|
arel (2.0.10)
|
41
|
-
aruba (0.5.
|
42
|
-
childprocess (
|
42
|
+
aruba (0.5.1)
|
43
|
+
childprocess (~> 0.3.6)
|
43
44
|
cucumber (>= 1.1.1)
|
44
|
-
ffi (>= 1.0.11)
|
45
45
|
rspec-expectations (>= 2.7.0)
|
46
46
|
bourne (1.1.2)
|
47
47
|
mocha (= 0.10.5)
|
48
48
|
builder (2.1.2)
|
49
|
-
childprocess (0.
|
50
|
-
ffi (~> 1.0.6)
|
49
|
+
childprocess (0.3.6)
|
50
|
+
ffi (~> 1.0, >= 1.0.6)
|
51
51
|
cucumber (1.1.9)
|
52
52
|
builder (>= 2.1.2)
|
53
53
|
diff-lcs (>= 1.1.2)
|
@@ -57,7 +57,7 @@ GEM
|
|
57
57
|
diff-lcs (1.1.3)
|
58
58
|
erubis (2.6.6)
|
59
59
|
abstract (>= 1.0.0)
|
60
|
-
ffi (1.0
|
60
|
+
ffi (1.2.0)
|
61
61
|
gherkin (2.9.3)
|
62
62
|
json (>= 1.4.6)
|
63
63
|
i18n (0.5.0)
|
@@ -91,7 +91,7 @@ GEM
|
|
91
91
|
rake (>= 0.8.7)
|
92
92
|
rdoc (~> 3.4)
|
93
93
|
thor (~> 0.14.4)
|
94
|
-
rake (0.9.
|
94
|
+
rake (0.9.5)
|
95
95
|
rdoc (3.12)
|
96
96
|
json (~> 1.4)
|
97
97
|
rspec (2.8.0)
|
@@ -107,14 +107,14 @@ GEM
|
|
107
107
|
activesupport (>= 3.0)
|
108
108
|
railties (>= 3.0)
|
109
109
|
rspec (~> 2.8.0)
|
110
|
-
shoulda-context (1.0.
|
110
|
+
shoulda-context (1.0.1)
|
111
111
|
sqlite3 (1.3.6)
|
112
112
|
term-ansicolor (1.0.7)
|
113
113
|
thor (0.14.6)
|
114
|
-
treetop (1.4.
|
114
|
+
treetop (1.4.12)
|
115
115
|
polyglot
|
116
116
|
polyglot (>= 0.3.1)
|
117
|
-
tzinfo (0.3.
|
117
|
+
tzinfo (0.3.35)
|
118
118
|
|
119
119
|
PLATFORMS
|
120
120
|
ruby
|
@@ -124,7 +124,6 @@ DEPENDENCIES
|
|
124
124
|
activerecord-jdbcsqlite3-adapter
|
125
125
|
appraisal (~> 0.4.0)
|
126
126
|
aruba
|
127
|
-
bourne (~> 1.1.2)
|
128
127
|
bundler (~> 1.1)
|
129
128
|
cucumber (~> 1.1.9)
|
130
129
|
jdbc-sqlite3
|
data/gemfiles/3.1.gemfile.lock
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: /Users/draper/Dropbox/Development/shoulda-matchers
|
3
3
|
specs:
|
4
|
-
shoulda-matchers (1.4.
|
4
|
+
shoulda-matchers (1.4.1)
|
5
5
|
activesupport (>= 3.0.0)
|
6
|
+
bourne (~> 1.1.2)
|
6
7
|
|
7
8
|
GEM
|
8
9
|
remote: http://rubygems.org/
|
@@ -39,16 +40,15 @@ GEM
|
|
39
40
|
bundler
|
40
41
|
rake
|
41
42
|
arel (2.2.3)
|
42
|
-
aruba (0.5.
|
43
|
-
childprocess (
|
43
|
+
aruba (0.5.1)
|
44
|
+
childprocess (~> 0.3.6)
|
44
45
|
cucumber (>= 1.1.1)
|
45
|
-
ffi (>= 1.0.11)
|
46
46
|
rspec-expectations (>= 2.7.0)
|
47
47
|
bourne (1.1.2)
|
48
48
|
mocha (= 0.10.5)
|
49
|
-
builder (3.0.
|
50
|
-
childprocess (0.
|
51
|
-
ffi (~> 1.0.6)
|
49
|
+
builder (3.0.4)
|
50
|
+
childprocess (0.3.6)
|
51
|
+
ffi (~> 1.0, >= 1.0.6)
|
52
52
|
cucumber (1.1.9)
|
53
53
|
builder (>= 2.1.2)
|
54
54
|
diff-lcs (>= 1.1.2)
|
@@ -57,14 +57,14 @@ GEM
|
|
57
57
|
term-ansicolor (>= 1.0.6)
|
58
58
|
diff-lcs (1.1.3)
|
59
59
|
erubis (2.7.0)
|
60
|
-
ffi (1.0
|
60
|
+
ffi (1.2.0)
|
61
61
|
gherkin (2.9.3)
|
62
62
|
json (>= 1.4.6)
|
63
63
|
hike (1.2.1)
|
64
64
|
i18n (0.6.1)
|
65
|
-
jquery-rails (2.1.
|
66
|
-
railties (>= 3.
|
67
|
-
thor (
|
65
|
+
jquery-rails (2.1.4)
|
66
|
+
railties (>= 3.0, < 5.0)
|
67
|
+
thor (>= 0.14, < 2.0)
|
68
68
|
json (1.7.5)
|
69
69
|
mail (2.3.3)
|
70
70
|
i18n (>= 0.4.0)
|
@@ -100,7 +100,7 @@ GEM
|
|
100
100
|
rake (>= 0.8.7)
|
101
101
|
rdoc (~> 3.4)
|
102
102
|
thor (~> 0.14.6)
|
103
|
-
rake (0.9.
|
103
|
+
rake (0.9.5)
|
104
104
|
rdoc (3.12)
|
105
105
|
json (~> 1.4)
|
106
106
|
rspec (2.8.0)
|
@@ -116,13 +116,13 @@ GEM
|
|
116
116
|
activesupport (>= 3.0)
|
117
117
|
railties (>= 3.0)
|
118
118
|
rspec (~> 2.8.0)
|
119
|
-
sass (3.2.
|
119
|
+
sass (3.2.3)
|
120
120
|
sass-rails (3.1.6)
|
121
121
|
actionpack (~> 3.1.0)
|
122
122
|
railties (~> 3.1.0)
|
123
123
|
sass (>= 3.1.10)
|
124
124
|
tilt (~> 1.3.2)
|
125
|
-
shoulda-context (1.0.
|
125
|
+
shoulda-context (1.0.1)
|
126
126
|
sprockets (2.0.4)
|
127
127
|
hike (~> 1.2)
|
128
128
|
rack (~> 1.0)
|
@@ -131,10 +131,10 @@ GEM
|
|
131
131
|
term-ansicolor (1.0.7)
|
132
132
|
thor (0.14.6)
|
133
133
|
tilt (1.3.3)
|
134
|
-
treetop (1.4.
|
134
|
+
treetop (1.4.12)
|
135
135
|
polyglot
|
136
136
|
polyglot (>= 0.3.1)
|
137
|
-
tzinfo (0.3.
|
137
|
+
tzinfo (0.3.35)
|
138
138
|
|
139
139
|
PLATFORMS
|
140
140
|
ruby
|
@@ -144,7 +144,6 @@ DEPENDENCIES
|
|
144
144
|
activerecord-jdbcsqlite3-adapter
|
145
145
|
appraisal (~> 0.4.0)
|
146
146
|
aruba
|
147
|
-
bourne (~> 1.1.2)
|
148
147
|
bundler (~> 1.1)
|
149
148
|
cucumber (~> 1.1.9)
|
150
149
|
jdbc-sqlite3
|
data/gemfiles/3.2.gemfile.lock
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: /Users/draper/Dropbox/Development/shoulda-matchers
|
3
3
|
specs:
|
4
|
-
shoulda-matchers (1.4.
|
4
|
+
shoulda-matchers (1.4.1)
|
5
5
|
activesupport (>= 3.0.0)
|
6
|
+
bourne (~> 1.1.2)
|
6
7
|
|
7
8
|
GEM
|
8
9
|
remote: http://rubygems.org/
|
@@ -38,16 +39,15 @@ GEM
|
|
38
39
|
bundler
|
39
40
|
rake
|
40
41
|
arel (3.0.2)
|
41
|
-
aruba (0.5.
|
42
|
-
childprocess (
|
42
|
+
aruba (0.5.1)
|
43
|
+
childprocess (~> 0.3.6)
|
43
44
|
cucumber (>= 1.1.1)
|
44
|
-
ffi (>= 1.0.11)
|
45
45
|
rspec-expectations (>= 2.7.0)
|
46
46
|
bourne (1.1.2)
|
47
47
|
mocha (= 0.10.5)
|
48
|
-
builder (3.0.
|
49
|
-
childprocess (0.
|
50
|
-
ffi (~> 1.0.6)
|
48
|
+
builder (3.0.4)
|
49
|
+
childprocess (0.3.6)
|
50
|
+
ffi (~> 1.0, >= 1.0.6)
|
51
51
|
cucumber (1.1.9)
|
52
52
|
builder (>= 2.1.2)
|
53
53
|
diff-lcs (>= 1.1.2)
|
@@ -56,15 +56,15 @@ GEM
|
|
56
56
|
term-ansicolor (>= 1.0.6)
|
57
57
|
diff-lcs (1.1.3)
|
58
58
|
erubis (2.7.0)
|
59
|
-
ffi (1.0
|
59
|
+
ffi (1.2.0)
|
60
60
|
gherkin (2.9.3)
|
61
61
|
json (>= 1.4.6)
|
62
62
|
hike (1.2.1)
|
63
63
|
i18n (0.6.1)
|
64
64
|
journey (1.0.4)
|
65
|
-
jquery-rails (2.1.
|
66
|
-
railties (>= 3.
|
67
|
-
thor (
|
65
|
+
jquery-rails (2.1.4)
|
66
|
+
railties (>= 3.0, < 5.0)
|
67
|
+
thor (>= 0.14, < 2.0)
|
68
68
|
json (1.7.5)
|
69
69
|
mail (2.4.4)
|
70
70
|
i18n (>= 0.4.0)
|
@@ -74,7 +74,7 @@ GEM
|
|
74
74
|
mime-types (1.19)
|
75
75
|
mocha (0.10.5)
|
76
76
|
metaclass (~> 0.0.1)
|
77
|
-
multi_json (1.3.
|
77
|
+
multi_json (1.3.7)
|
78
78
|
polyglot (0.3.3)
|
79
79
|
rack (1.4.1)
|
80
80
|
rack-cache (1.2)
|
@@ -98,7 +98,7 @@ GEM
|
|
98
98
|
rake (>= 0.8.7)
|
99
99
|
rdoc (~> 3.4)
|
100
100
|
thor (>= 0.14.6, < 2.0)
|
101
|
-
rake (0.9.
|
101
|
+
rake (0.9.5)
|
102
102
|
rdoc (3.12)
|
103
103
|
json (~> 1.4)
|
104
104
|
rspec (2.8.0)
|
@@ -114,12 +114,12 @@ GEM
|
|
114
114
|
activesupport (>= 3.0)
|
115
115
|
railties (>= 3.0)
|
116
116
|
rspec (~> 2.8.0)
|
117
|
-
sass (3.2.
|
117
|
+
sass (3.2.3)
|
118
118
|
sass-rails (3.2.5)
|
119
119
|
railties (~> 3.2.0)
|
120
120
|
sass (>= 3.1.10)
|
121
121
|
tilt (~> 1.3)
|
122
|
-
shoulda-context (1.0.
|
122
|
+
shoulda-context (1.0.1)
|
123
123
|
sprockets (2.1.3)
|
124
124
|
hike (~> 1.2)
|
125
125
|
rack (~> 1.0)
|
@@ -128,10 +128,10 @@ GEM
|
|
128
128
|
term-ansicolor (1.0.7)
|
129
129
|
thor (0.16.0)
|
130
130
|
tilt (1.3.3)
|
131
|
-
treetop (1.4.
|
131
|
+
treetop (1.4.12)
|
132
132
|
polyglot
|
133
133
|
polyglot (>= 0.3.1)
|
134
|
-
tzinfo (0.3.
|
134
|
+
tzinfo (0.3.35)
|
135
135
|
|
136
136
|
PLATFORMS
|
137
137
|
ruby
|
@@ -141,7 +141,6 @@ DEPENDENCIES
|
|
141
141
|
activerecord-jdbcsqlite3-adapter
|
142
142
|
appraisal (~> 0.4.0)
|
143
143
|
aruba
|
144
|
-
bourne (~> 1.1.2)
|
145
144
|
bundler (~> 1.1)
|
146
145
|
cucumber (~> 1.1.9)
|
147
146
|
jdbc-sqlite3
|
@@ -3,6 +3,8 @@ require 'shoulda/matchers/active_model/validation_matcher'
|
|
3
3
|
require 'shoulda/matchers/active_model/validation_message_finder'
|
4
4
|
require 'shoulda/matchers/active_model/exception_message_finder'
|
5
5
|
require 'shoulda/matchers/active_model/allow_value_matcher'
|
6
|
+
require 'shoulda/matchers/active_model/disallow_value_matcher'
|
7
|
+
require 'shoulda/matchers/active_model/only_integer_matcher'
|
6
8
|
require 'shoulda/matchers/active_model/ensure_length_of_matcher'
|
7
9
|
require 'shoulda/matchers/active_model/ensure_inclusion_of_matcher'
|
8
10
|
require 'shoulda/matchers/active_model/ensure_exclusion_of_matcher'
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Shoulda # :nodoc:
|
2
|
+
module Matchers
|
3
|
+
module ActiveModel # :nodoc:
|
4
|
+
class DisallowValueMatcher # :nodoc:
|
5
|
+
def initialize(value)
|
6
|
+
@allow_matcher = AllowValueMatcher.new(value)
|
7
|
+
end
|
8
|
+
|
9
|
+
def matches?(subject)
|
10
|
+
!@allow_matcher.matches?(subject)
|
11
|
+
end
|
12
|
+
|
13
|
+
def for(attribute)
|
14
|
+
@allow_matcher.for(attribute)
|
15
|
+
self
|
16
|
+
end
|
17
|
+
|
18
|
+
def with_message(message)
|
19
|
+
@allow_matcher.with_message(message)
|
20
|
+
self
|
21
|
+
end
|
22
|
+
|
23
|
+
def failure_message
|
24
|
+
@allow_matcher.negative_failure_message
|
25
|
+
end
|
26
|
+
|
27
|
+
def allowed_types
|
28
|
+
""
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|