rasti-form 3.1.2 → 4.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.
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.1.2
4
+ version: 4.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: 2020-10-05 00:00:00.000000000 Z
11
+ date: 2021-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_require
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rasti-model
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -146,41 +160,12 @@ files:
146
160
  - Rakefile
147
161
  - lib/rasti-form.rb
148
162
  - lib/rasti/form.rb
149
- - lib/rasti/form/castable.rb
150
163
  - lib/rasti/form/errors.rb
151
- - lib/rasti/form/types/array.rb
152
- - lib/rasti/form/types/boolean.rb
153
- - lib/rasti/form/types/enum.rb
154
- - lib/rasti/form/types/float.rb
155
- - lib/rasti/form/types/form.rb
156
- - lib/rasti/form/types/hash.rb
157
- - lib/rasti/form/types/integer.rb
158
- - lib/rasti/form/types/io.rb
159
- - lib/rasti/form/types/regexp.rb
160
- - lib/rasti/form/types/string.rb
161
- - lib/rasti/form/types/symbol.rb
162
- - lib/rasti/form/types/time.rb
163
- - lib/rasti/form/types/uuid.rb
164
164
  - lib/rasti/form/validable.rb
165
- - lib/rasti/form/version.rb
166
165
  - rasti-form.gemspec
167
166
  - spec/coverage_helper.rb
168
- - spec/form_spec.rb
169
167
  - spec/minitest_helper.rb
170
- - spec/types/array_spec.rb
171
- - spec/types/boolean_spec.rb
172
- - spec/types/enum_spec.rb
173
- - spec/types/float_spec.rb
174
- - spec/types/form_spec.rb
175
- - spec/types/hash_spec.rb
176
- - spec/types/integer_spec.rb
177
- - spec/types/io_spec.rb
178
- - spec/types/regexp_spec.rb
179
- - spec/types/string_formatted_spec.rb
180
- - spec/types/string_spec.rb
181
- - spec/types/symbol_spec.rb
182
- - spec/types/time_spec.rb
183
- - spec/types/uuid_spec.rb
168
+ - spec/validations_spec.rb
184
169
  homepage: https://github.com/gabynaiman/rasti-form
185
170
  licenses:
186
171
  - MIT
@@ -206,19 +191,5 @@ specification_version: 4
206
191
  summary: Forms validations and type casting
207
192
  test_files:
208
193
  - spec/coverage_helper.rb
209
- - spec/form_spec.rb
210
194
  - spec/minitest_helper.rb
