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 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: