mongoid_ext 0.6.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.
Files changed (53) hide show
  1. data/.document +5 -0
  2. data/Gemfile +20 -0
  3. data/Gemfile.lock +50 -0
  4. data/LICENSE +20 -0
  5. data/README.rdoc +17 -0
  6. data/Rakefile +44 -0
  7. data/VERSION +1 -0
  8. data/bin/mongoid_console +85 -0
  9. data/lib/mongoid_ext.rb +71 -0
  10. data/lib/mongoid_ext/criteria_ext.rb +15 -0
  11. data/lib/mongoid_ext/document_ext.rb +29 -0
  12. data/lib/mongoid_ext/file.rb +86 -0
  13. data/lib/mongoid_ext/file_list.rb +74 -0
  14. data/lib/mongoid_ext/file_server.rb +69 -0
  15. data/lib/mongoid_ext/filter.rb +266 -0
  16. data/lib/mongoid_ext/filter/parser.rb +71 -0
  17. data/lib/mongoid_ext/filter/result_set.rb +75 -0
  18. data/lib/mongoid_ext/js/filter.js +41 -0
  19. data/lib/mongoid_ext/js/find_tags.js +26 -0
  20. data/lib/mongoid_ext/js/tag_cloud.js +28 -0
  21. data/lib/mongoid_ext/modifiers.rb +93 -0
  22. data/lib/mongoid_ext/mongo_mapper.rb +63 -0
  23. data/lib/mongoid_ext/paranoia.rb +100 -0
  24. data/lib/mongoid_ext/patches.rb +17 -0
  25. data/lib/mongoid_ext/random.rb +23 -0
  26. data/lib/mongoid_ext/slugizer.rb +84 -0
  27. data/lib/mongoid_ext/storage.rb +110 -0
  28. data/lib/mongoid_ext/tags.rb +26 -0
  29. data/lib/mongoid_ext/types/embedded_hash.rb +25 -0
  30. data/lib/mongoid_ext/types/open_struct.rb +15 -0
  31. data/lib/mongoid_ext/types/timestamp.rb +15 -0
  32. data/lib/mongoid_ext/types/translation.rb +51 -0
  33. data/lib/mongoid_ext/update.rb +11 -0
  34. data/lib/mongoid_ext/versioning.rb +189 -0
  35. data/lib/mongoid_ext/voteable.rb +104 -0
  36. data/mongoid_ext.gemspec +129 -0
  37. data/test/helper.rb +30 -0
  38. data/test/models.rb +80 -0
  39. data/test/support/custom_matchers.rb +55 -0
  40. data/test/test_filter.rb +51 -0
  41. data/test/test_modifiers.rb +65 -0
  42. data/test/test_paranoia.rb +40 -0
  43. data/test/test_random.rb +57 -0
  44. data/test/test_slugizer.rb +66 -0
  45. data/test/test_storage.rb +110 -0
  46. data/test/test_tags.rb +47 -0
  47. data/test/test_update.rb +16 -0
  48. data/test/test_versioning.rb +55 -0
  49. data/test/test_voteable.rb +77 -0
  50. data/test/types/test_open_struct.rb +22 -0
  51. data/test/types/test_set.rb +26 -0
  52. data/test/types/test_timestamp.rb +40 -0
  53. metadata +301 -0
