perpetuity 0.4.3 → 0.4.4
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/.travis.yml +3 -0
- data/CHANGELOG.md +4 -0
- data/lib/perpetuity/mapper.rb +22 -20
- data/lib/perpetuity/serializer.rb +14 -12
- data/lib/perpetuity/version.rb +1 -1
- data/perpetuity.gemspec +1 -1
- data/spec/perpetuity_spec.rb +21 -21
- data/spec/support/test_classes/book.rb +1 -1
- metadata +4 -4
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## Version 0.4.4
|
2
|
+
|
3
|
+
- Automatically persist all referenced objects if they are not already persisted. Previously, referenced objects were required to be persisted before persisting the referencing object.
|
4
|
+
|
1
5
|
## Version 0.4.3
|
2
6
|
|
3
7
|
- Made `Mapper#load_association!` more friendly. It now loads the associated objects for all objects passed in and works with arrays of referenced objects.
|
data/lib/perpetuity/mapper.rb
CHANGED
@@ -69,30 +69,14 @@ module Perpetuity
|
|
69
69
|
new_id
|
70
70
|
end
|
71
71
|
|
72
|
-
def serialize object
|
73
|
-
Serializer.new(self, mapper_registry).serialize(object)
|
74
|
-
end
|
75
|
-
|
76
72
|
def self.data_source(configuration=Perpetuity.configuration)
|
77
73
|
configuration.data_source
|
78
74
|
end
|
79
75
|
|
80
|
-
def data_source
|
81
|
-
self.class.data_source
|
82
|
-
end
|
83
|
-
|
84
76
|
def count
|
85
77
|
data_source.count mapped_class
|
86
78
|
end
|
87
79
|
|
88
|
-
def self.mapped_class
|
89
|
-
@mapped_class
|
90
|
-
end
|
91
|
-
|
92
|
-
def mapped_class
|
93
|
-
self.class.mapped_class
|
94
|
-
end
|
95
|
-
|
96
80
|
def first
|
97
81
|
retrieve.limit(1).first
|
98
82
|
end
|
@@ -101,10 +85,6 @@ module Perpetuity
|
|
101
85
|
retrieve
|
102
86
|
end
|
103
87
|
|
104
|
-
def retrieve criteria={}
|
105
|
-
Perpetuity::Retrieval.new mapped_class, criteria, data_source
|
106
|
-
end
|
107
|
-
|
108
88
|
def select &block
|
109
89
|
query = data_source.class::Query.new(&block).to_db
|
110
90
|
retrieve query
|
@@ -162,6 +142,28 @@ module Perpetuity
|
|
162
142
|
def self.validations
|
163
143
|
@validations ||= ValidationSet.new
|
164
144
|
end
|
145
|
+
|
146
|
+
def data_source
|
147
|
+
self.class.data_source
|
148
|
+
end
|
149
|
+
|
150
|
+
def serialize object
|
151
|
+
Serializer.new(self, mapper_registry).serialize(object)
|
152
|
+
end
|
153
|
+
|
154
|
+
private
|
155
|
+
|
156
|
+
def retrieve criteria={}
|
157
|
+
Perpetuity::Retrieval.new mapped_class, criteria, data_source
|
158
|
+
end
|
159
|
+
|
160
|
+
def self.mapped_class
|
161
|
+
@mapped_class
|
162
|
+
end
|
163
|
+
|
164
|
+
def mapped_class
|
165
|
+
self.class.mapped_class
|
166
|
+
end
|
165
167
|
end
|
166
168
|
end
|
167
169
|
|
@@ -40,12 +40,7 @@ module Perpetuity
|
|
40
40
|
attr = value_serializer.serialize(value)
|
41
41
|
attr.merge '__metadata__' => { 'class' => value.class }
|
42
42
|
else
|
43
|
-
|
44
|
-
'__metadata__' => {
|
45
|
-
'class' => value.class.to_s,
|
46
|
-
'id' => value.id
|
47
|
-
}
|
48
|
-
}
|
43
|
+
serialize_reference(value)
|
49
44
|
end
|
50
45
|
end
|
51
46
|
|
@@ -63,17 +58,24 @@ module Perpetuity
|
|
63
58
|
}
|
64
59
|
}.merge mapper_registry[value.class].serialize(value)
|
65
60
|
else
|
66
|
-
|
67
|
-
'__metadata__' => {
|
68
|
-
'class' => value.class.to_s,
|
69
|
-
'id' => value.id
|
70
|
-
}
|
71
|
-
}
|
61
|
+
serialize_reference value
|
72
62
|
end
|
73
63
|
else
|
74
64
|
Marshal.dump(value)
|
75
65
|
end
|
76
66
|
end
|
77
67
|
end
|
68
|
+
|
69
|
+
def serialize_reference value
|
70
|
+
unless value.respond_to? :id
|
71
|
+
mapper_registry[value.class].insert value
|
72
|
+
end
|
73
|
+
{
|
74
|
+
'__metadata__' => {
|
75
|
+
'class' => value.class.to_s,
|
76
|
+
'id' => value.id
|
77
|
+
}
|
78
|
+
}
|
79
|
+
end
|
78
80
|
end
|
79
81
|
end
|
data/lib/perpetuity/version.rb
CHANGED
data/perpetuity.gemspec
CHANGED
@@ -20,5 +20,5 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.add_development_dependency "rake"
|
21
21
|
s.add_development_dependency "rspec", "~> 2.8.0"
|
22
22
|
s.add_runtime_dependency "mongo", ">= 1.8.0"
|
23
|
-
s.add_runtime_dependency "bson_ext"
|
23
|
+
s.add_runtime_dependency "bson_ext" unless RUBY_PLATFORM == 'java'
|
24
24
|
end
|
data/spec/perpetuity_spec.rb
CHANGED
@@ -46,6 +46,23 @@ describe Perpetuity do
|
|
46
46
|
article.id.should eq 1
|
47
47
|
end
|
48
48
|
|
49
|
+
it 'persists referenced objects if they are not persisted' do
|
50
|
+
article = Article.new
|
51
|
+
article.author = User.new
|
52
|
+
Perpetuity[Article].insert article
|
53
|
+
|
54
|
+
Perpetuity[Article].find(article.id).author.id.should be == article.author.id
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'persists arrays of referenced objects if they are not persisted' do
|
58
|
+
authors = [User.new('Dave'), User.new('Andy')]
|
59
|
+
book = Book.new
|
60
|
+
book.authors = authors
|
61
|
+
Perpetuity[Book].insert book
|
62
|
+
|
63
|
+
Perpetuity[Book].find(book.id).authors.first.id.should be == authors.first.id
|
64
|
+
end
|
65
|
+
|
49
66
|
describe 'id injection' do
|
50
67
|
let(:article) { Article.new }
|
51
68
|
|
@@ -58,10 +75,6 @@ describe Perpetuity do
|
|
58
75
|
Perpetuity[Article].first.should respond_to :id
|
59
76
|
end
|
60
77
|
|
61
|
-
it 'assigns an id using Mapper.retrieve.first' do
|
62
|
-
Perpetuity[Article].retrieve.first.should respond_to :id
|
63
|
-
end
|
64
|
-
|
65
78
|
it 'assigns an id using Mapper.all.first' do
|
66
79
|
Perpetuity[Article].all.first.should respond_to :id
|
67
80
|
end
|
@@ -128,10 +141,6 @@ describe Perpetuity do
|
|
128
141
|
Perpetuity[Article].insert Article.new
|
129
142
|
Perpetuity[Article].first.should respond_to :id
|
130
143
|
end
|
131
|
-
|
132
|
-
it "returns a Perpetuity::Retrieval object" do
|
133
|
-
Perpetuity[Article].retrieve(id: 1).should be_an_instance_of Perpetuity::Retrieval
|
134
|
-
end
|
135
144
|
|
136
145
|
it "gets an item with a specific ID" do
|
137
146
|
article = Article.new
|
@@ -143,15 +152,6 @@ describe Perpetuity do
|
|
143
152
|
retrieved.body.should eq article.body
|
144
153
|
end
|
145
154
|
|
146
|
-
it "gets an item by its attributes" do
|
147
|
-
article = Article.new
|
148
|
-
Perpetuity[Article].insert article
|
149
|
-
retrieved = Perpetuity[Article].retrieve(title: article.title)
|
150
|
-
|
151
|
-
retrieved.to_a.should_not be_empty
|
152
|
-
retrieved.first.title.should eq article.title
|
153
|
-
end
|
154
|
-
|
155
155
|
describe "Array-like syntax" do
|
156
156
|
let(:draft) { Article.new 'Draft', 'draft content', nil, Time.now + 30 }
|
157
157
|
let(:published) { Article.new 'Published', 'content', nil, Time.now - 30, 3 }
|
@@ -219,24 +219,24 @@ describe Perpetuity do
|
|
219
219
|
|
220
220
|
describe 'pagination' do
|
221
221
|
it 'specifies the page we want' do
|
222
|
-
Perpetuity[Article].
|
222
|
+
Perpetuity[Article].all.should respond_to :page
|
223
223
|
end
|
224
224
|
|
225
225
|
it 'specify the quantity per page' do
|
226
|
-
Perpetuity[Article].
|
226
|
+
Perpetuity[Article].all.should respond_to :per_page
|
227
227
|
end
|
228
228
|
|
229
229
|
it 'returns an empty set when there is no data for that page' do
|
230
230
|
mapper = Perpetuity[Article]
|
231
231
|
mapper.delete_all
|
232
|
-
data = mapper.
|
232
|
+
data = mapper.all.page(2)
|
233
233
|
data.should be_empty
|
234
234
|
end
|
235
235
|
|
236
236
|
it 'specifies per-page quantity' do
|
237
237
|
Perpetuity[Article].delete_all
|
238
238
|
5.times { |i| Perpetuity[Article].insert Article.new i }
|
239
|
-
data = Perpetuity[Article].
|
239
|
+
data = Perpetuity[Article].all.page(3).per_page(2)
|
240
240
|
data.should have(1).item
|
241
241
|
end
|
242
242
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: perpetuity
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -156,7 +156,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
156
156
|
version: '0'
|
157
157
|
segments:
|
158
158
|
- 0
|
159
|
-
hash: -
|
159
|
+
hash: -2281292064449361967
|
160
160
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
161
161
|
none: false
|
162
162
|
requirements:
|
@@ -165,7 +165,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
165
165
|
version: '0'
|
166
166
|
segments:
|
167
167
|
- 0
|
168
|
-
hash: -
|
168
|
+
hash: -2281292064449361967
|
169
169
|
requirements: []
|
170
170
|
rubyforge_project:
|
171
171
|
rubygems_version: 1.8.24
|