datamappify 0.53.1 → 0.53.2
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +6 -0
- data/README.md +4 -0
- data/lib/datamappify/data/criteria/relational/concerns/set_criteria.rb +0 -5
- data/lib/datamappify/data/criteria/relational/find_by_key.rb +7 -0
- data/lib/datamappify/data/criteria/relational/save_by_key.rb +6 -0
- data/lib/datamappify/data/errors.rb +3 -0
- data/lib/datamappify/entity/inspectable.rb +28 -0
- data/lib/datamappify/entity.rb +2 -0
- data/lib/datamappify/repository/query_method/save.rb +5 -1
- data/lib/datamappify/version.rb +1 -1
- data/spec/repository/reverse_mapped_spec.rb +26 -0
- data/spec/repository/validation_spec.rb +12 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/support/entities/post.rb +1 -1
- data/spec/support/entities/user.rb +2 -0
- metadata +34 -73
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4ec85b5050a819d22845e27d8dd637007b94910c
|
4
|
+
data.tar.gz: 8c42b671c22e957161aaf8c7791a978037559424
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 125891396e0b79a7336abb47f9fc1dbc9f1fd492a0acaeb439f5c111d1ddbdbb6fba6c7acb5ef4479c7b6db6153e214b1e7f5b87342182c0f533cf63e96777eb
|
7
|
+
data.tar.gz: d5d7ab84a3650dac56ad2678e732bb737e1d90873121f237a2489e72fa5709c7eab8d0ebfb86a4347c9721ccad6a8376d84b3b4db8650abeec68fa37440e1b9c
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
## master
|
2
2
|
|
3
|
+
## 0.53.2 [2013-07-18]
|
4
|
+
|
5
|
+
- Better attributes inspect. Thanks @jamesmoriarty!
|
6
|
+
- Added support of `:create` and `:update` contexts for validations.
|
7
|
+
- Fixed the persistence when `:via` is specified in the repository.
|
8
|
+
|
3
9
|
## 0.53.1 [2013-06-27]
|
4
10
|
|
5
11
|
- Fixed ruby 1.9 compatibility.
|
data/README.md
CHANGED
@@ -374,6 +374,10 @@ end
|
|
374
374
|
|
375
375
|
Note: Returning either `nil` or `false` from the callback will cancel all subsequent callbacks (and the action itself, if it's a `before_` callback).
|
376
376
|
|
377
|
+
## More Reading
|
378
|
+
|
379
|
+
You may check out this [article](http://fredwu.me/post/54009567748/) for more examples.
|
380
|
+
|
377
381
|
## Changelog
|
378
382
|
|
379
383
|
Refer to [CHANGELOG](CHANGELOG.md).
|
@@ -20,11 +20,6 @@ module Datamappify
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
def criteria_for_reverse_mapping
|
24
|
-
reverse_id = options[:primary_record].send(options[:via])
|
25
|
-
reverse_id ? { :id => reverse_id } : {}
|
26
|
-
end
|
27
|
-
|
28
23
|
def criteria_for_normal_mapping
|
29
24
|
{ key_name => entity.id }
|
30
25
|
end
|
@@ -11,6 +11,13 @@ module Datamappify
|
|
11
11
|
def initialize(source_class, entity, attributes, options = {}, &block)
|
12
12
|
super(source_class, entity, nil, attributes, options, &block)
|
13
13
|
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def criteria_for_reverse_mapping
|
18
|
+
reverse_id = options[:primary_record].send(options[:via])
|
19
|
+
reverse_id ? { :id => reverse_id } : {}
|
20
|
+
end
|
14
21
|
end
|
15
22
|
end
|
16
23
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Datamappify
|
2
|
+
module Entity
|
3
|
+
module Inspectable
|
4
|
+
def self.included(klass)
|
5
|
+
klass.extend ClassMethods
|
6
|
+
end
|
7
|
+
|
8
|
+
def inspect
|
9
|
+
inspectable = self.attributes.map do |name, value|
|
10
|
+
"#{name}: #{value.inspect}"
|
11
|
+
end.join(", ")
|
12
|
+
|
13
|
+
"#<#{self.class} #{inspectable}>"
|
14
|
+
end
|
15
|
+
|
16
|
+
module ClassMethods
|
17
|
+
def inspect
|
18
|
+
inspectable = self.attribute_set.map do |attribute|
|
19
|
+
"#{attribute.name}: #{attribute.class.primitive}"
|
20
|
+
end.join(", ")
|
21
|
+
|
22
|
+
"#<#{name} #{inspectable}>"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
data/lib/datamappify/entity.rb
CHANGED
@@ -4,6 +4,7 @@ require 'datamappify/entity/active_model/compatibility'
|
|
4
4
|
require 'datamappify/entity/lazy_checking'
|
5
5
|
require 'datamappify/entity/composable'
|
6
6
|
require 'datamappify/entity/relation'
|
7
|
+
require 'datamappify/entity/inspectable'
|
7
8
|
|
8
9
|
module Datamappify
|
9
10
|
module Entity
|
@@ -17,6 +18,7 @@ module Datamappify
|
|
17
18
|
include LazyChecking
|
18
19
|
include Composable
|
19
20
|
include Relation
|
21
|
+
include Inspectable
|
20
22
|
|
21
23
|
attribute :id, Integer
|
22
24
|
end
|
@@ -31,12 +31,16 @@ module Datamappify
|
|
31
31
|
#
|
32
32
|
# @return [Entity]
|
33
33
|
def create_or_update(entity)
|
34
|
-
raise Data::EntityInvalid.new(entity) if entity.invalid?
|
34
|
+
raise Data::EntityInvalid.new(entity) if entity.invalid?(context)
|
35
35
|
|
36
36
|
dispatch_criteria_to_providers(:SaveByKey, entity)
|
37
37
|
|
38
38
|
entity
|
39
39
|
end
|
40
|
+
|
41
|
+
def context
|
42
|
+
self.class.name.demodulize.underscore.to_sym
|
43
|
+
end
|
40
44
|
end
|
41
45
|
end
|
42
46
|
end
|
data/lib/datamappify/version.rb
CHANGED
@@ -44,6 +44,32 @@ shared_examples_for "reverse mapped" do |data_provider|
|
|
44
44
|
its(:author_name) { should == 'Sheldon Cooper' }
|
45
45
|
its(:author_bio) { should == 'y' }
|
46
46
|
end
|
47
|
+
|
48
|
+
describe "update record" do
|
49
|
+
context "example 1" do
|
50
|
+
let(:record) { post_repository.find(saved_post.id) }
|
51
|
+
subject { post_repository.save!(record) }
|
52
|
+
|
53
|
+
its(:title) { should == 'Hello world' }
|
54
|
+
its(:author_name) { should == 'Fred Wu' }
|
55
|
+
its(:author_bio) { should == 'x' }
|
56
|
+
end
|
57
|
+
|
58
|
+
context "example 2" do
|
59
|
+
let(:record) { post_repository.find(saved_post.id) }
|
60
|
+
subject { post_repository.find(record.id) }
|
61
|
+
|
62
|
+
before do
|
63
|
+
record.title = 'Hello mars'
|
64
|
+
record.author_name = 'JK Rowling'
|
65
|
+
post_repository.save!(record)
|
66
|
+
end
|
67
|
+
|
68
|
+
its(:title) { should == 'Hello mars' }
|
69
|
+
its(:author_name) { should == 'JK Rowling' }
|
70
|
+
its(:author_bio) { should == 'x' }
|
71
|
+
end
|
72
|
+
end
|
47
73
|
end
|
48
74
|
end
|
49
75
|
end
|
@@ -32,6 +32,18 @@ shared_examples_for "repository (in)validation" do |data_provider|
|
|
32
32
|
valid_user.id.should be_kind_of(Integer)
|
33
33
|
end
|
34
34
|
end
|
35
|
+
|
36
|
+
describe "within context" do
|
37
|
+
let(:invalid_user) { User.new(:first_name => 'Fr', :driver_license => 'MOSDEVOPS') }
|
38
|
+
|
39
|
+
it "is valid within :create" do
|
40
|
+
invalid_user.valid?(:create).should == true
|
41
|
+
end
|
42
|
+
|
43
|
+
it "is invalid within :update" do
|
44
|
+
invalid_user.valid?(:update).should == false
|
45
|
+
end
|
46
|
+
end
|
35
47
|
end
|
36
48
|
end
|
37
49
|
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,22 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: datamappify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.53.
|
5
|
-
prerelease:
|
4
|
+
version: 0.53.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Fred Wu
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-07-18 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: virtus
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 1.0.0.beta0
|
22
20
|
- - <=
|
@@ -25,9 +23,8 @@ dependencies:
|
|
25
23
|
type: :runtime
|
26
24
|
prerelease: false
|
27
25
|
version_requirements: !ruby/object:Gem::Requirement
|
28
|
-
none: false
|
29
26
|
requirements:
|
30
|
-
- -
|
27
|
+
- - '>='
|
31
28
|
- !ruby/object:Gem::Version
|
32
29
|
version: 1.0.0.beta0
|
33
30
|
- - <=
|
@@ -36,9 +33,8 @@ dependencies:
|
|
36
33
|
- !ruby/object:Gem::Dependency
|
37
34
|
name: activemodel
|
38
35
|
requirement: !ruby/object:Gem::Requirement
|
39
|
-
none: false
|
40
36
|
requirements:
|
41
|
-
- -
|
37
|
+
- - '>='
|
42
38
|
- !ruby/object:Gem::Version
|
43
39
|
version: 4.0.0.rc1
|
44
40
|
- - <
|
@@ -47,9 +43,8 @@ dependencies:
|
|
47
43
|
type: :runtime
|
48
44
|
prerelease: false
|
49
45
|
version_requirements: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
46
|
requirements:
|
52
|
-
- -
|
47
|
+
- - '>='
|
53
48
|
- !ruby/object:Gem::Version
|
54
49
|
version: 4.0.0.rc1
|
55
50
|
- - <
|
@@ -58,7 +53,6 @@ dependencies:
|
|
58
53
|
- !ruby/object:Gem::Dependency
|
59
54
|
name: hooks
|
60
55
|
requirement: !ruby/object:Gem::Requirement
|
61
|
-
none: false
|
62
56
|
requirements:
|
63
57
|
- - ~>
|
64
58
|
- !ruby/object:Gem::Version
|
@@ -66,7 +60,6 @@ dependencies:
|
|
66
60
|
type: :runtime
|
67
61
|
prerelease: false
|
68
62
|
version_requirements: !ruby/object:Gem::Requirement
|
69
|
-
none: false
|
70
63
|
requirements:
|
71
64
|
- - ~>
|
72
65
|
- !ruby/object:Gem::Version
|
@@ -74,7 +67,6 @@ dependencies:
|
|
74
67
|
- !ruby/object:Gem::Dependency
|
75
68
|
name: bundler
|
76
69
|
requirement: !ruby/object:Gem::Requirement
|
77
|
-
none: false
|
78
70
|
requirements:
|
79
71
|
- - ~>
|
80
72
|
- !ruby/object:Gem::Version
|
@@ -82,7 +74,6 @@ dependencies:
|
|
82
74
|
type: :development
|
83
75
|
prerelease: false
|
84
76
|
version_requirements: !ruby/object:Gem::Requirement
|
85
|
-
none: false
|
86
77
|
requirements:
|
87
78
|
- - ~>
|
88
79
|
- !ruby/object:Gem::Version
|
@@ -90,169 +81,148 @@ dependencies:
|
|
90
81
|
- !ruby/object:Gem::Dependency
|
91
82
|
name: rake
|
92
83
|
requirement: !ruby/object:Gem::Requirement
|
93
|
-
none: false
|
94
84
|
requirements:
|
95
|
-
- -
|
85
|
+
- - '>='
|
96
86
|
- !ruby/object:Gem::Version
|
97
87
|
version: '0'
|
98
88
|
type: :development
|
99
89
|
prerelease: false
|
100
90
|
version_requirements: !ruby/object:Gem::Requirement
|
101
|
-
none: false
|
102
91
|
requirements:
|
103
|
-
- -
|
92
|
+
- - '>='
|
104
93
|
- !ruby/object:Gem::Version
|
105
94
|
version: '0'
|
106
95
|
- !ruby/object:Gem::Dependency
|
107
96
|
name: redcarpet
|
108
97
|
requirement: !ruby/object:Gem::Requirement
|
109
|
-
none: false
|
110
98
|
requirements:
|
111
|
-
- -
|
99
|
+
- - '>='
|
112
100
|
- !ruby/object:Gem::Version
|
113
101
|
version: '0'
|
114
102
|
type: :development
|
115
103
|
prerelease: false
|
116
104
|
version_requirements: !ruby/object:Gem::Requirement
|
117
|
-
none: false
|
118
105
|
requirements:
|
119
|
-
- -
|
106
|
+
- - '>='
|
120
107
|
- !ruby/object:Gem::Version
|
121
108
|
version: '0'
|
122
109
|
- !ruby/object:Gem::Dependency
|
123
110
|
name: yard
|
124
111
|
requirement: !ruby/object:Gem::Requirement
|
125
|
-
none: false
|
126
112
|
requirements:
|
127
|
-
- -
|
113
|
+
- - '>='
|
128
114
|
- !ruby/object:Gem::Version
|
129
115
|
version: '0'
|
130
116
|
type: :development
|
131
117
|
prerelease: false
|
132
118
|
version_requirements: !ruby/object:Gem::Requirement
|
133
|
-
none: false
|
134
119
|
requirements:
|
135
|
-
- -
|
120
|
+
- - '>='
|
136
121
|
- !ruby/object:Gem::Version
|
137
122
|
version: '0'
|
138
123
|
- !ruby/object:Gem::Dependency
|
139
124
|
name: rspec
|
140
125
|
requirement: !ruby/object:Gem::Requirement
|
141
|
-
none: false
|
142
126
|
requirements:
|
143
|
-
- -
|
127
|
+
- - '>='
|
144
128
|
- !ruby/object:Gem::Version
|
145
129
|
version: '0'
|
146
130
|
type: :development
|
147
131
|
prerelease: false
|
148
132
|
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
none: false
|
150
133
|
requirements:
|
151
|
-
- -
|
134
|
+
- - '>='
|
152
135
|
- !ruby/object:Gem::Version
|
153
136
|
version: '0'
|
154
137
|
- !ruby/object:Gem::Dependency
|
155
138
|
name: pry
|
156
139
|
requirement: !ruby/object:Gem::Requirement
|
157
|
-
none: false
|
158
140
|
requirements:
|
159
|
-
- -
|
141
|
+
- - '>='
|
160
142
|
- !ruby/object:Gem::Version
|
161
143
|
version: '0'
|
162
144
|
type: :development
|
163
145
|
prerelease: false
|
164
146
|
version_requirements: !ruby/object:Gem::Requirement
|
165
|
-
none: false
|
166
147
|
requirements:
|
167
|
-
- -
|
148
|
+
- - '>='
|
168
149
|
- !ruby/object:Gem::Version
|
169
150
|
version: '0'
|
170
151
|
- !ruby/object:Gem::Dependency
|
171
152
|
name: simplecov
|
172
153
|
requirement: !ruby/object:Gem::Requirement
|
173
|
-
none: false
|
174
154
|
requirements:
|
175
|
-
- -
|
155
|
+
- - '>='
|
176
156
|
- !ruby/object:Gem::Version
|
177
157
|
version: '0'
|
178
158
|
type: :development
|
179
159
|
prerelease: false
|
180
160
|
version_requirements: !ruby/object:Gem::Requirement
|
181
|
-
none: false
|
182
161
|
requirements:
|
183
|
-
- -
|
162
|
+
- - '>='
|
184
163
|
- !ruby/object:Gem::Version
|
185
164
|
version: '0'
|
186
165
|
- !ruby/object:Gem::Dependency
|
187
166
|
name: cane
|
188
167
|
requirement: !ruby/object:Gem::Requirement
|
189
|
-
none: false
|
190
168
|
requirements:
|
191
|
-
- -
|
169
|
+
- - '>='
|
192
170
|
- !ruby/object:Gem::Version
|
193
171
|
version: '0'
|
194
172
|
type: :development
|
195
173
|
prerelease: false
|
196
174
|
version_requirements: !ruby/object:Gem::Requirement
|
197
|
-
none: false
|
198
175
|
requirements:
|
199
|
-
- -
|
176
|
+
- - '>='
|
200
177
|
- !ruby/object:Gem::Version
|
201
178
|
version: '0'
|
202
179
|
- !ruby/object:Gem::Dependency
|
203
180
|
name: coveralls
|
204
181
|
requirement: !ruby/object:Gem::Requirement
|
205
|
-
none: false
|
206
182
|
requirements:
|
207
|
-
- -
|
183
|
+
- - '>='
|
208
184
|
- !ruby/object:Gem::Version
|
209
185
|
version: '0'
|
210
186
|
type: :development
|
211
187
|
prerelease: false
|
212
188
|
version_requirements: !ruby/object:Gem::Requirement
|
213
|
-
none: false
|
214
189
|
requirements:
|
215
|
-
- -
|
190
|
+
- - '>='
|
216
191
|
- !ruby/object:Gem::Version
|
217
192
|
version: '0'
|
218
193
|
- !ruby/object:Gem::Dependency
|
219
194
|
name: sqlite3
|
220
195
|
requirement: !ruby/object:Gem::Requirement
|
221
|
-
none: false
|
222
196
|
requirements:
|
223
|
-
- -
|
197
|
+
- - '>='
|
224
198
|
- !ruby/object:Gem::Version
|
225
199
|
version: '0'
|
226
200
|
type: :development
|
227
201
|
prerelease: false
|
228
202
|
version_requirements: !ruby/object:Gem::Requirement
|
229
|
-
none: false
|
230
203
|
requirements:
|
231
|
-
- -
|
204
|
+
- - '>='
|
232
205
|
- !ruby/object:Gem::Version
|
233
206
|
version: '0'
|
234
207
|
- !ruby/object:Gem::Dependency
|
235
208
|
name: sequel
|
236
209
|
requirement: !ruby/object:Gem::Requirement
|
237
|
-
none: false
|
238
210
|
requirements:
|
239
|
-
- -
|
211
|
+
- - '>='
|
240
212
|
- !ruby/object:Gem::Version
|
241
213
|
version: '0'
|
242
214
|
type: :development
|
243
215
|
prerelease: false
|
244
216
|
version_requirements: !ruby/object:Gem::Requirement
|
245
|
-
none: false
|
246
217
|
requirements:
|
247
|
-
- -
|
218
|
+
- - '>='
|
248
219
|
- !ruby/object:Gem::Version
|
249
220
|
version: '0'
|
250
221
|
- !ruby/object:Gem::Dependency
|
251
222
|
name: activerecord
|
252
223
|
requirement: !ruby/object:Gem::Requirement
|
253
|
-
none: false
|
254
224
|
requirements:
|
255
|
-
- -
|
225
|
+
- - '>='
|
256
226
|
- !ruby/object:Gem::Version
|
257
227
|
version: 4.0.0.rc1
|
258
228
|
- - <
|
@@ -261,9 +231,8 @@ dependencies:
|
|
261
231
|
type: :development
|
262
232
|
prerelease: false
|
263
233
|
version_requirements: !ruby/object:Gem::Requirement
|
264
|
-
none: false
|
265
234
|
requirements:
|
266
|
-
- -
|
235
|
+
- - '>='
|
267
236
|
- !ruby/object:Gem::Version
|
268
237
|
version: 4.0.0.rc1
|
269
238
|
- - <
|
@@ -272,7 +241,6 @@ dependencies:
|
|
272
241
|
- !ruby/object:Gem::Dependency
|
273
242
|
name: database_cleaner
|
274
243
|
requirement: !ruby/object:Gem::Requirement
|
275
|
-
none: false
|
276
244
|
requirements:
|
277
245
|
- - ~>
|
278
246
|
- !ruby/object:Gem::Version
|
@@ -280,7 +248,6 @@ dependencies:
|
|
280
248
|
type: :development
|
281
249
|
prerelease: false
|
282
250
|
version_requirements: !ruby/object:Gem::Requirement
|
283
|
-
none: false
|
284
251
|
requirements:
|
285
252
|
- - ~>
|
286
253
|
- !ruby/object:Gem::Version
|
@@ -346,6 +313,7 @@ files:
|
|
346
313
|
- lib/datamappify/entity/composable/attribute.rb
|
347
314
|
- lib/datamappify/entity/composable/attributes.rb
|
348
315
|
- lib/datamappify/entity/composable/validators.rb
|
316
|
+
- lib/datamappify/entity/inspectable.rb
|
349
317
|
- lib/datamappify/entity/lazy_checking.rb
|
350
318
|
- lib/datamappify/entity/relation.rb
|
351
319
|
- lib/datamappify/lazy.rb
|
@@ -428,33 +396,26 @@ files:
|
|
428
396
|
homepage: https://github.com/fredwu/datamappify
|
429
397
|
licenses:
|
430
398
|
- MIT
|
399
|
+
metadata: {}
|
431
400
|
post_install_message:
|
432
401
|
rdoc_options: []
|
433
402
|
require_paths:
|
434
403
|
- lib
|
435
404
|
required_ruby_version: !ruby/object:Gem::Requirement
|
436
|
-
none: false
|
437
405
|
requirements:
|
438
|
-
- -
|
406
|
+
- - '>='
|
439
407
|
- !ruby/object:Gem::Version
|
440
408
|
version: '0'
|
441
|
-
segments:
|
442
|
-
- 0
|
443
|
-
hash: -4173751016346712187
|
444
409
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
445
|
-
none: false
|
446
410
|
requirements:
|
447
|
-
- -
|
411
|
+
- - '>='
|
448
412
|
- !ruby/object:Gem::Version
|
449
413
|
version: '0'
|
450
|
-
segments:
|
451
|
-
- 0
|
452
|
-
hash: -4173751016346712187
|
453
414
|
requirements: []
|
454
415
|
rubyforge_project:
|
455
|
-
rubygems_version:
|
416
|
+
rubygems_version: 2.0.3
|
456
417
|
signing_key:
|
457
|
-
specification_version:
|
418
|
+
specification_version: 4
|
458
419
|
summary: Compose, decouple and manage domain logic and data persistence separately.
|
459
420
|
Works particularly great for composing form objects!
|
460
421
|
test_files:
|