datamappify 0.53.1 → 0.53.2
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|