mongoo 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.0
1
+ 0.5.1
@@ -2,12 +2,17 @@ module Mongoo
2
2
  module Embedded
3
3
  class Base < Mongoo::Core
4
4
 
5
- def initialize(parent, hash={})
5
+ def initialize(parent, hash={}, key=nil)
6
6
  @parent = parent
7
7
  @persisted = persisted?
8
+ @key = key
8
9
  init_from_hash(hash)
9
10
  end
10
11
 
12
+ def key
13
+ @key
14
+ end
15
+
11
16
  def persisted?
12
17
  @parent.persisted?
13
18
  end
@@ -8,8 +8,8 @@ module Mongoo
8
8
  @klass = klass
9
9
  end
10
10
 
11
- def build(hash)
12
- @klass.new(@doc,hash)
11
+ def build(hash, k=nil)
12
+ @klass.new(@doc, hash, k)
13
13
  end
14
14
 
15
15
  def raw
@@ -17,7 +17,7 @@ module Mongoo
17
17
  end
18
18
 
19
19
  def [](k)
20
- build raw[k]
20
+ build raw[k], k
21
21
  end
22
22
 
23
23
  def delete(k)
@@ -29,7 +29,7 @@ module Mongoo
29
29
  end
30
30
 
31
31
  def each
32
- raw.each { |k,v| yield(k, build(v)) }
32
+ raw.each { |k,v| yield(k, build(v, k)) }
33
33
  end
34
34
 
35
35
  def size
@@ -40,6 +40,23 @@ module Mongoo
40
40
  raw.keys
41
41
  end
42
42
 
43
+ def first
44
+ self[keys.first]
45
+ end
46
+
47
+ def last
48
+ self[keys.last]
49
+ end
50
+
51
+ def all
52
+ keys.collect { |k| self[k] }
53
+ end
54
+
55
+ def push(obj)
56
+ k = BSON::ObjectId.new.to_s
57
+ self[k] = obj; k
58
+ end
59
+
43
60
  end # HashProxy
44
61
  end # Embedded
45
62
  end # Mongoo
data/mongoo.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mongoo}
8
- s.version = "0.5.0"
8
+ s.version = "0.5.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ben Myles"]
12
- s.date = %q{2011-06-10}
12
+ s.date = %q{2011-06-14}
13
13
  s.description = %q{Simple object mapper for MongoDB}
14
14
  s.email = %q{ben.myles@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -156,4 +156,31 @@ class TestEmbedded < Test::Unit::TestCase
156
156
  b = Book.find_one(b.id)
157
157
  assert_equal "Paypal", b.purchases[purchase_id].payment_type
158
158
  end
159
+
160
+ should "be able to get the key of the embedded doc" do
161
+ b = Book.new(title: "BASE Jumping Basics")
162
+ purchase_key = BSON::ObjectId.new.to_s
163
+ b.purchases[purchase_key] = b.purchases.build({payment_type: "Cash"})
164
+ assert_equal purchase_key, b.purchases[purchase_key].key
165
+ b.purchases[purchase_key].save!
166
+
167
+ b = Book.find_one(b.id)
168
+ assert_equal purchase_key, b.purchases[purchase_key].key
169
+
170
+ assert_equal purchase_key, b.purchases.first.key
171
+ assert_equal purchase_key, b.purchases.last.key
172
+ assert_equal [purchase_key], b.purchases.all.collect { |p| p.key }
173
+ end
174
+
175
+ should "be able to push an embedded doc if we want an auto gen key" do
176
+ b = Book.new(title: "BASE Jumping Basics")
177
+ doc = b.purchases.build({payment_type: "Cash"})
178
+ key = b.purchases.push(doc)
179
+ assert_nothing_raised { BSON::ObjectId(key) }
180
+ assert_equal doc, b.purchases[key]
181
+ b.insert!
182
+ b = Book.find_one(b.id)
183
+ assert_nothing_raised { BSON::ObjectId(key) }
184
+ assert_equal doc, b.purchases[key]
185
+ end
159
186
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-06-10 00:00:00.000000000 -07:00
12
+ date: 2011-06-14 00:00:00.000000000 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: i18n
17
- requirement: &2151904720 !ruby/object:Gem::Requirement
17
+ requirement: &2151902940 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 0.4.1
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2151904720
25
+ version_requirements: *2151902940
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: activesupport
28
- requirement: &2151902760 !ruby/object:Gem::Requirement
28
+ requirement: &2151899720 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 3.0.3
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *2151902760
36
+ version_requirements: *2151899720
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: activemodel
39
- requirement: &2151899180 !ruby/object:Gem::Requirement
39
+ requirement: &2151897600 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 3.0.3
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *2151899180
47
+ version_requirements: *2151897600
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: mongo
50
- requirement: &2151897040 !ruby/object:Gem::Requirement
50
+ requirement: &2151896060 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ~>
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: 1.3.1
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *2151897040
58
+ version_requirements: *2151896060
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: ruby-debug19
61
- requirement: &2151896120 !ruby/object:Gem::Requirement
61
+ requirement: &2151894340 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0'
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *2151896120
69
+ version_requirements: *2151894340
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: shoulda
72
- requirement: &2151893780 !ruby/object:Gem::Requirement
72
+ requirement: &2151892460 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: '0'
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *2151893780
80
+ version_requirements: *2151892460
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: bundler
83
- requirement: &2151891820 !ruby/object:Gem::Requirement
83
+ requirement: &2151889480 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ~>
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: 1.0.0
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *2151891820
91
+ version_requirements: *2151889480
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: jeweler
94
- requirement: &2151888440 !ruby/object:Gem::Requirement
94
+ requirement: &2151887720 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ~>
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: 1.5.1
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *2151888440
102
+ version_requirements: *2151887720
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: rcov
105
- requirement: &2151886720 !ruby/object:Gem::Requirement
105
+ requirement: &2151885620 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ! '>='
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: '0'
111
111
  type: :development
112
112
  prerelease: false
113
- version_requirements: *2151886720
113
+ version_requirements: *2151885620
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: perftools.rb
116
- requirement: &2151884780 !ruby/object:Gem::Requirement
116
+ requirement: &2151883900 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ! '>='
@@ -121,10 +121,10 @@ dependencies:
121
121
  version: '0'
122
122
  type: :development
123
123
  prerelease: false
124
- version_requirements: *2151884780
124
+ version_requirements: *2151883900
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: bson_ext
127
- requirement: &2151882520 !ruby/object:Gem::Requirement
127
+ requirement: &2151881620 !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
130
130
  - - ~>
@@ -132,7 +132,7 @@ dependencies:
132
132
  version: 1.3.1
133
133
  type: :development
134
134
  prerelease: false
135
- version_requirements: *2151882520
135
+ version_requirements: *2151881620
136
136
  description: Simple object mapper for MongoDB
137
137
  email: ben.myles@gmail.com
138
138
  executables: []
@@ -196,7 +196,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
196
196
  version: '0'
197
197
  segments:
198
198
  - 0
199
- hash: -2521719238518645958
199
+ hash: 4063205949799076691
200
200
  required_rubygems_version: !ruby/object:Gem::Requirement
201
201
  none: false
202
202
  requirements: