mark_mapper 0.0.1
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/LICENSE +21 -0
- data/README.rdoc +39 -0
- data/examples/attr_accessible.rb +24 -0
- data/examples/attr_protected.rb +24 -0
- data/examples/cache_key.rb +26 -0
- data/examples/custom_types.rb +26 -0
- data/examples/identity_map.rb +30 -0
- data/examples/identity_map/automatic.rb +2 -0
- data/examples/keys.rb +42 -0
- data/examples/modifiers/set.rb +27 -0
- data/examples/plugins.rb +40 -0
- data/examples/querying.rb +39 -0
- data/examples/sample_app.rb +43 -0
- data/examples/scopes.rb +56 -0
- data/examples/validating/embedded_docs.rb +31 -0
- data/lib/mark_mapper.rb +125 -0
- data/lib/mark_mapper/config.rb +90 -0
- data/lib/mark_mapper/connection.rb +60 -0
- data/lib/mark_mapper/criteria_hash.rb +194 -0
- data/lib/mark_mapper/document.rb +46 -0
- data/lib/mark_mapper/embedded_document.rb +32 -0
- data/lib/mark_mapper/exceptions.rb +33 -0
- data/lib/mark_mapper/extensions/array.rb +27 -0
- data/lib/mark_mapper/extensions/boolean.rb +45 -0
- data/lib/mark_mapper/extensions/date.rb +29 -0
- data/lib/mark_mapper/extensions/duplicable.rb +86 -0
- data/lib/mark_mapper/extensions/float.rb +18 -0
- data/lib/mark_mapper/extensions/hash.rb +26 -0
- data/lib/mark_mapper/extensions/integer.rb +27 -0
- data/lib/mark_mapper/extensions/kernel.rb +11 -0
- data/lib/mark_mapper/extensions/nil_class.rb +18 -0
- data/lib/mark_mapper/extensions/object.rb +30 -0
- data/lib/mark_mapper/extensions/object_id.rb +18 -0
- data/lib/mark_mapper/extensions/set.rb +20 -0
- data/lib/mark_mapper/extensions/string.rb +31 -0
- data/lib/mark_mapper/extensions/symbol.rb +87 -0
- data/lib/mark_mapper/extensions/time.rb +29 -0
- data/lib/mark_mapper/locale/en.yml +5 -0
- data/lib/mark_mapper/middleware/identity_map.rb +41 -0
- data/lib/mark_mapper/normalizers/criteria_hash_key.rb +17 -0
- data/lib/mark_mapper/normalizers/criteria_hash_value.rb +66 -0
- data/lib/mark_mapper/normalizers/fields_value.rb +26 -0
- data/lib/mark_mapper/normalizers/hash_key.rb +19 -0
- data/lib/mark_mapper/normalizers/integer.rb +19 -0
- data/lib/mark_mapper/normalizers/options_hash_value.rb +83 -0
- data/lib/mark_mapper/normalizers/sort_value.rb +55 -0
- data/lib/mark_mapper/options_hash.rb +103 -0
- data/lib/mark_mapper/pagination.rb +6 -0
- data/lib/mark_mapper/pagination/collection.rb +32 -0
- data/lib/mark_mapper/pagination/paginator.rb +46 -0
- data/lib/mark_mapper/plugins.rb +22 -0
- data/lib/mark_mapper/plugins/accessible.rb +61 -0
- data/lib/mark_mapper/plugins/active_model.rb +18 -0
- data/lib/mark_mapper/plugins/associations.rb +96 -0
- data/lib/mark_mapper/plugins/associations/base.rb +98 -0
- data/lib/mark_mapper/plugins/associations/belongs_to_association.rb +63 -0
- data/lib/mark_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb +35 -0
- data/lib/mark_mapper/plugins/associations/belongs_to_proxy.rb +52 -0
- data/lib/mark_mapper/plugins/associations/collection.rb +29 -0
- data/lib/mark_mapper/plugins/associations/embedded_collection.rb +44 -0
- data/lib/mark_mapper/plugins/associations/in_array_proxy.rb +133 -0
- data/lib/mark_mapper/plugins/associations/many_association.rb +63 -0
- data/lib/mark_mapper/plugins/associations/many_documents_as_proxy.rb +28 -0
- data/lib/mark_mapper/plugins/associations/many_documents_proxy.rb +142 -0
- data/lib/mark_mapper/plugins/associations/many_embedded_polymorphic_proxy.rb +32 -0
- data/lib/mark_mapper/plugins/associations/many_embedded_proxy.rb +24 -0
- data/lib/mark_mapper/plugins/associations/many_polymorphic_proxy.rb +14 -0
- data/lib/mark_mapper/plugins/associations/one_as_proxy.rb +22 -0
- data/lib/mark_mapper/plugins/associations/one_association.rb +48 -0
- data/lib/mark_mapper/plugins/associations/one_embedded_polymorphic_proxy.rb +30 -0
- data/lib/mark_mapper/plugins/associations/one_embedded_proxy.rb +44 -0
- data/lib/mark_mapper/plugins/associations/one_proxy.rb +95 -0
- data/lib/mark_mapper/plugins/associations/proxy.rb +138 -0
- data/lib/mark_mapper/plugins/associations/single_association.rb +46 -0
- data/lib/mark_mapper/plugins/caching.rb +21 -0
- data/lib/mark_mapper/plugins/callbacks.rb +42 -0
- data/lib/mark_mapper/plugins/clone.rb +24 -0
- data/lib/mark_mapper/plugins/counter_cache.rb +97 -0
- data/lib/mark_mapper/plugins/dirty.rb +61 -0
- data/lib/mark_mapper/plugins/document.rb +41 -0
- data/lib/mark_mapper/plugins/dumpable.rb +22 -0
- data/lib/mark_mapper/plugins/dynamic_querying.rb +45 -0
- data/lib/mark_mapper/plugins/dynamic_querying/dynamic_finder.rb +44 -0
- data/lib/mark_mapper/plugins/embedded_callbacks.rb +81 -0
- data/lib/mark_mapper/plugins/embedded_document.rb +53 -0
- data/lib/mark_mapper/plugins/equality.rb +23 -0
- data/lib/mark_mapper/plugins/identity_map.rb +144 -0
- data/lib/mark_mapper/plugins/indexable.rb +86 -0
- data/lib/mark_mapper/plugins/inspect.rb +16 -0
- data/lib/mark_mapper/plugins/keys.rb +470 -0
- data/lib/mark_mapper/plugins/keys/key.rb +134 -0
- data/lib/mark_mapper/plugins/keys/static.rb +45 -0
- data/lib/mark_mapper/plugins/logger.rb +18 -0
- data/lib/mark_mapper/plugins/modifiers.rb +140 -0
- data/lib/mark_mapper/plugins/pagination.rb +16 -0
- data/lib/mark_mapper/plugins/partial_updates.rb +77 -0
- data/lib/mark_mapper/plugins/persistence.rb +79 -0
- data/lib/mark_mapper/plugins/protected.rb +45 -0
- data/lib/mark_mapper/plugins/querying.rb +173 -0
- data/lib/mark_mapper/plugins/querying/decorated_markmapper_query.rb +75 -0
- data/lib/mark_mapper/plugins/rails.rb +79 -0
- data/lib/mark_mapper/plugins/rails/active_record_association_adapter.rb +33 -0
- data/lib/mark_mapper/plugins/sci.rb +82 -0
- data/lib/mark_mapper/plugins/scopes.rb +28 -0
- data/lib/mark_mapper/plugins/serialization.rb +109 -0
- data/lib/mark_mapper/plugins/timestamps.rb +29 -0
- data/lib/mark_mapper/plugins/touch.rb +18 -0
- data/lib/mark_mapper/plugins/userstamps.rb +18 -0
- data/lib/mark_mapper/plugins/validations.rb +96 -0
- data/lib/mark_mapper/query.rb +278 -0
- data/lib/mark_mapper/railtie.rb +52 -0
- data/lib/mark_mapper/railtie/database.rake +65 -0
- data/lib/mark_mapper/translation.rb +10 -0
- data/lib/mark_mapper/version.rb +4 -0
- data/lib/rails/generators/mark_mapper/config/config_generator.rb +37 -0
- data/lib/rails/generators/mark_mapper/config/templates/marklogic.yml +19 -0
- data/lib/rails/generators/mark_mapper/model/model_generator.rb +40 -0
- data/lib/rails/generators/mark_mapper/model/templates/model.rb +17 -0
- data/spec/config/mark_mapper.yml +6 -0
- data/spec/examples_spec.rb +25 -0
- data/spec/functional/accessible_spec.rb +198 -0
- data/spec/functional/associations/belongs_to_polymorphic_proxy_spec.rb +64 -0
- data/spec/functional/associations/belongs_to_proxy_spec.rb +255 -0
- data/spec/functional/associations/in_array_proxy_spec.rb +349 -0
- data/spec/functional/associations/many_documents_as_proxy_spec.rb +230 -0
- data/spec/functional/associations/many_documents_proxy_spec.rb +968 -0
- data/spec/functional/associations/many_embedded_polymorphic_proxy_spec.rb +238 -0
- data/spec/functional/associations/many_embedded_proxy_spec.rb +288 -0
- data/spec/functional/associations/many_polymorphic_proxy_spec.rb +302 -0
- data/spec/functional/associations/one_as_proxy_spec.rb +489 -0
- data/spec/functional/associations/one_embedded_polymorphic_proxy_spec.rb +207 -0
- data/spec/functional/associations/one_embedded_proxy_spec.rb +100 -0
- data/spec/functional/associations/one_proxy_spec.rb +406 -0
- data/spec/functional/associations_spec.rb +48 -0
- data/spec/functional/caching_spec.rb +75 -0
- data/spec/functional/callbacks_spec.rb +330 -0
- data/spec/functional/counter_cache_spec.rb +235 -0
- data/spec/functional/dirty_spec.rb +316 -0
- data/spec/functional/document_spec.rb +310 -0
- data/spec/functional/dumpable_spec.rb +24 -0
- data/spec/functional/dynamic_querying_spec.rb +75 -0
- data/spec/functional/embedded_document_spec.rb +316 -0
- data/spec/functional/equality_spec.rb +20 -0
- data/spec/functional/extensions_spec.rb +16 -0
- data/spec/functional/identity_map_spec.rb +483 -0
- data/spec/functional/keys_spec.rb +339 -0
- data/spec/functional/logger_spec.rb +20 -0
- data/spec/functional/modifiers_spec.rb +446 -0
- data/spec/functional/options_hash_spec.rb +41 -0
- data/spec/functional/pagination_spec.rb +89 -0
- data/spec/functional/partial_updates_spec.rb +530 -0
- data/spec/functional/protected_spec.rb +199 -0
- data/spec/functional/querying_spec.rb +984 -0
- data/spec/functional/rails_spec.rb +55 -0
- data/spec/functional/sci_spec.rb +374 -0
- data/spec/functional/scopes_spec.rb +204 -0
- data/spec/functional/static_keys_spec.rb +153 -0
- data/spec/functional/timestamps_spec.rb +97 -0
- data/spec/functional/touch_spec.rb +125 -0
- data/spec/functional/userstamps_spec.rb +46 -0
- data/spec/functional/validations_spec.rb +416 -0
- data/spec/quality_spec.rb +51 -0
- data/spec/spec_helper.rb +150 -0
- data/spec/support/matchers.rb +15 -0
- data/spec/support/models.rb +256 -0
- data/spec/symbol_operator_spec.rb +70 -0
- data/spec/symbol_spec.rb +9 -0
- data/spec/unit/associations/base_spec.rb +146 -0
- data/spec/unit/associations/belongs_to_association_spec.rb +30 -0
- data/spec/unit/associations/many_association_spec.rb +64 -0
- data/spec/unit/associations/one_association_spec.rb +48 -0
- data/spec/unit/associations/proxy_spec.rb +103 -0
- data/spec/unit/clone_spec.rb +79 -0
- data/spec/unit/config_generator_spec.rb +24 -0
- data/spec/unit/criteria_hash_spec.rb +218 -0
- data/spec/unit/document_spec.rb +251 -0
- data/spec/unit/dynamic_finder_spec.rb +125 -0
- data/spec/unit/embedded_document_spec.rb +676 -0
- data/spec/unit/equality_spec.rb +38 -0
- data/spec/unit/exceptions_spec.rb +12 -0
- data/spec/unit/extensions_spec.rb +368 -0
- data/spec/unit/identity_map_middleware_spec.rb +134 -0
- data/spec/unit/inspect_spec.rb +47 -0
- data/spec/unit/key_spec.rb +276 -0
- data/spec/unit/keys_spec.rb +155 -0
- data/spec/unit/mark_mapper_spec.rb +37 -0
- data/spec/unit/model_generator_spec.rb +45 -0
- data/spec/unit/normalizers/criteria_hash_key_spec.rb +37 -0
- data/spec/unit/normalizers/criteria_hash_value_spec.rb +200 -0
- data/spec/unit/normalizers/fields_value_spec.rb +45 -0
- data/spec/unit/normalizers/hash_key_spec.rb +15 -0
- data/spec/unit/normalizers/integer_spec.rb +24 -0
- data/spec/unit/normalizers/options_hash_value_spec.rb +99 -0
- data/spec/unit/normalizers/sort_value_spec.rb +98 -0
- data/spec/unit/options_hash_spec.rb +64 -0
- data/spec/unit/pagination/collection_spec.rb +30 -0
- data/spec/unit/pagination/paginator_spec.rb +118 -0
- data/spec/unit/pagination_spec.rb +11 -0
- data/spec/unit/plugins_spec.rb +89 -0
- data/spec/unit/query_spec.rb +837 -0
- data/spec/unit/rails_compatibility_spec.rb +40 -0
- data/spec/unit/rails_reflect_on_association_spec.rb +118 -0
- data/spec/unit/rails_spec.rb +188 -0
- data/spec/unit/serialization_spec.rb +169 -0
- data/spec/unit/serializers/json_serializer_spec.rb +218 -0
- data/spec/unit/serializers/xml_serializer_spec.rb +198 -0
- data/spec/unit/time_zones_spec.rb +44 -0
- data/spec/unit/translation_spec.rb +27 -0
- data/spec/unit/validations_spec.rb +588 -0
- metadata +307 -0
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Translation" do
|
4
|
+
it "should translate add mark_mapper translations" do
|
5
|
+
I18n.translate("mark_mapper.errors.messages.taken").should == "has already been taken"
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should set i18n_scope" do
|
9
|
+
Doc().i18n_scope.should == :mark_mapper
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should translate document attributes" do
|
13
|
+
I18n.config.backend.store_translations(:en, :mark_mapper => {:attributes => {:thing => {:foo => 'Bar'}}})
|
14
|
+
doc = Doc('Thing') do
|
15
|
+
key :foo, String
|
16
|
+
end
|
17
|
+
doc.human_attribute_name(:foo).should == 'Bar'
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should translate embedded document attributes" do
|
21
|
+
I18n.config.backend.store_translations(:en, :mark_mapper => {:attributes => {:thing => {:foo => 'Bar'}}})
|
22
|
+
doc = EDoc('Thing') do
|
23
|
+
key :foo, String
|
24
|
+
end
|
25
|
+
doc.human_attribute_name(:foo).should == 'Bar'
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,588 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Validations" do
|
4
|
+
context "Validations" do
|
5
|
+
context "on a Document" do
|
6
|
+
before do
|
7
|
+
@document = Doc('John')
|
8
|
+
end
|
9
|
+
|
10
|
+
context "Validating acceptance of" do
|
11
|
+
it "should work with validates_acceptance_of macro" do
|
12
|
+
@document.key :terms, String
|
13
|
+
@document.validates_acceptance_of :terms
|
14
|
+
doc = @document.new(:terms => '')
|
15
|
+
doc.should have_error_on(:terms)
|
16
|
+
doc.terms = '1'
|
17
|
+
doc.should_not have_error_on(:terms)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "validating confirmation of" do
|
22
|
+
it "should work with validates_confirmation_of macro" do
|
23
|
+
@document.key :password, String
|
24
|
+
@document.validates_confirmation_of :password
|
25
|
+
|
26
|
+
# NOTE: Api change as ActiveModel passes if password_confirmation is nil
|
27
|
+
doc = @document.new
|
28
|
+
doc.password = 'foobar'
|
29
|
+
doc.password_confirmation = 'foobar1'
|
30
|
+
doc.should have_error_on(:password).or(have_error_on(:password_confirmation))
|
31
|
+
|
32
|
+
doc.password_confirmation = 'foobar'
|
33
|
+
doc.should_not have_error_on(:password)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context "validating uniqueness of" do
|
38
|
+
it "should work with :unique => true passed to ::key" do
|
39
|
+
@document.key :email, String, :unique => true
|
40
|
+
|
41
|
+
@document.create(:email => "cheald@gmail.com")
|
42
|
+
doc = @document.new :email => "cheald@gmail.com"
|
43
|
+
doc.should_not be_valid
|
44
|
+
doc.should have_error_on(:email)
|
45
|
+
doc.email = "cheald@mashable.com"
|
46
|
+
doc.should be_valid
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "validating format of" do
|
51
|
+
it "should work with validates_format_of macro" do
|
52
|
+
@document.key :name, String
|
53
|
+
@document.validates_format_of :name, :with => /.+/
|
54
|
+
doc = @document.new
|
55
|
+
doc.should have_error_on(:name)
|
56
|
+
doc.name = 'John'
|
57
|
+
doc.should_not have_error_on(:name)
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should work with :format shorcut key" do
|
61
|
+
@document.key :name, String, :format => /.+/
|
62
|
+
doc = @document.new
|
63
|
+
doc.should have_error_on(:name)
|
64
|
+
doc.name = 'John'
|
65
|
+
doc.should_not have_error_on(:name)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context "validating length of" do
|
70
|
+
it "should work with validates_length_of macro" do
|
71
|
+
@document.key :name, String
|
72
|
+
@document.validates_length_of :name, :minimum => 5
|
73
|
+
doc = @document.new
|
74
|
+
doc.should have_error_on(:name)
|
75
|
+
end
|
76
|
+
|
77
|
+
context "with :length => integer shortcut" do
|
78
|
+
it "should set maximum of integer provided" do
|
79
|
+
@document.key :name, String, :length => 5
|
80
|
+
doc = @document.new
|
81
|
+
doc.name = '123456'
|
82
|
+
doc.should have_error_on(:name)
|
83
|
+
doc.name = '12345'
|
84
|
+
doc.should_not have_error_on(:name)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context "with :length => range shortcut" do
|
89
|
+
before do
|
90
|
+
@document.key :name, String, :length => 5..7
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should set minimum of range min" do
|
94
|
+
doc = @document.new
|
95
|
+
doc.should have_error_on(:name)
|
96
|
+
doc.name = '123456'
|
97
|
+
doc.should_not have_error_on(:name)
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should set maximum of range max" do
|
101
|
+
doc = @document.new
|
102
|
+
doc.should have_error_on(:name)
|
103
|
+
doc.name = '12345678'
|
104
|
+
doc.should have_error_on(:name)
|
105
|
+
doc.name = '123456'
|
106
|
+
doc.should_not have_error_on(:name)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
context "with :length => hash shortcut" do
|
111
|
+
it "should pass options through" do
|
112
|
+
@document.key :name, String, :length => {:minimum => 2}
|
113
|
+
doc = @document.new
|
114
|
+
doc.should have_error_on(:name)
|
115
|
+
doc.name = '12'
|
116
|
+
doc.should_not have_error_on(:name)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end # validates_length_of
|
120
|
+
|
121
|
+
context "Validating numericality of" do
|
122
|
+
it "should work with validates_numericality_of macro" do
|
123
|
+
@document.key :age, Integer
|
124
|
+
@document.validates_numericality_of :age
|
125
|
+
doc = @document.new
|
126
|
+
doc.age = 'String'
|
127
|
+
doc.should have_error_on(:age)
|
128
|
+
doc.age = 23
|
129
|
+
doc.should_not have_error_on(:age)
|
130
|
+
end
|
131
|
+
|
132
|
+
context "with :numeric shortcut" do
|
133
|
+
it "should work with integer or float" do
|
134
|
+
@document.key :weight, Float, :numeric => true
|
135
|
+
doc = @document.new
|
136
|
+
doc.weight = 'String'
|
137
|
+
doc.should have_error_on(:weight)
|
138
|
+
doc.weight = 23.0
|
139
|
+
doc.should_not have_error_on(:weight)
|
140
|
+
doc.weight = 23
|
141
|
+
doc.should_not have_error_on(:weight)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
context "with :numeric shortcut on Integer key" do
|
146
|
+
it "should only work with integers" do
|
147
|
+
@document.key :age, Integer, :numeric => true
|
148
|
+
doc = @document.new
|
149
|
+
doc.age = 'String'
|
150
|
+
doc.should have_error_on(:age)
|
151
|
+
doc.age = 23.1
|
152
|
+
doc.should have_error_on(:age)
|
153
|
+
doc.age = 23
|
154
|
+
doc.should_not have_error_on(:age)
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end # numericality of
|
158
|
+
|
159
|
+
context "validating presence of" do
|
160
|
+
it "should work with validates_presence_of macro" do
|
161
|
+
@document.key :name, String
|
162
|
+
@document.validates_presence_of :name
|
163
|
+
doc = @document.new
|
164
|
+
doc.should have_error_on(:name)
|
165
|
+
end
|
166
|
+
|
167
|
+
it "should work with :required shortcut on key definition" do
|
168
|
+
@document.key :name, String, :required => true
|
169
|
+
doc = @document.new
|
170
|
+
doc.should have_error_on(:name)
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
context "validating exclusion of" do
|
175
|
+
it "should throw error if enumerator not provided" do
|
176
|
+
@document.key :action, String
|
177
|
+
lambda {
|
178
|
+
@document.validates_exclusion_of :action
|
179
|
+
}.should raise_error(ArgumentError)
|
180
|
+
end
|
181
|
+
|
182
|
+
it "should work with validates_exclusion_of macro" do
|
183
|
+
@document.key :action, String
|
184
|
+
@document.validates_exclusion_of :action, :in => %w(kick run)
|
185
|
+
|
186
|
+
doc = @document.new
|
187
|
+
doc.should_not have_error_on(:action)
|
188
|
+
|
189
|
+
doc.action = 'fart'
|
190
|
+
doc.should_not have_error_on(:action)
|
191
|
+
|
192
|
+
doc.action = 'kick'
|
193
|
+
doc.should have_error_on(:action)
|
194
|
+
doc.errors[:action].should == ['is reserved']
|
195
|
+
end
|
196
|
+
|
197
|
+
it "should work with :not_in shortcut on key definition" do
|
198
|
+
@document.key :action, String, :not_in => %w(kick run)
|
199
|
+
|
200
|
+
doc = @document.new
|
201
|
+
doc.should_not have_error_on(:action)
|
202
|
+
|
203
|
+
doc.action = 'fart'
|
204
|
+
doc.should_not have_error_on(:action)
|
205
|
+
|
206
|
+
doc.action = 'kick'
|
207
|
+
doc.should have_error_on(:action)
|
208
|
+
doc.errors[:action].should == ['is reserved']
|
209
|
+
end
|
210
|
+
|
211
|
+
it "should not have error if allow nil is true and value is nil" do
|
212
|
+
@document.key :action, String
|
213
|
+
@document.validates_exclusion_of :action, :in => %w(kick run), :allow_nil => true
|
214
|
+
|
215
|
+
doc = @document.new
|
216
|
+
doc.should_not have_error_on(:action)
|
217
|
+
end
|
218
|
+
|
219
|
+
it "should not have error if allow blank is true and value is blank" do
|
220
|
+
@document.key :action, String
|
221
|
+
@document.validates_exclusion_of :action, :in => %w(kick run), :allow_nil => true
|
222
|
+
|
223
|
+
doc = @document.new(:action => '')
|
224
|
+
doc.should_not have_error_on(:action)
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
context "validating inclusion of" do
|
229
|
+
it "should throw error if enumerator not provided" do
|
230
|
+
@document.key :action, String
|
231
|
+
lambda {
|
232
|
+
@document.validates_inclusion_of :action
|
233
|
+
}.should raise_error(ArgumentError)
|
234
|
+
end
|
235
|
+
|
236
|
+
it "should work with validates_inclusion_of macro" do
|
237
|
+
@document.key :action, String
|
238
|
+
@document.validates_inclusion_of :action, :in => %w(kick run)
|
239
|
+
|
240
|
+
doc = @document.new
|
241
|
+
doc.should have_error_on(:action)
|
242
|
+
doc.errors[:action].should == ['is not included in the list']
|
243
|
+
|
244
|
+
doc.action = 'fart'
|
245
|
+
doc.should have_error_on(:action)
|
246
|
+
doc.errors[:action].should == ['is not included in the list']
|
247
|
+
|
248
|
+
doc.action = 'kick'
|
249
|
+
doc.should_not have_error_on(:action)
|
250
|
+
end
|
251
|
+
|
252
|
+
it "should work with :in shortcut on key definition" do
|
253
|
+
@document.key :action, String, :in => %w(kick run)
|
254
|
+
|
255
|
+
doc = @document.new
|
256
|
+
doc.should have_error_on(:action)
|
257
|
+
doc.errors[:action].should == ['is not included in the list']
|
258
|
+
|
259
|
+
doc.action = 'fart'
|
260
|
+
doc.should have_error_on(:action)
|
261
|
+
doc.errors[:action].should == ['is not included in the list']
|
262
|
+
|
263
|
+
doc.action = 'kick'
|
264
|
+
doc.should_not have_error_on(:action)
|
265
|
+
end
|
266
|
+
|
267
|
+
it "should work with :required shortcut on Boolean type" do
|
268
|
+
@document.key :flag, Boolean, :required => true
|
269
|
+
|
270
|
+
doc = @document.new
|
271
|
+
doc.should have_error_on(:flag)
|
272
|
+
doc.errors[:flag].should == ['is not included in the list']
|
273
|
+
|
274
|
+
doc.flag = true
|
275
|
+
doc.should_not have_error_on(:action)
|
276
|
+
|
277
|
+
doc.flag = false
|
278
|
+
doc.should_not have_error_on(:action)
|
279
|
+
end
|
280
|
+
|
281
|
+
it "should not have error if allow nil is true and value is nil" do
|
282
|
+
@document.key :action, String
|
283
|
+
@document.validates_inclusion_of :action, :in => %w(kick run), :allow_nil => true
|
284
|
+
|
285
|
+
doc = @document.new
|
286
|
+
doc.should_not have_error_on(:action)
|
287
|
+
end
|
288
|
+
|
289
|
+
it "should not have error if allow blank is true and value is blank" do
|
290
|
+
@document.key :action, String
|
291
|
+
@document.validates_inclusion_of :action, :in => %w(kick run), :allow_blank => true
|
292
|
+
|
293
|
+
doc = @document.new(:action => '')
|
294
|
+
doc.should_not have_error_on(:action)
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
end # End on a Document
|
299
|
+
|
300
|
+
context "On an EmbeddedDocument" do
|
301
|
+
before do
|
302
|
+
@embedded_doc = EDoc()
|
303
|
+
end
|
304
|
+
|
305
|
+
context "Validating acceptance of" do
|
306
|
+
it "should work with validates_acceptance_of macro" do
|
307
|
+
@embedded_doc.key :terms, String
|
308
|
+
@embedded_doc.validates_acceptance_of :terms
|
309
|
+
doc = @embedded_doc.new(:terms => '')
|
310
|
+
doc.should have_error_on(:terms)
|
311
|
+
doc.terms = '1'
|
312
|
+
doc.should_not have_error_on(:terms)
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
316
|
+
context "validating confirmation of" do
|
317
|
+
it "should work with validates_confirmation_of macro" do
|
318
|
+
@embedded_doc.key :password, String
|
319
|
+
@embedded_doc.validates_confirmation_of :password
|
320
|
+
doc = @embedded_doc.new
|
321
|
+
doc.password = 'foobar'
|
322
|
+
doc.password_confirmation = 'foobar1'
|
323
|
+
doc.should have_error_on(:password).or(have_error_on(:password_confirmation))
|
324
|
+
doc.password_confirmation = 'foobar'
|
325
|
+
doc.should_not have_error_on(:password)
|
326
|
+
end
|
327
|
+
end
|
328
|
+
|
329
|
+
context "validating format of" do
|
330
|
+
it "should work with validates_format_of macro" do
|
331
|
+
@embedded_doc.key :name, String
|
332
|
+
@embedded_doc.validates_format_of :name, :with => /.+/
|
333
|
+
doc = @embedded_doc.new
|
334
|
+
doc.should have_error_on(:name)
|
335
|
+
doc.name = 'John'
|
336
|
+
doc.should_not have_error_on(:name)
|
337
|
+
end
|
338
|
+
|
339
|
+
it "should work with :format shorcut key" do
|
340
|
+
@embedded_doc.key :name, String, :format => /.+/
|
341
|
+
doc = @embedded_doc.new
|
342
|
+
doc.should have_error_on(:name)
|
343
|
+
doc.name = 'John'
|
344
|
+
doc.should_not have_error_on(:name)
|
345
|
+
end
|
346
|
+
end
|
347
|
+
|
348
|
+
context "validating length of" do
|
349
|
+
it "should work with validates_length_of macro" do
|
350
|
+
@embedded_doc.key :name, String
|
351
|
+
@embedded_doc.validates_length_of :name, :minimum => 5
|
352
|
+
doc = @embedded_doc.new
|
353
|
+
doc.should have_error_on(:name)
|
354
|
+
end
|
355
|
+
|
356
|
+
context "with :length => integer shortcut" do
|
357
|
+
it "should set maximum of integer provided" do
|
358
|
+
@embedded_doc.key :name, String, :length => 5
|
359
|
+
doc = @embedded_doc.new
|
360
|
+
doc.name = '123456'
|
361
|
+
doc.should have_error_on(:name)
|
362
|
+
doc.name = '12345'
|
363
|
+
doc.should_not have_error_on(:name)
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
context "with :length => range shortcut" do
|
368
|
+
before do
|
369
|
+
@embedded_doc.key :name, String, :length => 5..7
|
370
|
+
end
|
371
|
+
|
372
|
+
it "should set minimum of range min" do
|
373
|
+
doc = @embedded_doc.new
|
374
|
+
doc.should have_error_on(:name)
|
375
|
+
doc.name = '123456'
|
376
|
+
doc.should_not have_error_on(:name)
|
377
|
+
end
|
378
|
+
|
379
|
+
it "should set maximum of range max" do
|
380
|
+
doc = @embedded_doc.new
|
381
|
+
doc.should have_error_on(:name)
|
382
|
+
doc.name = '12345678'
|
383
|
+
doc.should have_error_on(:name)
|
384
|
+
doc.name = '123456'
|
385
|
+
doc.should_not have_error_on(:name)
|
386
|
+
end
|
387
|
+
end
|
388
|
+
|
389
|
+
context "with :length => hash shortcut" do
|
390
|
+
it "should pass options through" do
|
391
|
+
@embedded_doc.key :name, String, :length => {:minimum => 2}
|
392
|
+
doc = @embedded_doc.new
|
393
|
+
doc.should have_error_on(:name)
|
394
|
+
doc.name = '12'
|
395
|
+
doc.should_not have_error_on(:name)
|
396
|
+
end
|
397
|
+
end
|
398
|
+
end # validates_length_of
|
399
|
+
|
400
|
+
context "Validating numericality of" do
|
401
|
+
it "should work with validates_numericality_of macro" do
|
402
|
+
@embedded_doc.key :age, Integer
|
403
|
+
@embedded_doc.validates_numericality_of :age
|
404
|
+
doc = @embedded_doc.new
|
405
|
+
doc.age = 'String'
|
406
|
+
doc.should have_error_on(:age)
|
407
|
+
doc.age = 23
|
408
|
+
doc.should_not have_error_on(:age)
|
409
|
+
end
|
410
|
+
|
411
|
+
context "with :numeric shortcut" do
|
412
|
+
it "should work with integer or float" do
|
413
|
+
@embedded_doc.key :weight, Float, :numeric => true
|
414
|
+
doc = @embedded_doc.new
|
415
|
+
doc.weight = 'String'
|
416
|
+
doc.should have_error_on(:weight)
|
417
|
+
doc.weight = 23.0
|
418
|
+
doc.should_not have_error_on(:weight)
|
419
|
+
doc.weight = 23
|
420
|
+
doc.should_not have_error_on(:weight)
|
421
|
+
end
|
422
|
+
end
|
423
|
+
|
424
|
+
context "with :numeric shortcut on Integer key" do
|
425
|
+
it "should only work with integers" do
|
426
|
+
@embedded_doc.key :age, Integer, :numeric => true
|
427
|
+
doc = @embedded_doc.new
|
428
|
+
doc.age = 'String'
|
429
|
+
doc.should have_error_on(:age)
|
430
|
+
doc.age = 23.1
|
431
|
+
doc.should have_error_on(:age)
|
432
|
+
doc.age = 23
|
433
|
+
doc.should_not have_error_on(:age)
|
434
|
+
end
|
435
|
+
end
|
436
|
+
end # numericality of
|
437
|
+
|
438
|
+
context "validating presence of" do
|
439
|
+
it "should work with validates_presence_of macro" do
|
440
|
+
@embedded_doc.key :name, String
|
441
|
+
@embedded_doc.validates_presence_of :name
|
442
|
+
doc = @embedded_doc.new
|
443
|
+
doc.should have_error_on(:name)
|
444
|
+
end
|
445
|
+
|
446
|
+
it "should work with :required shortcut on key definition" do
|
447
|
+
@embedded_doc.key :name, String, :required => true
|
448
|
+
doc = @embedded_doc.new
|
449
|
+
doc.should have_error_on(:name)
|
450
|
+
end
|
451
|
+
end
|
452
|
+
|
453
|
+
context "validating exclusion of" do
|
454
|
+
it "should throw error if enumerator not provided" do
|
455
|
+
@embedded_doc.key :action, String
|
456
|
+
lambda {
|
457
|
+
@embedded_doc.validates_exclusion_of :action
|
458
|
+
}.should raise_error(ArgumentError)
|
459
|
+
end
|
460
|
+
|
461
|
+
it "should work with validates_exclusion_of macro" do
|
462
|
+
@embedded_doc.key :action, String
|
463
|
+
@embedded_doc.validates_exclusion_of :action, :in => %w(kick run)
|
464
|
+
|
465
|
+
doc = @embedded_doc.new
|
466
|
+
doc.should_not have_error_on(:action)
|
467
|
+
|
468
|
+
doc.action = 'fart'
|
469
|
+
doc.should_not have_error_on(:action)
|
470
|
+
|
471
|
+
doc.action = 'kick'
|
472
|
+
doc.should have_error_on(:action)
|
473
|
+
doc.errors[:action].should == ['is reserved']
|
474
|
+
end
|
475
|
+
|
476
|
+
it "should work with :not_in shortcut on key definition" do
|
477
|
+
@embedded_doc.key :action, String, :not_in => %w(kick run)
|
478
|
+
|
479
|
+
doc = @embedded_doc.new
|
480
|
+
doc.should_not have_error_on(:action)
|
481
|
+
|
482
|
+
doc.action = 'fart'
|
483
|
+
doc.should_not have_error_on(:action)
|
484
|
+
|
485
|
+
doc.action = 'kick'
|
486
|
+
doc.should have_error_on(:action)
|
487
|
+
doc.errors[:action].should == ['is reserved']
|
488
|
+
end
|
489
|
+
|
490
|
+
it "should not have error if allow nil is true and value is nil" do
|
491
|
+
@embedded_doc.key :action, String
|
492
|
+
@embedded_doc.validates_exclusion_of :action, :in => %w(kick run), :allow_nil => true
|
493
|
+
|
494
|
+
doc = @embedded_doc.new
|
495
|
+
doc.should_not have_error_on(:action)
|
496
|
+
end
|
497
|
+
|
498
|
+
it "should not have error if allow blank is true and value is blank" do
|
499
|
+
@embedded_doc.key :action, String
|
500
|
+
@embedded_doc.validates_exclusion_of :action, :in => %w(kick run), :allow_nil => true
|
501
|
+
|
502
|
+
doc = @embedded_doc.new(:action => '')
|
503
|
+
doc.should_not have_error_on(:action)
|
504
|
+
end
|
505
|
+
end
|
506
|
+
|
507
|
+
context "validating inclusion of" do
|
508
|
+
it "should throw error if enumerator not provided" do
|
509
|
+
@embedded_doc.key :action, String
|
510
|
+
lambda {
|
511
|
+
@embedded_doc.validates_inclusion_of :action
|
512
|
+
}.should raise_error(ArgumentError)
|
513
|
+
end
|
514
|
+
|
515
|
+
it "should work with validates_inclusion_of macro" do
|
516
|
+
@embedded_doc.key :action, String
|
517
|
+
@embedded_doc.validates_inclusion_of :action, :in => %w(kick run)
|
518
|
+
|
519
|
+
doc = @embedded_doc.new
|
520
|
+
doc.should have_error_on(:action)
|
521
|
+
doc.errors[:action].should == ['is not included in the list']
|
522
|
+
|
523
|
+
doc.action = 'fart'
|
524
|
+
doc.should have_error_on(:action)
|
525
|
+
doc.errors[:action].should == ['is not included in the list']
|
526
|
+
|
527
|
+
doc.action = 'kick'
|
528
|
+
doc.should_not have_error_on(:action)
|
529
|
+
end
|
530
|
+
|
531
|
+
it "should work with :in shortcut on key definition" do
|
532
|
+
@embedded_doc.key :action, String, :in => %w(kick run)
|
533
|
+
|
534
|
+
doc = @embedded_doc.new
|
535
|
+
doc.should have_error_on(:action)
|
536
|
+
doc.errors[:action].should == ['is not included in the list']
|
537
|
+
|
538
|
+
doc.action = 'fart'
|
539
|
+
doc.should have_error_on(:action)
|
540
|
+
doc.errors[:action].should == ['is not included in the list']
|
541
|
+
|
542
|
+
doc.action = 'kick'
|
543
|
+
doc.should_not have_error_on(:action)
|
544
|
+
end
|
545
|
+
|
546
|
+
it "should not have error if allow nil is true and value is nil" do
|
547
|
+
@embedded_doc.key :action, String
|
548
|
+
@embedded_doc.validates_inclusion_of :action, :in => %w(kick run), :allow_nil => true
|
549
|
+
|
550
|
+
doc = @embedded_doc.new
|
551
|
+
doc.should_not have_error_on(:action)
|
552
|
+
end
|
553
|
+
|
554
|
+
it "should not have error if allow blank is true and value is blank" do
|
555
|
+
@embedded_doc.key :action, String
|
556
|
+
@embedded_doc.validates_inclusion_of :action, :in => %w(kick run), :allow_blank => true
|
557
|
+
|
558
|
+
doc = @embedded_doc.new(:action => '')
|
559
|
+
doc.should_not have_error_on(:action)
|
560
|
+
end
|
561
|
+
end
|
562
|
+
|
563
|
+
end # End on an EmbeddedDocument
|
564
|
+
|
565
|
+
end # Validations
|
566
|
+
|
567
|
+
context "Adding validation errors" do
|
568
|
+
before do
|
569
|
+
@document = Doc do
|
570
|
+
key :action, String
|
571
|
+
def action_present
|
572
|
+
errors.add(:action, 'is invalid') if action.blank?
|
573
|
+
end
|
574
|
+
end
|
575
|
+
end
|
576
|
+
|
577
|
+
it "should work with validate callback" do
|
578
|
+
@document.validate :action_present
|
579
|
+
|
580
|
+
doc = @document.new
|
581
|
+
doc.action = nil
|
582
|
+
doc.should have_error_on(:action)
|
583
|
+
|
584
|
+
doc.action = 'kick'
|
585
|
+
doc.should_not have_error_on(:action)
|
586
|
+
end
|
587
|
+
end
|
588
|
+
end
|