rasti-types 1.1.2 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rasti/types/array.rb +5 -19
- data/lib/rasti/types/boolean.rb +2 -2
- data/lib/rasti/types/castable.rb +2 -0
- data/lib/rasti/types/enum.rb +0 -2
- data/lib/rasti/types/float.rb +1 -1
- data/lib/rasti/types/hash.rb +9 -16
- data/lib/rasti/types/multi_caster.rb +40 -0
- data/lib/rasti/types/string.rb +1 -1
- data/lib/rasti/types/symbol.rb +1 -1
- data/lib/rasti/types/version.rb +1 -1
- data/spec/array_spec.rb +12 -5
- data/spec/boolean_spec.rb +5 -1
- data/spec/enum_spec.rb +10 -6
- data/spec/float_spec.rb +5 -1
- data/spec/hash_spec.rb +14 -4
- data/spec/integer_spec.rb +5 -1
- data/spec/io_spec.rb +5 -1
- data/spec/model_spec.rb +5 -1
- data/spec/regexp_spec.rb +5 -1
- data/spec/string_formatted_spec.rb +6 -2
- data/spec/string_spec.rb +4 -5
- data/spec/symbol_spec.rb +4 -5
- data/spec/time_spec.rb +11 -7
- data/spec/typed_enum_spec.rb +5 -1
- data/spec/uuid_spec.rb +5 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cae616f3ffc603eeae05195b70c84866334862fd3e2d89a12f7fdab844a63d92
|
4
|
+
data.tar.gz: 85e9de6b5638d15368e16aa5bfd83c4aff1e5d9fc2d99ef1fdcf197e45e8b3fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d1ea6bde041882f96f1d3dfce53db7b45ae6768bcac7792e09d32c7e339ca240e5bde5c43903cf4f782ef8461b1bf21339c28caa9eb2fbf8e5eb2c1fe00ccd6b
|
7
|
+
data.tar.gz: 6672abfc0879cdb0612bc5a32391a333288f2bc5746fb85cb0301bc8edf1713b17342c7dfb97a97ec94fd2e29cff7c98264ade1154feecd89cc85f4ab7c96f15
|
data/lib/rasti/types/array.rb
CHANGED
@@ -26,27 +26,13 @@ module Rasti
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def transform(value)
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
begin
|
35
|
-
result << type.cast(e)
|
36
|
-
|
37
|
-
rescue CompoundError => ex
|
38
|
-
ex.errors.each do |key, messages|
|
39
|
-
errors["#{index}.#{key}"] = messages
|
40
|
-
end
|
41
|
-
|
42
|
-
rescue => ex
|
43
|
-
errors[index] = [ex.message]
|
29
|
+
MultiCaster.cast!(self, value) do |multi_caster|
|
30
|
+
value.map.with_index do |e,i|
|
31
|
+
multi_caster.cast type: type,
|
32
|
+
value: e,
|
33
|
+
error_key: i+1
|
44
34
|
end
|
45
35
|
end
|
46
|
-
|
47
|
-
raise MultiCastError.new(self, value, errors) unless errors.empty?
|
48
|
-
|
49
|
-
result
|
50
36
|
end
|
51
37
|
|
52
38
|
end
|
data/lib/rasti/types/boolean.rb
CHANGED
data/lib/rasti/types/castable.rb
CHANGED
data/lib/rasti/types/enum.rb
CHANGED
data/lib/rasti/types/float.rb
CHANGED
data/lib/rasti/types/hash.rb
CHANGED
@@ -27,26 +27,19 @@ module Rasti
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def transform(value)
|
30
|
-
|
31
|
-
|
30
|
+
MultiCaster.cast!(self, value) do |multi_caster|
|
31
|
+
value.each_with_object({}) do |(k,v), hash|
|
32
|
+
casted_key = multi_caster.cast type: key_type,
|
33
|
+
value: k,
|
34
|
+
error_key: k
|
32
35
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
+
casted_value = multi_caster.cast type: value_type,
|
37
|
+
value: v,
|
38
|
+
error_key: k
|
36
39
|
|
37
|
-
|
38
|
-
ex.errors.each do |key, messages|
|
39
|
-
errors["#{k}.#{key}"] = messages
|
40
|
-
end
|
41
|
-
|
42
|
-
rescue => error
|
43
|
-
errors[k] = [error.message]
|
40
|
+
hash[casted_key] = casted_value
|
44
41
|
end
|
45
42
|
end
|
46
|
-
|
47
|
-
raise MultiCastError.new(self, value, errors) unless errors.empty?
|
48
|
-
|
49
|
-
result
|
50
43
|
end
|
51
44
|
|
52
45
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Rasti
|
2
|
+
module Types
|
3
|
+
class MultiCaster
|
4
|
+
|
5
|
+
def self.cast!(type, value)
|
6
|
+
multi_caster = new type, value
|
7
|
+
result = yield multi_caster
|
8
|
+
multi_caster.raise_if_error!
|
9
|
+
result
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(type, value)
|
13
|
+
@type = type
|
14
|
+
@value = value
|
15
|
+
@errors = ::Hash.new { |h,k| h[k] = [] }
|
16
|
+
end
|
17
|
+
|
18
|
+
def cast(type:, value:, error_key:)
|
19
|
+
type.cast value
|
20
|
+
|
21
|
+
rescue CompoundError => ex
|
22
|
+
ex.errors.each do |inner_error_key, messages|
|
23
|
+
errors["#{error_key}.#{inner_error_key}"] += messages
|
24
|
+
end
|
25
|
+
|
26
|
+
rescue => ex
|
27
|
+
errors[error_key] << ex.message
|
28
|
+
end
|
29
|
+
|
30
|
+
def raise_if_error!
|
31
|
+
raise MultiCastError.new(type, value, errors) unless errors.empty?
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
attr_reader :type, :value, :errors
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/lib/rasti/types/string.rb
CHANGED
data/lib/rasti/types/symbol.rb
CHANGED
data/lib/rasti/types/version.rb
CHANGED
data/spec/array_spec.rb
CHANGED
@@ -3,7 +3,15 @@ require 'minitest_helper'
|
|
3
3
|
describe Rasti::Types::Array do
|
4
4
|
|
5
5
|
VALID_ARRAY = [1, '2', Time.now]
|
6
|
-
INVALID_ARRAY = [
|
6
|
+
INVALID_ARRAY = [1, 'text', :symbol, {a: 1, b: 2}, Object.new]
|
7
|
+
|
8
|
+
it 'nil -> nil' do
|
9
|
+
Rasti::Types::Array[Rasti::Types::String].cast(nil).must_equal nil
|
10
|
+
end
|
11
|
+
|
12
|
+
it '[nil] -> [nil]' do
|
13
|
+
Rasti::Types::Array[Rasti::Types::String].cast([nil]).must_equal [nil]
|
14
|
+
end
|
7
15
|
|
8
16
|
it "#{VALID_ARRAY.inspect} -> #{VALID_ARRAY.map(&:to_i)}" do
|
9
17
|
Rasti::Types::Array[Rasti::Types::Integer].cast(VALID_ARRAY).must_equal VALID_ARRAY.map(&:to_i)
|
@@ -23,15 +31,14 @@ describe Rasti::Types::Array do
|
|
23
31
|
describe 'Multi cast errors' do
|
24
32
|
|
25
33
|
it 'Array of integers' do
|
26
|
-
array = [1, 2 , 'a', 3, 'c', 4
|
34
|
+
array = [1, 2 , 'a', 3, 'c', 4]
|
27
35
|
|
28
36
|
error = proc { Rasti::Types::Array[Rasti::Types::Integer].cast(array) }.must_raise Rasti::Types::MultiCastError
|
29
37
|
|
30
38
|
error.errors.must_equal 3 => ["Invalid cast: 'a' -> Rasti::Types::Integer"],
|
31
|
-
5 => ["Invalid cast: 'c' -> Rasti::Types::Integer"]
|
32
|
-
7 => ["Invalid cast: nil -> Rasti::Types::Integer"]
|
39
|
+
5 => ["Invalid cast: 'c' -> Rasti::Types::Integer"]
|
33
40
|
|
34
|
-
error.message.must_equal "Cast errors:\n- 3: [\"Invalid cast: 'a' -> Rasti::Types::Integer\"]\n- 5: [\"Invalid cast: 'c' -> Rasti::Types::Integer\"]
|
41
|
+
error.message.must_equal "Cast errors:\n- 3: [\"Invalid cast: 'a' -> Rasti::Types::Integer\"]\n- 5: [\"Invalid cast: 'c' -> Rasti::Types::Integer\"]"
|
35
42
|
end
|
36
43
|
|
37
44
|
it 'Array of models' do
|
data/spec/boolean_spec.rb
CHANGED
@@ -2,6 +2,10 @@ require 'minitest_helper'
|
|
2
2
|
|
3
3
|
describe Rasti::Types::Boolean do
|
4
4
|
|
5
|
+
it 'nil -> nil' do
|
6
|
+
Rasti::Types::Boolean.cast(nil).must_equal nil
|
7
|
+
end
|
8
|
+
|
5
9
|
[true, 'true', 'True', 'TRUE', 'T'].each do |value|
|
6
10
|
it "#{value.inspect} -> true" do
|
7
11
|
Rasti::Types::Boolean.cast(value).must_equal true
|
@@ -14,7 +18,7 @@ describe Rasti::Types::Boolean do
|
|
14
18
|
end
|
15
19
|
end
|
16
20
|
|
17
|
-
[
|
21
|
+
['text', 123, :false, :true, Time.now, [1,2], {a: 1, b: 2}, Object.new].each do |value|
|
18
22
|
it "#{value.inspect} -> CastError" do
|
19
23
|
error = proc { Rasti::Types::Boolean.cast(value) }.must_raise Rasti::Types::CastError
|
20
24
|
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Types::Boolean"
|
data/spec/enum_spec.rb
CHANGED
@@ -2,17 +2,21 @@ require 'minitest_helper'
|
|
2
2
|
|
3
3
|
describe Rasti::Types::Enum do
|
4
4
|
|
5
|
-
enum
|
5
|
+
let(:enum) { Rasti::Types::Enum[:a,:b,:c] }
|
6
|
+
|
7
|
+
it 'nil -> nil' do
|
8
|
+
enum.cast(nil).must_be_nil
|
9
|
+
end
|
6
10
|
|
7
11
|
[:a, 'b', "c"].each do |value|
|
8
|
-
it "#{value.inspect} -> #{
|
9
|
-
|
12
|
+
it "#{value.inspect} -> #{value.to_s.inspect}" do
|
13
|
+
enum.cast(value).must_equal value.to_s
|
10
14
|
end
|
11
15
|
end
|
12
16
|
|
13
|
-
[
|
17
|
+
['text', :symbol, '999'.to_sym, [1,2], {a: 1, b: 2}, Object.new].each do |value|
|
14
18
|
it "#{value.inspect} -> CastError" do
|
15
|
-
error = proc {
|
19
|
+
error = proc { enum.cast(value) }.must_raise Rasti::Types::CastError
|
16
20
|
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Types::Enum[\"a\", \"b\", \"c\"]"
|
17
21
|
end
|
18
22
|
end
|
@@ -23,7 +27,7 @@ describe Rasti::Types::Enum do
|
|
23
27
|
enum.first_value.must_equal 'first_value'
|
24
28
|
enum.second_value.must_equal 'SecondValue'
|
25
29
|
enum.third_value.must_equal 'THIRD_VALUE'
|
26
|
-
enum.values.must_equal [
|
30
|
+
enum.values.must_equal [enum.first_value, enum.second_value, enum.third_value]
|
27
31
|
end
|
28
32
|
|
29
33
|
end
|
data/spec/float_spec.rb
CHANGED
@@ -2,13 +2,17 @@ require 'minitest_helper'
|
|
2
2
|
|
3
3
|
describe Rasti::Types::Float do
|
4
4
|
|
5
|
+
it 'nil -> nil' do
|
6
|
+
Rasti::Types::Float.cast(nil).must_equal nil
|
7
|
+
end
|
8
|
+
|
5
9
|
[100, '200', Time.now,2.0,"12.5"].each do |value|
|
6
10
|
it "#{value.inspect} -> #{value.to_i}" do
|
7
11
|
Rasti::Types::Float.cast(value).must_equal value.to_f
|
8
12
|
end
|
9
13
|
end
|
10
14
|
|
11
|
-
[
|
15
|
+
['text', :symbol, '999'.to_sym, [1,2], {a: 1, b: 2}, Object.new, "1.", ".2","."].each do |value|
|
12
16
|
it "#{value.inspect} -> CastError" do
|
13
17
|
error = proc { Rasti::Types::Float.cast(value) }.must_raise Rasti::Types::CastError
|
14
18
|
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Types::Float"
|
data/spec/hash_spec.rb
CHANGED
@@ -2,6 +2,14 @@ require 'minitest_helper'
|
|
2
2
|
|
3
3
|
describe Rasti::Types::Hash do
|
4
4
|
|
5
|
+
it 'nil -> nil' do
|
6
|
+
Rasti::Types::Hash[Rasti::Types::Integer, Rasti::Types::String].cast(nil).must_equal nil
|
7
|
+
end
|
8
|
+
|
9
|
+
it '{nil => nil} -> {nil => nil}' do
|
10
|
+
Rasti::Types::Hash[Rasti::Types::Integer, Rasti::Types::String].cast(nil => nil).must_equal nil => nil
|
11
|
+
end
|
12
|
+
|
5
13
|
it "{'a' => '123'} -> {a: 123}" do
|
6
14
|
Rasti::Types::Hash[Rasti::Types::Symbol, Rasti::Types::Integer].cast('a' => '123').must_equal a: 123
|
7
15
|
end
|
@@ -10,7 +18,7 @@ describe Rasti::Types::Hash do
|
|
10
18
|
Rasti::Types::Hash[Rasti::Types::Integer, Rasti::Types::String].cast('1' => :abc).must_equal 1 => 'abc'
|
11
19
|
end
|
12
20
|
|
13
|
-
[
|
21
|
+
[1, 'text', :symbol, Object.new].each do |value|
|
14
22
|
it "#{value.inspect} -> CastError" do
|
15
23
|
error = proc { Rasti::Types::Hash[Rasti::Types::Symbol, Rasti::Types::Integer].cast(value) }.must_raise Rasti::Types::CastError
|
16
24
|
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Types::Hash[Rasti::Types::Symbol, Rasti::Types::Integer]"
|
@@ -22,15 +30,17 @@ describe Rasti::Types::Hash do
|
|
22
30
|
it 'Simple types' do
|
23
31
|
value = {
|
24
32
|
true => 1,
|
25
|
-
2 => false
|
33
|
+
2 => false,
|
34
|
+
false => true
|
26
35
|
}
|
27
36
|
|
28
37
|
error = proc { Rasti::Types::Hash[Rasti::Types::Integer, Rasti::Types::Integer].cast(value) }.must_raise Rasti::Types::MultiCastError
|
29
38
|
|
30
39
|
error.errors.must_equal true => ['Invalid cast: true -> Rasti::Types::Integer'],
|
31
|
-
2 => ['Invalid cast: false -> Rasti::Types::Integer']
|
40
|
+
2 => ['Invalid cast: false -> Rasti::Types::Integer'],
|
41
|
+
false => ['Invalid cast: false -> Rasti::Types::Integer', 'Invalid cast: true -> Rasti::Types::Integer']
|
32
42
|
|
33
|
-
error.message.must_equal "Cast errors:\n- true: [\"Invalid cast: true -> Rasti::Types::Integer\"]\n- 2: [\"Invalid cast: false -> Rasti::Types::Integer\"]"
|
43
|
+
error.message.must_equal "Cast errors:\n- true: [\"Invalid cast: true -> Rasti::Types::Integer\"]\n- 2: [\"Invalid cast: false -> Rasti::Types::Integer\"]\n- false: [\"Invalid cast: false -> Rasti::Types::Integer\", \"Invalid cast: true -> Rasti::Types::Integer\"]"
|
34
44
|
end
|
35
45
|
|
36
46
|
it 'Models' do
|
data/spec/integer_spec.rb
CHANGED
@@ -2,13 +2,17 @@ require 'minitest_helper'
|
|
2
2
|
|
3
3
|
describe Rasti::Types::Integer do
|
4
4
|
|
5
|
+
it 'nil -> nil' do
|
6
|
+
Rasti::Types::Integer.cast(nil).must_equal nil
|
7
|
+
end
|
8
|
+
|
5
9
|
[100, '200', Time.now, 2.1, "12.5"].each do |value|
|
6
10
|
it "#{value.inspect} -> #{value.to_i}" do
|
7
11
|
Rasti::Types::Integer.cast(value).must_equal value.to_i
|
8
12
|
end
|
9
13
|
end
|
10
14
|
|
11
|
-
[
|
15
|
+
['text', :symbol, '999'.to_sym, [1,2], {a: 1, b: 2}, Object.new].each do |value|
|
12
16
|
it "#{value.inspect} -> CastError" do
|
13
17
|
error = proc { Rasti::Types::Integer.cast(value) }.must_raise Rasti::Types::CastError
|
14
18
|
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Types::Integer"
|
data/spec/io_spec.rb
CHANGED
@@ -2,13 +2,17 @@ require 'minitest_helper'
|
|
2
2
|
|
3
3
|
describe Rasti::Types::IO do
|
4
4
|
|
5
|
+
it 'nil -> nil' do
|
6
|
+
Rasti::Types::IO.cast(nil).must_equal nil
|
7
|
+
end
|
8
|
+
|
5
9
|
[StringIO.new, File.new(__FILE__)].each do |value|
|
6
10
|
it "#{value.inspect} -> #{value}" do
|
7
11
|
Rasti::Types::IO.cast(value).must_equal value
|
8
12
|
end
|
9
13
|
end
|
10
14
|
|
11
|
-
[
|
15
|
+
['text', 123, :symbol, [1,2], {a: 1, b: 2}, Object.new].each do |value|
|
12
16
|
it "#{value.inspect} -> CastError" do
|
13
17
|
error = proc { Rasti::Types::IO.cast(value) }.must_raise Rasti::Types::CastError
|
14
18
|
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Types::IO"
|
data/spec/model_spec.rb
CHANGED
@@ -2,6 +2,10 @@ require 'minitest_helper'
|
|
2
2
|
|
3
3
|
describe Rasti::Types::Model do
|
4
4
|
|
5
|
+
it 'nil -> nil' do
|
6
|
+
Rasti::Types::Model[Point].cast(nil).must_equal nil
|
7
|
+
end
|
8
|
+
|
5
9
|
it 'Hash' do
|
6
10
|
result = Rasti::Types::Model[Point].cast x: 1, y: 2
|
7
11
|
result.must_be_instance_of Point
|
@@ -20,7 +24,7 @@ describe Rasti::Types::Model do
|
|
20
24
|
error.message.must_equal "Errors:\n- x: [\"not present\"]\n- y: [\"not present\"]"
|
21
25
|
end
|
22
26
|
|
23
|
-
[
|
27
|
+
['text', :symbol, 1, [1,2], Object.new].each do |value|
|
24
28
|
it "#{value.inspect} -> CastError" do
|
25
29
|
error = proc { Rasti::Types::Model[Point].cast(value) }.must_raise Rasti::Types::CastError
|
26
30
|
error.message.must_equal "Invalid cast: #{as_string(value)} -> #{Rasti::Types::Model[Point]}"
|
data/spec/regexp_spec.rb
CHANGED
@@ -2,13 +2,17 @@ require 'minitest_helper'
|
|
2
2
|
|
3
3
|
describe Rasti::Types::Regexp do
|
4
4
|
|
5
|
+
it 'nil -> nil' do
|
6
|
+
Rasti::Types::Regexp.cast(nil).must_equal nil
|
7
|
+
end
|
8
|
+
|
5
9
|
['[a-z]', /[a-z]/].each do |value|
|
6
10
|
it "#{value.inspect} -> #{Regexp.new(value).inspect}" do
|
7
11
|
Rasti::Types::Regexp.cast(value).must_equal Regexp.new(value).source
|
8
12
|
end
|
9
13
|
end
|
10
14
|
|
11
|
-
[
|
15
|
+
['[a-z', :symbol, [1,2], {a: 1, b: 2}, Object.new, 5].each do |value|
|
12
16
|
it "#{value.inspect} -> CastError" do
|
13
17
|
error = proc { Rasti::Types::Regexp.cast(value) }.must_raise Rasti::Types::CastError
|
14
18
|
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Types::Regexp"
|
@@ -2,7 +2,11 @@ require 'minitest_helper'
|
|
2
2
|
|
3
3
|
describe Rasti::Types::String, 'Formatted' do
|
4
4
|
|
5
|
-
email_regexp
|
5
|
+
let(:email_regexp) { /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i }
|
6
|
+
|
7
|
+
it 'nil -> nil' do
|
8
|
+
Rasti::Types::String[email_regexp].cast(nil).must_equal nil
|
9
|
+
end
|
6
10
|
|
7
11
|
['user@mail.com'.to_sym, 'user.name-123@mail-test.com.ar'].each do |value|
|
8
12
|
it "#{value.inspect} -> #{value.to_s}" do
|
@@ -10,7 +14,7 @@ describe Rasti::Types::String, 'Formatted' do
|
|
10
14
|
end
|
11
15
|
end
|
12
16
|
|
13
|
-
[
|
17
|
+
['text', :symbol, '999'.to_sym, [1,2], {a: 1, b: 2}, Object.new, 5].each do |value|
|
14
18
|
it "#{value.inspect} -> CastError" do
|
15
19
|
error = proc { Rasti::Types::String[email_regexp].cast(value) }.must_raise Rasti::Types::CastError
|
16
20
|
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Types::String[#{as_string(email_regexp)}]"
|
data/spec/string_spec.rb
CHANGED
@@ -2,15 +2,14 @@ require 'minitest_helper'
|
|
2
2
|
|
3
3
|
describe Rasti::Types::String do
|
4
4
|
|
5
|
+
it 'nil -> nil' do
|
6
|
+
Rasti::Types::String.cast(nil).must_equal nil
|
7
|
+
end
|
8
|
+
|
5
9
|
['text', :symbol, true, false, 100, Time.now, [1,2], {a: 1, b: 2}, Object.new].each do |value|
|
6
10
|
it "#{value.inspect} -> \"#{value.to_s}\"" do
|
7
11
|
Rasti::Types::String.cast(value).must_equal value.to_s
|
8
12
|
end
|
9
13
|
end
|
10
14
|
|
11
|
-
it 'nil -> CastError' do
|
12
|
-
error = proc { Rasti::Types::String.cast(nil) }.must_raise Rasti::Types::CastError
|
13
|
-
error.message.must_equal 'Invalid cast: nil -> Rasti::Types::String'
|
14
|
-
end
|
15
|
-
|
16
15
|
end
|
data/spec/symbol_spec.rb
CHANGED
@@ -2,15 +2,14 @@ require 'minitest_helper'
|
|
2
2
|
|
3
3
|
describe Rasti::Types::Symbol do
|
4
4
|
|
5
|
+
it 'nil -> nil' do
|
6
|
+
Rasti::Types::Symbol.cast(nil).must_equal nil
|
7
|
+
end
|
8
|
+
|
5
9
|
['text', :symbol, true, false, 100, Time.now, [1,2], {a: 1, b: 2}, Object.new].each do |value|
|
6
10
|
it "#{value.inspect} -> \"#{value.to_s.to_sym}\"" do
|
7
11
|
Rasti::Types::Symbol.cast(value).must_equal value.to_s.to_sym
|
8
12
|
end
|
9
13
|
end
|
10
14
|
|
11
|
-
it 'nil -> CastError' do
|
12
|
-
error = proc { Rasti::Types::Symbol.cast(nil) }.must_raise Rasti::Types::CastError
|
13
|
-
error.message.must_equal 'Invalid cast: nil -> Rasti::Types::Symbol'
|
14
|
-
end
|
15
|
-
|
16
15
|
end
|
data/spec/time_spec.rb
CHANGED
@@ -2,20 +2,24 @@ require 'minitest_helper'
|
|
2
2
|
|
3
3
|
describe Rasti::Types::Time do
|
4
4
|
|
5
|
-
|
5
|
+
TIME = Time.new 2016, 8, 18
|
6
6
|
|
7
|
-
it
|
8
|
-
Rasti::Types::Time['%F %T %z'].cast(
|
7
|
+
it 'nil -> nil' do
|
8
|
+
Rasti::Types::Time['%F %T %z'].cast(nil).must_equal nil
|
9
|
+
end
|
10
|
+
|
11
|
+
it "#{TIME.inspect} -> #{TIME.inspect}" do
|
12
|
+
Rasti::Types::Time['%F %T %z'].cast(TIME).must_equal TIME
|
9
13
|
end
|
10
14
|
|
11
15
|
['%d/%m/%y', '%Y-%m-%d'].each do |format|
|
12
|
-
time_string =
|
13
|
-
it "#{time_string.inspect} -> #{
|
14
|
-
Rasti::Types::Time[format].cast(time_string).must_equal
|
16
|
+
time_string = TIME.strftime(format)
|
17
|
+
it "#{time_string.inspect} -> #{TIME.inspect}" do
|
18
|
+
Rasti::Types::Time[format].cast(time_string).must_equal TIME
|
15
19
|
end
|
16
20
|
end
|
17
21
|
|
18
|
-
[
|
22
|
+
[TIME.strftime('%d/%m/%y'), 'text', 1, :symbol, [1,2], {a: 1, b: 2}, Object.new].each do |value|
|
19
23
|
it "#{value.inspect} -> CastError" do
|
20
24
|
error = proc { Rasti::Types::Time['%F'].cast(value) }.must_raise Rasti::Types::CastError
|
21
25
|
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Types::Time['%F']"
|
data/spec/typed_enum_spec.rb
CHANGED
@@ -4,13 +4,17 @@ describe Rasti::Types::TypedEnum do
|
|
4
4
|
|
5
5
|
let(:enum) { Rasti::Types::TypedEnum[Colors] }
|
6
6
|
|
7
|
+
it 'nil -> nil' do
|
8
|
+
enum.cast(nil).must_equal nil
|
9
|
+
end
|
10
|
+
|
7
11
|
['BLUE', 'GREEN', 'RED'].each do |value|
|
8
12
|
it "#{value.inspect} -> #{value}" do
|
9
13
|
enum.cast(value).must_equal Colors[value]
|
10
14
|
end
|
11
15
|
end
|
12
16
|
|
13
|
-
['text', :symbol, true, false, 100, Time.now, [1,2], {a: 1, b: 2}, Object.new
|
17
|
+
['text', :symbol, true, false, 100, Time.now, [1,2], {a: 1, b: 2}, Object.new].each do |value|
|
14
18
|
it "#{value.inspect} -> CastError" do
|
15
19
|
error = proc { enum.cast(value) }.must_raise Rasti::Types::CastError
|
16
20
|
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Types::TypedEnum[Colors]"
|
data/spec/uuid_spec.rb
CHANGED
@@ -2,13 +2,17 @@ require 'minitest_helper'
|
|
2
2
|
|
3
3
|
describe Rasti::Types::UUID do
|
4
4
|
|
5
|
+
it 'nil -> nil' do
|
6
|
+
Rasti::Types::UUID.cast(nil).must_equal nil
|
7
|
+
end
|
8
|
+
|
5
9
|
['f09b7716-81a9-11e6-a549-bb8f165bcf02', '12345678-1234-1234-1234-123456789123'].each do |value|
|
6
10
|
it "#{value.inspect} -> #{value.to_s}" do
|
7
11
|
Rasti::Types::UUID.cast(value).must_equal value.to_s
|
8
12
|
end
|
9
13
|
end
|
10
14
|
|
11
|
-
[
|
15
|
+
['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
16
|
it "#{value.inspect} -> CastError" do
|
13
17
|
error = proc { Rasti::Types::UUID.cast(value) }.must_raise Rasti::Types::CastError
|
14
18
|
error.message.must_equal "Invalid cast: #{as_string(value)} -> Rasti::Types::UUID"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rasti-types
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.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: 2021-
|
11
|
+
date: 2021-06-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_require
|
@@ -184,6 +184,7 @@ files:
|
|
184
184
|
- lib/rasti/types/integer.rb
|
185
185
|
- lib/rasti/types/io.rb
|
186
186
|
- lib/rasti/types/model.rb
|
187
|
+
- lib/rasti/types/multi_caster.rb
|
187
188
|
- lib/rasti/types/regexp.rb
|
188
189
|
- lib/rasti/types/string.rb
|
189
190
|
- lib/rasti/types/symbol.rb
|