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 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
@@ -10,6 +10,12 @@ module Datamappify
10
10
  def initialize(source_class, entity, attributes, options = {}, &block)
11
11
  super(source_class, entity, {}, attributes, options, &block)
12
12
  end
13
+
14
+ private
15
+
16
+ def criteria_for_reverse_mapping
17
+ {}
18
+ end
13
19
  end
14
20
  end
15
21
  end
@@ -7,8 +7,11 @@ module Datamappify
7
7
  end
8
8
 
9
9
  class EntityInvalid < Error
10
+ attr_reader :entity
11
+
10
12
  # @param entity [Entity]
11
13
  def initialize(entity)
14
+ @entity = entity
12
15
  super entity.errors.full_messages.join(', ')
13
16
  end
14
17
  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
+
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Datamappify
2
- VERSION = '0.53.1'
2
+ VERSION = '0.53.2'
3
3
  end
@@ -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
@@ -1,3 +1,5 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+
1
3
  require 'coveralls'
2
4
  require 'simplecov'
3
5
  require 'pry'
@@ -3,7 +3,7 @@ require_relative 'author'
3
3
  class Post
4
4
  include Datamappify::Entity
5
5
 
6
- attribute :title, String
6
+ attribute :title, String
7
7
 
8
8
  attributes_from Author, :prefix_with => :author
9
9
  end
@@ -10,6 +10,8 @@ class User
10
10
 
11
11
  validates :first_name, :presence => true,
12
12
  :length => { :minimum => 2 }
13
+ validates :first_name, :length => { :minimum => 3 },
14
+ :on => :update
13
15
  validates :driver_license, :presence => true,
14
16
  :length => { :minimum => 8 }
15
17
 
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.1
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-06-27 00:00:00.000000000 Z
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: 1.8.25
416
+ rubygems_version: 2.0.3
456
417
  signing_key:
457
- specification_version: 3
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: