tinymongo 0.1.5 → 0.1.6

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.
data/README.rdoc CHANGED
@@ -26,11 +26,11 @@ To create TinyMongo config file (config/tinymongo.yml) and initializer file (con
26
26
  class Person < TinyMongo::Model
27
27
  mongo_collection :people # optional if using Rails
28
28
  mongo_key :name
29
- mongo_key :age
30
- mongo_key :children
29
+ mongo_key :age, :default => 0
30
+ mongo_key :children, :default => []
31
31
 
32
32
  def make_child
33
- child = Person.create(:name => 'Baby', :age => 0)
33
+ child = Person.create(:name => 'Baby')
34
34
  push({:children => child}) # push child into children array
35
35
  end
36
36
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.5
1
+ 0.1.6
@@ -87,7 +87,7 @@ module TinyMongo
87
87
 
88
88
  def next_document
89
89
  doc = @_tinymongo_cursor.next_document
90
- @_tinymongo_model_class.new(doc)
90
+ @_tinymongo_model_class.new(doc) if doc
91
91
  end
92
92
 
93
93
  def query_options_hash
@@ -120,7 +120,7 @@ module TinyMongo
120
120
  return [] if @_tinymongo_cursor.nil?
121
121
 
122
122
  hashes = @_tinymongo_cursor.to_a
123
- hashes.map { |hash| @_tinymongo_model_class.new(hash) }
123
+ hashes.map { |hash| @_tinymongo_model_class.new(hash) if hash }
124
124
  end
125
125
 
126
126
  protected
@@ -2,13 +2,22 @@ module TinyMongo
2
2
  class Model
3
3
  class << self
4
4
  def mongo_key(*args)
5
- args.each do |key_name|
6
- if([Symbol, String].include? key_name.class)
7
- key_name_s = key_name.to_s
8
- key_name_sym = key_name.to_sym
5
+ default = nil
6
+ @_tinymongo_defaults = {} if @_tinymongo_defaults.nil?
7
+
8
+ args.each do |arg|
9
+ default = arg[:default] || arg['default'] if(arg.instance_of? Hash)
10
+ end
11
+
12
+ args.each do |arg|
13
+ if([Symbol, String].include? arg.class)
14
+ key_name_s = arg.to_s
15
+ key_name_sym = arg.to_sym
9
16
 
10
17
  define_method(key_name_sym) { instance_variable_get(:@_tinymongo_hash)[key_name_s] }
11
18
  define_method("#{key_name_s}=") { |val| instance_variable_get(:@_tinymongo_hash)[key_name_s] = val }
19
+
20
+ @_tinymongo_defaults[key_name_s] = default if default
12
21
  end
13
22
  end
14
23
  end
@@ -79,7 +88,7 @@ module TinyMongo
79
88
  end
80
89
 
81
90
  def initialize(hash={})
82
- @_tinymongo_hash = Helper.stringify_keys_in_hash(hash) || {}
91
+ @_tinymongo_hash = (self.class.instance_variable_get(:@_tinymongo_defaults).merge(Helper.stringify_keys_in_hash(hash)) || {}) if hash
83
92
  end
84
93
 
85
94
  def _id
@@ -90,8 +99,17 @@ module TinyMongo
90
99
  @_tinymongo_hash['_id'] = Helper.bson_object_id(val)
91
100
  end
92
101
 
102
+ def id
103
+ @_tinymongo_hash['_id'].to_s
104
+ end
105
+
106
+ def id=(val)
107
+ @_tinymongo_hash['_id'] = Helper.bson_object_id(val)
108
+ end
109
+
93
110
  def ==(another)
94
- self.to_hash == another.to_hash
111
+ (self.instance_variable_get(:@_tinymongo_hash) == another.instance_variable_get(:@_tinymongo_hash)) &&
112
+ (self.kind_of? TinyMongo::Model) && (another.kind_of? TinyMongo::Model)
95
113
  end
96
114
 
97
115
  def db
@@ -106,22 +124,26 @@ module TinyMongo
106
124
  @_tinymongo_hash.dup
107
125
  end
108
126
 
127
+ def to_param
128
+ @_tinymongo_hash['_id'].to_s
129
+ end
130
+
109
131
  def reload
110
- if(self._id)
111
- obj = collection.find_one({ '_id' => self._id })
132
+ if(@_tinymongo_hash['_id'])
133
+ obj = collection.find_one({ '_id' => @_tinymongo_hash['_id'] })
112
134
  @_tinymongo_hash = Helper.stringify_keys_in_hash(obj) if(obj)
113
135
  end
114
136
  end
115
137
 
116
138
  def save
117
- if(self._id.nil?) # new
139
+ if(@_tinymongo_hash['_id'].nil?) # new
118
140
  oid = collection.save(@_tinymongo_hash)
119
141
  if(oid)
120
142
  @_tinymongo_hash.delete(:_id)
121
- self._id = oid
143
+ @_tinymongo_hash['_id'] = oid
122
144
  end
123
145
  else # update
124
- collection.update({ '_id' => self._id }, @_tinymongo_hash, :upsert => true)
146
+ collection.update({ '_id' => @_tinymongo_hash['_id'] }, @_tinymongo_hash, :upsert => true)
125
147
  reload
126
148
  end
127
149
  return self
@@ -138,8 +160,8 @@ module TinyMongo
138
160
  end
139
161
 
140
162
  def delete
141
- if(self._id)
142
- collection.remove({ '_id' => self._id })
163
+ if(@_tinymongo_hash['_id'])
164
+ collection.remove({ '_id' => @_tinymongo_hash['_id'] })
143
165
  end
144
166
  end
145
167
 
@@ -185,8 +207,8 @@ module TinyMongo
185
207
 
186
208
  protected
187
209
  def do_modifier_operation_and_reload(operator, hash)
188
- raise ModifierOperationError unless self._id
189
- collection.update({ '_id' => self._id }, { operator => Helper.hashify_models_in_hash(hash) })
210
+ raise ModifierOperationError unless @_tinymongo_hash['_id']
211
+ collection.update({ '_id' => @_tinymongo_hash['_id'] }, { operator => Helper.hashify_models_in_hash(hash) })
190
212
  reload
191
213
  end
192
214
  end
@@ -10,6 +10,15 @@ class Dummy < TinyMongo::Model
10
10
  mongo_key :bar
11
11
  end
12
12
 
13
+ class DummyTwo < TinyMongo::Model
14
+ mongo_key :foo, :bar
15
+ end
16
+
17
+ class DummyDefault < TinyMongo::Model
18
+ mongo_key :foo, :default => 'hello'
19
+ mongo_key :bar, :default => 'world'
20
+ end
21
+
13
22
  class TinyMongoTest < Test::Unit::TestCase
14
23
  def setup
15
24
  TinyMongo.db['dummies'].drop()
@@ -57,6 +66,28 @@ class TinyMongoTest < Test::Unit::TestCase
57
66
  assert_equal 'world', m.bar
58
67
  end
59
68
 
69
+ def test_mongo_two_keys_in_one_line
70
+ m = DummyTwo.new('foo' => 'hello')
71
+ m.bar = 'world'
72
+
73
+ assert_equal 'hello', m.foo
74
+ assert_equal 'world', m.bar
75
+ end
76
+
77
+ def test_mongo_key_with_default_value
78
+ m = DummyDefault.new
79
+
80
+ assert_equal 'hello', m.foo
81
+ assert_equal 'world', m.bar
82
+ end
83
+
84
+ def test_mongo_key_override_default_value
85
+ m = DummyDefault.new(:foo => 'world', :bar => 'hello')
86
+
87
+ assert_equal 'world', m.foo
88
+ assert_equal 'hello', m.bar
89
+ end
90
+
60
91
  def test_save_new
61
92
  hash = {'foo' => 'hello', 'bar' => 'world'}
62
93
 
@@ -189,11 +220,21 @@ class TinyMongoTest < Test::Unit::TestCase
189
220
  assert_equal true, cursor.has_next?
190
221
  end
191
222
 
223
+ def test_cursor_has_next_is_false
224
+ cursor = Dummy.find
225
+ assert_equal false, cursor.has_next?
226
+ end
227
+
192
228
  def test_cursor_next_document
193
229
  obj = Dummy.create
194
230
  cursor = Dummy.find
195
231
  assert_equal obj, cursor.next_document
196
232
  end
233
+
234
+ def test_cursor_next_document_nil
235
+ cursor = Dummy.find
236
+ assert_equal nil, cursor.next_document
237
+ end
197
238
 
198
239
  def test_cursor_skip
199
240
  Dummy.create('foo' => 1)
@@ -203,6 +244,15 @@ class TinyMongoTest < Test::Unit::TestCase
203
244
  cursor = Dummy.find.skip(2)
204
245
  assert_equal obj, cursor.next_document
205
246
  end
247
+
248
+ def test_cursor_skip_all
249
+ Dummy.create('foo' => 1)
250
+ Dummy.create('foo' => 2)
251
+ obj = Dummy.create('foo' => 3)
252
+
253
+ cursor = Dummy.find.skip(3)
254
+ assert_equal nil, cursor.next_document
255
+ end
206
256
 
207
257
  def test_cursor_skip_count
208
258
  Dummy.create('foo' => 1)
@@ -221,6 +271,11 @@ class TinyMongoTest < Test::Unit::TestCase
221
271
  cursor = Dummy.find
222
272
  assert_equal [obj1, obj2, obj3], cursor.to_a
223
273
  end
274
+
275
+ def test_cursor_to_a_empty
276
+ cursor = Dummy.find
277
+ assert_equal [], cursor.to_a
278
+ end
224
279
 
225
280
  def test_cursor_sort
226
281
  obj1 = Dummy.create('foo' => 3)
@@ -286,8 +341,18 @@ class TinyMongoTest < Test::Unit::TestCase
286
341
  assert_equal({'_id' => obj._id, 'foo' => 'hello'}, obj.to_hash)
287
342
  end
288
343
 
344
+ def test_id
345
+ obj = Dummy.create
346
+ assert_equal obj._id.to_s, obj.id
347
+ end
348
+
349
+ def test_to_param
350
+ obj = Dummy.create
351
+ assert_equal obj._id.to_s, obj.to_param
352
+ end
353
+
289
354
  def test_eq
290
- obj = Dummy.create('foo' => 'hello')
355
+ obj = Dummy.create
291
356
  obj2 = Dummy.find_one()
292
357
  assert_equal obj, obj2
293
358
  end
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.5"
8
+ s.version = "0.1.6"
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-23}
12
+ s.date = %q{2010-07-27}
13
13
  s.description = %q{Simple MongoDB wrapper}
14
14
  s.email = %q{raingrove@gmail.com}
15
15
  s.extra_rdoc_files = [
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 5
9
- version: 0.1.5
8
+ - 6
9
+ version: 0.1.6
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-23 00:00:00 +09:00
17
+ date: 2010-07-27 00:00:00 +09:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency