eapi 0.6.0 → 0.7.0
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 +4 -4
- data/README.md +6 -6
- data/lib/eapi/item.rb +2 -2
- data/lib/eapi/list.rb +2 -2
- data/lib/eapi/methods/properties.rb +36 -7
- data/lib/eapi/version.rb +1 -1
- data/spec/conversion_spec.rb +3 -3
- data/spec/list_spec.rb +27 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8185b8ffb82603d48217ba5da50433b6ed456692
|
4
|
+
data.tar.gz: ec4580aa551539d3dd3954af9370831fa81f8279
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e8c053064f3c3ea658a71791ade20c42b1f2b66e6e3ffbe38e8f1bc6d52a33eb191e1d8284b4e050a965f27ff87ad727794ee79797933d56d2bd8c2d82e05e4
|
7
|
+
data.tar.gz: d71bf06c7941f1218c9fa7486b9d7aa3ccae398e4fe4a09f235abe405477267cf4daa5ef8833f49c2c54ef7a246c067fe292fcb306fcf0b0ab8fbac7c56072db
|
data/README.md
CHANGED
@@ -135,16 +135,16 @@ x = ExampleItem.new.add(1).add(2)
|
|
135
135
|
x.render # => ["1", "2"]
|
136
136
|
```
|
137
137
|
|
138
|
-
####
|
138
|
+
#### Prepare values before validation using `prepare_with` option
|
139
139
|
|
140
|
-
|
140
|
+
Same as `convert_with` but it is used before validation.
|
141
141
|
|
142
142
|
```ruby
|
143
143
|
class ExampleItem
|
144
144
|
include Eapi::Item
|
145
145
|
|
146
|
-
property :something,
|
147
|
-
property :normal,
|
146
|
+
property :something, prepare_with: to_i
|
147
|
+
property :normal,
|
148
148
|
|
149
149
|
validates :something, inclusion: { in: [1, 2, 3] }
|
150
150
|
validates :normal, inclusion: { in: [1, 2, 3] }
|
@@ -165,7 +165,7 @@ In `List` it will work on elements.
|
|
165
165
|
class ExampleListConvertBeforeValidationEnabled
|
166
166
|
include Eapi::List
|
167
167
|
|
168
|
-
elements
|
168
|
+
elements prepare_with: :to_i, validate_with: ->(record, attr, value) do
|
169
169
|
record.errors.add(attr, 'must pass my custom validation') unless value.kind_of?(Fixnum)
|
170
170
|
end
|
171
171
|
end
|
@@ -173,7 +173,7 @@ end
|
|
173
173
|
class ExampleListConvertBeforeValidationDisabled
|
174
174
|
include Eapi::List
|
175
175
|
|
176
|
-
elements
|
176
|
+
elements validate_with: ->(record, attr, value) do
|
177
177
|
record.errors.add(attr, 'must pass my custom validation') unless value.kind_of?(Fixnum)
|
178
178
|
end
|
179
179
|
end
|
data/lib/eapi/item.rb
CHANGED
@@ -27,8 +27,8 @@ module Eapi
|
|
27
27
|
|
28
28
|
def perform_before_validation
|
29
29
|
_properties.each do |property|
|
30
|
-
if self.class.
|
31
|
-
self.set(property,
|
30
|
+
if self.class.prepare_value_for?(property)
|
31
|
+
self.set(property, prepare_value_for(property))
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
data/lib/eapi/list.rb
CHANGED
@@ -80,8 +80,8 @@ module Eapi
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def perform_before_validation
|
83
|
-
if self.class.
|
84
|
-
_list.map! { |v|
|
83
|
+
if self.class.prepare_value_for_elements?
|
84
|
+
_list.map! { |v| prepare_value_for_element(v) }
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
@@ -18,6 +18,17 @@ module Eapi
|
|
18
18
|
send(setter, value)
|
19
19
|
end
|
20
20
|
|
21
|
+
def prepare_value_for(prop)
|
22
|
+
value = get(prop)
|
23
|
+
prepare_with = self.class.defined_prepare_with_for(prop)
|
24
|
+
|
25
|
+
if prepare_with
|
26
|
+
convert_value(value, prepare_with)
|
27
|
+
else
|
28
|
+
value
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
21
32
|
def converted_value_for(prop)
|
22
33
|
convert_value get(prop), self.class.defined_convert_with_for(prop)
|
23
34
|
end
|
@@ -116,8 +127,12 @@ module Eapi
|
|
116
127
|
definition_for(property).fetch(:convert_with, nil)
|
117
128
|
end
|
118
129
|
|
119
|
-
def
|
120
|
-
definition_for(property).fetch(:
|
130
|
+
def defined_prepare_with_for(property)
|
131
|
+
definition_for(property).fetch(:prepare_with, nil)
|
132
|
+
end
|
133
|
+
|
134
|
+
def prepare_value_for?(property)
|
135
|
+
!!defined_prepare_with_for(property)
|
121
136
|
end
|
122
137
|
|
123
138
|
private :_property_allow_raw
|
@@ -144,6 +159,16 @@ module Eapi
|
|
144
159
|
def convert_value_for_element(value)
|
145
160
|
convert_value(value, self.class.elements_defined_convert_with_for)
|
146
161
|
end
|
162
|
+
|
163
|
+
def prepare_value_for_element(value)
|
164
|
+
prepare_with = self.class.elements_defined_prepare_with_for
|
165
|
+
|
166
|
+
if prepare_with
|
167
|
+
convert_value(value, prepare_with)
|
168
|
+
else
|
169
|
+
value
|
170
|
+
end
|
171
|
+
end
|
147
172
|
end
|
148
173
|
|
149
174
|
module ListCLassMethods
|
@@ -163,19 +188,23 @@ module Eapi
|
|
163
188
|
definition_for_elements.fetch(:ignore, :nil?)
|
164
189
|
end
|
165
190
|
|
166
|
-
def
|
167
|
-
|
191
|
+
def prepare_value_for_elements?
|
192
|
+
!!elements_defined_prepare_with_for
|
168
193
|
end
|
169
194
|
|
170
|
-
def
|
171
|
-
|
172
|
-
store_list_definition definition
|
195
|
+
def elements_defined_prepare_with_for
|
196
|
+
definition_for_elements.fetch(:prepare_with, nil)
|
173
197
|
end
|
174
198
|
|
175
199
|
def elements_defined_convert_with_for
|
176
200
|
definition_for_elements.fetch(:convert_with, nil)
|
177
201
|
end
|
178
202
|
|
203
|
+
def elements(definition)
|
204
|
+
run_list_definition definition
|
205
|
+
store_list_definition definition
|
206
|
+
end
|
207
|
+
|
179
208
|
def definition_for_elements
|
180
209
|
@_list_definition ||= {}
|
181
210
|
end
|
data/lib/eapi/version.rb
CHANGED
data/spec/conversion_spec.rb
CHANGED
@@ -60,8 +60,8 @@ RSpec.describe Eapi do
|
|
60
60
|
class ExampleItemConvertBeforeValidation
|
61
61
|
include Eapi::Item
|
62
62
|
|
63
|
-
property :something,
|
64
|
-
property :normal
|
63
|
+
property :something, prepare_with: :to_i
|
64
|
+
property :normal
|
65
65
|
|
66
66
|
validates :something, inclusion: {in: [1, 2, 3]}
|
67
67
|
validates :normal, inclusion: {in: [1, 2, 3]}
|
@@ -86,7 +86,7 @@ RSpec.describe Eapi do
|
|
86
86
|
class ExampleListConvertBeforeValidationEnabled
|
87
87
|
include Eapi::List
|
88
88
|
|
89
|
-
elements
|
89
|
+
elements prepare_with: :to_i, validate_with: ->(record, attr, value) do
|
90
90
|
record.errors.add(attr, 'must pass my custom validation') unless value.kind_of?(Fixnum)
|
91
91
|
end
|
92
92
|
end
|
data/spec/list_spec.rb
CHANGED
@@ -457,5 +457,32 @@ RSpec.describe Eapi do
|
|
457
457
|
end
|
458
458
|
|
459
459
|
end
|
460
|
+
|
461
|
+
describe 'render' do
|
462
|
+
class TestListItemRender
|
463
|
+
include Eapi::Item
|
464
|
+
|
465
|
+
property :something
|
466
|
+
property :other
|
467
|
+
|
468
|
+
def perform_render
|
469
|
+
{something => other}
|
470
|
+
end
|
471
|
+
end
|
472
|
+
|
473
|
+
class TestListRender
|
474
|
+
include Eapi::List
|
475
|
+
|
476
|
+
elements type: 'TestListItemRender'
|
477
|
+
end
|
478
|
+
|
479
|
+
let(:item) { TestListItemRender.new something: :f, other: :o }
|
480
|
+
subject { TestListRender.new.add(item) }
|
481
|
+
let(:expected) { [{f: :o}] }
|
482
|
+
|
483
|
+
it 'renders to an array, rendering each element' do
|
484
|
+
expect(subject.render).to eq expected
|
485
|
+
end
|
486
|
+
end
|
460
487
|
end
|
461
488
|
end
|