tpitale-mongo_mapper 0.6.9

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 (75) hide show
  1. data/.gitignore +10 -0
  2. data/LICENSE +20 -0
  3. data/README.rdoc +53 -0
  4. data/Rakefile +55 -0
  5. data/VERSION +1 -0
  6. data/bin/mmconsole +60 -0
  7. data/lib/mongo_mapper/associations/base.rb +110 -0
  8. data/lib/mongo_mapper/associations/belongs_to_polymorphic_proxy.rb +26 -0
  9. data/lib/mongo_mapper/associations/belongs_to_proxy.rb +21 -0
  10. data/lib/mongo_mapper/associations/collection.rb +19 -0
  11. data/lib/mongo_mapper/associations/many_documents_as_proxy.rb +26 -0
  12. data/lib/mongo_mapper/associations/many_documents_proxy.rb +115 -0
  13. data/lib/mongo_mapper/associations/many_embedded_polymorphic_proxy.rb +31 -0
  14. data/lib/mongo_mapper/associations/many_embedded_proxy.rb +54 -0
  15. data/lib/mongo_mapper/associations/many_polymorphic_proxy.rb +11 -0
  16. data/lib/mongo_mapper/associations/proxy.rb +113 -0
  17. data/lib/mongo_mapper/associations.rb +70 -0
  18. data/lib/mongo_mapper/callbacks.rb +109 -0
  19. data/lib/mongo_mapper/dirty.rb +136 -0
  20. data/lib/mongo_mapper/document.rb +472 -0
  21. data/lib/mongo_mapper/dynamic_finder.rb +74 -0
  22. data/lib/mongo_mapper/embedded_document.rb +384 -0
  23. data/lib/mongo_mapper/finder_options.rb +133 -0
  24. data/lib/mongo_mapper/key.rb +36 -0
  25. data/lib/mongo_mapper/observing.rb +50 -0
  26. data/lib/mongo_mapper/pagination.rb +55 -0
  27. data/lib/mongo_mapper/rails_compatibility/document.rb +15 -0
  28. data/lib/mongo_mapper/rails_compatibility/embedded_document.rb +27 -0
  29. data/lib/mongo_mapper/serialization.rb +54 -0
  30. data/lib/mongo_mapper/serializers/json_serializer.rb +92 -0
  31. data/lib/mongo_mapper/support.rb +206 -0
  32. data/lib/mongo_mapper/validations.rb +41 -0
  33. data/lib/mongo_mapper.rb +120 -0
  34. data/mongo_mapper.gemspec +173 -0
  35. data/specs.watchr +32 -0
  36. data/test/NOTE_ON_TESTING +1 -0
  37. data/test/functional/associations/test_belongs_to_polymorphic_proxy.rb +55 -0
  38. data/test/functional/associations/test_belongs_to_proxy.rb +48 -0
  39. data/test/functional/associations/test_many_documents_as_proxy.rb +246 -0
  40. data/test/functional/associations/test_many_documents_proxy.rb +387 -0
  41. data/test/functional/associations/test_many_embedded_polymorphic_proxy.rb +156 -0
  42. data/test/functional/associations/test_many_embedded_proxy.rb +192 -0
  43. data/test/functional/associations/test_many_polymorphic_proxy.rb +339 -0
  44. data/test/functional/test_associations.rb +44 -0
  45. data/test/functional/test_binary.rb +18 -0
  46. data/test/functional/test_callbacks.rb +85 -0
  47. data/test/functional/test_dirty.rb +159 -0
  48. data/test/functional/test_document.rb +1235 -0
  49. data/test/functional/test_embedded_document.rb +135 -0
  50. data/test/functional/test_logger.rb +20 -0
  51. data/test/functional/test_pagination.rb +95 -0
  52. data/test/functional/test_rails_compatibility.rb +25 -0
  53. data/test/functional/test_string_id_compatibility.rb +72 -0
  54. data/test/functional/test_validations.rb +378 -0
  55. data/test/models.rb +271 -0
  56. data/test/support/custom_matchers.rb +55 -0
  57. data/test/support/timing.rb +16 -0
  58. data/test/test_helper.rb +27 -0
  59. data/test/unit/associations/test_base.rb +166 -0
  60. data/test/unit/associations/test_proxy.rb +91 -0
  61. data/test/unit/serializers/test_json_serializer.rb +189 -0
  62. data/test/unit/test_document.rb +204 -0
  63. data/test/unit/test_dynamic_finder.rb +125 -0
  64. data/test/unit/test_embedded_document.rb +718 -0
  65. data/test/unit/test_finder_options.rb +296 -0
  66. data/test/unit/test_key.rb +172 -0
  67. data/test/unit/test_mongo_mapper.rb +65 -0
  68. data/test/unit/test_observing.rb +101 -0
  69. data/test/unit/test_pagination.rb +113 -0
  70. data/test/unit/test_rails_compatibility.rb +49 -0
  71. data/test/unit/test_serializations.rb +52 -0
  72. data/test/unit/test_support.rb +342 -0
  73. data/test/unit/test_time_zones.rb +40 -0
  74. data/test/unit/test_validations.rb +503 -0
  75. metadata +235 -0
