rasti-form 3.0.0 → 5.0.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 +8 -11
- data/README.md +0 -1
- data/lib/rasti/form.rb +34 -129
- data/lib/rasti/form/errors.rb +7 -47
- data/lib/rasti/form/validable.rb +9 -3
- data/rasti-form.gemspec +3 -14
- data/spec/coverage_helper.rb +1 -3
- data/spec/minitest_helper.rb +1 -7
- data/spec/validations_spec.rb +301 -0
- metadata +11 -56
- data/lib/rasti/form/castable.rb +0 -25
- data/lib/rasti/form/formatable.rb +0 -19
- data/lib/rasti/form/types/array.rb +0 -54
- data/lib/rasti/form/types/boolean.rb +0 -42
- data/lib/rasti/form/types/enum.rb +0 -48
- data/lib/rasti/form/types/float.rb +0 -33
- data/lib/rasti/form/types/form.rb +0 -40
- data/lib/rasti/form/types/hash.rb +0 -39
- data/lib/rasti/form/types/integer.rb +0 -21
- data/lib/rasti/form/types/io.rb +0 -23
- data/lib/rasti/form/types/regexp.rb +0 -23
- data/lib/rasti/form/types/string.rb +0 -44
- data/lib/rasti/form/types/symbol.rb +0 -23
- data/lib/rasti/form/types/time.rb +0 -40
- data/lib/rasti/form/types/uuid.rb +0 -19
- data/lib/rasti/form/version.rb +0 -5
- data/spec/form_spec.rb +0 -350
- data/spec/types/array_spec.rb +0 -54
- data/spec/types/boolean_spec.rb +0 -24
- data/spec/types/enum_spec.rb +0 -28
- data/spec/types/float_spec.rb +0 -18
- data/spec/types/form_spec.rb +0 -41
- data/spec/types/hash_spec.rb +0 -20
- data/spec/types/integer_spec.rb +0 -18
- data/spec/types/io_spec.rb +0 -18
- data/spec/types/regexp_spec.rb +0 -18
- data/spec/types/string_formatted_spec.rb +0 -20
- data/spec/types/string_spec.rb +0 -16
- data/spec/types/symbol_spec.rb +0 -16
- data/spec/types/time_spec.rb +0 -25
- data/spec/types/uuid_spec.rb +0 -18
data/spec/types/array_spec.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
require 'minitest_helper'
|
2
|
-
|
3
|
-
describe Rasti::Form::Types::Array do
|
4
|
-
|
5
|
-
VALID_ARRAY = [1, '2', Time.now]
|
6
|
-
INVALID_ARRAY = [nil, 1, 'text', :symbol, {a: 1, b: 2}, Object.new]
|
7
|
-
|
8
|
-
it "#{VALID_ARRAY.inspect} -> #{VALID_ARRAY.map(&:to_i)}" do
|
9
|
-
Rasti::Form::Types::Array[Rasti::Form::Types::Integer].cast(VALID_ARRAY).must_equal VALID_ARRAY.map(&:to_i)
|
10
|
-
end
|
11
|
-
|
12
|
-
it "#{VALID_ARRAY.inspect} -> #{VALID_ARRAY.map(&:to_s)}" do
|
13
|
-
Rasti::Form::Types::Array[Rasti::Form::Types::String].cast(VALID_ARRAY).must_equal VALID_ARRAY.map(&:to_s)
|
14
|
-
end
|
15
|
-
|
16
|
-
INVALID_ARRAY.each do |value|
|
17
|
-
it "#{value.inspect} -> CastError" do
|
18
|
-
error = proc { Rasti::Form::Types::Array[Rasti::Form::Types::String].cast(value) }.must_raise Rasti::Form::CastError
|
19
|
-
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Form::Types::Array[Rasti::Form::Types::String]"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe 'Multi cast errors' do
|
24
|
-
|
25
|
-
it 'Array of integers' do
|
26
|
-
array = [1, 2 , 'a', 3, 'c', 4, nil]
|
27
|
-
error = proc { Rasti::Form::Types::Array[Rasti::Form::Types::Integer].cast(array) }.must_raise Rasti::Form::MultiCastError
|
28
|
-
error.errors.must_equal 3 => ["Invalid cast: 'a' -> Rasti::Form::Types::Integer"],
|
29
|
-
5 => ["Invalid cast: 'c' -> Rasti::Form::Types::Integer"],
|
30
|
-
7 => ["Invalid cast: nil -> Rasti::Form::Types::Integer"]
|
31
|
-
error.message.must_equal "Invalid cast: [1, 2, \"a\", 3, \"c\", 4, nil] -> Rasti::Form::Types::Array[Rasti::Form::Types::Integer] - {\"3\":[\"Invalid cast: 'a' -> Rasti::Form::Types::Integer\"],\"5\":[\"Invalid cast: 'c' -> Rasti::Form::Types::Integer\"],\"7\":[\"Invalid cast: nil -> Rasti::Form::Types::Integer\"]}"
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'Array of forms' do
|
35
|
-
inner_form_class = Rasti::Form::Types::Form[x: Rasti::Form::Types::Integer, y: Rasti::Form::Types::Integer]
|
36
|
-
form_class = Rasti::Form[points: Rasti::Form::Types::Array[inner_form_class]]
|
37
|
-
|
38
|
-
error = proc do
|
39
|
-
form_class.new points: [
|
40
|
-
{x: 1, y: 2},
|
41
|
-
{x: 'a', y: 2},
|
42
|
-
{x: 1, y: 'b'},
|
43
|
-
{x: 3, y: 4}
|
44
|
-
]
|
45
|
-
end.must_raise Rasti::Form::ValidationError
|
46
|
-
|
47
|
-
error.errors.must_equal 'points.2.x' => ["Invalid cast: 'a' -> Rasti::Form::Types::Integer"],
|
48
|
-
'points.3.y' => ["Invalid cast: 'b' -> Rasti::Form::Types::Integer"]
|
49
|
-
error.message.must_equal "Validation error: #<Rasti::Form[]> {\"points.2.x\":[\"Invalid cast: 'a' -> Rasti::Form::Types::Integer\"],\"points.3.y\":[\"Invalid cast: 'b' -> Rasti::Form::Types::Integer\"]}"
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
data/spec/types/boolean_spec.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'minitest_helper'
|
2
|
-
|
3
|
-
describe Rasti::Form::Types::Boolean do
|
4
|
-
|
5
|
-
[true, 'true', 'True', 'TRUE', 'T'].each do |value|
|
6
|
-
it "#{value.inspect} -> true" do
|
7
|
-
Rasti::Form::Types::Boolean.cast(value).must_equal true
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
[false, 'false', 'False', 'FALSE', 'F'].each do |value|
|
12
|
-
it "#{value.inspect} -> false" do
|
13
|
-
Rasti::Form::Types::Boolean.cast(value).must_equal false
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
[nil, 'text', 123, :false, :true, Time.now, [1,2], {a: 1, b: 2}, Object.new].each do |value|
|
18
|
-
it "#{value.inspect} -> CastError" do
|
19
|
-
error = proc { Rasti::Form::Types::Boolean.cast(value) }.must_raise Rasti::Form::CastError
|
20
|
-
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Form::Types::Boolean"
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
data/spec/types/enum_spec.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
require 'minitest_helper'
|
2
|
-
|
3
|
-
describe Rasti::Form::Types::Enum do
|
4
|
-
|
5
|
-
enum = Rasti::Form::Types::Enum[:a,:b,:c]
|
6
|
-
|
7
|
-
[:a, 'b', "c"].each do |value|
|
8
|
-
it "#{value.inspect} -> #{enum}" do
|
9
|
-
Rasti::Form::Types::Enum[:a,:b,:c].cast(value).must_equal value.to_s
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
[nil, 'text', :symbol, '999'.to_sym, [1,2], {a: 1, b: 2}, Object.new].each do |value|
|
14
|
-
it "#{value.inspect} -> CastError" do
|
15
|
-
error = proc { Rasti::Form::Types::Enum[:a,:b,:c].cast(value) }.must_raise Rasti::Form::CastError
|
16
|
-
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Form::Types::Enum[\"a\", \"b\", \"c\"]"
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'Constants' do
|
21
|
-
enum = Rasti::Form::Types::Enum[:first_value, 'SecondValue', 'THIRD_VALUE']
|
22
|
-
|
23
|
-
enum.first_value.must_equal 'first_value'
|
24
|
-
enum.second_value.must_equal 'SecondValue'
|
25
|
-
enum.third_value.must_equal 'THIRD_VALUE'
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
data/spec/types/float_spec.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'minitest_helper'
|
2
|
-
|
3
|
-
describe Rasti::Form::Types::Float do
|
4
|
-
|
5
|
-
[100, '200', Time.now,2.0,"12.5"].each do |value|
|
6
|
-
it "#{value.inspect} -> #{value.to_i}" do
|
7
|
-
Rasti::Form::Types::Float.cast(value).must_equal value.to_f
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
[nil, 'text', :symbol, '999'.to_sym, [1,2], {a: 1, b: 2}, Object.new, "1.", ".2","."].each do |value|
|
12
|
-
it "#{value.inspect} -> CastError" do
|
13
|
-
error = proc { Rasti::Form::Types::Float.cast(value) }.must_raise Rasti::Form::CastError
|
14
|
-
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Form::Types::Float"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
data/spec/types/form_spec.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
require 'minitest_helper'
|
2
|
-
|
3
|
-
describe Rasti::Form::Types::Form do
|
4
|
-
|
5
|
-
form = Rasti::Form[x: Rasti::Form::Types::Integer, y: Rasti::Form::Types::Integer]
|
6
|
-
|
7
|
-
hash = {x: '1', y: '2'}
|
8
|
-
|
9
|
-
it 'Class' do
|
10
|
-
result = Rasti::Form::Types::Form[form].cast hash
|
11
|
-
result.must_be_instance_of form
|
12
|
-
result.x.must_equal 1
|
13
|
-
result.y.must_equal 2
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'Inline' do
|
17
|
-
type = Rasti::Form::Types::Form[x: Rasti::Form::Types::Integer, y: Rasti::Form::Types::Integer]
|
18
|
-
result = type.cast hash
|
19
|
-
result.must_be_instance_of type.form_class
|
20
|
-
result.x.must_equal 1
|
21
|
-
result.y.must_equal 2
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'Invalid form class' do
|
25
|
-
error = proc { Rasti::Form::Types::Form[1] }.must_raise ArgumentError
|
26
|
-
error.message.must_equal 'Invalid form specification: 1'
|
27
|
-
end
|
28
|
-
|
29
|
-
[nil, 'text', :symbol, 1, [1,2], Object.new].each do |value|
|
30
|
-
it "#{value.inspect} -> CastError" do
|
31
|
-
error = proc { Rasti::Form::Types::Form[form].cast(value) }.must_raise Rasti::Form::CastError
|
32
|
-
error.message.must_equal "Invalid cast: #{as_string(value)} -> #{Rasti::Form::Types::Form[form]}"
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
it '{x: "text"} -> ValidationError' do
|
37
|
-
error = proc { Rasti::Form::Types::Form[form].cast x: 'test' }.must_raise Rasti::Form::ValidationError
|
38
|
-
error.message.must_equal "Validation error: #<Rasti::Form[]> {\"x\":[\"Invalid cast: 'test' -> Rasti::Form::Types::Integer\"]}"
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
data/spec/types/hash_spec.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'minitest_helper'
|
2
|
-
|
3
|
-
describe Rasti::Form::Types::Hash do
|
4
|
-
|
5
|
-
it "{'a' => '123'} -> {a: 123}" do
|
6
|
-
Rasti::Form::Types::Hash[Rasti::Form::Types::Symbol, Rasti::Form::Types::Integer].cast('a' => '123').must_equal a: 123
|
7
|
-
end
|
8
|
-
|
9
|
-
it "{'1' => :abc} -> {1 => 'abc'}" do
|
10
|
-
Rasti::Form::Types::Hash[Rasti::Form::Types::Integer, Rasti::Form::Types::String].cast('1' => :abc).must_equal 1 => 'abc'
|
11
|
-
end
|
12
|
-
|
13
|
-
[nil, 1, 'text', :symbol, {a: true}, Object.new].each do |value|
|
14
|
-
it "#{value.inspect} -> CastError" do
|
15
|
-
error = proc { Rasti::Form::Types::Hash[Rasti::Form::Types::Symbol, Rasti::Form::Types::Integer].cast(value) }.must_raise Rasti::Form::CastError
|
16
|
-
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Form::Types::Hash[Rasti::Form::Types::Symbol, Rasti::Form::Types::Integer]"
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
data/spec/types/integer_spec.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'minitest_helper'
|
2
|
-
|
3
|
-
describe Rasti::Form::Types::Integer do
|
4
|
-
|
5
|
-
[100, '200', Time.now, 2.1, "12.5"].each do |value|
|
6
|
-
it "#{value.inspect} -> #{value.to_i}" do
|
7
|
-
Rasti::Form::Types::Integer.cast(value).must_equal value.to_i
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
[nil, 'text', :symbol, '999'.to_sym, [1,2], {a: 1, b: 2}, Object.new].each do |value|
|
12
|
-
it "#{value.inspect} -> CastError" do
|
13
|
-
error = proc { Rasti::Form::Types::Integer.cast(value) }.must_raise Rasti::Form::CastError
|
14
|
-
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Form::Types::Integer"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
data/spec/types/io_spec.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'minitest_helper'
|
2
|
-
|
3
|
-
describe Rasti::Form::Types::IO do
|
4
|
-
|
5
|
-
[StringIO.new, File.new(__FILE__)].each do |value|
|
6
|
-
it "#{value.inspect} -> #{value}" do
|
7
|
-
Rasti::Form::Types::IO.cast(value).must_equal value
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
[nil, 'text', 123, :symbol, [1,2], {a: 1, b: 2}, Object.new].each do |value|
|
12
|
-
it "#{value.inspect} -> CastError" do
|
13
|
-
error = proc { Rasti::Form::Types::IO.cast(value) }.must_raise Rasti::Form::CastError
|
14
|
-
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Form::Types::IO"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
data/spec/types/regexp_spec.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'minitest_helper'
|
2
|
-
|
3
|
-
describe Rasti::Form::Types::Regexp do
|
4
|
-
|
5
|
-
['[a-z]', /[a-z]/].each do |value|
|
6
|
-
it "#{value.inspect} -> #{Regexp.new(value).inspect}" do
|
7
|
-
Rasti::Form::Types::Regexp.cast(value).must_equal Regexp.new(value)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
[nil, '[a-z', :symbol, [1,2], {a: 1, b: 2}, Object.new, 5].each do |value|
|
12
|
-
it "#{value.inspect} -> CastError" do
|
13
|
-
error = proc { Rasti::Form::Types::Regexp.cast(value) }.must_raise Rasti::Form::CastError
|
14
|
-
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Form::Types::Regexp"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'minitest_helper'
|
2
|
-
|
3
|
-
describe Rasti::Form::Types::String, 'Formatted' do
|
4
|
-
|
5
|
-
email_regexp = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
|
6
|
-
|
7
|
-
['user@mail.com'.to_sym, 'user.name-123@mail-test.com.ar'].each do |value|
|
8
|
-
it "#{value.inspect} -> #{value.to_s}" do
|
9
|
-
Rasti::Form::Types::String[email_regexp].cast(value).must_equal value
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
[nil, 'text', :symbol, '999'.to_sym, [1,2], {a: 1, b: 2}, Object.new, 5].each do |value|
|
14
|
-
it "#{value.inspect} -> CastError" do
|
15
|
-
error = proc { Rasti::Form::Types::String[email_regexp].cast(value) }.must_raise Rasti::Form::CastError
|
16
|
-
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Form::Types::String[#{as_string(email_regexp)}]"
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
data/spec/types/string_spec.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'minitest_helper'
|
2
|
-
|
3
|
-
describe Rasti::Form::Types::String do
|
4
|
-
|
5
|
-
['text', :symbol, true, false, 100, Time.now, [1,2], {a: 1, b: 2}, Object.new].each do |value|
|
6
|
-
it "#{value.inspect} -> \"#{value.to_s}\"" do
|
7
|
-
Rasti::Form::Types::String.cast(value).must_equal value.to_s
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'nil -> CastError' do
|
12
|
-
error = proc { Rasti::Form::Types::String.cast(nil) }.must_raise Rasti::Form::CastError
|
13
|
-
error.message.must_equal 'Invalid cast: nil -> Rasti::Form::Types::String'
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
data/spec/types/symbol_spec.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'minitest_helper'
|
2
|
-
|
3
|
-
describe Rasti::Form::Types::Symbol do
|
4
|
-
|
5
|
-
['text', :symbol, true, false, 100, Time.now, [1,2], {a: 1, b: 2}, Object.new].each do |value|
|
6
|
-
it "#{value.inspect} -> \"#{value.to_s.to_sym}\"" do
|
7
|
-
Rasti::Form::Types::Symbol.cast(value).must_equal value.to_s.to_sym
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'nil -> CastError' do
|
12
|
-
error = proc { Rasti::Form::Types::Symbol.cast(nil) }.must_raise Rasti::Form::CastError
|
13
|
-
error.message.must_equal 'Invalid cast: nil -> Rasti::Form::Types::Symbol'
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
data/spec/types/time_spec.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'minitest_helper'
|
2
|
-
|
3
|
-
describe Rasti::Form::Types::Time do
|
4
|
-
|
5
|
-
time = Time.new 2016, 8, 18
|
6
|
-
|
7
|
-
it "#{time.inspect} -> #{time.inspect}" do
|
8
|
-
Rasti::Form::Types::Time['%F %T %z'].cast(time).must_equal time
|
9
|
-
end
|
10
|
-
|
11
|
-
['%d/%m/%y', '%Y-%m-%d'].each do |format|
|
12
|
-
time_string = time.strftime(format)
|
13
|
-
it "#{time_string.inspect} -> #{time.inspect}" do
|
14
|
-
Rasti::Form::Types::Time[format].cast(time_string).must_equal time
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
[time.strftime('%d/%m/%y'), 'text', nil, 1, :symbol, [1,2], {a: 1, b: 2}, Object.new].each do |value|
|
19
|
-
it "#{value.inspect} -> CastError" do
|
20
|
-
error = proc { Rasti::Form::Types::Time['%F'].cast(value) }.must_raise Rasti::Form::CastError
|
21
|
-
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Form::Types::Time['%F']"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
data/spec/types/uuid_spec.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'minitest_helper'
|
2
|
-
|
3
|
-
describe Rasti::Form::Types::UUID do
|
4
|
-
|
5
|
-
['f09b7716-81a9-11e6-a549-bb8f165bcf02', '12345678-1234-1234-1234-123456789123'].each do |value|
|
6
|
-
it "#{value.inspect} -> #{value.to_s}" do
|
7
|
-
Rasti::Form::Types::UUID.cast(value).must_equal value.to_s
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
[nil, 'text', :symbol, '999'.to_sym, [1,2], {a: 1, b: 2}, Object.new, 5, 'f09b7716-81a9-11e6-a549-bb16502', 'f09b7716-11e6-a549-bb8f16502', '-84a9-11e6-a549-bb8f16502', 'f09b7716-81a9-11e6-a549-bh16502'].each do |value|
|
12
|
-
it "#{value.inspect} -> CastError" do
|
13
|
-
error = proc { Rasti::Form::Types::UUID.cast(value) }.must_raise Rasti::Form::CastError
|
14
|
-
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Form::Types::UUID"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|