accept_values_for 0.4.3 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml ADDED
@@ -0,0 +1,24 @@
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
+ rvm:
8
+ - 1.8.7
9
+ - 1.9.2
10
+ - 1.9.3
11
+ - 2.0.0
12
+ matrix:
13
+ exclude:
14
+ - rvm: 1.8.7
15
+ env: "RAILS_VERSION=4.0.0"
16
+ - rvm: 1.9.2
17
+ env: "RAILS_VERSION=4.0.0"
18
+ notifications:
19
+ email:
20
+ - agresso@gmail.com
21
+ branches:
22
+ only:
23
+ - master
24
+
data/Gemfile CHANGED
@@ -1,10 +1,22 @@
1
- source :gemcutter
2
- gem 'activemodel', '>=3.0.0'
3
- gem "rspec", ">=0"
1
+ source 'https://rubygems.org'
4
2
 
5
- group :development do
6
- gem "activerecord", ">=3.0.0"
7
- gem "rspec-rails", ">=2.0.0"
3
+ rails_version = ENV['RAILS_VERSION'] || 'default'
4
+
5
+ rails = case rails_version
6
+ when 'master'
7
+ { :github => 'rails/rails'}
8
+ when "default"
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'
8
20
  gem 'jeweler'
9
21
  gem 'sqlite3-ruby'
10
22
  end
data/LICENSE ADDED
@@ -0,0 +1,19 @@
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/Rakefile CHANGED
@@ -24,6 +24,9 @@ EOI
24
24
  #gemspec.add_dependency "activerecord"
25
25
  #gemspec.add_dependency "rspec"
26
26
  end
27
+ Jeweler::RubygemsDotOrgTasks.new
27
28
  rescue LoadError
28
29
  puts "Jeweler not available. Install it with: [sudo] gem install jeweler"
29
30
  end
31
+
32
+ task :default => :spec
data/Readme.md ADDED
@@ -0,0 +1,49 @@
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 CHANGED
@@ -1 +1 @@
1
- 0.4.3
1
+ 0.5.1
@@ -4,23 +4,24 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{accept_values_for}
8
- s.version = "0.4.2"
7
+ s.name = "accept_values_for"
8
+ s.version = "0.5.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Bogdan Gusiev"]
12
- s.date = %q{2011-03-16}
13
- s.description = %q{Rspec: When you have a complex validation(e.g. regexp or custom method) on ActiveRecord model
14
- you have to write annoying easy specs on which values should be accepted by your validation method and which should not.
15
- accepts_values_for rspec matcher simplify the code. See example for more information.
16
- }
17
- s.email = %q{agresso@gmail.com}
12
+ s.date = "2013-10-20"
13
+ s.description = "Rspec: When you have a complex validation(e.g. regexp or custom method) on ActiveRecord model\nyou have to write annoying easy specs on which values should be accepted by your validation method and which should not.\naccepts_values_for rspec matcher simplify the code. See example for more information.\n"
14
+ s.email = "agresso@gmail.com"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE"
17
+ ]
18
18
  s.files = [
19
+ ".travis.yml",
19
20
  "Changelog.textile",
20
21
  "Gemfile",
21
- "Gemfile.lock",
22
+ "LICENSE",
22
23
  "Rakefile",
23
- "Readme.textile",
24
+ "Readme.md",
24
25
  "VERSION",
25
26
  "accept_values_for.gemspec",
26
27
  "lib/accept_values_for.rb",
@@ -29,39 +30,33 @@ accepts_values_for rspec matcher simplify the code. See example for more informa
29
30
  "spec/discover_spec.rb",
30
31
  "spec/spec_helper.rb"
31
32
  ]
32
- s.homepage = %q{http://github.com/bogdan/accept_values_for}
33
+ s.homepage = "http://github.com/bogdan/accept_values_for"
33
34
  s.require_paths = ["lib"]
34
- s.rubygems_version = %q{1.3.7}
35
- s.summary = %q{In order to test a complex validation for ActiveRecord models Implemented accept_values_for custom rspec matcher}
36
- s.test_files = [
37
- "spec/accept_values_for_spec.rb",
38
- "spec/discover_spec.rb",
39
- "spec/spec_helper.rb"
40
- ]
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"
41
37
 
42
38
  if s.respond_to? :specification_version then
43
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
44
39
  s.specification_version = 3
45
40
 
46
41
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
47
- s.add_runtime_dependency(%q<activemodel>, [">= 3.0.0"])
48
- s.add_runtime_dependency(%q<rspec>, [">= 0"])
49
- s.add_development_dependency(%q<activerecord>, [">= 3.0.0"])
42
+ s.add_runtime_dependency(%q<activemodel>, ["~> 3.2.0"])
43
+ s.add_development_dependency(%q<rspec>, [">= 0"])
44
+ s.add_development_dependency(%q<rails>, ["~> 3.2.0"])
50
45
  s.add_development_dependency(%q<rspec-rails>, [">= 2.0.0"])
51
46
  s.add_development_dependency(%q<jeweler>, [">= 0"])
52
47
  s.add_development_dependency(%q<sqlite3-ruby>, [">= 0"])
53
48
  else
54
- s.add_dependency(%q<activemodel>, [">= 3.0.0"])
49
+ s.add_dependency(%q<activemodel>, ["~> 3.2.0"])
55
50
  s.add_dependency(%q<rspec>, [">= 0"])
56
- s.add_dependency(%q<activerecord>, [">= 3.0.0"])
51
+ s.add_dependency(%q<rails>, ["~> 3.2.0"])
57
52
  s.add_dependency(%q<rspec-rails>, [">= 2.0.0"])
58
53
  s.add_dependency(%q<jeweler>, [">= 0"])
59
54
  s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
60
55
  end
61
56
  else
62
- s.add_dependency(%q<activemodel>, [">= 3.0.0"])
57
+ s.add_dependency(%q<activemodel>, ["~> 3.2.0"])
63
58
  s.add_dependency(%q<rspec>, [">= 0"])
64
- s.add_dependency(%q<activerecord>, [">= 3.0.0"])
59
+ s.add_dependency(%q<rails>, ["~> 3.2.0"])
65
60
  s.add_dependency(%q<rspec-rails>, [">= 2.0.0"])
66
61
  s.add_dependency(%q<jeweler>, [">= 0"])
67
62
  s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
@@ -31,58 +31,62 @@ class AcceptValuesFor #:nodoc:
31
31
  def initialize(attribute, *values)
32
32
  @attribute = attribute
33
33
  @values = values
34
-
34
+ @failed_values = {}
35
35
  end
36
36
 
37
37
  def matches?(model)
38
- @model = model
39
- return false unless model.class.included_modules.include?(ActiveModel::Validations)
40
- old_value = @model.send(@attribute)
41
- @values.each do |value|
42
- model.send("#{@attribute}=", value)
43
- model.valid?
38
+ base_matches?(model) do |value|
44
39
  unless model.errors[@attribute].to_a.empty?
45
- @failed_value = value
46
- return false
40
+ @failed_values[value] = Array(model.errors[@attribute]).join(", ")
47
41
  end
48
42
  end
49
- return true
50
- ensure
51
- @model.send("#{@attribute}=", old_value) if defined?(old_value)
52
43
  end
53
44
 
54
45
  def does_not_match?(model)
55
- @model = model
56
- return false unless model.class.included_modules.include?(ActiveModel::Validations)
57
- old_value = @model.send(@attribute)
58
- @values.each do |value|
59
- model.send("#{@attribute}=", value)
60
- model.valid?
46
+ base_matches?(model) do |value|
61
47
  if model.errors[@attribute].to_a.empty?
62
- @failed_value = value
63
- return false
48
+ @failed_values[value] = nil
64
49
  end
65
50
  end
66
- return true
67
- ensure
68
- @model.send("#{@attribute}=", old_value) if defined?(old_value)
69
51
  end
70
52
 
71
53
  def failure_message_for_should
72
- result = "expected #{@model.inspect} to accept value #{@failed_value.inspect} for #{@attribute.inspect}, but it was not\n"
73
- if @model.respond_to?(:errors) && @model.errors.is_a?(ActiveModel::Errors)
74
- result += "Errors: #{@attribute} " + Array(@model.errors[@attribute]).join(", ")
54
+ result = "expected #{@model.inspect} to accept values #{formatted_failed_values} for #{@attribute.inspect}, but it was not\n"
55
+ @failed_values.keys.sort.each do |key|
56
+ result << "\nValue: #{key}\tErrors: #{@attribute} #{@failed_values[key]}"
75
57
  end
76
58
  result
77
59
  end
78
60
 
79
61
  def failure_message_for_should_not
80
- "expected #{@model.inspect} to not accept value #{@failed_value.inspect} for #{@attribute.inspect} attribute, but was"
62
+ "expected #{@model.inspect} to not accept values #{formatted_failed_values} for #{@attribute.inspect} attribute, but was"
81
63
  end
82
64
 
83
65
  def description
84
66
  "accept values #{@values.map(&:inspect).join(', ')} for #{@attribute.inspect} attribute"
85
67
  end
86
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
87
91
  end
88
92
 
data/lib/discover.rb CHANGED
@@ -1,127 +1,7 @@
1
- if defined?(ActiveRecord)
2
-
3
- # In order to spec ActiveRecord finders
4
- # Implemented discover custom matcher
5
- #
6
- # :call-seq:
7
- # Class.named_scope.should discover(model1, model2)
8
- # Class.named_scope.should_not discover(model3, model4)
9
- #
10
- # matcher subject should be an instance of ActiverRecord::NamedScope::Scoped or Array
11
- # models should be an instace of ActiverRecord::Base
12
- #
13
- # Use this if you need to check the inclution of objects ActiveRecord finders result
14
- # and it's order
15
- #
16
- # == Examples
17
- #
18
- # class Group < AR::Base
19
- # named_scope :approved, :conditions => "approved = true"
20
- # named_scope :order_by_name, :order => "name"
21
- # end
22
- #
23
- # Group.approved.should discover(Group.create!(:approved => true))
24
- # Group.approved.should_not discover(Group.create!(:approved => false))
25
- # Group.order_by_name.should discover(Group.create!(:name => "apple"), Group.create!(:name => "bear").with_exact_order)
26
- #
27
- #
28
- def discover(*objects)
29
- Rspec::Discover.new(*objects)
1
+ if defined?(ActiveRecord) && !respond_to?(:discover)
2
+ def discover(*objects) #:nodoc:
3
+ include(*objects)
30
4
  end
31
-
5
+ warn "#discover matcher was removed from accept_values_for. Use gem discover instead"
32
6
  end
33
7
 
34
- module Rspec
35
- class Discover #:nodoc:
36
-
37
- def initialize(*objects)
38
- @objects = objects
39
- end
40
-
41
- def with_exact_order
42
- @with_exact_order = true
43
- self
44
- end
45
-
46
- def matches?(scope)
47
- @scope = scope
48
- return valid_findness? && valid_indexes?
49
- end
50
-
51
- def does_not_match?(scope)
52
- @scope = scope
53
- if @with_exact_order
54
- raise "calling #with_exact_order is not allowed with should_not match"
55
- end
56
- return valid_not_findness?
57
- end
58
-
59
- def failure_message_for_should
60
- result = @not_found_object_ids.any? ?
61
- "expected #{@scope.inspect} to include objects: #{@not_found_object_ids.inspect}" :
62
- "expected #{@scope.inspect} to be ordered as: #{@objects.map(&:id).inspect}"
63
- result += ", but it was not. "
64
- if @not_found_object_ids.any?
65
- result += found_objects_string
66
- end
67
- result
68
- end
69
-
70
- def failure_message_for_should_not
71
- result = "expected #{@scope.inspect} to not include objects: #{@found_object_ids.inspect}"
72
- result += ", but it was. "
73
- result += found_objects_string
74
- result
75
- end
76
-
77
-
78
- def description
79
- "discover #{@objects.map(&:inspect).join(', ')} " + ordering_string
80
- end
81
-
82
- protected
83
-
84
- def valid_findness?
85
- result = true
86
- @not_found_object_ids = []
87
- @objects.each do |object|
88
- unless @scope.include?(object)
89
- @not_found_object_ids << object.id
90
- result = false
91
- end
92
- end
93
- result
94
- end
95
-
96
-
97
- def valid_indexes?
98
- return true unless @with_exact_order
99
- indexes = @objects.map{|o| @scope.index(o)}
100
- return indexes.sort == indexes
101
- end
102
-
103
- def valid_not_findness?
104
- result = true
105
- @found_object_ids = []
106
- @objects.each do |object|
107
- if @scope.include?(object)
108
- @found_object_ids << object.id
109
- result = false
110
- end
111
- end
112
- result
113
- end
114
-
115
- def found_objects_string
116
- "Found objects: " + @scope.map(&:id).inspect
117
- end
118
-
119
-
120
- def ordering_string
121
- @with_exact_order ? "with exact order" : ""
122
- end
123
-
124
- end
125
- end
126
-
127
-
@@ -1,29 +1,75 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "AcceptValuesFor" do
4
- subject { Person.new(:gender => "MALE", :group => Group.new(:name => "Primary")) }
5
-
6
-
7
- it "should have custom condition for should_not" do
8
- accept_values_for(:gender, "INVALID", "MALE").does_not_match?(subject).should be_false
9
- end
4
+ let(:person) { Person.new(:gender => "MALE", :group => Group.new(:name => "Primary")) }
5
+ let(:accept_values_for_object) { accept_values_for(:gender, *values) }
10
6
 
11
7
  describe "#matches?" do
12
- let(:matcher) { accept_values_for(:gender, "INVALID") }
13
-
14
- it "should return false if one of values is not accepted" do
15
- matcher.matches?(subject).should be_false
16
- matcher.failure_message_for_should.should == "expected #{subject.inspect} to accept value \"INVALID\" for :gender, but it was not\n" +
17
- "Errors: gender is not included in the list"
8
+ subject { accept_values_for_object.matches?(person) }
9
+ context "when value is accepted" do
10
+ let(:values) { ['MALE'] }
11
+ it { should be_true }
12
+ end
13
+ context "when value is not accepted" do
14
+ let(:values) { ['INVALID'] }
15
+ it { should be_false }
16
+ it "should have correct failure message for should" do
17
+ accept_values_for_object.matches?(person)
18
+ accept_values_for_object.failure_message_for_should.should == "expected #{person.inspect} to accept values \"INVALID\" for :gender, but it was not\n\nValue: INVALID\tErrors: gender is not included in the list"
19
+ end
20
+ it "should assign the old value for attribute" do
21
+ accept_values_for_object.matches?(person)
22
+ person.gender.should == 'MALE'
23
+ end
24
+ end
25
+ context "when 2 values are not accepted" do
26
+ let(:values) { ["INVALID", "WRONG"] }
27
+ it { should be_false }
28
+ it "should have correct failure message for should" do
29
+ accept_values_for_object.matches?(person)
30
+ accept_values_for_object.failure_message_for_should.should == "expected #{person.inspect} to accept values \"INVALID\", \"WRONG\" for :gender, but it was not\n\nValue: INVALID\tErrors: gender is not included in the list\nValue: WRONG\tErrors: gender is not included in the list"
31
+ end
18
32
  end
33
+ context "when one value is accept and other is not" do
34
+ let(:values) { ['MALE', 'INVALID'] }
35
+ it { should be_false }
36
+ end
37
+ end
19
38
 
20
- it "should assign the old value for attribute after #matches? " do
21
- matcher.matches?(subject).should be_false
22
- subject.gender.should == "MALE"
39
+ describe "#does_not_match?" do
40
+ subject { accept_values_for_object.does_not_match?(person) }
41
+ context "when value is not accepted" do
42
+ let(:values) { ['INVALID'] }
43
+ it { should be_true }
44
+ end
45
+ context "when value is accepted" do
46
+ let(:values) { ['FEMALE'] }
47
+ it { should be_false }
48
+ it "should have correct failure message for should" do
49
+ accept_values_for_object.does_not_match?(person)
50
+ accept_values_for_object.failure_message_for_should_not.should == "expected #{person.inspect} to not accept values \"FEMALE\" for :gender attribute, but was"
51
+ end
52
+ it "should assign the old value for attribute" do
53
+ accept_values_for_object.does_not_match?(person)
54
+ person.gender.should == 'MALE'
55
+ end
56
+ end
57
+ context "when 2 values are accepted" do
58
+ let(:values) { ["FEMALE", "MALE"] }
59
+ it { should be_false }
60
+ it "should have correct failure message for should" do
61
+ accept_values_for_object.does_not_match?(person)
62
+ accept_values_for_object.failure_message_for_should_not.should == "expected #{person.inspect} to not accept values \"FEMALE\", \"MALE\" for :gender attribute, but was"
63
+ end
64
+ end
65
+ context "when one value is accept and other is not" do
66
+ let(:values) { ['MALE', 'INVALID'] }
67
+ it { should be_false }
23
68
  end
24
69
  end
25
70
 
26
71
  describe "api" do
72
+ subject { person }
27
73
  it { should accept_values_for(:gender, "MALE", "FEMALE")}
28
74
  it { should_not accept_values_for(:gender, "INVALID", nil)}
29
75
  it { should_not accept_values_for(:group, nil) }
@@ -12,41 +12,6 @@ describe "Discover" do
12
12
  let(:ruby) { Group.create!(:name => "ruby")}
13
13
  let(:python) { Group.create!(:name => "python")}
14
14
 
15
- describe "#does_not_match?" do
16
-
17
- context "if scope contains any of the specified values" do
18
- subject { discover(java, ruby) }
19
- before(:each) do
20
- subject.does_not_match?(named_scope).should be_false
21
- end
22
-
23
- it { subject.failure_message_for_should_not.should == "expected #{named_scope.inspect} to not include objects: #{[java.id].inspect}, but it was. Found objects: #{named_scope.map(&:id).inspect}"}
24
-
25
- end
26
-
27
- end
28
-
29
- describe "#matches?" do
30
- context "if scope doesn't contain any of the specified objects" do
31
- subject { discover(java, ruby) }
32
- before(:each) do
33
- subject.matches?(named_scope).should be_false
34
- end
35
-
36
- it {subject.failure_message_for_should.should == "expected #{named_scope.inspect} to include objects: #{[ruby.id].inspect}, but it was not. Found objects: #{named_scope.map(&:id).inspect}"}
37
- end
38
-
39
- context "if scope contain all of the specified objects but without correct order" do
40
- subject { discover(jruby, java).with_exact_order }
41
- before(:each) do
42
- subject.matches?(named_scope).should be_false
43
- end
44
-
45
- it "should render error message correctly" do
46
- subject.failure_message_for_should.should == "expected #{named_scope.inspect} to be ordered as: #{[jruby.id, java.id].inspect}, but it was not. "
47
- end
48
- end
49
- end
50
15
 
51
16
  describe "api" do
52
17
  subject {
@@ -57,8 +22,6 @@ describe "Discover" do
57
22
 
58
23
  it { should discover(json, java, jruby) }
59
24
 
60
- it { should discover(java, jruby, json).with_exact_order}
61
- it { should discover(java, json).with_exact_order }
62
25
 
63
26
 
64
27
  it { should_not discover(ruby) }
data/spec/spec_helper.rb CHANGED
@@ -1,12 +1,14 @@
1
+ ENV["RAILS_ENV"] ||= 'test'
1
2
  require 'sqlite3'
2
3
  require 'rspec'
3
4
  require 'rspec/autorun'
4
- require 'active_record'
5
+ require 'active_record/railtie'
6
+
7
+ $LOAD_PATH << "."
5
8
  require 'lib/accept_values_for'
6
9
  require 'lib/discover'
7
10
 
8
- require "rspec/rails/adapters"
9
- require "rspec/rails/fixture_support"
11
+ require 'rspec/rails'
10
12
 
11
13
  ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
12
14
  ActiveRecord::Base.configurations = true
@@ -29,16 +31,13 @@ ActiveRecord::Schema.define(:version => 1) do
29
31
  end
30
32
 
31
33
  RSpec.configure do |config|
32
- config.use_transactional_examples = true
34
+ config.use_transactional_fixtures = true
33
35
  config.before(:each) do
34
36
  class ::Group < ActiveRecord::Base
35
37
  has_many :people
36
38
 
37
39
  scope :by_char, lambda { |char|
38
- {
39
- :conditions => ["name like ?", char + "%"],
40
- :order => "name"
41
- }
40
+ where('name like ?', char + '%').order('name')
42
41
  }
43
42
  end
44
43
 
metadata CHANGED
@@ -1,131 +1,133 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: accept_values_for
3
- version: !ruby/object:Gem::Version
4
- hash: 9
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 4
9
- - 3
10
- version: 0.4.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.1
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Bogdan Gusiev
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-03-30 00:00:00 +03:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2013-10-20 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: activemodel
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.0
23
22
  type: :runtime
24
23
  prerelease: false
25
- version_requirements: &id001 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
26
25
  none: false
27
- requirements:
28
- - - ">="
29
- - !ruby/object:Gem::Version
30
- hash: 7
31
- segments:
32
- - 3
33
- - 0
34
- - 0
35
- version: 3.0.0
36
- requirement: *id001
37
- - !ruby/object:Gem::Dependency
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.0
30
+ - !ruby/object:Gem::Dependency
38
31
  name: rspec
39
- type: :runtime
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
40
39
  prerelease: false
41
- version_requirements: &id002 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
42
41
  none: false
43
- requirements:
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- hash: 3
47
- segments:
48
- - 0
49
- version: "0"
50
- requirement: *id002
51
- - !ruby/object:Gem::Dependency
52
- name: activerecord
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rails
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 3.2.0
53
54
  type: :development
54
55
  prerelease: false
55
- version_requirements: &id003 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
56
57
  none: false
57
- requirements:
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- hash: 7
61
- segments:
62
- - 3
63
- - 0
64
- - 0
65
- version: 3.0.0
66
- requirement: *id003
67
- - !ruby/object:Gem::Dependency
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 3.2.0
62
+ - !ruby/object:Gem::Dependency
68
63
  name: rspec-rails
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: 2.0.0
69
70
  type: :development
70
71
  prerelease: false
71
- version_requirements: &id004 !ruby/object:Gem::Requirement
72
+ version_requirements: !ruby/object:Gem::Requirement
72
73
  none: false
73
- requirements:
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- hash: 15
77
- segments:
78
- - 2
79
- - 0
80
- - 0
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
81
77
  version: 2.0.0
82
- requirement: *id004
83
- - !ruby/object:Gem::Dependency
78
+ - !ruby/object:Gem::Dependency
84
79
  name: jeweler
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
85
86
  type: :development
86
87
  prerelease: false
87
- version_requirements: &id005 !ruby/object:Gem::Requirement
88
+ version_requirements: !ruby/object:Gem::Requirement
88
89
  none: false
89
- requirements:
90
- - - ">="
91
- - !ruby/object:Gem::Version
92
- hash: 3
93
- segments:
94
- - 0
95
- version: "0"
96
- requirement: *id005
97
- - !ruby/object:Gem::Dependency
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
98
95
  name: sqlite3-ruby
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
99
102
  type: :development
100
103
  prerelease: false
101
- version_requirements: &id006 !ruby/object:Gem::Requirement
104
+ version_requirements: !ruby/object:Gem::Requirement
102
105
  none: false
103
- requirements:
104
- - - ">="
105
- - !ruby/object:Gem::Version
106
- hash: 3
107
- segments:
108
- - 0
109
- version: "0"
110
- requirement: *id006
111
- description: |
112
- Rspec: When you have a complex validation(e.g. regexp or custom method) on ActiveRecord model
113
- you have to write annoying easy specs on which values should be accepted by your validation method and which should not.
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ description: ! 'Rspec: When you have a complex validation(e.g. regexp or custom method)
111
+ on ActiveRecord model
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
+
114
116
  accepts_values_for rspec matcher simplify the code. See example for more information.
115
117
 
118
+ '
116
119
  email: agresso@gmail.com
117
120
  executables: []
118
-
119
121
  extensions: []
120
-
121
- extra_rdoc_files: []
122
-
123
- files:
122
+ extra_rdoc_files:
123
+ - LICENSE
124
+ files:
125
+ - .travis.yml
124
126
  - Changelog.textile
125
127
  - Gemfile
126
- - Gemfile.lock
128
+ - LICENSE
127
129
  - Rakefile
128
- - Readme.textile
130
+ - Readme.md
129
131
  - VERSION
130
132
  - accept_values_for.gemspec
131
133
  - lib/accept_values_for.rb
@@ -133,41 +135,32 @@ files:
133
135
  - spec/accept_values_for_spec.rb
134
136
  - spec/discover_spec.rb
135
137
  - spec/spec_helper.rb
136
- has_rdoc: true
137
138
  homepage: http://github.com/bogdan/accept_values_for
138
139
  licenses: []
139
-
140
140
  post_install_message:
141
141
  rdoc_options: []
142
-
143
- require_paths:
142
+ require_paths:
144
143
  - lib
145
- required_ruby_version: !ruby/object:Gem::Requirement
144
+ required_ruby_version: !ruby/object:Gem::Requirement
146
145
  none: false
147
- requirements:
148
- - - ">="
149
- - !ruby/object:Gem::Version
150
- hash: 3
151
- segments:
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ segments:
152
151
  - 0
153
- version: "0"
154
- required_rubygems_version: !ruby/object:Gem::Requirement
152
+ hash: 2380830959568046608
153
+ required_rubygems_version: !ruby/object:Gem::Requirement
155
154
  none: false
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- hash: 3
160
- segments:
161
- - 0
162
- version: "0"
155
+ requirements:
156
+ - - ! '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
163
159
  requirements: []
164
-
165
160
  rubyforge_project:
166
- rubygems_version: 1.3.7
161
+ rubygems_version: 1.8.24
167
162
  signing_key:
168
163
  specification_version: 3
169
- summary: In order to test a complex validation for ActiveRecord models Implemented accept_values_for custom rspec matcher
170
- test_files:
171
- - spec/accept_values_for_spec.rb
172
- - spec/discover_spec.rb
173
- - spec/spec_helper.rb
164
+ summary: In order to test a complex validation for ActiveRecord models Implemented
165
+ accept_values_for custom rspec matcher
166
+ test_files: []
data/Gemfile.lock DELETED
@@ -1,75 +0,0 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- abstract (1.0.0)
5
- actionpack (3.0.3)
6
- activemodel (= 3.0.3)
7
- activesupport (= 3.0.3)
8
- builder (~> 2.1.2)
9
- erubis (~> 2.6.6)
10
- i18n (~> 0.4)
11
- rack (~> 1.2.1)
12
- rack-mount (~> 0.6.13)
13
- rack-test (~> 0.5.6)
14
- tzinfo (~> 0.3.23)
15
- activemodel (3.0.3)
16
- activesupport (= 3.0.3)
17
- builder (~> 2.1.2)
18
- i18n (~> 0.4)
19
- activerecord (3.0.3)
20
- activemodel (= 3.0.3)
21
- activesupport (= 3.0.3)
22
- arel (~> 2.0.2)
23
- tzinfo (~> 0.3.23)
24
- activesupport (3.0.3)
25
- arel (2.0.7)
26
- builder (2.1.2)
27
- diff-lcs (1.1.2)
28
- erubis (2.6.6)
29
- abstract (>= 1.0.0)
30
- git (1.2.5)
31
- i18n (0.5.0)
32
- jeweler (1.5.2)
33
- bundler (~> 1.0.0)
34
- git (>= 1.2.5)
35
- rake
36
- rack (1.2.1)
37
- rack-mount (0.6.13)
38
- rack (>= 1.0.0)
39
- rack-test (0.5.7)
40
- rack (>= 1.0)
41
- railties (3.0.3)
42
- actionpack (= 3.0.3)
43
- activesupport (= 3.0.3)
44
- rake (>= 0.8.7)
45
- thor (~> 0.14.4)
46
- rake (0.8.7)
47
- rspec (2.4.0)
48
- rspec-core (~> 2.4.0)
49
- rspec-expectations (~> 2.4.0)
50
- rspec-mocks (~> 2.4.0)
51
- rspec-core (2.4.0)
52
- rspec-expectations (2.4.0)
53
- diff-lcs (~> 1.1.2)
54
- rspec-mocks (2.4.0)
55
- rspec-rails (2.4.1)
56
- actionpack (~> 3.0)
57
- activesupport (~> 3.0)
58
- railties (~> 3.0)
59
- rspec (~> 2.4.0)
60
- sqlite3 (1.3.3)
61
- sqlite3-ruby (1.3.3)
62
- sqlite3 (>= 1.3.3)
63
- thor (0.14.6)
64
- tzinfo (0.3.24)
65
-
66
- PLATFORMS
67
- ruby
68
-
69
- DEPENDENCIES
70
- activemodel (>= 3.0.0)
71
- activerecord (>= 3.0.0)
72
- jeweler
73
- rspec
74
- rspec-rails (>= 2.0.0)
75
- sqlite3-ruby
data/Readme.textile DELETED
@@ -1,82 +0,0 @@
1
- h1. Accept values for
2
-
3
- h2. Description
4
-
5
- In order to spec ActiveRecord models.
6
- I decided to write a few custom matchers that makes the work match easier:
7
-
8
-
9
- h2. Matchers
10
-
11
- * accept_values_for
12
- * discover
13
-
14
- h3. Accept values for
15
-
16
- "Rpec matcher to test the validation":http://gusiev.com/2010/06/ultimate-rspec-matcher-to-test-validation/
17
-
18
- <pre>
19
- describe User do
20
-
21
- subject { User.new(@valid_attributes)}
22
-
23
-
24
-
25
- it { should accept_values_for(:email, "john@example.com", "lambda@gusiev.com") }
26
- it { should_not accept_values_for(:email, "invalid", nil, "a@b", "john@.com") }
27
-
28
- end</pre>
29
-
30
- h3. Discovery matcher
31
-
32
- "Rspec matcher to test named scopes":http://gusiev.com/2010/07/bdd-rspec-matcher-to-test-named_scope-scoped-rails
33
-
34
-
35
- <pre><code>describe "#by_category_id named scope" do
36
- let(:given_category) do
37
- Factory.create(:given_category)
38
- end
39
-
40
-
41
- let(:product_in_given_category) do
42
- Factory.create(
43
- :product,
44
- :categories => [category]
45
- )
46
- end
47
-
48
- let(:product_not_in_given_category) do
49
- Factory.create(
50
- :product,
51
- :categories => [Factory.create(:category)]
52
- )
53
- end
54
-
55
- # This might be tricky to redefine subject as the finder result
56
- # but in this way we can delegate the matcher to subject and
57
- # avoid writing test descriptions.
58
- subject { described_class.by_category_id(given_category.id) }
59
-
60
- it { should discover(product_in_given_category) }
61
- it { should_not discover(product_not_in_given_category) }
62
-
63
- end
64
- </code></pre>
65
-
66
-
67
- h2. Dependencies
68
-
69
- * ActiveRecord
70
- * Rspec
71
-
72
- h2. Install
73
-
74
-
75
- h3. Command line:
76
-
77
- <pre>[sudo] gem install accept_values_for</pre>
78
-
79
- h3. spec_helper.rb:
80
-
81
- <pre>require 'accept_values_for'
82
- require 'discover'</pre>