accept_values_for 0.5.1 → 0.7.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 +7 -0
- data/.gitignore +19 -0
- data/.travis.yml +11 -11
- data/CHANGELOG.md +52 -0
- data/Gemfile +6 -19
- data/LICENSE.txt +22 -0
- data/README.md +46 -0
- data/Rakefile +4 -29
- data/accept_values_for.gemspec +21 -60
- data/gemfiles/activemodel_3_0.gemfile +11 -0
- data/gemfiles/activemodel_3_1.gemfile +11 -0
- data/gemfiles/activemodel_3_2.gemfile +11 -0
- data/gemfiles/activemodel_4_0.gemfile +11 -0
- data/lib/accept_values_for.rb +5 -89
- data/lib/accept_values_for/helpers.rb +7 -0
- data/lib/accept_values_for/matcher.rb +66 -0
- data/spec/spec_helper.rb +26 -37
- metadata +51 -91
- data/Changelog.textile +0 -12
- data/LICENSE +0 -19
- data/Readme.md +0 -49
- data/VERSION +0 -1
- data/lib/discover.rb +0 -7
- data/spec/discover_spec.rb +0 -33
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1b466c18c67ea0704eacf2be73b449ac00a73c02
|
4
|
+
data.tar.gz: 707d2eb9c3d91c587eee0a50ae81730b01769b4e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 233db06ae71d2d69994af4af2be46760dd463becdb0655353c3e5f77fb338435054def203e61325d18c768266402a773dd5661a2d01b44309407190337450410
|
7
|
+
data.tar.gz: 805f71fc9be9b172d9e0b8e85c68962860b6e47e65a6487de0340e880bbeec186dd783ec4778e4c63f9623a05baed383b70e140b82a2e33f93b7b7e86b713d0b
|
data/.gitignore
ADDED
data/.travis.yml
CHANGED
@@ -1,24 +1,24 @@
|
|
1
1
|
language: ruby
|
2
|
-
env:
|
3
|
-
- "RAILS_VERSION=3.0.0"
|
4
|
-
- "RAILS_VERSION=3.1.0"
|
5
|
-
- "RAILS_VERSION=3.2.0"
|
6
|
-
- "RAILS_VERSION=4.0.0"
|
7
2
|
rvm:
|
8
3
|
- 1.8.7
|
9
4
|
- 1.9.2
|
10
5
|
- 1.9.3
|
11
6
|
- 2.0.0
|
7
|
+
- 2.1.0
|
8
|
+
gemfile:
|
9
|
+
- gemfiles/activemodel_3_0.gemfile
|
10
|
+
- gemfiles/activemodel_3_1.gemfile
|
11
|
+
- gemfiles/activemodel_3_2.gemfile
|
12
|
+
- gemfiles/activemodel_4_0.gemfile
|
12
13
|
matrix:
|
13
14
|
exclude:
|
15
|
+
- gemfile: gemfiles/activemodel_4_0.gemfile
|
16
|
+
rvm: 1.8.7
|
17
|
+
- gemfile: gemfiles/activemodel_4_0.gemfile
|
18
|
+
rvm: 1.9.2
|
19
|
+
allow_failures:
|
14
20
|
- rvm: 1.8.7
|
15
|
-
env: "RAILS_VERSION=4.0.0"
|
16
21
|
- rvm: 1.9.2
|
17
|
-
env: "RAILS_VERSION=4.0.0"
|
18
|
-
notifications:
|
19
|
-
email:
|
20
|
-
- agresso@gmail.com
|
21
22
|
branches:
|
22
23
|
only:
|
23
24
|
- master
|
24
|
-
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# 0.6.0 / Unreleased
|
2
|
+
|
3
|
+
* [ENHANCEMENT] Deprecate Rubies 1.8.7 and 1.9.2
|
4
|
+
* [ENHANCEMENT] Remove `discover` matcher
|
5
|
+
* [BUGFIX] Open dependency requirements to allow installation alongside Rails 4
|
6
|
+
* [ENHANCEMENT] Replace Jeweler with Bundler
|
7
|
+
|
8
|
+
# 0.5.1 / 2013-10-20
|
9
|
+
|
10
|
+
* [ENHANCEMENT] Refactor matcher messaging
|
11
|
+
* [ENHANCEMENT] Deprecate `discover` matcher in favor of `include`
|
12
|
+
|
13
|
+
# 0.4.3 / 2011-03-29
|
14
|
+
|
15
|
+
* [BUGFIX] Revert values set during validation testing
|
16
|
+
|
17
|
+
# 0.4.2 / 2011-03-15
|
18
|
+
|
19
|
+
* [BUGFIX] Change error access from `#on` to `#[]`
|
20
|
+
|
21
|
+
# 0.4.1 / 2011-02-24
|
22
|
+
|
23
|
+
* [FEATURE] Add wider Active Model compatibility
|
24
|
+
|
25
|
+
# 0.3.1 / 2010-09-08
|
26
|
+
|
27
|
+
* [FEATURE] Add Rails 3 compatibility
|
28
|
+
|
29
|
+
# 0.3.0 / 2010-07-11
|
30
|
+
|
31
|
+
* [FEATURE] Add `discover` matcher
|
32
|
+
|
33
|
+
# 0.2.1 / 2010-06-28
|
34
|
+
|
35
|
+
* [FEATURE] Add support for negative matching
|
36
|
+
|
37
|
+
# 0.2.0 / 2010-05-13
|
38
|
+
|
39
|
+
* [FEATURE] Fail only if the validation in question fails
|
40
|
+
* [BUGFIX] Add `activerecord` and `rspec` runtime dependencies
|
41
|
+
|
42
|
+
# 0.1.1 / 2010-05-04
|
43
|
+
|
44
|
+
* [BUGFIX] Fix non-attribute validation testing
|
45
|
+
|
46
|
+
# 0.1.0 / 2010-05-04
|
47
|
+
|
48
|
+
* [FEATURE] Enable testing methods as well as attributes
|
49
|
+
|
50
|
+
# 0.0.1 / 2010-05-03
|
51
|
+
|
52
|
+
* Initial release
|
data/Gemfile
CHANGED
@@ -1,22 +1,9 @@
|
|
1
|
-
source
|
1
|
+
source "https://rubygems.org"
|
2
2
|
|
3
|
-
|
3
|
+
gemspec
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
'~> 3.2.0'
|
10
|
-
else
|
11
|
-
"~> #{rails_version}"
|
12
|
-
end
|
13
|
-
|
14
|
-
gem 'activemodel', rails
|
15
|
-
|
16
|
-
group :development, :test do
|
17
|
-
gem 'rspec', '>=0'
|
18
|
-
gem 'rails', rails
|
19
|
-
gem 'rspec-rails', '>=2.0.0'
|
20
|
-
gem 'jeweler'
|
21
|
-
gem 'sqlite3-ruby'
|
5
|
+
group :test do
|
6
|
+
gem "activerecord", "~> 4.0", :require => "active_record"
|
7
|
+
gem "rspec", "~> 2.14"
|
8
|
+
gem "sqlite3", "~> 1.3"
|
22
9
|
end
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Bogdan Gusiev
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# AcceptValuesFor
|
2
|
+
|
3
|
+
Writing specs for complex validations is annoying. AcceptValuesFor makes it easy
|
4
|
+
to test your validations with real world values, asserting which values should
|
5
|
+
be accepted by your model and which should not.
|
6
|
+
|
7
|
+
Read the [original blog post](http://gusiev.com/2010/06/ultimate-rspec-matcher-to-test-validation/).
|
8
|
+
|
9
|
+
[](http://badge.fury.io/rb/accept_values_for)
|
10
|
+
[](https://travis-ci.org/bogdan/accept_values_for)
|
11
|
+
[](https://codeclimate.com/github/bogdan/accept_values_for)
|
12
|
+
|
13
|
+
## Usage
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
describe User do
|
17
|
+
describe "validation"
|
18
|
+
subject(:user) { User.new }
|
19
|
+
|
20
|
+
it { should accept_values_for(:email, "john@example.com", "jane@example.org") }
|
21
|
+
it { should_not accept_values_for(:email, nil, " ", "john", "john@example") }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
```
|
25
|
+
|
26
|
+
## Dependencies
|
27
|
+
|
28
|
+
* Active Model (3 or 4)
|
29
|
+
* RSpec (2)
|
30
|
+
|
31
|
+
## Installation
|
32
|
+
|
33
|
+
### Gemfile
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
group :test do
|
37
|
+
gem "accept_values_for"
|
38
|
+
end
|
39
|
+
```
|
40
|
+
|
41
|
+
## Self-Promotion
|
42
|
+
|
43
|
+
Like AcceptValuesFor?
|
44
|
+
|
45
|
+
Watch the repository on [GitHub](https://github.com/bogdan/accept_values_for)
|
46
|
+
and read [my blog](http://gusiev.com).
|
data/Rakefile
CHANGED
@@ -1,32 +1,7 @@
|
|
1
|
-
require
|
2
|
-
require "bundler"
|
3
|
-
|
1
|
+
require "rubygems"
|
2
|
+
require "bundler/gem_tasks"
|
3
|
+
require "rspec/core/rake_task"
|
4
4
|
|
5
|
-
|
6
|
-
require 'rspec/core/rake_task'
|
7
|
-
|
8
|
-
RSpec::Core::RakeTask.new(:spec) do |spec|
|
9
|
-
end
|
10
|
-
|
11
|
-
begin
|
12
|
-
require 'jeweler'
|
13
|
-
Jeweler::Tasks.new do |gemspec|
|
14
|
-
gemspec.name = "accept_values_for"
|
15
|
-
gemspec.summary = "In order to test a complex validation for ActiveRecord models Implemented accept_values_for custom rspec matcher"
|
16
|
-
gemspec.description = <<-EOI
|
17
|
-
Rspec: When you have a complex validation(e.g. regexp or custom method) on ActiveRecord model
|
18
|
-
you have to write annoying easy specs on which values should be accepted by your validation method and which should not.
|
19
|
-
accepts_values_for rspec matcher simplify the code. See example for more information.
|
20
|
-
EOI
|
21
|
-
gemspec.email = "agresso@gmail.com"
|
22
|
-
gemspec.homepage = "http://github.com/bogdan/accept_values_for"
|
23
|
-
gemspec.authors = ["Bogdan Gusiev"]
|
24
|
-
#gemspec.add_dependency "activerecord"
|
25
|
-
#gemspec.add_dependency "rspec"
|
26
|
-
end
|
27
|
-
Jeweler::RubygemsDotOrgTasks.new
|
28
|
-
rescue LoadError
|
29
|
-
puts "Jeweler not available. Install it with: [sudo] gem install jeweler"
|
30
|
-
end
|
5
|
+
RSpec::Core::RakeTask.new(:spec)
|
31
6
|
|
32
7
|
task :default => :spec
|
data/accept_values_for.gemspec
CHANGED
@@ -1,65 +1,26 @@
|
|
1
|
-
#
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
-
# -*- encoding: utf-8 -*-
|
1
|
+
# encoding: utf-8
|
5
2
|
|
6
|
-
Gem::Specification.new do |
|
7
|
-
|
8
|
-
|
3
|
+
Gem::Specification.new do |spec|
|
4
|
+
spec.name = "accept_values_for"
|
5
|
+
spec.version = "0.7.0"
|
9
6
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
"Changelog.textile",
|
21
|
-
"Gemfile",
|
22
|
-
"LICENSE",
|
23
|
-
"Rakefile",
|
24
|
-
"Readme.md",
|
25
|
-
"VERSION",
|
26
|
-
"accept_values_for.gemspec",
|
27
|
-
"lib/accept_values_for.rb",
|
28
|
-
"lib/discover.rb",
|
29
|
-
"spec/accept_values_for_spec.rb",
|
30
|
-
"spec/discover_spec.rb",
|
31
|
-
"spec/spec_helper.rb"
|
32
|
-
]
|
33
|
-
s.homepage = "http://github.com/bogdan/accept_values_for"
|
34
|
-
s.require_paths = ["lib"]
|
35
|
-
s.rubygems_version = "1.8.24"
|
36
|
-
s.summary = "In order to test a complex validation for ActiveRecord models Implemented accept_values_for custom rspec matcher"
|
7
|
+
spec.author = "Bogdan Gusiev"
|
8
|
+
spec.email = "agresso@gmail.com"
|
9
|
+
spec.homepage = "https://github.com/bogdan/accept_values_for"
|
10
|
+
spec.license = "MIT"
|
11
|
+
spec.summary = "Test complex Active Record validations with RSpec"
|
12
|
+
spec.description = <<-DESC.gsub(/(^\s+|\n)/, "")
|
13
|
+
Writing specs for complex validations is annoying. AcceptValuesFor makes it
|
14
|
+
easy to test your validations with real world values, asserting which values
|
15
|
+
should be accepted by your model and which should not.
|
16
|
+
DESC
|
37
17
|
|
38
|
-
|
39
|
-
|
18
|
+
spec.files = `git ls-files -z`.split("\x0")
|
19
|
+
spec.test_files = spec.files.grep(/^spec/)
|
40
20
|
|
41
|
-
|
42
|
-
|
43
|
-
s.add_development_dependency(%q<rspec>, [">= 0"])
|
44
|
-
s.add_development_dependency(%q<rails>, ["~> 3.2.0"])
|
45
|
-
s.add_development_dependency(%q<rspec-rails>, [">= 2.0.0"])
|
46
|
-
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
47
|
-
s.add_development_dependency(%q<sqlite3-ruby>, [">= 0"])
|
48
|
-
else
|
49
|
-
s.add_dependency(%q<activemodel>, ["~> 3.2.0"])
|
50
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
51
|
-
s.add_dependency(%q<rails>, ["~> 3.2.0"])
|
52
|
-
s.add_dependency(%q<rspec-rails>, [">= 2.0.0"])
|
53
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
54
|
-
s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
|
55
|
-
end
|
56
|
-
else
|
57
|
-
s.add_dependency(%q<activemodel>, ["~> 3.2.0"])
|
58
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
59
|
-
s.add_dependency(%q<rails>, ["~> 3.2.0"])
|
60
|
-
s.add_dependency(%q<rspec-rails>, [">= 2.0.0"])
|
61
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
62
|
-
s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
|
63
|
-
end
|
64
|
-
end
|
21
|
+
spec.add_dependency "activemodel", ">= 3", "< 5"
|
22
|
+
spec.add_dependency "rspec", "~> 2.0"
|
65
23
|
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.5"
|
25
|
+
spec.add_development_dependency "rake", "~> 10.1"
|
26
|
+
end
|
data/lib/accept_values_for.rb
CHANGED
@@ -1,92 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# In order to spec a complex validation for ActiveRecord models
|
4
|
-
# Implemented accept_values_for custom matcher
|
5
|
-
#
|
6
|
-
# :call-seq:
|
7
|
-
# model.should accept_values_for(attribute, value1, value2 ...)
|
8
|
-
# model.should_not accept_values_for(attribute, value1, value2 ...)
|
9
|
-
#
|
10
|
-
# model should be an instance of ActiveRecord::Base
|
11
|
-
# attribute should be the model attribute name
|
12
|
-
#
|
13
|
-
# Use this if you want to check that model should not have errors
|
14
|
-
# on specified attribute with the given values
|
15
|
-
#
|
16
|
-
# == Examples
|
17
|
-
#
|
18
|
-
# user.should accept_values_for(:email, "john@example.com", "lambda@gusiev.com")
|
19
|
-
# user.should_not accept_values_for(:email, "invalid", nil, "a@b", "john@.com")
|
20
|
-
#
|
21
|
-
#
|
22
|
-
def accept_values_for(attribute, *values)
|
23
|
-
AcceptValuesFor.new(attribute, *values)
|
24
|
-
end
|
25
|
-
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
class AcceptValuesFor #:nodoc:
|
30
|
-
|
31
|
-
def initialize(attribute, *values)
|
32
|
-
@attribute = attribute
|
33
|
-
@values = values
|
34
|
-
@failed_values = {}
|
35
|
-
end
|
36
|
-
|
37
|
-
def matches?(model)
|
38
|
-
base_matches?(model) do |value|
|
39
|
-
unless model.errors[@attribute].to_a.empty?
|
40
|
-
@failed_values[value] = Array(model.errors[@attribute]).join(", ")
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def does_not_match?(model)
|
46
|
-
base_matches?(model) do |value|
|
47
|
-
if model.errors[@attribute].to_a.empty?
|
48
|
-
@failed_values[value] = nil
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
1
|
+
require "rspec"
|
52
2
|
|
53
|
-
|
54
|
-
|
55
|
-
@failed_values.keys.sort.each do |key|
|
56
|
-
result << "\nValue: #{key}\tErrors: #{@attribute} #{@failed_values[key]}"
|
57
|
-
end
|
58
|
-
result
|
59
|
-
end
|
3
|
+
require "accept_values_for/helpers"
|
4
|
+
require "accept_values_for/matcher"
|
60
5
|
|
61
|
-
|
62
|
-
|
63
|
-
end
|
64
|
-
|
65
|
-
def description
|
66
|
-
"accept values #{@values.map(&:inspect).join(', ')} for #{@attribute.inspect} attribute"
|
67
|
-
end
|
68
|
-
|
69
|
-
private
|
70
|
-
def base_matches?(model)
|
71
|
-
@model = model
|
72
|
-
!has_validations_module?(model) and return false
|
73
|
-
old_value = @model.send(@attribute)
|
74
|
-
@values.each do |value|
|
75
|
-
model.send("#@attribute=", value)
|
76
|
-
model.valid?
|
77
|
-
yield(value) if @model.respond_to?(:errors) && @model.errors.is_a?(ActiveModel::Errors)
|
78
|
-
end
|
79
|
-
return @failed_values.empty?
|
80
|
-
ensure
|
81
|
-
@model.send("#@attribute=", old_value) if defined?(old_value)
|
82
|
-
end
|
83
|
-
|
84
|
-
def has_validations_module?(model)
|
85
|
-
model.class.included_modules.include?(ActiveModel::Validations)
|
86
|
-
end
|
87
|
-
|
88
|
-
def formatted_failed_values
|
89
|
-
@failed_values.keys.sort.map(&:inspect).join(", ")
|
90
|
-
end
|
6
|
+
RSpec.configure do |config|
|
7
|
+
config.include(AcceptValuesFor::Helpers)
|
91
8
|
end
|
92
|
-
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require "active_model"
|
2
|
+
|
3
|
+
module AcceptValuesFor
|
4
|
+
class Matcher
|
5
|
+
def initialize(attribute, *values)
|
6
|
+
@attribute = attribute
|
7
|
+
@values = values
|
8
|
+
@failed_values = {}
|
9
|
+
end
|
10
|
+
|
11
|
+
def matches?(model)
|
12
|
+
base_matches?(model) do |value|
|
13
|
+
unless model.errors[@attribute].to_a.empty?
|
14
|
+
@failed_values[value] = Array(model.errors[@attribute]).join(", ")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def does_not_match?(model)
|
20
|
+
base_matches?(model) do |value|
|
21
|
+
if model.errors[@attribute].to_a.empty?
|
22
|
+
@failed_values[value] = nil
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def failure_message_for_should
|
28
|
+
result = "expected #{@model.inspect} to accept values #{formatted_failed_values} for #{@attribute.inspect}, but it was not\n"
|
29
|
+
@failed_values.keys.sort.each do |key|
|
30
|
+
result << "\nValue: #{key}\tErrors: #{@attribute} #{@failed_values[key]}"
|
31
|
+
end
|
32
|
+
result
|
33
|
+
end
|
34
|
+
|
35
|
+
def failure_message_for_should_not
|
36
|
+
"expected #{@model.inspect} to not accept values #{formatted_failed_values} for #{@attribute.inspect} attribute, but was"
|
37
|
+
end
|
38
|
+
|
39
|
+
def description
|
40
|
+
"accept values #{@values.map(&:inspect).join(', ')} for #{@attribute.inspect} attribute"
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
def base_matches?(model)
|
45
|
+
@model = model
|
46
|
+
!has_validations_module?(model) and return false
|
47
|
+
old_value = @model.send(@attribute)
|
48
|
+
@values.each do |value|
|
49
|
+
model.send("#@attribute=", value)
|
50
|
+
model.valid?
|
51
|
+
yield(value) if @model.respond_to?(:errors) && @model.errors.is_a?(ActiveModel::Errors)
|
52
|
+
end
|
53
|
+
return @failed_values.empty?
|
54
|
+
ensure
|
55
|
+
@model.send("#@attribute=", old_value) if defined?(old_value)
|
56
|
+
end
|
57
|
+
|
58
|
+
def has_validations_module?(model)
|
59
|
+
model.class.included_modules.include?(ActiveModel::Validations)
|
60
|
+
end
|
61
|
+
|
62
|
+
def formatted_failed_values
|
63
|
+
@failed_values.keys.sort.map(&:inspect).join(", ")
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,54 +1,43 @@
|
|
1
|
-
|
2
|
-
require 'sqlite3'
|
3
|
-
require 'rspec'
|
4
|
-
require 'rspec/autorun'
|
5
|
-
require 'active_record/railtie'
|
1
|
+
require "accept_values_for"
|
6
2
|
|
7
|
-
|
8
|
-
require
|
9
|
-
require 'lib/discover'
|
3
|
+
require "bundler"
|
4
|
+
Bundler.require(:test)
|
10
5
|
|
11
|
-
|
12
|
-
|
13
|
-
ActiveRecord::Base.establish_connection(
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
ActiveRecord::Schema.
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
6
|
+
RSpec.configure do |config|
|
7
|
+
config.before(:suite) do
|
8
|
+
ActiveRecord::Base.establish_connection(
|
9
|
+
:adapter => "sqlite3",
|
10
|
+
:database => ":memory:"
|
11
|
+
)
|
12
|
+
|
13
|
+
ActiveRecord::Schema.verbose = false
|
14
|
+
ActiveRecord::Schema.define(:version => 1) do
|
15
|
+
create_table :groups do |t|
|
16
|
+
t.string :name
|
17
|
+
end
|
18
|
+
|
19
|
+
create_table :people do |t|
|
20
|
+
t.integer :group_id
|
21
|
+
t.string :gender
|
22
|
+
t.string :name
|
23
|
+
end
|
24
|
+
end
|
30
25
|
end
|
31
|
-
end
|
32
26
|
|
33
|
-
|
34
|
-
config.use_transactional_fixtures = true
|
35
|
-
config.before(:each) do
|
27
|
+
config.before do
|
36
28
|
class ::Group < ActiveRecord::Base
|
37
29
|
has_many :people
|
38
|
-
|
39
|
-
scope :by_char, lambda { |char|
|
40
|
-
where('name like ?', char + '%').order('name')
|
41
|
-
}
|
42
30
|
end
|
43
31
|
|
44
32
|
class ::Person < ActiveRecord::Base
|
45
33
|
belongs_to :group
|
46
|
-
|
34
|
+
|
47
35
|
validates_presence_of :group
|
36
|
+
validates_inclusion_of :gender, :in => ["MALE", "FEMALE"]
|
48
37
|
end
|
49
38
|
end
|
50
39
|
|
51
|
-
config.after
|
40
|
+
config.after do
|
52
41
|
Object.send(:remove_const, :Person)
|
53
42
|
Object.send(:remove_const, :Group)
|
54
43
|
end
|
metadata
CHANGED
@@ -1,166 +1,126 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: accept_values_for
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.7.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Bogdan Gusiev
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-03-22 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: activemodel
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3'
|
20
|
+
- - <
|
20
21
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
22
|
+
version: '5'
|
22
23
|
type: :runtime
|
23
24
|
prerelease: false
|
24
25
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 3
|
30
|
-
-
|
31
|
-
name: rspec
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ! '>='
|
29
|
+
version: '3'
|
30
|
+
- - <
|
36
31
|
- !ruby/object:Gem::Version
|
37
|
-
version: '
|
38
|
-
type: :development
|
39
|
-
prerelease: false
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ! '>='
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '0'
|
32
|
+
version: '5'
|
46
33
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
34
|
+
name: rspec
|
48
35
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
36
|
requirements:
|
51
37
|
- - ~>
|
52
38
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
54
|
-
type: :
|
39
|
+
version: '2.0'
|
40
|
+
type: :runtime
|
55
41
|
prerelease: false
|
56
42
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
43
|
requirements:
|
59
44
|
- - ~>
|
60
45
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
46
|
+
version: '2.0'
|
62
47
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
48
|
+
name: bundler
|
64
49
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
50
|
requirements:
|
67
|
-
- -
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: 2.0.0
|
70
|
-
type: :development
|
71
|
-
prerelease: false
|
72
|
-
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ! '>='
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: 2.0.0
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
name: jeweler
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
|
-
requirements:
|
83
|
-
- - ! '>='
|
51
|
+
- - ~>
|
84
52
|
- !ruby/object:Gem::Version
|
85
|
-
version: '
|
53
|
+
version: '1.5'
|
86
54
|
type: :development
|
87
55
|
prerelease: false
|
88
56
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
57
|
requirements:
|
91
|
-
- -
|
58
|
+
- - ~>
|
92
59
|
- !ruby/object:Gem::Version
|
93
|
-
version: '
|
60
|
+
version: '1.5'
|
94
61
|
- !ruby/object:Gem::Dependency
|
95
|
-
name:
|
62
|
+
name: rake
|
96
63
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
64
|
requirements:
|
99
|
-
- -
|
65
|
+
- - ~>
|
100
66
|
- !ruby/object:Gem::Version
|
101
|
-
version: '
|
67
|
+
version: '10.1'
|
102
68
|
type: :development
|
103
69
|
prerelease: false
|
104
70
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
71
|
requirements:
|
107
|
-
- -
|
72
|
+
- - ~>
|
108
73
|
- !ruby/object:Gem::Version
|
109
|
-
version: '
|
110
|
-
description:
|
111
|
-
|
112
|
-
|
113
|
-
you have to write annoying easy specs on which values should be accepted by your
|
114
|
-
validation method and which should not.
|
115
|
-
|
116
|
-
accepts_values_for rspec matcher simplify the code. See example for more information.
|
117
|
-
|
118
|
-
'
|
74
|
+
version: '10.1'
|
75
|
+
description: Writing specs for complex validations is annoying. AcceptValuesFor makes
|
76
|
+
iteasy to test your validations with real world values, asserting which valuesshould
|
77
|
+
be accepted by your model and which should not.
|
119
78
|
email: agresso@gmail.com
|
120
79
|
executables: []
|
121
80
|
extensions: []
|
122
|
-
extra_rdoc_files:
|
123
|
-
- LICENSE
|
81
|
+
extra_rdoc_files: []
|
124
82
|
files:
|
83
|
+
- .gitignore
|
125
84
|
- .travis.yml
|
126
|
-
-
|
85
|
+
- CHANGELOG.md
|
127
86
|
- Gemfile
|
128
|
-
- LICENSE
|
87
|
+
- LICENSE.txt
|
88
|
+
- README.md
|
129
89
|
- Rakefile
|
130
|
-
- Readme.md
|
131
|
-
- VERSION
|
132
90
|
- accept_values_for.gemspec
|
91
|
+
- gemfiles/activemodel_3_0.gemfile
|
92
|
+
- gemfiles/activemodel_3_1.gemfile
|
93
|
+
- gemfiles/activemodel_3_2.gemfile
|
94
|
+
- gemfiles/activemodel_4_0.gemfile
|
133
95
|
- lib/accept_values_for.rb
|
134
|
-
- lib/
|
96
|
+
- lib/accept_values_for/helpers.rb
|
97
|
+
- lib/accept_values_for/matcher.rb
|
135
98
|
- spec/accept_values_for_spec.rb
|
136
|
-
- spec/discover_spec.rb
|
137
99
|
- spec/spec_helper.rb
|
138
|
-
homepage:
|
139
|
-
licenses:
|
100
|
+
homepage: https://github.com/bogdan/accept_values_for
|
101
|
+
licenses:
|
102
|
+
- MIT
|
103
|
+
metadata: {}
|
140
104
|
post_install_message:
|
141
105
|
rdoc_options: []
|
142
106
|
require_paths:
|
143
107
|
- lib
|
144
108
|
required_ruby_version: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
109
|
requirements:
|
147
|
-
- -
|
110
|
+
- - '>='
|
148
111
|
- !ruby/object:Gem::Version
|
149
112
|
version: '0'
|
150
|
-
segments:
|
151
|
-
- 0
|
152
|
-
hash: 2380830959568046608
|
153
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
|
-
none: false
|
155
114
|
requirements:
|
156
|
-
- -
|
115
|
+
- - '>='
|
157
116
|
- !ruby/object:Gem::Version
|
158
117
|
version: '0'
|
159
118
|
requirements: []
|
160
119
|
rubyforge_project:
|
161
|
-
rubygems_version:
|
120
|
+
rubygems_version: 2.2.2
|
162
121
|
signing_key:
|
163
|
-
specification_version:
|
164
|
-
summary:
|
165
|
-
|
166
|
-
|
122
|
+
specification_version: 4
|
123
|
+
summary: Test complex Active Record validations with RSpec
|
124
|
+
test_files:
|
125
|
+
- spec/accept_values_for_spec.rb
|
126
|
+
- spec/spec_helper.rb
|
data/Changelog.textile
DELETED
data/LICENSE
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
Copyright (c) 2012 Bogdan Gusiev
|
2
|
-
|
3
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
-
of this software and associated documentation files (the "Software"), to deal
|
5
|
-
in the Software without restriction, including without limitation the rights
|
6
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
-
copies of the Software, and to permit persons to whom the Software is furnished
|
8
|
-
to do so, subject to the following conditions:
|
9
|
-
|
10
|
-
The above copyright notice and this permission notice shall be included in all
|
11
|
-
copies or substantial portions of the Software.
|
12
|
-
|
13
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
19
|
-
SOFTWARE.
|
data/Readme.md
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
# Accept values for
|
2
|
-
|
3
|
-
## Description
|
4
|
-
|
5
|
-
This gem provides an rspec matcher that helps you to test ActiveModel validation.
|
6
|
-
|
7
|
-
*NOTE:* `discover` matcher that was previously here was extracted to its own gem
|
8
|
-
|
9
|
-
## Usage
|
10
|
-
|
11
|
-
[RSpec matcher to test the validation](http://gusiev.com/2010/06/ultimate-rspec-matcher-to-test-validation/)
|
12
|
-
|
13
|
-
``` ruby
|
14
|
-
describe User do
|
15
|
-
|
16
|
-
subject { User.new(@valid_attributes)}
|
17
|
-
|
18
|
-
it { should accept_values_for(:email, "john@example.com", "lambda@gusiev.com") }
|
19
|
-
it { should_not accept_values_for(:email, "invalid", nil, "a@b", "john@.com") }
|
20
|
-
end
|
21
|
-
```
|
22
|
-
|
23
|
-
You can specify which values should be accepted by model as valid and which values should not be accepted as invalid.
|
24
|
-
|
25
|
-
|
26
|
-
## Dependencies
|
27
|
-
|
28
|
-
* ActiveModel
|
29
|
-
* Rspec
|
30
|
-
|
31
|
-
## Install
|
32
|
-
|
33
|
-
|
34
|
-
### Gemfile
|
35
|
-
|
36
|
-
``` ruby
|
37
|
-
group :test do
|
38
|
-
gem 'accept_values_for'
|
39
|
-
end
|
40
|
-
```
|
41
|
-
|
42
|
-
|
43
|
-
## Self-Promotion
|
44
|
-
|
45
|
-
Like accept\_values\_for?
|
46
|
-
|
47
|
-
Follow the repository on [GitHub](https://github.com/bogdan/accept_values_for).
|
48
|
-
|
49
|
-
Read [author blog](http://gusiev.com).
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.5.1
|
data/lib/discover.rb
DELETED
data/spec/discover_spec.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "Discover" do
|
4
|
-
|
5
|
-
|
6
|
-
let(:named_scope) {
|
7
|
-
Group.by_char("j")
|
8
|
-
}
|
9
|
-
let(:java) { Group.create!(:name => "java") }
|
10
|
-
let(:json) { Group.create!(:name => "json") }
|
11
|
-
let(:jruby) { Group.create!(:name => "jruby") }
|
12
|
-
let(:ruby) { Group.create!(:name => "ruby")}
|
13
|
-
let(:python) { Group.create!(:name => "python")}
|
14
|
-
|
15
|
-
|
16
|
-
describe "api" do
|
17
|
-
subject {
|
18
|
-
named_scope
|
19
|
-
}
|
20
|
-
|
21
|
-
it { should discover(java) }
|
22
|
-
|
23
|
-
it { should discover(json, java, jruby) }
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
it { should_not discover(ruby) }
|
28
|
-
it { should_not discover(ruby, python) }
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
|
-
|
33
|
-
end
|