mongoa 0.1.6 → 0.1.7

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.6
1
+ 0.1.7
@@ -0,0 +1,34 @@
1
+ module Mongoa
2
+ module MongoMapper
3
+ module Matchers
4
+ class ValidateBase
5
+ attr_reader :attribute
6
+
7
+ def initialize(attribute)
8
+ @attribute = attribute
9
+ end
10
+
11
+ def matches?(subject)
12
+ @subject = subject
13
+ @validation = find_validation
14
+ end
15
+
16
+ def validation_type
17
+ raise "Redefine in the subclass"
18
+ end
19
+
20
+ private
21
+
22
+ def model_class
23
+ @subject.class
24
+ end
25
+
26
+ def find_validation
27
+ attr_validations = model_class.validations.select { |validation| validation.attribute == attribute }
28
+ return nil unless attr_validations
29
+ validation = attr_validations.detect { |validation| validation.key.include?(validation_type) }
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,35 @@
1
+ module Mongoa
2
+ module MongoMapper
3
+ module Matchers
4
+ class ValidateInclusionOfMatcher < ValidateBase
5
+ def initialize(attribute, within)
6
+ super(attribute)
7
+ @within = within
8
+ end
9
+
10
+ def matches?(subject)
11
+ super(subject)
12
+ @validation ? @validation.within == @within : false
13
+ end
14
+
15
+ def description
16
+ "require #{@attribute} to be within #{@within}"
17
+ end
18
+
19
+ def failure_message
20
+ "Expected #{@attribute} to be within #{@within} but was not"
21
+ end
22
+
23
+ def negative_failure_message
24
+ "Expected #{@attribute} to not be within #{@within} but was"
25
+ end
26
+
27
+ private
28
+
29
+ def validation_type
30
+ "ValidatesInclusionOf"
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,25 @@
1
+ module Mongoa
2
+ module MongoMapper
3
+ module Matchers
4
+ class ValidatePresenceOfMatcher < ValidateBase
5
+ def description
6
+ "require #{@attribute} to be set"
7
+ end
8
+
9
+ def failure_message
10
+ "Expected #{@attribute} to be a required field (validates_presence_of or :required => true) but was not"
11
+ end
12
+
13
+ def negative_failure_message
14
+ "Expected #{@attribute} to not be a required field (validates_presence_of or :required => true), but it was"
15
+ end
16
+
17
+ private
18
+
19
+ def validation_type
20
+ "ValidatesPresenceOf"
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,43 +1,16 @@
1
+ require 'mongoa/mongo_mapper/validations/validate_base'
2
+ require 'mongoa/mongo_mapper/validations/validate_presence_of'
3
+ require 'mongoa/mongo_mapper/validations/validate_inclusion_of'
4
+
1
5
  module Mongoa
2
6
  module MongoMapper
3
7
  module Matchers
4
8
  def validate_presence_of(attr)
5
- ValidateMatcher.new("ValidatesPresenceOf", attr)
6
- end
7
- end
8
-
9
- class ValidateMatcher
10
- attr_reader :validation_type
11
- attr_reader :attribute
12
-
13
- def initialize(validation_type, attribute)
14
- @validation_type = validation_type
15
- @attribute = attribute
16
- end
17
-
18
- def matches?(subject)
19
- @subject = subject
20
- attr_validations = model_class.validations.select { |validation| validation.attribute == attribute }
21
- return false unless attr_validations
22
- attr_validations.detect { |validation| validation.key.include?(validation_type) }
23
- end
24
-
25
- def description
26
- "require #{@attribute} to be set"
27
- end
28
-
29
- def failure_message
30
- "#{@attribute} to be a required field (validates_presence_of) but was not"
31
- end
32
-
33
- def negative_failure_message
34
- "#{@attribute} to not be a required field (validates_presence_of), but it was"
9
+ ValidatePresenceOfMatcher.new(attr)
35
10
  end
36
11
 
37
- private
38
-
39
- def model_class
40
- @subject.class
12
+ def validates_inclusion_of(attr, within)
13
+ ValidateInclusionOfMatcher.new(attr, within)
41
14
  end
42
15
  end
43
16
  end
data/mongoa.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mongoa}
8
- s.version = "0.1.6"
8
+ s.version = "0.1.7"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Scott J. Tamosunas"]
12
- s.date = %q{2010-08-11}
12
+ s.date = %q{2010-08-12}
13
13
  s.description = %q{Adds the association and validation macros for Rspec in the same way Shoulda does for ActiveRecord.}
