mongoid 2.0.0.alpha → 2.0.0.beta.5

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.
Files changed (216) hide show
  1. data/lib/mongoid.rb +11 -5
  2. data/lib/mongoid/associations.rb +112 -107
  3. data/lib/mongoid/associations/belongs_to_related.rb +2 -3
  4. data/lib/mongoid/associations/embedded_in.rb +12 -4
  5. data/lib/mongoid/associations/{embed_many.rb → embeds_many.rb} +101 -32
  6. data/lib/mongoid/associations/{embed_one.rb → embeds_one.rb} +10 -10
  7. data/lib/mongoid/associations/has_many_related.rb +51 -5
  8. data/lib/mongoid/associations/has_one_related.rb +9 -5
  9. data/lib/mongoid/associations/meta_data.rb +2 -1
  10. data/lib/mongoid/associations/options.rb +15 -6
  11. data/lib/mongoid/associations/proxy.rb +14 -21
  12. data/lib/mongoid/attributes.rb +34 -13
  13. data/lib/mongoid/callbacks.rb +1 -2
  14. data/lib/mongoid/collection.rb +4 -3
  15. data/lib/mongoid/collections.rb +41 -0
  16. data/lib/mongoid/collections/master.rb +3 -2
  17. data/lib/mongoid/collections/slaves.rb +3 -2
  18. data/lib/mongoid/components.rb +4 -1
  19. data/lib/mongoid/config.rb +163 -13
  20. data/lib/mongoid/contexts.rb +1 -2
  21. data/lib/mongoid/contexts/enumerable.rb +1 -1
  22. data/lib/mongoid/contexts/mongo.rb +1 -1
  23. data/lib/mongoid/contexts/paging.rb +10 -2
  24. data/lib/mongoid/criteria.rb +13 -22
  25. data/lib/mongoid/criterion/exclusion.rb +3 -3
  26. data/lib/mongoid/criterion/inclusion.rb +17 -0
  27. data/lib/mongoid/criterion/optional.rb +1 -1
  28. data/lib/mongoid/dirty.rb +253 -0
  29. data/lib/mongoid/document.rb +40 -85
  30. data/lib/mongoid/errors.rb +48 -1
  31. data/lib/mongoid/extensions.rb +11 -9
  32. data/lib/mongoid/extensions/big_decimal/conversions.rb +2 -2
  33. data/lib/mongoid/extensions/boolean/conversions.rb +8 -2
  34. data/lib/mongoid/extensions/date/conversions.rb +13 -4
  35. data/lib/mongoid/extensions/datetime/conversions.rb +1 -6
  36. data/lib/mongoid/extensions/float/conversions.rb +5 -1
  37. data/lib/mongoid/extensions/hash/assimilation.rb +12 -3
  38. data/lib/mongoid/extensions/hash/conversions.rb +34 -4
  39. data/lib/mongoid/extensions/integer/conversions.rb +5 -1
  40. data/lib/mongoid/extensions/nil/assimilation.rb +4 -0
  41. data/lib/mongoid/extensions/object/conversions.rb +3 -3
  42. data/lib/mongoid/extensions/string/conversions.rb +1 -1
  43. data/lib/mongoid/extensions/symbol/inflections.rb +5 -2
  44. data/lib/mongoid/extensions/time_conversions.rb +35 -0
  45. data/lib/mongoid/factory.rb +2 -1
  46. data/lib/mongoid/field.rb +15 -2
  47. data/lib/mongoid/fields.rb +1 -1
  48. data/lib/mongoid/identity.rb +3 -3
  49. data/lib/mongoid/indexes.rb +3 -3
  50. data/lib/mongoid/matchers.rb +1 -2
  51. data/lib/mongoid/memoization.rb +8 -2
  52. data/lib/mongoid/named_scope.rb +0 -5
  53. data/lib/mongoid/observable.rb +1 -1
  54. data/lib/mongoid/paths.rb +30 -22
  55. data/lib/mongoid/persistence.rb +218 -0
  56. data/lib/mongoid/persistence/command.rb +39 -0
  57. data/lib/mongoid/persistence/insert.rb +47 -0
  58. data/lib/mongoid/persistence/insert_embedded.rb +38 -0
  59. data/lib/mongoid/persistence/remove.rb +39 -0
  60. data/lib/mongoid/persistence/remove_all.rb +37 -0
  61. data/lib/mongoid/persistence/remove_embedded.rb +50 -0
  62. data/lib/mongoid/persistence/update.rb +63 -0
  63. data/lib/mongoid/railtie.rb +53 -0
  64. data/lib/mongoid/railties/database.rake +37 -0
  65. data/lib/mongoid/timestamps.rb +2 -2
  66. data/lib/mongoid/validations.rb +2 -2
  67. data/lib/mongoid/validations/associated.rb +2 -2
  68. data/lib/mongoid/validations/uniqueness.rb +13 -2
  69. data/lib/mongoid/version.rb +4 -0
  70. data/lib/mongoid/versioning.rb +3 -2
  71. data/lib/rails/generators/mongoid/config/config_generator.rb +41 -0
  72. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +24 -0
  73. data/lib/rails/generators/mongoid/model/model_generator.rb +24 -0
  74. data/lib/rails/generators/mongoid/model/templates/model.rb +15 -0
  75. data/lib/rails/generators/mongoid_generator.rb +61 -0
  76. metadata +76 -301
  77. data/.gitignore +0 -6
  78. data/.watchr +0 -29
  79. data/Rakefile +0 -52
  80. data/VERSION +0 -1
  81. data/caliper.yml +0 -4
  82. data/lib/mongoid/collections/mimic.rb +0 -46
  83. data/lib/mongoid/commands.rb +0 -161
  84. data/lib/mongoid/commands/create.rb +0 -19
  85. data/lib/mongoid/commands/delete.rb +0 -16
  86. data/lib/mongoid/commands/delete_all.rb +0 -23
  87. data/lib/mongoid/commands/deletion.rb +0 -18
  88. data/lib/mongoid/commands/destroy.rb +0 -17
  89. data/lib/mongoid/commands/destroy_all.rb +0 -23
  90. data/lib/mongoid/commands/save.rb +0 -29
  91. data/lib/mongoid/extensions/time/conversions.rb +0 -18
  92. data/mongoid.gemspec +0 -408
  93. data/perf/benchmark.rb +0 -77
  94. data/spec/integration/mongoid/associations_spec.rb +0 -340
  95. data/spec/integration/mongoid/attributes_spec.rb +0 -22
  96. data/spec/integration/mongoid/commands_spec.rb +0 -227
  97. data/spec/integration/mongoid/contexts/enumerable_spec.rb +0 -33
  98. data/spec/integration/mongoid/criteria_spec.rb +0 -272
  99. data/spec/integration/mongoid/document_spec.rb +0 -650
  100. data/spec/integration/mongoid/extensions_spec.rb +0 -22
  101. data/spec/integration/mongoid/finders_spec.rb +0 -119
  102. data/spec/integration/mongoid/inheritance_spec.rb +0 -137
  103. data/spec/integration/mongoid/named_scope_spec.rb +0 -46
  104. data/spec/models/address.rb +0 -39
  105. data/spec/models/animal.rb +0 -6
  106. data/spec/models/callbacks.rb +0 -18
  107. data/spec/models/comment.rb +0 -8
  108. data/spec/models/country_code.rb +0 -6
  109. data/spec/models/employer.rb +0 -5
  110. data/spec/models/game.rb +0 -7
  111. data/spec/models/inheritance.rb +0 -56
  112. data/spec/models/location.rb +0 -5
  113. data/spec/models/mixed_drink.rb +0 -4
  114. data/spec/models/name.rb +0 -13
  115. data/spec/models/namespacing.rb +0 -11
  116. data/spec/models/patient.rb +0 -4
  117. data/spec/models/person.rb +0 -99
  118. data/spec/models/pet.rb +0 -7
  119. data/spec/models/pet_owner.rb +0 -6
  120. data/spec/models/phone.rb +0 -7
  121. data/spec/models/post.rb +0 -15
  122. data/spec/models/translation.rb +0 -5
  123. data/spec/models/vet_visit.rb +0 -5
  124. data/spec/spec.opts +0 -3
  125. data/spec/spec_helper.rb +0 -31
  126. data/spec/unit/mongoid/associations/belongs_to_related_spec.rb +0 -145
  127. data/spec/unit/mongoid/associations/embed_many_spec.rb +0 -516
  128. data/spec/unit/mongoid/associations/embed_one_spec.rb +0 -282
  129. data/spec/unit/mongoid/associations/embedded_in_spec.rb +0 -193
  130. data/spec/unit/mongoid/associations/has_many_related_spec.rb +0 -418
  131. data/spec/unit/mongoid/associations/has_one_related_spec.rb +0 -179
  132. data/spec/unit/mongoid/associations/meta_data_spec.rb +0 -88
  133. data/spec/unit/mongoid/associations/options_spec.rb +0 -192
  134. data/spec/unit/mongoid/associations_spec.rb +0 -595
  135. data/spec/unit/mongoid/attributes_spec.rb +0 -507
  136. data/spec/unit/mongoid/callbacks_spec.rb +0 -55
  137. data/spec/unit/mongoid/collection_spec.rb +0 -187
  138. data/spec/unit/mongoid/collections/cyclic_iterator_spec.rb +0 -75
  139. data/spec/unit/mongoid/collections/master_spec.rb +0 -41
  140. data/spec/unit/mongoid/collections/mimic_spec.rb +0 -43
  141. data/spec/unit/mongoid/collections/slaves_spec.rb +0 -81
  142. data/spec/unit/mongoid/commands/create_spec.rb +0 -31
  143. data/spec/unit/mongoid/commands/delete_all_spec.rb +0 -58
  144. data/spec/unit/mongoid/commands/delete_spec.rb +0 -38
  145. data/spec/unit/mongoid/commands/destroy_all_spec.rb +0 -21
  146. data/spec/unit/mongoid/commands/destroy_spec.rb +0 -51
  147. data/spec/unit/mongoid/commands/save_spec.rb +0 -107
  148. data/spec/unit/mongoid/commands_spec.rb +0 -270
  149. data/spec/unit/mongoid/config_spec.rb +0 -172
  150. data/spec/unit/mongoid/contexts/enumerable_spec.rb +0 -421
  151. data/spec/unit/mongoid/contexts/mongo_spec.rb +0 -682
  152. data/spec/unit/mongoid/contexts_spec.rb +0 -25
  153. data/spec/unit/mongoid/criteria_spec.rb +0 -824
  154. data/spec/unit/mongoid/criterion/complex_spec.rb +0 -19
  155. data/spec/unit/mongoid/criterion/exclusion_spec.rb +0 -91
  156. data/spec/unit/mongoid/criterion/inclusion_spec.rb +0 -219
  157. data/spec/unit/mongoid/criterion/optional_spec.rb +0 -319
  158. data/spec/unit/mongoid/cursor_spec.rb +0 -74
  159. data/spec/unit/mongoid/deprecation_spec.rb +0 -24
  160. data/spec/unit/mongoid/document_spec.rb +0 -818
  161. data/spec/unit/mongoid/errors_spec.rb +0 -103
  162. data/spec/unit/mongoid/extensions/array/accessors_spec.rb +0 -50
  163. data/spec/unit/mongoid/extensions/array/assimilation_spec.rb +0 -24
  164. data/spec/unit/mongoid/extensions/array/conversions_spec.rb +0 -35
  165. data/spec/unit/mongoid/extensions/array/parentization_spec.rb +0 -20
  166. data/spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb +0 -22
  167. data/spec/unit/mongoid/extensions/binary/conversions_spec.rb +0 -22
  168. data/spec/unit/mongoid/extensions/boolean/conversions_spec.rb +0 -49
  169. data/spec/unit/mongoid/extensions/date/conversions_spec.rb +0 -102
  170. data/spec/unit/mongoid/extensions/datetime/conversions_spec.rb +0 -67
  171. data/spec/unit/mongoid/extensions/float/conversions_spec.rb +0 -61
  172. data/spec/unit/mongoid/extensions/hash/accessors_spec.rb +0 -184
  173. data/spec/unit/mongoid/extensions/hash/assimilation_spec.rb +0 -46
  174. data/spec/unit/mongoid/extensions/hash/conversions_spec.rb +0 -21
  175. data/spec/unit/mongoid/extensions/hash/criteria_helpers_spec.rb +0 -17
  176. data/spec/unit/mongoid/extensions/hash/scoping_spec.rb +0 -14
  177. data/spec/unit/mongoid/extensions/integer/conversions_spec.rb +0 -61
  178. data/spec/unit/mongoid/extensions/nil/assimilation_spec.rb +0 -24
  179. data/spec/unit/mongoid/extensions/object/conversions_spec.rb +0 -57
  180. data/spec/unit/mongoid/extensions/proc/scoping_spec.rb +0 -34
  181. data/spec/unit/mongoid/extensions/string/conversions_spec.rb +0 -17
  182. data/spec/unit/mongoid/extensions/string/inflections_spec.rb +0 -208
  183. data/spec/unit/mongoid/extensions/symbol/inflections_spec.rb +0 -91
  184. data/spec/unit/mongoid/extensions/time/conversions_spec.rb +0 -70
  185. data/spec/unit/mongoid/extras_spec.rb +0 -102
  186. data/spec/unit/mongoid/factory_spec.rb +0 -31
  187. data/spec/unit/mongoid/field_spec.rb +0 -143
  188. data/spec/unit/mongoid/fields_spec.rb +0 -181
  189. data/spec/unit/mongoid/finders_spec.rb +0 -404
  190. data/spec/unit/mongoid/identity_spec.rb +0 -109
  191. data/spec/unit/mongoid/indexes_spec.rb +0 -93
  192. data/spec/unit/mongoid/javascript_spec.rb +0 -48
  193. data/spec/unit/mongoid/matchers/all_spec.rb +0 -27
  194. data/spec/unit/mongoid/matchers/default_spec.rb +0 -27
  195. data/spec/unit/mongoid/matchers/exists_spec.rb +0 -56
  196. data/spec/unit/mongoid/matchers/gt_spec.rb +0 -39
  197. data/spec/unit/mongoid/matchers/gte_spec.rb +0 -49
  198. data/spec/unit/mongoid/matchers/in_spec.rb +0 -27
  199. data/spec/unit/mongoid/matchers/lt_spec.rb +0 -39
  200. data/spec/unit/mongoid/matchers/lte_spec.rb +0 -49
  201. data/spec/unit/mongoid/matchers/ne_spec.rb +0 -27
  202. data/spec/unit/mongoid/matchers/nin_spec.rb +0 -27
  203. data/spec/unit/mongoid/matchers/size_spec.rb +0 -27
  204. data/spec/unit/mongoid/matchers_spec.rb +0 -329
  205. data/spec/unit/mongoid/memoization_spec.rb +0 -75
  206. data/spec/unit/mongoid/named_scope_spec.rb +0 -123
  207. data/spec/unit/mongoid/observable_spec.rb +0 -46
  208. data/spec/unit/mongoid/paths_spec.rb +0 -124
  209. data/spec/unit/mongoid/scope_spec.rb +0 -240
  210. data/spec/unit/mongoid/state_spec.rb +0 -83
  211. data/spec/unit/mongoid/timestamps_spec.rb +0 -25
  212. data/spec/unit/mongoid/validations/associated_spec.rb +0 -103
  213. data/spec/unit/mongoid/validations/uniqueness_spec.rb +0 -47
  214. data/spec/unit/mongoid/validations_spec.rb +0 -190
  215. data/spec/unit/mongoid/versioning_spec.rb +0 -41
  216. data/spec/unit/mongoid_spec.rb +0 -46
