mongo_mapper 0.8.2 → 0.8.3

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/examples/keys.rb CHANGED
@@ -13,6 +13,7 @@ class User
13
13
  key :age, Integer
14
14
  key :skills, Array
15
15
  key :friend_ids, Array, :typecast => 'ObjectId'
16
+ key :links, Hash
16
17
  timestamps!
17
18
  end
18
19
  User.collection.remove # empties collection
@@ -22,6 +23,7 @@ john = User.create({
22
23
  :last_name => 'Nunemaker',
23
24
  :age => 28,
24
25
  :skills => ['ruby', 'mongo', 'javascript'],
26
+ :links => {"Google" => "http://www.google.com"}
25
27
  })
26
28
 
27
29
  steve = User.create({
@@ -32,6 +34,7 @@ steve = User.create({
32
34
  })
33
35
 
34
36
  john.friend_ids << steve.id.to_s # will get typecast to ObjectId
37
+ john.links["Ruby on Rails"] = "http://www.rubyonrails.com"
35
38
  john.save
36
39
 
37
40
  pp john
@@ -0,0 +1,25 @@
1
+ $LOAD_PATH.unshift(File.expand_path('../../../lib', __FILE__))
2
+ require 'mongo_mapper'
3
+ require 'pp'
4
+
5
+ MongoMapper.database = 'testing'
6
+
7
+ class User
8
+ include MongoMapper::Document
9
+
10
+ key :name, String
11
+ key :tags, Array
12
+ end
13
+ User.collection.remove # empties collection
14
+
15
+ john = User.create(:name => 'John', :tags => %w[ruby mongo], :age => 28)
16
+ bill = User.create(:name => 'Bill', :tags => %w[ruby mongo], :age => 30)
17
+
18
+ User.set({:name => 'John'}, :tags => %[ruby])
19
+ pp john.reload
20
+
21
+ User.set(john.id, :tags => %w[ruby mongo])
22
+ pp john.reload
23
+
24
+ john.set(:tags => %w[something different])
25
+ pp john.reload
data/lib/mongo_mapper.rb CHANGED
@@ -8,7 +8,6 @@ module MongoMapper
8
8
  autoload :Connection, 'mongo_mapper/connection'
9
9
 
10
10
  autoload :Error, 'mongo_mapper/exceptions'
11
- autoload :KeyNotFound, 'mongo_mapper/exceptions'
12
11
  autoload :DocumentNotFound, 'mongo_mapper/exceptions'
13
12
  autoload :InvalidScheme, 'mongo_mapper/exceptions'
14
13
  autoload :DocumentNotValid, 'mongo_mapper/exceptions'
@@ -3,9 +3,6 @@ module MongoMapper
3
3
  # generic MM error
4
4
  class Error < StandardError; end
5
5
 
6
- # raised when key expected to exist but not found
7
- class KeyNotFound < Error; end
8
-
9
6
  # raised when document expected but not found
10
7
  class DocumentNotFound < Error; end
11
8
 
@@ -12,6 +12,11 @@ module MongoMapper
12
12
  end
13
13
  end
14
14
 
15
+ def include?(*args)
16
+ load_target
17
+ target.include?(*args)
18
+ end
19
+
15
20
  def reset
16
21
  super
17
22
  target = []
@@ -44,6 +44,11 @@ module MongoMapper
44
44
  object_id_keys.include?(name.to_sym)
45
45
  end
46
46
 
47
+ # API Private
48
+ def can_default_id?
49
+ keys['_id'].can_default_id?
50
+ end
51
+
47
52
  def to_mongo(instance)
48
53
  return nil if instance.nil?
49
54
  instance.to_mongo
@@ -268,8 +273,8 @@ module MongoMapper
268
273
 
269
274
  def default_id_value(attrs)
270
275
  unless attrs.nil?
271
- provided_keys = attrs.keys.map { |k| k.to_s }
272
- unless provided_keys.include?('_id') || provided_keys.include?('id')
276
+ id_provided = attrs.keys.map { |k| k.to_s }.detect { |k| k == 'id' || k == '_id' }
277
+ if !id_provided && self.class.can_default_id?
273
278
  write_key :_id, BSON::ObjectID.new
274
279
  end
275
280
  end
@@ -290,8 +295,6 @@ module MongoMapper
290
295
  value = key.get(instance_variable_get(:"@#{key_name}"))
291
296
  set_parent_document(key, value)
292
297
  instance_variable_set(:"@#{key_name}", value)
293
- else
294
- raise KeyNotFound, "Could not find key: #{key_name.inspect}"
295
298
  end
296
299
  end
297
300
 
@@ -21,6 +21,10 @@ module MongoMapper
21
21
  type.embeddable?
22
22
  end
23
23
 
24
+ def can_default_id?
25
+ type && [ObjectId, BSON::ObjectID, String].include?(type)
26
+ end
27
+
24
28
  def number?
25
29
  [Integer, Float].include?(type)
26
30
  end
@@ -1,4 +1,4 @@
1
1
  # encoding: UTF-8
2
2
  module MongoMapper
3
- Version = '0.8.2'
3
+ Version = '0.8.3'
4
4
  end
@@ -307,6 +307,16 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
307
307
  @project2.save
308
308
  end
309
309
 
310
+ context "include?" do
311
+ should "return true if in association" do
312
+ @project1.statuses.should include(@brand_new)
313
+ end
314
+
315
+ should "return false if not in association" do
316
+ @project1.statuses.should_not include(@in_progress)
317
+ end
318
+ end
319
+
310
320
  context "dynamic finders" do
311
321
  should "work with single key" do
312
322
  @project1.statuses.find_by_name('New').should == @brand_new
data/test/test_helper.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'rubygems'
2
2
  gem 'activesupport', ENV['ACTIVE_SUPPORT_VERSION']
3
- gem 'json', '~> 1.2.3'
3
+ gem 'json'
4
4
  gem 'jnunemaker-matchy', '~> 0.4.0'
5
5
  gem 'shoulda', '~> 2.10.2'
6
6
  gem 'timecop', '~> 0.3.1'
@@ -10,10 +10,10 @@ $:.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
10
10
  require 'mongo_mapper'
11
11
  require 'fileutils'
12
12
  require 'ostruct'
13
- require 'pp'
14
13
 
15
14
  require 'active_support/version'
16
15
  require 'json'
16
+ require 'log_buddy'
17
17
  require 'matchy'
18
18
  require 'shoulda'
19
19
  require 'timecop'
@@ -97,6 +97,7 @@ log_dir = File.expand_path('../../log', __FILE__)
97
97
  FileUtils.mkdir_p(log_dir) unless File.exist?(log_dir)
98
98
  logger = Logger.new(log_dir + '/test.log')
99
99
 
100
+ LogBuddy.init(:logger => logger)
100
101
  MongoMapper.connection = Mongo::Connection.new('127.0.0.1', 27017, :logger => logger)
101
102
  MongoMapper.database = "mm-test-#{RUBY_VERSION.gsub('.', '-')}"
102
103
  MongoMapper.database.collections.each { |c| c.drop_indexes }
@@ -387,9 +387,9 @@ class EmbeddedDocumentTest < Test::Unit::TestCase
387
387
  doc[:name].should == 'string'
388
388
  end
389
389
 
390
- should "raise exception when key not found" do
390
+ should "return nil when not found" do
391
391
  doc = @document.new(:name => 'string')
392
- assert_raises(MongoMapper::KeyNotFound) { doc[:not_here] }
392
+ doc[:not_here].should be_nil
393
393
  end
394
394
  end
395
395
 
@@ -4,6 +4,40 @@ require 'models'
4
4
  class KeyTest < Test::Unit::TestCase
5
5
  include MongoMapper::Plugins::Keys
6
6
 
7
+ context ".new with no id and _id of type integer" do
8
+ should "not error" do
9
+ lambda {
10
+ klass = Doc() do
11
+ key :_id, Integer
12
+ end
13
+ # No sensible default id for integer, people better pass them in if they user this
14
+ klass.new.id.should be_nil
15
+ }.should_not raise_error
16
+ end
17
+ end
18
+
19
+ context ".new with no id and _id of type string" do
20
+ should "not error" do
21
+ lambda {
22
+ klass = Doc() do
23
+ key :_id, String
24
+ end
25
+ klass.new.id.should_not be_nil
26
+ }.should_not raise_error
27
+ end
28
+ end
29
+
30
+ context ".new with no id and _id of type object id" do
31
+ should "not error" do
32
+ lambda {
33
+ klass = Doc() do
34
+ key :_id, ObjectId
35
+ end
36
+ klass.new.should_not be_nil
37
+ }.should_not raise_error
38
+ end
39
+ end
40
+
7
41
  context ".key?(:symbol)" do
8
42
  should "be true if document has key" do
9
43
  Address.key?(:city).should be_true
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongo_mapper
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 57
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
8
  - 8
8
- - 2
9
- version: 0.8.2
9
+ - 3
10
+ version: 0.8.3
10
11
  platform: ruby
11
12
  authors:
12
13
  - John Nunemaker
@@ -14,16 +15,18 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-06-18 00:00:00 -04:00
18
+ date: 2010-08-09 00:00:00 -04:00
18
19
  default_executable: mmconsole
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
22
  name: activesupport
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
24
26
  requirements:
25
27
  - - ">="
26
28
  - !ruby/object:Gem::Version
29
+ hash: 11
27
30
  segments:
28
31
  - 2
29
32
  - 3
@@ -35,9 +38,11 @@ dependencies:
35
38
  name: jnunemaker-validatable
36
39
  prerelease: false
37
40
  requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
38
42
  requirements:
39
43
  - - ~>
40
44
  - !ruby/object:Gem::Version
45
+ hash: 63
41
46
  segments:
42
47
  - 1
43
48
  - 8
@@ -49,86 +54,110 @@ dependencies:
49
54
  name: plucky
50
55
  prerelease: false
51
56
  requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
52
58
  requirements:
53
59
  - - ~>
54
60
  - !ruby/object:Gem::Version
61
+ hash: 21
55
62
  segments:
56
63
  - 0
57
64
  - 3
58
- - 1
59
- version: 0.3.1
65
+ - 3
66
+ version: 0.3.3
60
67
  type: :runtime
61
68
  version_requirements: *id003
62
69
  - !ruby/object:Gem::Dependency
63
70
  name: json
64
71
  prerelease: false
65
72
  requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
66
74
  requirements:
67
- - - ~>
75
+ - - ">="
68
76
  - !ruby/object:Gem::Version
77
+ hash: 3
69
78
  segments:
70
- - 1
71
- - 2
72
- - 3
73
- version: 1.2.3
79
+ - 0
80
+ version: "0"
74
81
  type: :development
75
82
  version_requirements: *id004
76
83
  - !ruby/object:Gem::Dependency
77
- name: jnunemaker-matchy
84
+ name: log_buddy
78
85
  prerelease: false
79
86
  requirement: &id005 !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ hash: 3
92
+ segments:
93
+ - 0
94
+ version: "0"
95
+ type: :development
96
+ version_requirements: *id005
97
+ - !ruby/object:Gem::Dependency
98
+ name: jnunemaker-matchy
99
+ prerelease: false
100
+ requirement: &id006 !ruby/object:Gem::Requirement
101
+ none: false
80
102
  requirements:
81
103
  - - ~>
82
104
  - !ruby/object:Gem::Version
105
+ hash: 15
83
106
  segments:
84
107
  - 0
85
108
  - 4
86
109
  - 0
87
110
  version: 0.4.0
88
111
  type: :development
89
- version_requirements: *id005
112
+ version_requirements: *id006
90
113
  - !ruby/object:Gem::Dependency
91
114
  name: shoulda
92
115
  prerelease: false
93
- requirement: &id006 !ruby/object:Gem::Requirement
116
+ requirement: &id007 !ruby/object:Gem::Requirement
117
+ none: false
94
118
  requirements:
95
119
  - - ~>
96
120
  - !ruby/object:Gem::Version
121
+ hash: 35
97
122
  segments:
98
123
  - 2
99
124
  - 10
100
125
  - 2
101
126
  version: 2.10.2
102
127
  type: :development
103
- version_requirements: *id006
128
+ version_requirements: *id007
104
129
  - !ruby/object:Gem::Dependency
105
130
  name: timecop
106
131
  prerelease: false
107
- requirement: &id007 !ruby/object:Gem::Requirement
132
+ requirement: &id008 !ruby/object:Gem::Requirement
133
+ none: false
108
134
  requirements:
109
135
  - - ~>
110
136
  - !ruby/object:Gem::Version
137
+ hash: 17
111
138
  segments:
112
139
  - 0
113
140
  - 3
114
141
  - 1
115
142
  version: 0.3.1
116
143
  type: :development
117
- version_requirements: *id007
144
+ version_requirements: *id008
118
145
  - !ruby/object:Gem::Dependency
119
146
  name: mocha
120
147
  prerelease: false
121
- requirement: &id008 !ruby/object:Gem::Requirement
148
+ requirement: &id009 !ruby/object:Gem::Requirement
149
+ none: false
122
150
  requirements:
123
151
  - - ~>
124
152
  - !ruby/object:Gem::Version
153
+ hash: 43
125
154
  segments:
126
155
  - 0
127
156
  - 9
128
157
  - 8
129
158
  version: 0.9.8
130
159
  type: :development
131
- version_requirements: *id008
160
+ version_requirements: *id009
132
161
  description:
133
162
  email:
134
163
  - nunemaker@gmail.com
@@ -141,6 +170,7 @@ extra_rdoc_files: []
141
170
  files:
142
171
  - bin/mmconsole
143
172
  - examples/keys.rb
173
+ - examples/modifiers/set.rb
144
174
  - examples/plugins.rb
145
175
  - examples/querying.rb
146
176
  - examples/scopes.rb
@@ -281,23 +311,27 @@ rdoc_options: []
281
311
  require_paths:
282
312
  - lib
283
313
  required_ruby_version: !ruby/object:Gem::Requirement
314
+ none: false
284
315
  requirements:
285
316
  - - ">="
286
317
  - !ruby/object:Gem::Version
318
+ hash: 3
287
319
  segments:
288
320
  - 0
289
321
  version: "0"
290
322
  required_rubygems_version: !ruby/object:Gem::Requirement
323
+ none: false
291
324
  requirements:
292
325
  - - ">="
293
326
  - !ruby/object:Gem::Version
327
+ hash: 3
294
328
  segments:
295
329
  - 0
296
330
  version: "0"
297
331
  requirements: []
298
332
 
299
333
  rubyforge_project:
300
- rubygems_version: 1.3.6
334
+ rubygems_version: 1.3.7
301
335
  signing_key:
302
336
  specification_version: 3
303
337
  summary: A Ruby Object Mapper for Mongo