rasti-form 3.0.0 → 3.1.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 +5 -5
- data/.ruby-version +1 -1
- data/.travis.yml +7 -10
- data/README.md +0 -1
- data/lib/rasti/form.rb +5 -1
- data/lib/rasti/form/types/string.rb +15 -19
- data/lib/rasti/form/types/uuid.rb +1 -13
- data/lib/rasti/form/validable.rb +7 -0
- data/lib/rasti/form/version.rb +1 -1
- data/rasti-form.gemspec +1 -2
- data/spec/form_spec.rb +67 -6
- data/spec/types/regexp_spec.rb +1 -1
- data/spec/types/string_formatted_spec.rb +1 -1
- metadata +5 -21
- data/lib/rasti/form/formatable.rb +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d866f9b7a43e27b5a12fbe5044672018066e99d45c2cce45bc7cb80baef095c1
|
4
|
+
data.tar.gz: 9c24281985c31043750f3998c6ddc857c30830abba2a6f6128d0cfe45c5d8432
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff8eab55df69a186a42353248bb9218ae79352057642db8ea96af007c3a2717ed908d7b1219e803af11ed87e2d0166557e22ab58c849bdffa1638353f66bc3c7
|
7
|
+
data.tar.gz: 3e102c9dae971bb5482665db5471bbf1420ba35b2c81960bcd02583b119970dd5ba54df79450fe19ab50a3134b619809d1d234a21380725375460b86b59dcd37
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby-2.
|
1
|
+
ruby-2.5.7
|
data/.travis.yml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
language: ruby
|
2
2
|
|
3
3
|
rvm:
|
4
|
-
- 1.9.3
|
5
4
|
- 2.0
|
6
5
|
- 2.1
|
7
6
|
- 2.2
|
8
|
-
- 2.3
|
9
|
-
- 2.4
|
10
|
-
- 2.5
|
11
|
-
-
|
12
|
-
-
|
7
|
+
- 2.3
|
8
|
+
- 2.4
|
9
|
+
- 2.5
|
10
|
+
- 2.6
|
11
|
+
- 2.7
|
12
|
+
- jruby-9.2.9.0
|
13
13
|
- ruby-head
|
14
14
|
- jruby-head
|
15
15
|
|
@@ -17,7 +17,4 @@ matrix:
|
|
17
17
|
fast_finish: true
|
18
18
|
allow_failures:
|
19
19
|
- rvm: ruby-head
|
20
|
-
- rvm: jruby-head
|
21
|
-
|
22
|
-
before_install:
|
23
|
-
- gem install bundler
|
20
|
+
- rvm: jruby-head
|
data/README.md
CHANGED
@@ -4,7 +4,6 @@
|
|
4
4
|
[](https://travis-ci.org/gabynaiman/rasti-form)
|
5
5
|
[](https://coveralls.io/github/gabynaiman/rasti-form?branch=master)
|
6
6
|
[](https://codeclimate.com/github/gabynaiman/rasti-form)
|
7
|
-
[](https://gemnasium.com/gabynaiman/rasti-form)
|
8
7
|
|
9
8
|
Forms validations and type casting
|
10
9
|
|
data/lib/rasti/form.rb
CHANGED
@@ -145,7 +145,11 @@ module Rasti
|
|
145
145
|
end
|
146
146
|
|
147
147
|
def assert_present(attribute)
|
148
|
-
assert attribute, !fetch(attribute).nil?, 'not present'
|
148
|
+
assert attribute, !fetch(attribute).nil?, 'not present' unless errors.key? attribute
|
149
|
+
end
|
150
|
+
|
151
|
+
def assert_not_present(attribute)
|
152
|
+
assert attribute, fetch(attribute).nil?, 'is present'
|
149
153
|
end
|
150
154
|
|
151
155
|
def assert_not_empty(attribute)
|
@@ -2,21 +2,31 @@ module Rasti
|
|
2
2
|
class Form
|
3
3
|
module Types
|
4
4
|
class String
|
5
|
-
|
6
|
-
include Formatable
|
7
|
-
|
8
5
|
class << self
|
9
6
|
|
10
7
|
include Castable
|
11
8
|
|
12
9
|
def [](format)
|
13
|
-
new
|
10
|
+
Class.new(self) do
|
11
|
+
@format = format.is_a?(::String) ? ::Regexp.new(format) : format
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_s
|
16
|
+
name || "#{superclass.name}[#{format.inspect}]"
|
14
17
|
end
|
18
|
+
alias_method :inspect, :to_s
|
15
19
|
|
16
20
|
private
|
17
21
|
|
22
|
+
attr_reader :format
|
23
|
+
|
18
24
|
def valid?(value)
|
19
|
-
!value.nil? && value.respond_to?(:to_s)
|
25
|
+
!value.nil? && value.respond_to?(:to_s) && valid_format?(value)
|
26
|
+
end
|
27
|
+
|
28
|
+
def valid_format?(value)
|
29
|
+
format.nil? || !value.to_s.match(format).nil?
|
20
30
|
end
|
21
31
|
|
22
32
|
def transform(value)
|
@@ -24,20 +34,6 @@ module Rasti
|
|
24
34
|
end
|
25
35
|
|
26
36
|
end
|
27
|
-
|
28
|
-
def to_s
|
29
|
-
"#{self.class}[#{format.inspect}]"
|
30
|
-
end
|
31
|
-
alias_method :inspect, :to_s
|
32
|
-
|
33
|
-
private
|
34
|
-
|
35
|
-
attr_reader :format
|
36
|
-
|
37
|
-
def initialize(format)
|
38
|
-
@format = format.is_a?(String) ? ::Regexp.new(format) : format
|
39
|
-
end
|
40
|
-
|
41
37
|
end
|
42
38
|
end
|
43
39
|
end
|
@@ -1,19 +1,7 @@
|
|
1
1
|
module Rasti
|
2
2
|
class Form
|
3
3
|
module Types
|
4
|
-
|
5
|
-
class << self
|
6
|
-
|
7
|
-
include Formatable
|
8
|
-
|
9
|
-
private
|
10
|
-
|
11
|
-
def format
|
12
|
-
/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}+$/
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
4
|
+
UUID = String[/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}+$/]
|
17
5
|
end
|
18
6
|
end
|
19
7
|
end
|
data/lib/rasti/form/validable.rb
CHANGED
data/lib/rasti/form/version.rb
CHANGED
data/rasti-form.gemspec
CHANGED
@@ -20,8 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_runtime_dependency 'multi_require', '~> 1.0'
|
22
22
|
|
23
|
-
spec.add_development_dependency '
|
24
|
-
spec.add_development_dependency 'rake', '~> 11.0'
|
23
|
+
spec.add_development_dependency 'rake', '~> 12.0'
|
25
24
|
spec.add_development_dependency 'minitest', '~> 5.0', '< 5.11'
|
26
25
|
spec.add_development_dependency 'minitest-colorin', '~> 0.1'
|
27
26
|
spec.add_development_dependency 'minitest-line', '~> 0.6'
|
data/spec/form_spec.rb
CHANGED
@@ -8,7 +8,7 @@ describe Rasti::Form do
|
|
8
8
|
|
9
9
|
def build_form(&block)
|
10
10
|
Class.new(Rasti::Form) do
|
11
|
-
class_eval
|
11
|
+
class_eval(&block)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -141,6 +141,23 @@ describe Rasti::Form do
|
|
141
141
|
|
142
142
|
describe 'Validations' do
|
143
143
|
|
144
|
+
it 'Not error' do
|
145
|
+
form = build_form do
|
146
|
+
attribute :text, Rasti::Form::Types::String
|
147
|
+
|
148
|
+
def validate
|
149
|
+
assert_not_error :text do
|
150
|
+
raise 'Invalid text' if text.nil?
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
proc { form.new text: 'text' }.must_be_silent
|
156
|
+
|
157
|
+
error = proc { form.new }.must_raise Rasti::Form::ValidationError
|
158
|
+
error.message.must_equal 'Validation error: #<Rasti::Form[]> {"text":["Invalid text"]}'
|
159
|
+
end
|
160
|
+
|
144
161
|
it 'Required' do
|
145
162
|
form = build_form do
|
146
163
|
attribute :text, Rasti::Form::Types::String
|
@@ -150,10 +167,42 @@ describe Rasti::Form do
|
|
150
167
|
end
|
151
168
|
end
|
152
169
|
|
170
|
+
proc { form.new text: 'text' }.must_be_silent
|
171
|
+
|
153
172
|
error = proc { form.new }.must_raise Rasti::Form::ValidationError
|
154
173
|
error.message.must_equal 'Validation error: #<Rasti::Form[]> {"text":["not present"]}'
|
155
174
|
end
|
156
175
|
|
176
|
+
it 'Required when cast failed' do
|
177
|
+
form = build_form do
|
178
|
+
attribute :number, Rasti::Form::Types::Integer
|
179
|
+
|
180
|
+
def validate
|
181
|
+
assert_present :number
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
proc { form.new number: 1 }.must_be_silent
|
186
|
+
|
187
|
+
error = proc { form.new number: 'text' }.must_raise Rasti::Form::ValidationError
|
188
|
+
error.message.must_equal "Validation error: #<Rasti::Form[]> {\"number\":[\"Invalid cast: 'text' -> Rasti::Form::Types::Integer\"]}"
|
189
|
+
end
|
190
|
+
|
191
|
+
it 'Not required' do
|
192
|
+
form = build_form do
|
193
|
+
attribute :text, Rasti::Form::Types::String
|
194
|
+
|
195
|
+
def validate
|
196
|
+
assert_not_present :text
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
proc { form.new }.must_be_silent
|
201
|
+
|
202
|
+
error = proc { form.new text: 'text' }.must_raise Rasti::Form::ValidationError
|
203
|
+
error.message.must_equal 'Validation error: #<Rasti::Form[text: "text"]> {"text":["is present"]}'
|
204
|
+
end
|
205
|
+
|
157
206
|
it 'Not empty string' do
|
158
207
|
form = build_form do
|
159
208
|
attribute :text, Rasti::Form::Types::String
|
@@ -163,6 +212,8 @@ describe Rasti::Form do
|
|
163
212
|
end
|
164
213
|
end
|
165
214
|
|
215
|
+
proc { form.new text: 'text' }.must_be_silent
|
216
|
+
|
166
217
|
error = proc { form.new text: ' ' }.must_raise Rasti::Form::ValidationError
|
167
218
|
error.message.must_equal 'Validation error: #<Rasti::Form[text: " "]> {"text":["is empty"]}'
|
168
219
|
end
|
@@ -176,6 +227,8 @@ describe Rasti::Form do
|
|
176
227
|
end
|
177
228
|
end
|
178
229
|
|
230
|
+
proc { form.new array: ['text'] }.must_be_silent
|
231
|
+
|
179
232
|
error = proc { form.new array: [] }.must_raise Rasti::Form::ValidationError
|
180
233
|
error.message.must_equal 'Validation error: #<Rasti::Form[array: []]> {"array":["is empty"]}'
|
181
234
|
end
|
@@ -189,6 +242,8 @@ describe Rasti::Form do
|
|
189
242
|
end
|
190
243
|
end
|
191
244
|
|
245
|
+
proc { form.new text: 'value_1' }.must_be_silent
|
246
|
+
|
192
247
|
error = proc { form.new text: 'xyz' }.must_raise Rasti::Form::ValidationError
|
193
248
|
error.message.must_equal 'Validation error: #<Rasti::Form[text: "xyz"]> {"text":["not included in \'value_1\', \'value_2\'"]}'
|
194
249
|
end
|
@@ -203,11 +258,13 @@ describe Rasti::Form do
|
|
203
258
|
end
|
204
259
|
end
|
205
260
|
|
206
|
-
from = '2018-01-01
|
207
|
-
to = '2018-01-01
|
261
|
+
from = Time.parse '2018-01-01 03:10:00'
|
262
|
+
to = Time.parse '2018-01-01 15:30:00'
|
208
263
|
|
209
|
-
|
210
|
-
|
264
|
+
proc { form.new from: from, to: to }.must_be_silent
|
265
|
+
|
266
|
+
error = proc { form.new from: to.to_s, to: from.to_s }.must_raise Rasti::Form::ValidationError
|
267
|
+
error.message.must_equal "Validation error: #<Rasti::Form[from: #{to}, to: #{from}]> {\"from\":[\"invalid time range\"]}"
|
211
268
|
end
|
212
269
|
|
213
270
|
it 'Nested form' do
|
@@ -220,6 +277,8 @@ describe Rasti::Form do
|
|
220
277
|
end
|
221
278
|
end
|
222
279
|
|
280
|
+
proc { form.new range: {min: 1, max: 2} }.must_be_silent
|
281
|
+
|
223
282
|
error = proc { form.new }.must_raise Rasti::Form::ValidationError
|
224
283
|
error.message.must_equal 'Validation error: #<Rasti::Form[]> {"range.min":["not present"],"range.max":["not present"]}'
|
225
284
|
end
|
@@ -236,7 +295,9 @@ describe Rasti::Form do
|
|
236
295
|
|
237
296
|
form = build_form do
|
238
297
|
attribute :range, Rasti::Form::Types::Form[range]
|
239
|
-
end
|
298
|
+
end
|
299
|
+
|
300
|
+
proc { form.new range: {min: 1, max: 2} }.must_be_silent
|
240
301
|
|
241
302
|
error = proc { form.new range: {min: 2, max: 1} }.must_raise Rasti::Form::ValidationError
|
242
303
|
error.message.must_equal 'Validation error: #<Rasti::Form[]> {"range.min":["Min must be less than Max"]}'
|
data/spec/types/regexp_spec.rb
CHANGED
@@ -4,7 +4,7 @@ describe Rasti::Form::Types::Regexp do
|
|
4
4
|
|
5
5
|
['[a-z]', /[a-z]/].each do |value|
|
6
6
|
it "#{value.inspect} -> #{Regexp.new(value).inspect}" do
|
7
|
-
Rasti::Form::Types::Regexp.cast(value).must_equal Regexp.new(value)
|
7
|
+
Rasti::Form::Types::Regexp.cast(value).must_equal Regexp.new(value).source
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
@@ -6,7 +6,7 @@ describe Rasti::Form::Types::String, 'Formatted' do
|
|
6
6
|
|
7
7
|
['user@mail.com'.to_sym, 'user.name-123@mail-test.com.ar'].each do |value|
|
8
8
|
it "#{value.inspect} -> #{value.to_s}" do
|
9
|
-
Rasti::Form::Types::String[email_regexp].cast(value).must_equal value
|
9
|
+
Rasti::Form::Types::String[email_regexp].cast(value).must_equal value.to_s
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rasti-form
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gabriel Naiman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-07-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_require
|
@@ -24,34 +24,20 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: bundler
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '1.12'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '1.12'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: rake
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
31
|
- - "~>"
|
46
32
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
33
|
+
version: '12.0'
|
48
34
|
type: :development
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
38
|
- - "~>"
|
53
39
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
40
|
+
version: '12.0'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: minitest
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -162,7 +148,6 @@ files:
|
|
162
148
|
- lib/rasti/form.rb
|
163
149
|
- lib/rasti/form/castable.rb
|
164
150
|
- lib/rasti/form/errors.rb
|
165
|
-
- lib/rasti/form/formatable.rb
|
166
151
|
- lib/rasti/form/types/array.rb
|
167
152
|
- lib/rasti/form/types/boolean.rb
|
168
153
|
- lib/rasti/form/types/enum.rb
|
@@ -215,8 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
215
200
|
- !ruby/object:Gem::Version
|
216
201
|
version: '0'
|
217
202
|
requirements: []
|
218
|
-
|
219
|
-
rubygems_version: 2.6.8
|
203
|
+
rubygems_version: 3.0.6
|
220
204
|
signing_key:
|
221
205
|
specification_version: 4
|
222
206
|
summary: Forms validations and type casting
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module Rasti
|
2
|
-
class Form
|
3
|
-
module Formatable
|
4
|
-
|
5
|
-
include Castable
|
6
|
-
|
7
|
-
private
|
8
|
-
|
9
|
-
def valid?(value)
|
10
|
-
(value.is_a?(::String) || value.is_a?(Symbol)) && value.to_s.match(format)
|
11
|
-
end
|
12
|
-
|
13
|
-
def transform(value)
|
14
|
-
value
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|