@@ -1,83 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::State do
4
-
5
- describe "#new_record?" do
6
-
7
- context "when the object has been saved" do
8
-
9
- before do
10
- @person = Person.new(:_id => "1")
11
- end
12
-
13
- it "returns false" do
14
- @person.new_record?.should be_false
15
- end
16
-
17
- end
18
-
19
- context "when the object has not been saved" do
20
-
21
- before do
22
- @person = Person.new
23
- end
24
-
25
- it "returns true" do
26
- @person.new_record?.should be_true
27
- end
28
-
29
- end
30
-
31
- end
32
-
33
- describe "#persisted?" do
34
-
35
- before do
36
- @person = Person.new
37
- end
38
-
39
- it "delegates to new_record?" do
40
- @person.persisted?.should be_false
41
- end
42
- end
43
-
44
- describe "destroyed?" do
45
-
46
- before do
47
- @person = Person.new
48
- end
49
-
50
- context "when destroyed is true" do
51
-
52
- before do
53
- @person.destroyed = true
54
- end
55
-
56
- it "returns true" do
57
- @person.destroyed?.should be_true
58
- end
59
- end
60
-
61
- context "when destroyed is false" do
62
-
63
- before do
64
- @person.destroyed = false
65
- end
66
-
67
- it "returns true" do
68
- @person.destroyed?.should be_false
69
- end
70
- end
71
-
72
- context "when destroyed is nil" do
73
-
74
- before do
75
- @person.destroyed = nil
76
- end
77
-
78
- it "returns false" do
79
- @person.destroyed?.should be_false
80
- end
81
- end
82
- end
83
- end
@@ -1,25 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Timestamps do
4
-
5
- describe ".included" do
6
-
7
- before do
8
- @person = Person.new
9
- end
10
-
11
- it "adds created_at and updated_at to the document" do
12
- fields = Person.fields
13
- fields["created_at"].should_not be_nil
14
- fields["updated_at"].should_not be_nil
15
- end
16
-
17
- it "forces the timestamps to UTC" do
18
- @person.run_callbacks(:save)
19
- @person.created_at.should be_close(Time.now.utc, 10.seconds)
20
- @person.updated_at.should be_close(Time.now.utc, 10.seconds)
21
- end
22
-
23
- end
24
-
25
- end
@@ -1,103 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Validations::AssociatedValidator do
4
-
5
- describe "#validate_each" do
6
-
7
- before do
8
- @document = Person.new
9
- end
10
-
11
- let(:validator) { Mongoid::Validations::AssociatedValidator.new(:attributes => @document.attributes) }
12
-
13
- context "when the association is a has one" do
14
-
15
- context "when the association is nil" do
16
-
17
- before do
18
- validator.validate_each(@document, :name, nil)
19
- end
20
-
21
- it "adds no errors" do
22
- @document.errors[:name].should be_empty
23
- end
24
-
25
- end
26
-
27
- context "when the association is valid" do
28
-
29
- before do
30
- @associated = stub(:valid? => true)
31
- validator.validate_each(@document, :name, @associated)
32
- end
33
-
34
- it "adds no errors" do
35
- @document.errors[:name].should be_empty
36
- end
37
-
38
- end
39
-
40
- context "when the association is invalid" do
41
-
42
- before do
43
- @associated = stub(:valid? => false)
44
- validator.validate_each(@document, :name, @associated)
45
- end
46
-
47
- it "adds errors to the parent document" do
48
- @document.errors[:name].should_not be_empty
49
- end
50
-
51
- it "translates the error in english" do
52
- @document.errors[:name][0].should == "is invalid"
53
- end
54
-
55
- end
56
-
57
- end
58
-
59
- context "when the association is a has many" do
60
-
61
- context "when the association is empty" do
62
-
63
- before do
64
- validator.validate_each(@document, :addresses, [])
65
- end
66
-
67
- it "adds no errors" do
68
- @document.errors[:addresses].should be_empty
69
- end
70
-
71
- end
72
-
73
- context "when the association has invalid documents" do
74
-
75
- before do
76
- @associated = stub(:valid? => false)
77
- validator.validate_each(@document, :addresses, [ @associated ])
78
- end
79
-
80
- it "adds errors to the parent document" do
81
- @document.errors[:addresses].should_not be_empty
82
- end
83
-
84
- end
85
-
86
- context "when the assocation has all valid documents" do
87
-
88
- before do
89
- @associated = stub(:valid? => true)
90
- validator.validate_each(@document, :addresses, [ @associated ])
91
- end
92
-
93
- it "adds no errors" do
94
- @document.errors[:addresses].should be_empty
95
- end
96
-
97
- end
98
-
99
- end
100
-
101
- end
102
-
103
- end
@@ -1,47 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Validations::UniquenessValidator do
4
-
5
- describe "#validate_each" do
6
-
7
- before do
8
- @document = Person.new
9
- end
10
-
11
- let(:validator) { Mongoid::Validations::UniquenessValidator.new(:attributes => @document.attributes) }
12
-
13
- context "when a document exists with the attribute value" do
14
-
15
- before do
16
- @criteria = stub(:empty? => false)
17
- Person.expects(:where).with(all_of(has_entry(:title, "Sir"), has_value(@document._id))).returns(@criteria)
18
- validator.validate_each(@document, :title, "Sir")
19
- end
20
-
21
- it "adds the errors to the document" do
22
- @document.errors[:title].should_not be_empty
23
- end
24
-
25
- it "should translate the error in english" do
26
- @document.errors[:title][0].should == "is already taken"
27
- end
28
-
29
- end
30
-
31
- context "when no other document exists with the attribute value" do
32
-
33
- before do
34
- @criteria = stub(:empty? => true)
35
- Person.expects(:where).with(all_of(has_entry(:title, "Sir"), has_value(@document._id))).returns(@criteria)
36
- validator.validate_each(@document, :title, "Sir")
37
- end
38
-
39
- it "adds no errors" do
40
- @document.errors[:title].should be_empty
41
- end
42
-
43
- end
44
-
45
- end
46
-
47
- end
@@ -1,190 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe Mongoid::Validations do
4
-
5
- describe ".validates_associated" do
6
-
7
- before do
8
- @class = MixedDrink
9
- end
10
-
11
- it "adds the associated validator" do
12
- @class.expects(:validates_with).with(Mongoid::Validations::AssociatedValidator, { :attributes => [ :name ] })
13
- @class.validates_associated(:name)
14
- end
15
-
16
- it "is picked up by validates method" do
17
- @class.expects(:validates_with).with(Mongoid::Validations::AssociatedValidator, { :attributes => [ :name ] })
18
- @class.validates(:name, :associated => true)
19
- end
20
-
21
- end
22
-
23
- describe ".validates_uniqueness_of" do
24
-
25
- before do
26
- @class = MixedDrink
27
- end
28
-
29
- it "adds the uniqueness validator" do
30
- @class.expects(:validates_with).with(Mongoid::Validations::UniquenessValidator, { :attributes => [ :title ] })
31
- @class.validates_uniqueness_of(:title)
32
- end
33
-
34
- it "is picked up by validates method" do
35
- @class.expects(:validates_with).with(Mongoid::Validations::UniquenessValidator, { :attributes => [ :title ] })
36
- @class.validates(:title, :uniqueness => true)
37
- end
38
-
39
- end
40
-
41
- context "when running validations" do
42
-
43
- before do
44
- @person = Person.new
45
- @canvas = Canvas.new
46
- @firefox = Firefox.new
47
- end
48
-
49
- describe "#validates_acceptance_of" do
50
-
51
- it "fails if field not accepted" do
52
- Person.class_eval do
53
- validates_acceptance_of :terms, :allow_nil => false
54
- end
55
- @person.valid?.should be_false
56
- @person.errors[:terms].should_not be_nil
57
- end
58
-
59
- end
60
-
61
- describe "#validates_associated" do
62
-
63
- context "when association is a has_many" do
64
-
65
- it "fails when any association fails validation" do
66
- Person.class_eval do
67
- validates_associated :addresses
68
- end
69
- Address.class_eval do
70
- validates_presence_of :street
71
- end
72
- @person.addresses << Address.new
73
- @person.valid?.should be_false
74
- @person.errors[:addresses].should_not be_nil
75
- end
76
-
77
- end
78
-
79
- context "when association is a has_one" do
80
-
81
- context "when the associated is not nil" do
82
-
83
- it "fails when the association fails validation" do
84
- Person.class_eval do
85
- validates_associated :name
86
- end
87
- Name.class_eval do
88
- validates_presence_of :first_name
89
- end
90
- @person.name = Name.new
91
- @person.valid?.should be_false
92
- @person.errors[:name].should_not be_nil
93
- end
94
-
95
- end
96
-
97
- context "when the associated is nil" do
98
-
99
- it "returns true" do
100
- Person.class_eval do
101
- validates_associated :name
102
- end
103
- @person.valid?
104
- @person.errors[:name].should be_empty
105
- end
106
-
107
- end
108
-
109
- end
110
-
111
- end
112
-
113
- describe "#validates_format_of" do
114
-
115
- it "fails if the field is in the wrong format" do
116
- Person.class_eval do
117
- validates_format_of :title, :with => /[A-Za-z]/
118
- end
119
- @person.title = 10
120
- @person.valid?.should be_false
121
- @person.errors[:title].should_not be_nil
122
- end
123
-
124
- end
125
-
126
- describe "#validates_length_of" do
127
-
128
- it "fails if the field is the wrong length" do
129
- Person.class_eval do
130
- validates_length_of :title, :minimum => 10
131
- end
132
- @person.title = "Testing"
133
- @person.valid?.should be_false
134
- @person.errors[:title].should_not be_nil
135
- end
136
-
137
- end
138
-
139
- describe "#validates_numericality_of" do
140
-
141
- it "fails if the field is not a number" do
142
- Person.class_eval do
143
- validates_numericality_of :age
144
- end
145
- @person.age = "foo"
146
- @person.valid?.should be_false
147
- @person.errors[:age].should_not be_nil
148
- end
149
-
150
- end
151
-
152
- describe "#validates_presence_of" do
153
-
154
- context "on a parent class" do
155
-
156
- it "fails if the field is nil on the parent" do
157
- Person.class_eval do
158
- validates_presence_of :title
159
- end
160
- @person.valid?.should be_false
161
- @person.errors[:title].should_not be_nil
162
- end
163
-
164
- it "fails if the field is nil on a subclass" do
165
- Canvas.class_eval do
166
- validates_presence_of :name
167
- end
168
- @firefox.valid?.should be_false
169
- @firefox.errors[:name].should_not be_nil
170
- end
171
-
172
- end
173
-
174
- context "on a subclass" do
175
-
176
- it "parent class does not get subclass validations" do
177
- Firefox.class_eval do
178
- validates_presence_of :version
179
- end
180
- @canvas.name = "Testing"
181
- @canvas.valid?.should be_true
182
- end
183
-
184
- end
185
-
186
- end
187
-
188
- end
189
-
190
- end