@@ -0,0 +1,77 @@
1
+ require 'helper'
2
+
3
+ class TestVoteable < Test::Unit::TestCase
4
+ context "working with votes" do
5
+ setup do
6
+ User.delete_all
7
+ @user = User.create!(:login => "foo", :email => "foo@bar.baz")
8
+ end
9
+
10
+ should "store the votes average" do
11
+ @user.vote!(1, "voter_id1")
12
+ @user.vote!(1, "voter_id2")
13
+ @user.vote!(-1, "voter_id3")
14
+
15
+ @user.reload
16
+ @user.votes_average.should == 1
17
+ end
18
+
19
+ should "store the votes count" do
20
+ @user.vote!(1, "voter_id1")
21
+ @user.vote!(1, "voter_id2")
22
+ @user.vote!(-1, "voter_id3")
23
+ @user.vote!(-1, "voter_id4")
24
+
25
+ @user.reload
26
+ @user.votes_count.should == 4
27
+ end
28
+
29
+ should "only store one vote by voter_id" do
30
+ @user.vote!(1, "voter_id1")
31
+ @user.vote!(1, "voter_id1")
32
+ @user.vote!(1, "voter_id1")
33
+ @user.reload
34
+ @user.votes_count.should == 1
35
+ end
36
+
37
+ should "allow to change the vote" do
38
+ @user.vote!(1, "voter_id1")
39
+ @user.vote!(-1, "voter_id1")
40
+
41
+ @user.reload
42
+ @user.votes_count.should == 1
43
+ @user.votes_average.should == -1
44
+ end
45
+
46
+ should "count the votes" do
47
+ @user.vote!(1, "voter_id1")
48
+ @user.vote!(1, "voter_id2")
49
+ @user.vote!(-1, "voter_id3")
50
+ @user.vote!(-1, "voter_id4")
51
+ @user.vote!(-1, "voter_id5")
52
+
53
+ @user.reload
54
+ @user.votes_average.should == -1
55
+ @user.votes_up.should == 2
56
+ @user.votes_down.should == 3
57
+ end
58
+
59
+ should "check if a voter_id already voted" do
60
+ @user.vote!("1", "voter_id1")
61
+ @user.vote!("1", "voter_id2")
62
+
63
+ @user.voted?("voter_id1").should be_true
64
+ @user.reload
65
+ @user.voted?("voter_id1").should be_true
66
+ @user.voted?("voter_id3").should be_false
67
+ end
68
+
69
+ should "check the voter id even if votes was not loaded" do
70
+ @user.vote!("1", "voter_id1")
71
+ @user = User.without(:votes).find(@user.id)
72
+ @user.voted?("voter_id1").should be_true
73
+ @user.voted?("voter_id2").should be_false
74
+ end
75
+ end
76
+ end
77
+
@@ -0,0 +1,22 @@
1
+ require 'helper'
2
+
3
+ class OpenStructTest < Test::Unit::TestCase
4
+ def from_db
5
+ UserConfig.find(@config.id)
6
+ end
7
+
8
+ context "working with sets" do
9
+ setup do
10
+ @config = UserConfig.create!()
11
+ end
12
+
13
+ should "allow to add new keys" do
14
+ entries = OpenStruct.new()
15
+ entries.new_key = "my new key"
16
+ @config.entries = entries
17
+ @config.save
18
+
19
+ from_db.entries["new_key"].should == "my new key"
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,26 @@
1
+ require 'helper'
2
+
3
+ class SetTest < Test::Unit::TestCase
4
+ def from_db
5
+ Recipe.find(@recipe.id)
6
+ end
7
+
8
+ context "working with sets" do
9
+ setup do
10
+ @recipe = Recipe.create!(:ingredients => %w[salt sugar water salt sugar water])
11
+ end
12
+
13
+ should "not have duplicates" do
14
+ from_db.ingredients.size.should == 3
15
+ from_db.ingredients.should include("salt")
16
+ from_db.ingredients.should include("sugar")
17
+ from_db.ingredients.should include("water")
18
+ end
19
+
20
+ should "not add duplicates" do
21
+ original_size = @recipe.ingredients.size
22
+ @recipe.ingredients << "salt"
23
+ @recipe.ingredients.size.should == original_size
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,40 @@
1
+ require 'helper'
2
+
3
+ class TimestampTest < Test::Unit::TestCase
4
+ def from_db
5
+ Event.find(@event.id)
6
+ end
7
+
8
+ context "working with timestamps" do
9
+ setup do
10
+ Event.delete_all
11
+
12
+ Time.zone = 'UTC'
13
+ @start_time = Time.zone.parse('01-01-2009')
14
+ @end_time = @start_time.tomorrow
15
+
16
+ @event = Event.create!(:start_date => @start_time.to_i, :end_date => @end_time.to_i)
17
+ end
18
+
19
+ should "store the date" do
20
+ from_db.start_date.to_s.should == @start_time.to_s
21
+ end
22
+
23
+ should "be able to convert the time to the given timezone" do
24
+ Time.zone = 'Hawaii'
25
+ from_db.start_date.to_s.should == "2008-12-31 14:00:00 -1000"
26
+ end
27
+
28
+ should "be able to compare dates" do
29
+ start_time = @start_time.tomorrow.tomorrow
30
+ end_time = start_time.tomorrow
31
+
32
+ @event2 = Event.create!(:start_date => start_time.utc, :end_datime => end_time.utc)
33
+
34
+ Event.count.should == 2
35
+ events = Event.all(:conditions => {:$where => ("this.start_date >= %d && this.start_date <= %d" % [@event.start_date.yesterday.to_i, @event2.start_date.yesterday.to_i])})
36
+
37
+ events.should == [@event]
38
+ end
39
+ end
40
+ end
metadata ADDED
@@ -0,0 +1,301 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mongoid_ext
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 6
8
+ - 1
9
+ version: 0.6.1
10
+ platform: ruby
11
+ authors:
12
+ - David A. Cuadrado
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-06-25 00:00:00 -05:00
18
+ default_executable: mongoid_console
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: mongoid
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 2
29
+ version: "2"
30
+ type: :runtime
31
+ prerelease: false
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: uuidtools
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ segments:
41
+ - 2
42
+ - 1
43
+ - 1
44
+ version: 2.1.1
45
+ type: :runtime
46
+ prerelease: false
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: i18n
50
+ requirement: &id003 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
57
+ version: "0"
58
+ type: :runtime
59
+ prerelease: false
60
+ version_requirements: *id003
61
+ - !ruby/object:Gem::Dependency
62
+ name: tzinfo
63
+ requirement: &id004 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ segments:
69
+ - 0
70
+ version: "0"
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: *id004
74
+ - !ruby/object:Gem::Dependency
75
+ name: differ
76
+ requirement: &id005 !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ segments:
82
+ - 0
83
+ - 1
84
+ - 2
85
+ version: 0.1.2
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: *id005
89
+ - !ruby/object:Gem::Dependency
90
+ name: yard
91
+ requirement: &id006 !ruby/object:Gem::Requirement
92
+ none: false
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ segments:
97
+ - 0
98
+ - 6
99
+ - 0
100
+ version: 0.6.0
101
+ type: :development
102
+ prerelease: false
103
+ version_requirements: *id006
104
+ - !ruby/object:Gem::Dependency
105
+ name: bundler
106
+ requirement: &id007 !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ~>
110
+ - !ruby/object:Gem::Version
111
+ segments:
112
+ - 1
113
+ - 0
114
+ - 0
115
+ version: 1.0.0
116
+ type: :development
117
+ prerelease: false
118
+ version_requirements: *id007
119
+ - !ruby/object:Gem::Dependency
120
+ name: jeweler
121
+ requirement: &id008 !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ~>
125
+ - !ruby/object:Gem::Version
126
+ segments:
127
+ - 1
128
+ - 5
129
+ - 2
130
+ version: 1.5.2
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: *id008
134
+ - !ruby/object:Gem::Dependency
135
+ name: shoulda
136
+ requirement: &id009 !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ~>
140
+ - !ruby/object:Gem::Version
141
+ segments:
142
+ - 2
143
+ - 11
144
+ - 3
145
+ version: 2.11.3
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: *id009
149
+ - !ruby/object:Gem::Dependency
150
+ name: jnunemaker-matchy
151
+ requirement: &id010 !ruby/object:Gem::Requirement
152
+ none: false
153
+ requirements:
154
+ - - ~>
155
+ - !ruby/object:Gem::Version
156
+ segments:
157
+ - 0
158
+ - 4
159
+ version: "0.4"
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: *id010
163
+ - !ruby/object:Gem::Dependency
164
+ name: shoulda
165
+ requirement: &id011 !ruby/object:Gem::Requirement
166
+ none: false
167
+ requirements:
168
+ - - ~>
169
+ - !ruby/object:Gem::Version
170
+ segments:
171
+ - 2
172
+ - 11
173
+ - 3
174
+ version: 2.11.3
175
+ type: :development
176
+ prerelease: false
177
+ version_requirements: *id011
178
+ - !ruby/object:Gem::Dependency
179
+ name: mocha
180
+ requirement: &id012 !ruby/object:Gem::Requirement
181
+ none: false
182
+ requirements:
183
+ - - ~>
184
+ - !ruby/object:Gem::Version
185
+ segments:
186
+ - 0
187
+ - 9
188
+ - 4
189
+ version: 0.9.4
190
+ type: :development
191
+ prerelease: false
192
+ version_requirements: *id012
193
+ - !ruby/object:Gem::Dependency
194
+ name: timecop
195
+ requirement: &id013 !ruby/object:Gem::Requirement
196
+ none: false
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ segments:
201
+ - 0
202
+ version: "0"
203
+ type: :development
204
+ prerelease: false
205
+ version_requirements: *id013
206
+ description: mongoid plugins
207
+ email: krawek@gmail.com
208
+ executables:
209
+ - mongoid_console
210
+ extensions: []
211
+
212
+ extra_rdoc_files:
213
+ - LICENSE
214
+ - README.rdoc
215
+ files:
216
+ - .document
217
+ - Gemfile
218
+ - Gemfile.lock
219
+ - LICENSE
220
+ - README.rdoc
221
+ - Rakefile
222
+ - VERSION
223
+ - bin/mongoid_console
224
+ - lib/mongoid_ext.rb
225
+ - lib/mongoid_ext/criteria_ext.rb
226
+ - lib/mongoid_ext/document_ext.rb
227
+ - lib/mongoid_ext/file.rb
228
+ - lib/mongoid_ext/file_list.rb
229
+ - lib/mongoid_ext/file_server.rb
230
+ - lib/mongoid_ext/filter.rb
231
+ - lib/mongoid_ext/filter/parser.rb
232
+ - lib/mongoid_ext/filter/result_set.rb
233
+ - lib/mongoid_ext/js/filter.js
234
+ - lib/mongoid_ext/js/find_tags.js
235
+ - lib/mongoid_ext/js/tag_cloud.js
236
+ - lib/mongoid_ext/modifiers.rb
237
+ - lib/mongoid_ext/mongo_mapper.rb
238
+ - lib/mongoid_ext/paranoia.rb
239
+ - lib/mongoid_ext/patches.rb
240
+ - lib/mongoid_ext/random.rb
241
+ - lib/mongoid_ext/slugizer.rb
242
+ - lib/mongoid_ext/storage.rb
243
+ - lib/mongoid_ext/tags.rb
244
+ - lib/mongoid_ext/types/embedded_hash.rb
245
+ - lib/mongoid_ext/types/open_struct.rb
246
+ - lib/mongoid_ext/types/timestamp.rb
247
+ - lib/mongoid_ext/types/translation.rb
248
+ - lib/mongoid_ext/update.rb
249
+ - lib/mongoid_ext/versioning.rb
250
+ - lib/mongoid_ext/voteable.rb
251
+ - mongoid_ext.gemspec
252
+ - test/helper.rb
253
+ - test/models.rb
254
+ - test/support/custom_matchers.rb
255
+ - test/test_filter.rb
256
+ - test/test_modifiers.rb
257
+ - test/test_paranoia.rb
258
+ - test/test_random.rb
259
+ - test/test_slugizer.rb
260
+ - test/test_storage.rb
261
+ - test/test_tags.rb
262
+ - test/test_update.rb
263
+ - test/test_versioning.rb
264
+ - test/test_voteable.rb
265
+ - test/types/test_open_struct.rb
266
+ - test/types/test_set.rb
267
+ - test/types/test_timestamp.rb
268
+ has_rdoc: true
269
+ homepage: http://github.com/dcu/mongoid_ext
270
+ licenses: []
271
+
272
+ post_install_message:
273
+ rdoc_options: []
274
+
275
+ require_paths:
276
+ - lib
277
+ required_ruby_version: !ruby/object:Gem::Requirement
278
+ none: false
279
+ requirements:
280
+ - - ">="
281
+ - !ruby/object:Gem::Version
282
+ segments:
283
+ - 0
284
+ version: "0"
285
+ required_rubygems_version: !ruby/object:Gem::Requirement
286
+ none: false
287
+ requirements:
288
+ - - ">="
289
+ - !ruby/object:Gem::Version
290
+ segments:
291
+ - 0
292
+ version: "0"
293
+ requirements: []
294
+
295
+ rubyforge_project:
296
+ rubygems_version: 1.3.7
297
+ signing_key:
298
+ specification_version: 3
299
+ summary: mongoid plugins
300
+ test_files: []
301
+