valid_attribute 1.2.0 → 1.3.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.
- data/.gitignore +2 -1
- data/.rspec +1 -0
- data/.travis.yml +2 -2
- data/.yardopts +2 -0
- data/README.markdown +23 -15
- data/lib/valid_attribute.rb +3 -1
- data/lib/valid_attribute/matcher.rb +14 -6
- data/lib/valid_attribute/minitest.rb +1 -1
- data/lib/valid_attribute/spec.rb +3 -0
- data/lib/valid_attribute/version.rb +1 -1
- data/spec/minitest_spec.rb +1 -1
- data/spec/spec_helper.rb +2 -2
- data/spec/valid_attribute_spec.rb +20 -0
- data/valid_attribute.gemspec +3 -7
- metadata +112 -61
data/.gitignore
CHANGED
data/.rspec
CHANGED
data/.travis.yml
CHANGED
data/.yardopts
ADDED
data/README.markdown
CHANGED
@@ -6,7 +6,7 @@ ValidAttribute is a minimalist matcher for validation BDD.
|
|
6
6
|
|
7
7
|
Supported ORMs
|
8
8
|
|
9
|
-
* ActiveModel based (ActiveRecord >= 3.0, Mongoid >= 2.0, MongoMapper >= 0.9
|
9
|
+
* ActiveModel based (ActiveRecord >= 3.0, Mongoid >= 2.0, MongoMapper >= 0.9)
|
10
10
|
* ActiveRecord <= 2.3
|
11
11
|
* DataMapper
|
12
12
|
* Custom (with compatible API, see below)
|
@@ -43,7 +43,6 @@ If you want to you use it with `MiniTest::Spec` you can use either `shoulda-cont
|
|
43
43
|
gem 'minitest-matchers'
|
44
44
|
|
45
45
|
# test_helper.rb
|
46
|
-
require 'minitest/matchers'
|
47
46
|
require 'valid_attribute'
|
48
47
|
```
|
49
48
|
|
@@ -106,20 +105,16 @@ require 'minitest/matchers'
|
|
106
105
|
describe User do
|
107
106
|
subject { User.new }
|
108
107
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
wont { have_valid(:name).when('Test') }
|
108
|
+
it { must have_valid(:email).when('test@test.com', 'test+spam@gmail.com') }
|
109
|
+
it { wont have_valid(:email).when('fail', 123) }
|
110
|
+
it { must have_valid(:name).when('TestName') }
|
111
|
+
it { wont have_valid(:name).when('Test') }
|
114
112
|
|
115
113
|
describe 'password' do
|
116
|
-
subject { User.new
|
117
|
-
must
|
118
|
-
wont
|
114
|
+
subject { User.new.tap { |u| u.password_confirmation = "password" } }
|
115
|
+
it { must have_valid(:password).when('password') }
|
116
|
+
it { wont have_valid(:password).when(nil) }
|
119
117
|
end
|
120
|
-
|
121
|
-
# Using .when is optional. Without it, the existing value is examined.
|
122
|
-
wont have_valid(:email)
|
123
118
|
end
|
124
119
|
```
|
125
120
|
|
@@ -146,10 +141,23 @@ class User
|
|
146
141
|
end
|
147
142
|
```
|
148
143
|
|
144
|
+
## Cloning ##
|
145
|
+
|
146
|
+
If you feel that the setters are mutating parts of the object when
|
147
|
+
testing multiple values you can force the test subject be cloned in
|
148
|
+
between each test
|
149
|
+
|
150
|
+
```ruby
|
151
|
+
it { should have_valid(:name).when('Brian').clone }
|
152
|
+
```
|
153
|
+
|
154
|
+
Be aware the cloning can cause some unpredicatable results and may lead
|
155
|
+
to more pain than help
|
156
|
+
|
149
157
|
## Legal ##
|
150
158
|
|
151
|
-
|
159
|
+
[DockYard](http://dockyard.com), LLC © 2012
|
152
160
|
|
153
|
-
[@
|
161
|
+
[@dockyard](http://twitter.com/dockyard)
|
154
162
|
|
155
163
|
[Licensed under the MIT license](http://www.opensource.org/licenses/mit-license.php)
|
data/lib/valid_attribute.rb
CHANGED
@@ -7,8 +7,10 @@ end
|
|
7
7
|
|
8
8
|
if defined?(RSpec)
|
9
9
|
require 'valid_attribute/rspec'
|
10
|
+
elsif defined?(Spec)
|
11
|
+
require 'valid_attribute/spec'
|
10
12
|
elsif defined?(MiniTest::Matchers)
|
11
13
|
require 'valid_attribute/minitest'
|
12
|
-
|
14
|
+
elsif defined?(Test::Unit)
|
13
15
|
require 'valid_attribute/test_unit'
|
14
16
|
end
|
@@ -41,6 +41,14 @@ module ValidAttribute
|
|
41
41
|
!failed_values.empty? && passed_values.empty?
|
42
42
|
end
|
43
43
|
|
44
|
+
def clone?
|
45
|
+
!!@clone
|
46
|
+
end
|
47
|
+
|
48
|
+
def clone
|
49
|
+
@clone = true
|
50
|
+
end
|
51
|
+
|
44
52
|
private
|
45
53
|
|
46
54
|
def check_values(subject)
|
@@ -61,19 +69,19 @@ module ValidAttribute
|
|
61
69
|
end
|
62
70
|
|
63
71
|
def check_value(value)
|
64
|
-
|
65
|
-
|
66
|
-
|
72
|
+
_subject = clone? ? subject.clone : subject
|
73
|
+
_subject.send("#{attr}=", value)
|
74
|
+
_subject.valid?
|
67
75
|
|
68
|
-
if invalid_attribute?(
|
76
|
+
if invalid_attribute?(_subject, attr)
|
69
77
|
self.failed_values << value
|
70
78
|
else
|
71
79
|
self.passed_values << value
|
72
80
|
end
|
73
81
|
end
|
74
82
|
|
75
|
-
def invalid_attribute?(
|
76
|
-
errors =
|
83
|
+
def invalid_attribute?(_subject, attr)
|
84
|
+
errors = _subject.errors[attr]
|
77
85
|
errors.respond_to?(:empty?) ? !errors.empty? : !!errors
|
78
86
|
end
|
79
87
|
|
data/spec/minitest_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'bundler'
|
3
|
-
Bundler.
|
3
|
+
Bundler.require
|
4
4
|
|
5
5
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
6
6
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
7
|
-
require 'ruby-debug'
|
8
7
|
require 'rspec'
|
9
8
|
require 'rspec/autorun'
|
10
9
|
require 'bourne'
|
11
10
|
require 'valid_attribute'
|
11
|
+
require 'debugger'
|
12
12
|
|
13
13
|
RSpec.configure do |config|
|
14
14
|
config.mock_with :mocha
|
@@ -154,6 +154,26 @@ describe 'ValidAttribute' do
|
|
154
154
|
end
|
155
155
|
end
|
156
156
|
end
|
157
|
+
|
158
|
+
describe 'cloning' do
|
159
|
+
before do
|
160
|
+
@matcher = @should.have_valid(:name)
|
161
|
+
end
|
162
|
+
|
163
|
+
context 'when no cloning' do
|
164
|
+
it 'returns false' do
|
165
|
+
@matcher.clone?.should be_false
|
166
|
+
end
|
167
|
+
end
|
168
|
+
context 'when cloned' do
|
169
|
+
before do
|
170
|
+
@matcher.clone
|
171
|
+
end
|
172
|
+
it 'returns true' do
|
173
|
+
@matcher.clone?.should be_true
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
157
177
|
end
|
158
178
|
|
159
179
|
end
|
data/valid_attribute.gemspec
CHANGED
@@ -19,14 +19,10 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
|
22
|
+
s.add_development_dependency 'rake'
|
22
23
|
s.add_development_dependency 'rspec'
|
23
24
|
s.add_development_dependency 'bourne'
|
25
|
+
s.add_development_dependency 'minitest'
|
24
26
|
s.add_development_dependency 'minitest-matchers'
|
25
|
-
|
26
|
-
if RUBY_VERSION <= '1.9.2'
|
27
|
-
s.add_development_dependency 'ruby-debug19'
|
28
|
-
end
|
29
|
-
else
|
30
|
-
s.add_development_dependency 'ruby-debug'
|
31
|
-
end
|
27
|
+
s.add_development_dependency 'debugger'
|
32
28
|
end
|
metadata
CHANGED
@@ -1,76 +1,124 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: valid_attribute
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.3.0
|
4
5
|
prerelease:
|
5
|
-
version: 1.2.0
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Brian Cardarella
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
date: 2012-08-10 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
18
23
|
prerelease: false
|
19
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rspec
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
20
33
|
none: false
|
21
|
-
requirements:
|
22
|
-
- -
|
23
|
-
- !ruby/object:Gem::Version
|
24
|
-
version:
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
25
38
|
type: :development
|
26
|
-
|
27
|
-
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
28
47
|
name: bourne
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
29
55
|
prerelease: false
|
30
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: minitest
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
31
65
|
none: false
|
32
|
-
requirements:
|
33
|
-
- -
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version:
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
36
70
|
type: :development
|
37
|
-
version_requirements: *id002
|
38
|
-
- !ruby/object:Gem::Dependency
|
39
|
-
name: minitest-matchers
|
40
71
|
prerelease: false
|
41
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: minitest-matchers
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
42
81
|
none: false
|
43
|
-
requirements:
|
44
|
-
- -
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version:
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
47
86
|
type: :development
|
48
|
-
version_requirements: *id003
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: ruby-debug19
|
51
87
|
prerelease: false
|
52
|
-
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: debugger
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
53
97
|
none: false
|
54
|
-
requirements:
|
55
|
-
- -
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version:
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
58
102
|
type: :development
|
59
|
-
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
60
110
|
description: Minimalist validation matcher
|
61
|
-
email:
|
111
|
+
email:
|
62
112
|
- bcardarella@gmail.com
|
63
113
|
executables: []
|
64
|
-
|
65
114
|
extensions: []
|
66
|
-
|
67
115
|
extra_rdoc_files: []
|
68
|
-
|
69
|
-
files:
|
116
|
+
files:
|
70
117
|
- .gitignore
|
71
118
|
- .rspec
|
72
119
|
- .rvmrc
|
73
120
|
- .travis.yml
|
121
|
+
- .yardopts
|
74
122
|
- Gemfile
|
75
123
|
- HISTORY
|
76
124
|
- README.markdown
|
@@ -80,6 +128,7 @@ files:
|
|
80
128
|
- lib/valid_attribute/method.rb
|
81
129
|
- lib/valid_attribute/minitest.rb
|
82
130
|
- lib/valid_attribute/rspec.rb
|
131
|
+
- lib/valid_attribute/spec.rb
|
83
132
|
- lib/valid_attribute/test_unit.rb
|
84
133
|
- lib/valid_attribute/version.rb
|
85
134
|
- spec/minitest_spec.rb
|
@@ -88,35 +137,37 @@ files:
|
|
88
137
|
- spec/user.rb
|
89
138
|
- spec/valid_attribute_spec.rb
|
90
139
|
- valid_attribute.gemspec
|
91
|
-
has_rdoc: true
|
92
140
|
homepage: https://github.com/bcardarella/valid_attribute
|
93
141
|
licenses: []
|
94
|
-
|
95
142
|
post_install_message:
|
96
143
|
rdoc_options: []
|
97
|
-
|
98
|
-
require_paths:
|
144
|
+
require_paths:
|
99
145
|
- lib
|
100
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
146
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
101
147
|
none: false
|
102
|
-
requirements:
|
103
|
-
- -
|
104
|
-
- !ruby/object:Gem::Version
|
105
|
-
version:
|
106
|
-
|
148
|
+
requirements:
|
149
|
+
- - ! '>='
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '0'
|
152
|
+
segments:
|
153
|
+
- 0
|
154
|
+
hash: 2438991157879859276
|
155
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
156
|
none: false
|
108
|
-
requirements:
|
109
|
-
- -
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version:
|
157
|
+
requirements:
|
158
|
+
- - ! '>='
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '0'
|
161
|
+
segments:
|
162
|
+
- 0
|
163
|
+
hash: 2438991157879859276
|
112
164
|
requirements: []
|
113
|
-
|
114
165
|
rubyforge_project: valid_attribute
|
115
|
-
rubygems_version: 1.
|
166
|
+
rubygems_version: 1.8.23
|
116
167
|
signing_key:
|
117
168
|
specification_version: 3
|
118
169
|
summary: Minimalist validation matcher
|
119
|
-
test_files:
|
170
|
+
test_files:
|
120
171
|
- spec/minitest_spec.rb
|
121
172
|
- spec/spec_helper.rb
|
122
173
|
- spec/test_unit_spec.rb
|