mongoid 1.0.5 → 1.0.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/VERSION +1 -1
- data/lib/mongoid.rb +1 -0
- data/lib/mongoid/associations/has_many.rb +1 -1
- data/lib/mongoid/attributes.rb +1 -5
- data/lib/mongoid/document.rb +5 -19
- data/lib/mongoid/extensions/hash/assimilation.rb +1 -1
- data/lib/mongoid/identity.rb +33 -0
- data/mongoid.gemspec +5 -2
- data/spec/spec_helper.rb +1 -1
- data/spec/unit/mongoid/attributes_spec.rb +1 -1
- data/spec/unit/mongoid/extensions/integer/conversions_spec.rb +35 -7
- data/spec/unit/mongoid/identity_spec.rb +68 -0
- metadata +5 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.6
|
data/lib/mongoid.rb
CHANGED
data/lib/mongoid/attributes.rb
CHANGED
@@ -38,7 +38,7 @@ module Mongoid #:nodoc:
|
|
38
38
|
if Mongoid.allow_dynamic_fields && !respond_to?("#{key}=")
|
39
39
|
@attributes[key] = value
|
40
40
|
else
|
41
|
-
|
41
|
+
send("#{key}=", value)
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
@@ -136,10 +136,6 @@ module Mongoid #:nodoc:
|
|
136
136
|
end
|
137
137
|
end
|
138
138
|
|
139
|
-
# Sets the attirbute value unless it is a blank string.
|
140
|
-
def set_unless_blank(name, value)
|
141
|
-
send("#{name}=", value) unless (value.is_a?(String) && value.blank?)
|
142
|
-
end
|
143
139
|
end
|
144
140
|
|
145
141
|
module ClassMethods
|
data/lib/mongoid/document.rb
CHANGED
@@ -84,7 +84,7 @@ module Mongoid #:nodoc:
|
|
84
84
|
# end
|
85
85
|
def key(*fields)
|
86
86
|
self.primary_key = fields
|
87
|
-
before_save :
|
87
|
+
before_save :identify
|
88
88
|
end
|
89
89
|
|
90
90
|
# Macro for setting the collection name to store in.
|
@@ -138,12 +138,8 @@ module Mongoid #:nodoc:
|
|
138
138
|
end
|
139
139
|
|
140
140
|
# Generate an id for this +Document+.
|
141
|
-
def
|
142
|
-
|
143
|
-
@attributes[:_id] = extract_keys.join(" ").identify
|
144
|
-
else
|
145
|
-
@attributes[:_id] = Mongo::ObjectID.new.to_s unless id
|
146
|
-
end
|
141
|
+
def identify
|
142
|
+
Identity.create(self)
|
147
143
|
end
|
148
144
|
|
149
145
|
# Instantiate a new +Document+, setting the Document's attributes if
|
@@ -165,12 +161,12 @@ module Mongoid #:nodoc:
|
|
165
161
|
process(defaults.merge(attrs))
|
166
162
|
@new_record = true if id.nil?
|
167
163
|
document = yield self if block_given?
|
168
|
-
|
164
|
+
identify
|
169
165
|
end
|
170
166
|
|
171
167
|
# Returns the class name plus its attributes.
|
172
168
|
def inspect
|
173
|
-
attrs = fields.map { |name, field| "#{name}: #{@attributes[name]
|
169
|
+
attrs = fields.map { |name, field| "#{name}: #{@attributes[name].inspect}" } * ", "
|
174
170
|
"#<#{self.class.name} _id: #{id}, #{attrs}>"
|
175
171
|
end
|
176
172
|
|
@@ -276,16 +272,6 @@ module Mongoid #:nodoc:
|
|
276
272
|
clear ? @attributes.delete(name) : @attributes.insert(name, child.attributes)
|
277
273
|
notify
|
278
274
|
end
|
279
|
-
|
280
|
-
protected
|
281
|
-
def generate_type
|
282
|
-
@attributes[:_type] ||= self.class.name
|
283
|
-
end
|
284
|
-
|
285
|
-
def extract_keys
|
286
|
-
primary_key.collect { |key| @attributes[key] }.reject { |val| val.nil? }
|
287
|
-
end
|
288
|
-
|
289
275
|
end
|
290
276
|
|
291
277
|
end
|
@@ -21,7 +21,7 @@ module Mongoid #:nodoc:
|
|
21
21
|
klass = type ? type : options.klass
|
22
22
|
child = klass.instantiate(:_parent => parent)
|
23
23
|
child.write_attributes(self.merge(:_type => klass.name))
|
24
|
-
child.
|
24
|
+
child.identify
|
25
25
|
child.assimilate(parent, options)
|
26
26
|
end
|
27
27
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid #:nodoc:
|
3
|
+
class Identity #:nodoc:
|
4
|
+
class << self
|
5
|
+
# Create the identity for the +Document+.
|
6
|
+
#
|
7
|
+
# The id will be set in either in the form of a Mongo
|
8
|
+
# +ObjectID+ or a composite key set up by defining a key on the document.
|
9
|
+
#
|
10
|
+
# The _type will be set to the document's class name.
|
11
|
+
def create(doc)
|
12
|
+
identify(doc); type(doc); doc
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
# Set the id for the document.
|
17
|
+
def identify(doc)
|
18
|
+
doc.id = compose(doc).join(" ").identify if doc.primary_key
|
19
|
+
doc.id = Mongo::ObjectID.new.to_s unless doc.id
|
20
|
+
end
|
21
|
+
|
22
|
+
# Set the _type field on the document.
|
23
|
+
def type(doc)
|
24
|
+
doc._type = doc.class.name
|
25
|
+
end
|
26
|
+
|
27
|
+
# Generates the composite key for a document.
|
28
|
+
def compose(doc)
|
29
|
+
doc.primary_key.collect { |key| doc.attributes[key] }.reject { |val| val.nil? }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/mongoid.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mongoid}
|
8
|
-
s.version = "1.0.
|
8
|
+
s.version = "1.0.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Durran Jordan"]
|
12
|
-
s.date = %q{2010-01-
|
12
|
+
s.date = %q{2010-01-14}
|
13
13
|
s.email = %q{durran@gmail.com}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"README.rdoc"
|
@@ -73,6 +73,7 @@ Gem::Specification.new do |s|
|
|
73
73
|
"lib/mongoid/field.rb",
|
74
74
|
"lib/mongoid/fields.rb",
|
75
75
|
"lib/mongoid/finders.rb",
|
76
|
+
"lib/mongoid/identity.rb",
|
76
77
|
"lib/mongoid/indexes.rb",
|
77
78
|
"lib/mongoid/memoization.rb",
|
78
79
|
"lib/mongoid/named_scope.rb",
|
@@ -136,6 +137,7 @@ Gem::Specification.new do |s|
|
|
136
137
|
"spec/unit/mongoid/field_spec.rb",
|
137
138
|
"spec/unit/mongoid/fields_spec.rb",
|
138
139
|
"spec/unit/mongoid/finders_spec.rb",
|
140
|
+
"spec/unit/mongoid/identity_spec.rb",
|
139
141
|
"spec/unit/mongoid/indexes_spec.rb",
|
140
142
|
"spec/unit/mongoid/memoization_spec.rb",
|
141
143
|
"spec/unit/mongoid/named_scope_spec.rb",
|
@@ -204,6 +206,7 @@ Gem::Specification.new do |s|
|
|
204
206
|
"spec/unit/mongoid/field_spec.rb",
|
205
207
|
"spec/unit/mongoid/fields_spec.rb",
|
206
208
|
"spec/unit/mongoid/finders_spec.rb",
|
209
|
+
"spec/unit/mongoid/identity_spec.rb",
|
207
210
|
"spec/unit/mongoid/indexes_spec.rb",
|
208
211
|
"spec/unit/mongoid/memoization_spec.rb",
|
209
212
|
"spec/unit/mongoid/named_scope_spec.rb",
|
data/spec/spec_helper.rb
CHANGED
@@ -4,18 +4,46 @@ describe Mongoid::Extensions::Integer::Conversions do
|
|
4
4
|
|
5
5
|
describe "#set" do
|
6
6
|
|
7
|
-
context "when
|
7
|
+
context "when the value is a number" do
|
8
8
|
|
9
|
-
it "converts the
|
10
|
-
Integer.set(
|
9
|
+
it "converts the number to an integer" do
|
10
|
+
Integer.set(3).should == 3
|
11
11
|
end
|
12
12
|
|
13
13
|
end
|
14
14
|
|
15
|
-
context "when string is not a number" do
|
15
|
+
context "when the string is not a number" do
|
16
|
+
|
17
|
+
context "when the string is non numerical" do
|
18
|
+
|
19
|
+
it "returns the string" do
|
20
|
+
Integer.set("foo").should == "foo"
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
context "when the string is numerical" do
|
26
|
+
|
27
|
+
it "returns the integer value for the string" do
|
28
|
+
Integer.set("3").should == 3
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
context "when the string is empty" do
|
34
|
+
|
35
|
+
it "returns an empty string" do
|
36
|
+
Integer.set("").should be_blank
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
context "when the string is nil" do
|
42
|
+
|
43
|
+
it "returns nil" do
|
44
|
+
Integer.set(nil).should be_nil
|
45
|
+
end
|
16
46
|
|
17
|
-
it "returns the string" do
|
18
|
-
Integer.set("foo").should == "foo"
|
19
47
|
end
|
20
48
|
|
21
49
|
end
|
@@ -25,7 +53,7 @@ describe Mongoid::Extensions::Integer::Conversions do
|
|
25
53
|
describe "#get" do
|
26
54
|
|
27
55
|
it "returns the integer" do
|
28
|
-
Integer.get(
|
56
|
+
Integer.get(3).should == 3
|
29
57
|
end
|
30
58
|
|
31
59
|
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Mongoid::Identity do
|
4
|
+
|
5
|
+
describe ".create" do
|
6
|
+
|
7
|
+
let(:name) { Name.new }
|
8
|
+
|
9
|
+
it "sets the document _type to the class name" do
|
10
|
+
Mongoid::Identity.create(name)
|
11
|
+
name._type.should == "Name"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "returns the document" do
|
15
|
+
Mongoid::Identity.create(name).should == name
|
16
|
+
end
|
17
|
+
|
18
|
+
context "when the document has a primary key" do
|
19
|
+
|
20
|
+
before do
|
21
|
+
@address = Address.allocate
|
22
|
+
@address.instance_variable_set(:@attributes, { :street => "Market St"})
|
23
|
+
end
|
24
|
+
|
25
|
+
it "sets the id to the composite key" do
|
26
|
+
Mongoid::Identity.create(@address)
|
27
|
+
@address.id.should == "market-st"
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
context "when the document has no primary key" do
|
33
|
+
|
34
|
+
context "when the document has no id" do
|
35
|
+
|
36
|
+
before do
|
37
|
+
@person = Person.allocate
|
38
|
+
@person.instance_variable_set(:@attributes, {})
|
39
|
+
@object_id = stub(:to_s => "1")
|
40
|
+
Mongo::ObjectID.expects(:new).returns(@object_id)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "sets the id to a mongo object id" do
|
44
|
+
Mongoid::Identity.create(@person)
|
45
|
+
@person.id.should == "1"
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
context "when the document has an id" do
|
51
|
+
|
52
|
+
before do
|
53
|
+
@person = Person.allocate
|
54
|
+
@person.instance_variable_set(:@attributes, { :_id => "5" })
|
55
|
+
end
|
56
|
+
|
57
|
+
it "returns the existing id" do
|
58
|
+
Mongoid::Identity.create(@person)
|
59
|
+
@person.id.should == "5"
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Durran Jordan
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-14 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -139,6 +139,7 @@ files:
|
|
139
139
|
- lib/mongoid/field.rb
|
140
140
|
- lib/mongoid/fields.rb
|
141
141
|
- lib/mongoid/finders.rb
|
142
|
+
- lib/mongoid/identity.rb
|
142
143
|
- lib/mongoid/indexes.rb
|
143
144
|
- lib/mongoid/memoization.rb
|
144
145
|
- lib/mongoid/named_scope.rb
|
@@ -202,6 +203,7 @@ files:
|
|
202
203
|
- spec/unit/mongoid/field_spec.rb
|
203
204
|
- spec/unit/mongoid/fields_spec.rb
|
204
205
|
- spec/unit/mongoid/finders_spec.rb
|
206
|
+
- spec/unit/mongoid/identity_spec.rb
|
205
207
|
- spec/unit/mongoid/indexes_spec.rb
|
206
208
|
- spec/unit/mongoid/memoization_spec.rb
|
207
209
|
- spec/unit/mongoid/named_scope_spec.rb
|
@@ -292,6 +294,7 @@ test_files:
|
|
292
294
|
- spec/unit/mongoid/field_spec.rb
|
293
295
|
- spec/unit/mongoid/fields_spec.rb
|
294
296
|
- spec/unit/mongoid/finders_spec.rb
|
297
|
+
- spec/unit/mongoid/identity_spec.rb
|
295
298
|
- spec/unit/mongoid/indexes_spec.rb
|
296
299
|
- spec/unit/mongoid/memoization_spec.rb
|
297
300
|
- spec/unit/mongoid/named_scope_spec.rb
|