14
14
  s.email = %q{tamosunas@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -29,6 +29,9 @@ Gem::Specification.new do |s|
29
29
  "lib/mongoa/mongo_mapper/improvements/mongo_mapper_associations.rb",
30
30
  "lib/mongoa/mongo_mapper/matchers.rb",
31
31
  "lib/mongoa/mongo_mapper/validations.rb",
32
+ "lib/mongoa/mongo_mapper/validations/validate_base.rb",
33
+ "lib/mongoa/mongo_mapper/validations/validate_inclusion_of.rb",
34
+ "lib/mongoa/mongo_mapper/validations/validate_presence_of.rb",
32
35
  "mongoa.gemspec",
33
36
  "spec/association_matcher_spec.rb",
34
37
  "spec/spec.opts",
@@ -14,27 +14,74 @@ class PostRequired
14
14
  key :name, String, :required => true
15
15
  end
16
16
 
17
+ class Within
18
+ include MongoMapper::Document
19
+
20
+ key :state, String
21
+
22
+ validates_inclusion_of :state, :within => ["new", "uploaded"]
23
+ end
24
+
25
+ class WithinIn
26
+ include MongoMapper::Document
27
+
28
+ key :state, String, :in => ["new", "uploaded"]
29
+ end
17
30
 
18
31
  describe Mongoa::MongoMapper::Matchers do
19
- describe "#validates_presence_of" do
20
- it "should return true if the key has a validates_presence_of validtion" do
21
- validation = Mongoa::MongoMapper::ValidateMatcher.new("ValidatesPresenceOf", :name)
22
- validation.should be_matches(Post.new)
32
+ describe "validates_presence_of or key required => :true" do
33
+ describe "#validates_presence_of" do
34
+ it "should return true if the key has a validates_presence_of validtion" do
35
+ validation = Mongoa::MongoMapper::Matchers::ValidatePresenceOfMatcher.new(:name)
36
+ validation.should be_matches(Post.new)
37
+ end
38
+
39
+ it "should return false if the key does not have a validates_presence_of validtion" do
40
+ validation = Mongoa::MongoMapper::Matchers::ValidatePresenceOfMatcher.new(:foo)
41
+ validation.should_not be_matches(Post.new)
42
+ end
23
43
  end
44
+
45
+ describe "required" do
46
+ it "should work the same if the key is required rather than validates_presence_of" do
47
+ validation = Mongoa::MongoMapper::Matchers::ValidatePresenceOfMatcher.new(:name)
48
+ validation.should be_matches(PostRequired.new)
24
49
 
25
- it "should return false if the key does not have a validates_presence_of validtion" do
26
- validation = Mongoa::MongoMapper::ValidateMatcher.new("ValidatesPresenceOf", :foo)
27
- validation.should_not be_matches(Post.new)
50
+ validation = Mongoa::MongoMapper::Matchers::ValidatePresenceOfMatcher.new(:foo)
51
+ validation.should_not be_matches(PostRequired.new)
52
+ end
28
53
  end
29
54
  end
30
55
 
31
- describe "required" do
32
- it "should work the same if the key is required rather than validates_presence_of" do
33
- validation = Mongoa::MongoMapper::ValidateMatcher.new("ValidatesPresenceOf", :name)
34
- validation.should be_matches(PostRequired.new)
56
+ describe "#validates_inclusion_of or key :in => []" do
57
+ describe "validates_inclusion_of" do
58
+ it "should return true if the key has a validate_inclusion_of with the specified within" do
59
+ validation = Mongoa::MongoMapper::Matchers::ValidateInclusionOfMatcher.new(:state, ["new", "uploaded"])
60
+ validation.should be_matches(Within.new)
61
+ end
62
+
63
+ it "should return false if the key has a validate_inclusion_of but the within doesn't match" do
64
+ validation = Mongoa::MongoMapper::Matchers::ValidateInclusionOfMatcher.new(:state, ["goo", "gaa"])
65
+ validation.should_not be_matches(Within.new)
66
+ end
35
67
 
36
- validation = Mongoa::MongoMapper::ValidateMatcher.new("ValidatesPresenceOf", :foo)
37
- validation.should_not be_matches(PostRequired.new)
68
+ it "should return false if the key does not have a validate_inclusion_of set" do
69
+ validation = Mongoa::MongoMapper::Matchers::ValidateInclusionOfMatcher.new(:foo, ["new", "uploaded"])
70
+ validation.should_not be_matches(Within.new)
71
+ end
38
72
  end
73
+
74
+ describe "in" do
75
+ it "should work the same as validates_inclusion_of" do
76
+ validation = Mongoa::MongoMapper::Matchers::ValidateInclusionOfMatcher.new(:state, ["new", "uploaded"])
77
+ validation.should be_matches(WithinIn.new)
78
+
79
+ validation = Mongoa::MongoMapper::Matchers::ValidateInclusionOfMatcher.new(:state, ["goo", "gaa"])
80
+ validation.should_not be_matches(WithinIn.new)
81
+
82
+ validation = Mongoa::MongoMapper::Matchers::ValidateInclusionOfMatcher.new(:foo, ["new", "uploaded"])
83
+ validation.should_not be_matches(WithinIn.new)
84
+ end
85
+ end
39
86
  end
40
87
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 6
9
- version: 0.1.6
8
+ - 7
9
+ version: 0.1.7
10
10
  platform: ruby
11
11
  authors:
12
12
  - Scott J. Tamosunas
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-08-11 00:00:00 -04:00
17
+ date: 2010-08-12 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -54,6 +54,9 @@ files:
54
54
  - lib/mongoa/mongo_mapper/improvements/mongo_mapper_associations.rb
55
55
  - lib/mongoa/mongo_mapper/matchers.rb
56
56
  - lib/mongoa/mongo_mapper/validations.rb
57
+ - lib/mongoa/mongo_mapper/validations/validate_base.rb
58
+ - lib/mongoa/mongo_mapper/validations/validate_inclusion_of.rb
59
+ - lib/mongoa/mongo_mapper/validations/validate_presence_of.rb
57
60
  - mongoa.gemspec
58
61
  - spec/association_matcher_spec.rb
59
62
  - spec/spec.opts