tinymongo 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
@@ -0,0 +1,22 @@
1
+ module TinyMongo
2
+ class Error < StandardError
3
+ end
4
+
5
+ class NotConfiguredError < Error
6
+ def initialize
7
+ super('Please do TinyMongo.configure() before attempting to connect!')
8
+ end
9
+ end
10
+
11
+ class NotConnectedError < Error
12
+ def initialize
13
+ super('Not connected to MongoDB. Please connect using TinyMongo.connect()!')
14
+ end
15
+ end
16
+
17
+ class ModifierOperationError < Error
18
+ def initialize
19
+ super('Modifier operations are not allowed on objects that are not yet saved!')
20
+ end
21
+ end
22
+ end
@@ -28,11 +28,7 @@ module TinyMongo
28
28
  end
29
29
 
30
30
  def hashify_models_in_array(array)
31
- new_array = []
32
- array.each do |value|
33
- new_array << hashify_models_in(value)
34
- end
35
- new_array
31
+ new_array = array.map { |value| hashify_models_in(value) }
36
32
  end
37
33
 
38
34
  def hashify_models_in_hash(hash)
@@ -1,3 +1,5 @@
1
+ require 'tinymongo/modifiers'
2
+
1
3
  module TinyMongo
2
4
  class Model
3
5
  class << self
@@ -23,7 +25,6 @@ module TinyMongo
23
25
  end
24
26
 
25
27
  def db
26
- raise 'Not connected to MongoDB. Please connect using TinyMongo.connect().' unless TinyMongo.connected?
27
28
  TinyMongo.db
28
29
  end
29
30
 
@@ -42,16 +43,23 @@ module TinyMongo
42
43
  args.each do |arg|
43
44
  new_args << Helper.hashify_models_in(arg)
44
45
  end
45
- collection.find(*new_args)
46
+ cursor = collection.find(*new_args)
47
+
48
+ if(cursor && cursor.count > 0)
49
+ hashes = cursor.to_a
50
+ objs = hashes.map { |hash| self.new(hash) }
51
+ end
52
+
53
+ cursor ? objs : nil
46
54
  end
47
55
 
48
56
  def find_one(*args)
49
57
  if([BSON::ObjectID, String].include? args[0].class)
50
- o = collection.find_one({'_id' => Helper.bson_object_id(args[0])})
58
+ hash = collection.find_one({'_id' => Helper.bson_object_id(args[0])})
51
59
  else
52
- o = collection.find_one(*args)
60
+ hash = collection.find_one(*args)
53
61
  end
54
- o ? self.new(o) : nil
62
+ hash ? self.new(hash) : nil
55
63
  end
56
64
 
57
65
  def create(hash)
@@ -80,6 +88,10 @@ module TinyMongo
80
88
  end
81
89
  end
82
90
 
91
+ def initialize(hash={})
92
+ @_tinymongo_hash = Helper.stringify_keys_in_hash(hash)
93
+ end
94
+
83
95
  def _id
84
96
  @_tinymongo_hash['_id']
85
97
  end
@@ -87,10 +99,6 @@ module TinyMongo
87
99
  def _id=(val)
88
100
  @_tinymongo_hash['_id'] = Helper.bson_object_id(val)
89
101
  end
90
-
91
- def initialize(hash={})
92
- @_tinymongo_hash = Helper.stringify_keys_in_hash(hash)
93
- end
94
102
 
95
103
  def db
96
104
  self.db
@@ -103,16 +111,24 @@ module TinyMongo
103
111
  def to_hash
104
112
  @_tinymongo_hash.clone
105
113
  end
106
-
114
+
115
+ def reload
116
+ if(self._id)
117
+ obj = collection.find_one({ '_id' => self._id })
118
+ @_tinymongo_hash = Helper.stringify_keys_in_hash(obj) if(obj)
119
+ end
120
+ end
121
+
107
122
  def save
108
- if(@_tinymongo_hash['_id'].nil?) # new
123
+ if(self._id.nil?) # new
109
124
  oid = collection.save(@_tinymongo_hash)
110
125
  if(oid)
111
126
  @_tinymongo_hash.delete(:_id)
112
- @_tinymongo_hash['_id'] = oid
127
+ self._id = oid
113
128
  end
114
129
  else # update
115
- collection.update({ '_id' => @_tinymongo_hash['_id'] }, @_tinymongo_hash, :upsert => true)
130
+ collection.update({ '_id' => self._id }, @_tinymongo_hash, :upsert => true)
131
+ reload
116
132
  end
117
133
  return self
118
134
  end
@@ -128,8 +144,8 @@ module TinyMongo
128
144
  end
129
145
 
130
146
  def delete
131
- if(@_tinymongo_hash['_id'])
132
- collection.remove({ '_id' => @_tinymongo_hash['_id'] })
147
+ if(self._id)
148
+ collection.remove({ '_id' => self._id })
133
149
  end
134
150
  end
135
151
 
@@ -140,131 +156,7 @@ module TinyMongo
140
156
  def destroy(id)
141
157
  delete(id)
142
158
  end
143
-
144
- def inc(hash)
145
- hash.each_pair do |key, value|
146
- key = key.to_s
147
-
148
- if(@_tinymongo_hash[key] && (@_tinymongo_hash[key].kind_of? Numeric))
149
- send(key + '=', (send(key) + value))
150
- else
151
- send(key + '=', value)
152
- end
153
- end
154
-
155
- if(@_tinymongo_hash['_id'])
156
- collection.update({ '_id' => @_tinymongo_hash['_id'] }, { '$inc' => Helper.hashify_models_in_hash(hash) })
157
- end
158
- end
159
-
160
- def set(hash)
161
- hash.each_pair { |key, value| send(key.to_s + '=', value) }
162
-
163
- if(@_tinymongo_hash['_id'])
164
- collection.update({ '_id' => @_tinymongo_hash['_id'] }, { '$set' => Helper.hashify_models_in_hash(hash) })
165
- end
166
- end
167
-
168
- def unset(hash)
169
- hash.each_key do |key|
170
- @_tinymongo_hash.delete(key.to_s)
171
- end
172
-
173
- if(@_tinymongo_hash['_id'])
174
- collection.update({ '_id' => @_tinymongo_hash['_id'] }, { '$unset' => Helper.hashify_models_in_hash(hash) })
175
- end
176
- end
177
-
178
- def push(hash)
179
- hash.each_pair do |key, value|
180
- key = key.to_s
181
-
182
- if(@_tinymongo_hash[key] && (@_tinymongo_hash[key].instance_of? Array))
183
- send(key) << value
184
- else
185
- send(key + '=', value)
186
- end
187
- end
188
-
189
- if(@_tinymongo_hash['_id'])
190
- collection.update({ '_id' => @_tinymongo_hash['_id'] }, { '$push' => Helper.hashify_models_in_hash(hash) })
191
- end
192
- end
193
-
194
- def push_all(hash)
195
- hash.each_pair do |key, value|
196
- key = key.to_s
197
-
198
- if(@_tinymongo_hash[key] && (@_tinymongo_hash[key].instance_of? Array))
199
- value.each { |v| send(key) << value }
200
- else
201
- send(key + '=', value)
202
- end
203
- end
204
-
205
- if(@_tinymongo_hash['_id'])
206
- collection.update({ '_id' => @_tinymongo_hash['_id'] }, { '$pushAll' => Helper.hashify_models_in_hash(hash) })
207
- end
208
- end
209
-
210
- def add_to_set(hash)
211
- hash.each_pair do |key, value|
212
- key = key.to_s
213
-
214
- if(!(@_tinymongo_hash[key].include? value) && (@_tinymongo_hash[key].instance_of? Array))
215
- send(key) << value
216
- end
217
- end
218
159
 
219
- if(@_tinymongo_hash['_id'])
220
- collection.update({ '_id' => @_tinymongo_hash['_id'] }, { '$addToSet' => Helper.hashify_models_in_hash(hash) })
221
- end
222
- end
223
-
224
- def pop(hash)
225
- hash.each_pair do |key, value|
226
- key = key.to_s
227
-
228
- if(@_tinymongo_hash[key] && (@_tinymongo_hash[key].instance_of? Array))
229
- if(value == 1)
230
- send(key).pop
231
- elsif(value == -1)
232
- send(key).shift
233
- end
234
- end
235
- end
236
-
237
- if(@_tinymongo_hash['_id'])
238
- collection.update({ '_id' => @_tinymongo_hash['_id'] }, { '$pop' => Helper.hashify_models_in_hash(hash) })
239
- end
240
- end
241
-
242
- def pull(hash)
243
- hash.each_pair do |key, value|
244
- key = key.to_s
245
- if(@_tinymongo_hash[key] && (@_tinymongo_hash[key].instance_of? Array))
246
- send(key).delete_if { |v| v == value }
247
- end
248
- end
249
-
250
- if(@_tinymongo_hash['_id'])
251
- collection.update({ '_id' => @_tinymongo_hash['_id'] }, { '$pull' => Helper.hashify_models_in_hash(hash) })
252
- end
253
- end
254
-
255
- def pull_all(hash)
256
- hash.each_pair do |key, value|
257
- key = key.to_s
258
- if(@_tinymongo_hash[key] && (@_tinymongo_hash[key].instance_of? Array))
259
- value.each do |v|
260
- send(key).delete_if { |w| w == v }
261
- end
262
- end
263
- end
264
-
265
- if(@_tinymongo_hash['_id'])
266
- collection.update({ '_id' => @_tinymongo_hash['_id'] }, { '$pullAll' => Helper.hashify_models_in_hash(hash) })
267
- end
268
- end
160
+ include Modifiers
269
161
  end
270
162
  end
@@ -0,0 +1,46 @@
1
+ module TinyMongo
2
+ module Modifiers
3
+ def inc(hash)
4
+ do_modifier_operation_and_reload('$inc', hash)
5
+ end
6
+
7
+ def set(hash)
8
+ do_modifier_operation_and_reload('$set', hash)
9
+ end
10
+
11
+ def unset(hash)
12
+ do_modifier_operation_and_reload('$unset', hash)
13
+ end
14
+
15
+ def push(hash)
16
+ do_modifier_operation_and_reload('$push', hash)
17
+ end
18
+
19
+ def push_all(hash)
20
+ do_modifier_operation_and_reload('$pushAll', hash)
21
+ end
22
+
23
+ def add_to_set(hash)
24
+ do_modifier_operation_and_reload('$addToSet', hash)
25
+ end
26
+
27
+ def pop(hash)
28
+ do_modifier_operation_and_reload('$pop', hash)
29
+ end
30
+
31
+ def pull(hash)
32
+ do_modifier_operation_and_reload('$pull', hash)
33
+ end
34
+
35
+ def pull_all(hash)
36
+ do_modifier_operation_and_reload('$pullAll', hash)
37
+ end
38
+
39
+ protected
40
+ def do_modifier_operation_and_reload(operator, hash)
41
+ raise ModifierOperationError unless self._id
42
+ collection.update({ '_id' => self._id }, { operator => Helper.hashify_models_in_hash(hash) })
43
+ reload
44
+ end
45
+ end
46
+ end
data/lib/tinymongo.rb CHANGED
@@ -15,11 +15,12 @@ module TinyMongo
15
15
  end
16
16
 
17
17
  def db
18
+ raise NotConnectedError unless TinyMongo.connected?
18
19
  @db
19
20
  end
20
21
 
21
22
  def connect
22
- raise 'Please do TinyMongo.configure() before attempting to connect.' unless @configured
23
+ raise NotConfiguredError unless @configured
23
24
 
24
25
  if defined?(PhusionPassenger) && @connection
25
26
  PhusionPassenger.on_event(:starting_worker_process) do |forked|
@@ -46,5 +47,6 @@ module TinyMongo
46
47
  end
47
48
  end
48
49
 
50
+ require 'tinymongo/errors'
49
51
  require 'tinymongo/helper'
50
52
  require 'tinymongo/model'
data/tinymongo.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{tinymongo}
8
- s.version = "0.1.2"
8
+ s.version = "0.1.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Peter Jihoon Kim"]
12
- s.date = %q{2010-07-21}
12
+ s.date = %q{2010-07-22}
13
13
  s.description = %q{Simple MongoDB wrapper}
14
14
  s.email = %q{raingrove@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -28,8 +28,10 @@ Gem::Specification.new do |s|
28
28
  "lib/generators/templates/tinymongo.yml.erb",
29
29
  "lib/generators/tinymongo_generator.rb",
30
30
  "lib/tinymongo.rb",
31
+ "lib/tinymongo/errors.rb",
31
32
  "lib/tinymongo/helper.rb",
32
33
  "lib/tinymongo/model.rb",
34
+ "lib/tinymongo/modifiers.rb",
33
35
  "test/test_helper.rb",
34
36
  "test/test_tinymongo.rb",
35
37
  "tinymongo.gemspec"
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 2
9
- version: 0.1.2
8
+ - 3
9
+ version: 0.1.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Peter Jihoon Kim
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-07-21 00:00:00 +09:00
17
+ date: 2010-07-22 00:00:00 +09:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -64,8 +64,10 @@ files:
64
64
  - lib/generators/templates/tinymongo.yml.erb
65
65
  - lib/generators/tinymongo_generator.rb
66
66
  - lib/tinymongo.rb
67
+ - lib/tinymongo/errors.rb
67
68
  - lib/tinymongo/helper.rb
68
69
  - lib/tinymongo/model.rb
70
+ - lib/tinymongo/modifiers.rb
69
71
  - test/test_helper.rb
70
72
  - test/test_tinymongo.rb
71
73
  - tinymongo.gemspec