211
- - spec/types/array_spec.rb
212
- - spec/types/boolean_spec.rb
213
- - spec/types/enum_spec.rb
214
- - spec/types/float_spec.rb
215
- - spec/types/form_spec.rb
216
- - spec/types/hash_spec.rb
217
- - spec/types/integer_spec.rb
218
- - spec/types/io_spec.rb
219
- - spec/types/regexp_spec.rb
220
- - spec/types/string_formatted_spec.rb
221
- - spec/types/string_spec.rb
222
- - spec/types/symbol_spec.rb
223
- - spec/types/time_spec.rb
224
- - spec/types/uuid_spec.rb
195
+ - spec/validations_spec.rb
@@ -1,25 +0,0 @@
1
- module Rasti
2
- class Form
3
- module Castable
4
-
5
- def cast(value)
6
- if valid? value
7
- transform! value
8
- else
9
- raise CastError.new self, value
10
- end
11
- end
12
-
13
- private
14
-
15
- def transform!(value)
16
- transform value
17
- rescue MultiCastError, ValidationError => ex
18
- raise ex
19
- rescue
20
- raise CastError.new self, value
21
- end
22
-
23
- end
24
- end
25
- end
@@ -1,54 +0,0 @@
1
- module Rasti
2
- class Form
3
- module Types
4
- class Array
5
-
6
- include Castable
7
-
8
- attr_reader :type
9
-
10
- def self.[](type)
11
- new type
12
- end
13
-
14
- def to_s
15
- "#{self.class}[#{type}]"
16
- end
17
- alias_method :inspect, :to_s
18
-
19
- private
20
-
21
- def initialize(type)
22
- @type = type
23
- end
24
-
25
- def valid?(value)
26
- value.is_a? ::Array
27
- end
28
-
29
- def transform(value)
30
- result = []
31
- errors = {}
32
-
33
- value.each_with_index do |e,i|
34
- index = i + 1
35
- begin
36
- result << type.cast(e)
37
- rescue ValidationError => error
38
- error.errors.each do |k,v|
39
- errors["#{index}.#{k}"] = v
40
- end
41
- rescue => error
42
- errors[index] = [error.message]
43
- end
44
- end
45
-
46
- raise MultiCastError.new(self, value, errors) unless errors.empty?
47
-
48
- result
49
- end
50
-
51
- end
52
- end
53
- end
54
- end
@@ -1,42 +0,0 @@
1
- module Rasti
2
- class Form
3
- module Types
4
- class Boolean
5
- class << self
6
-
7
- include Castable
8
-
9
- TRUE_FORMAT = /^t(rue)?$/i
10
- FALSE_FORMAT = /^f(alse)?$/i
11
-
12
- private
13
-
14
- def valid?(value)
15
- boolean?(value) || valid_string?(value)
16
- end
17
-
18
- def transform(value)
19
- boolean?(value) ? value : true_string?(value)
20
- end
21
-
22
- def boolean?(value)
23
- value == true || value == false
24
- end
25
-
26
- def valid_string?(value)
27
- value.is_a?(::String) && (true_string?(value) || false_string?(value))
28
- end
29
-
30
- def true_string?(value)
31
- !!value.match(TRUE_FORMAT)
32
- end
33
-
34
- def false_string?(value)
35
- !!value.match(FALSE_FORMAT)
36
- end
37
-
38
- end
39
- end
40
- end
41
- end
42
- end
@@ -1,48 +0,0 @@
1
- module Rasti
2
- class Form
3
- module Types
4
- class Enum
5
-
6
- include Castable
7
-
8
- attr_reader :values
9
-
10
- def self.[](*values)
11
- new values
12
- end
13
-
14
- def to_s
15
- "#{self.class}[#{values.map(&:inspect).join(', ')}]"
16
- end
17
- alias_method :inspect, :to_s
18
-
19
- private
20
-
21
- def initialize(values)
22
- @values = values.map(&:to_s)
23
- define_getters
24
- end
25
-
26
- def valid?(value)
27
- values.include? String.cast(value)
28
- rescue
29
- false
30
- end
31
-
32
- def transform(value)
33
- String.cast value
34
- end
35
-
36
- def define_getters
37
- values.each do |value|
38
- getter_name = value.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').gsub(/([a-z])([A-Z])/, '\1_\2').downcase
39
- define_singleton_method getter_name do
40
- value
41
- end
42
- end
43
- end
44
-
45
- end
46
- end
47
- end
48
- end
@@ -1,33 +0,0 @@
1
- module Rasti
2
- class Form
3
- module Types
4
- class Float
5
- class << self
6
-
7
- include Castable
8
-
9
- FORMAT = /^(\d+\.)?\d+$/
10
-
11
- private
12
-
13
- def valid?(value)
14
- !value.nil? && (valid_string?(value) || transformable?(value))
15
- end
16
-
17
- def transform(value)
18
- value.to_f
19
- end
20
-
21
- def valid_string?(value)
22
- value.is_a?(::String) && value.match(FORMAT)
23
- end
24
-
25
- def transformable?(value)
26
- !value.is_a?(::String) && value.respond_to?(:to_f)
27
- end
28
-
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,40 +0,0 @@
1
- module Rasti
2
- class Form
3
- module Types
4
- class Form
5
-
6
- include Castable
7
-
8
- attr_reader :form_class
9
-
10
- def self.[](*args)
11
- new *args
12
- end
13
-
14
- def to_s
15
- "#{self.class}[#{form_class}]"
16
- end
17
- alias_method :inspect, :to_s
18
-
19
- private
20
-
21
- def initialize(form)
22
- @form_class = case
23
- when form.is_a?(::Hash) then Rasti::Form[form]
24
- when form.is_a?(Class) && form.ancestors.include?(Rasti::Form) then form
25
- else raise ArgumentError, "Invalid form specification: #{form.inspect}"
26
- end
27
- end
28
-
29
- def valid?(value)
30
- value.is_a? ::Hash
31
- end
32
-
33
- def transform(value)
34
- form_class.new value
35
- end
36
-
37
- end
38
- end
39
- end
40
- end
@@ -1,39 +0,0 @@
1
- module Rasti
2
- class Form
3
- module Types
4
- class Hash
5
-
6
- include Castable
7
-
8
- attr_reader :key_type, :value_type
9
-
10
- def self.[](key_type, value_type)
11
- new key_type, value_type
12
- end
13
-
14
- def to_s
15
- "#{self.class}[#{key_type}, #{value_type}]"
16
- end
17
- alias_method :inspect, :to_s
18
-
19
- private
20
-
21
- def initialize(key_type, value_type)
22
- @key_type = key_type
23
- @value_type = value_type
24
- end
25
-
26
- def valid?(value)
27
- value.is_a? ::Hash
28
- end
29
-
30
- def transform(value)
31
- value.each_with_object({}) do |(k,v),h|
32
- h[key_type.cast k] = value_type.cast v
33
- end
34
- end
35
-
36
- end
37
- end
38
- end
39
- end
@@ -1,21 +0,0 @@
1
- module Rasti
2
- class Form
3
- module Types
4
- class Integer < Float
5
- class << self
6
-
7
- private
8
-
9
- def transform(value)
10
- value.to_i
11
- end
12
-
13
- def transformable?(value)
14
- !value.is_a?(::String) && value.respond_to?(:to_i)
15
- end
16
-
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,23 +0,0 @@
1
- module Rasti
2
- class Form
3
- module Types
4
- class IO
5
- class << self
6
-
7
- include Castable
8
-
9
- private
10
-
11
- def valid?(value)
12
- value.respond_to?(:read) && value.respond_to?(:write)
13
- end
14
-
15
- def transform(value)
16
- value
17
- end
18
-
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,23 +0,0 @@
1
- module Rasti
2
- class Form
3
- module Types
4
- class Regexp
5
- class << self
6
-
7
- include Castable
8
-
9
- private
10
-
11
- def valid?(value)
12
- value.is_a?(::Regexp) || value.is_a?(::String)
13
- end
14
-
15
- def transform(value)
16
- value.is_a?(::Regexp) ? value.source : ::Regexp.compile(value).source
17
- end
18
-
19
- end
20
- end
21
- end
22
- end
23
- end