@@ -0,0 +1,159 @@
1
+ require 'test_helper'
2
+ require 'models'
3
+
4
+ class DirtyTest < Test::Unit::TestCase
5
+ def setup
6
+ @document = Class.new do
7
+ include MongoMapper::Document
8
+ set_collection_name 'test'
9
+ key :phrase, String
10
+ end
11
+ @document.collection.remove
12
+
13
+ Status.collection.remove
14
+ Project.collection.remove
15
+ end
16
+
17
+ context "marking changes" do
18
+ should "not happen if there are none" do
19
+ doc = @document.new
20
+ doc.phrase_changed?.should be_false
21
+ doc.phrase_change.should be_nil
22
+ end
23
+
24
+ should "happen when change happens" do
25
+ doc = @document.new
26
+ doc.phrase = 'Golly Gee Willikers Batman'
27
+ doc.phrase_changed?.should be_true
28
+ doc.phrase_was.should be_nil
29
+ doc.phrase_change.should == [nil, 'Golly Gee Willikers Batman']
30
+ end
31
+
32
+ should "happen when initializing" do
33
+ doc = @document.new(:phrase => 'Foo')
34
+ doc.changed?.should be_true
35
+ end
36
+
37
+ should "clear changes on save" do
38
+ doc = @document.new
39
+ doc.phrase = 'Golly Gee Willikers Batman'
40
+ doc.phrase_changed?.should be_true
41
+ doc.save
42
+ doc.phrase_changed?.should_not be_true
43
+ doc.phrase_change.should be_nil
44
+ end
45
+
46
+ should "clear changes on save!" do
47
+ doc = @document.new
48
+ doc.phrase = 'Golly Gee Willikers Batman'
49
+ doc.phrase_changed?.should be_true
50
+ doc.save!
51
+ doc.phrase_changed?.should_not be_true
52
+ doc.phrase_change.should be_nil
53
+ end
54
+
55
+ should "not happen when loading from database" do
56
+ doc = @document.create(:phrase => 'Foo')
57
+ doc.phrase = 'Fart'
58
+ doc.changed?.should be_true
59
+ doc.reload
60
+ doc.changed?.should be_false
61
+ end
62
+
63
+ should "happen if changed after loading from database" do
64
+ doc = @document.create(:phrase => 'Foo')
65
+ doc.reload
66
+ doc.changed?.should be_false
67
+ doc.phrase = 'Bar'
68
+ doc.changed?.should be_true
69
+ end
70
+ end
71
+
72
+ context "blank new value and type integer" do
73
+ should "not mark changes" do
74
+ @document.key :age, Integer
75
+
76
+ [nil, ''].each do |value|
77
+ doc = @document.new
78
+ doc.age = value
79
+ doc.age_changed?.should be_false
80
+ doc.age_change.should be_nil
81
+ end
82
+ end
83
+ end
84
+
85
+ context "blank new value and type float" do
86
+ should "not mark changes" do
87
+ @document.key :amount, Float
88
+
89
+ [nil, ''].each do |value|
90
+ doc = @document.new
91
+ doc.amount = value
92
+ doc.amount_changed?.should be_false
93
+ doc.amount_change.should be_nil
94
+ end
95
+ end
96
+ end
97
+
98
+ context "changed?" do
99
+ should "be true if key changed" do
100
+ doc = @document.new
101
+ doc.phrase = 'A penny saved is a penny earned.'
102
+ doc.changed?.should be_true
103
+ end
104
+
105
+ should "be false if no keys changed" do
106
+ @document.new.changed?.should be_false
107
+ end
108
+ end
109
+
110
+ context "changes" do
111
+ should "be empty hash if no changes" do
112
+ @document.new.changes.should == {}
113
+ end
114
+
115
+ should "be hash of keys with values of changes if there are changes" do
116
+ doc = @document.new
117
+ doc.phrase = 'A penny saved is a penny earned.'
118
+ doc.changes.should == {'phrase' => [nil, 'A penny saved is a penny earned.']}
119
+ end
120
+ end
121
+
122
+ context "changed" do
123
+ should "be empty array if no changes" do
124
+ @document.new.changed.should == []
125
+ end
126
+
127
+ should "be array of keys that have changed if there are changes" do
128
+ doc = @document.new
129
+ doc.phrase = 'A penny saved is a penny earned.'
130
+ doc.changed.should == ['phrase']
131
+ end
132
+ end
133
+
134
+ context "will_change!" do
135
+ should "mark changes" do
136
+ doc = @document.create(:phrase => 'Foo')
137
+
138
+ doc.phrase << 'bar'
139
+ doc.phrase_changed?.should be_false
140
+
141
+ doc.phrase_will_change!
142
+ doc.phrase_changed?.should be_true
143
+ doc.phrase_change.should == ['Foobar', 'Foobar']
144
+
145
+ doc.phrase << '!'
146
+ doc.phrase_changed?.should be_true
147
+ doc.phrase_change.should == ['Foobar', 'Foobar!']
148
+ end
149
+ end
150
+
151
+ context "changing a foreign key through association" do
152
+ should "mark changes" do
153
+ status = Status.create(:name => 'Foo')
154
+ status.project = Project.create(:name => 'Bar')
155
+ status.changed?.should be_true
156
+ status.changed.should == %w(project_id)
157
+ end
158
+ end
159
+ end