rasti-form 2.2.0 → 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.
Files changed (42) hide show
  1. checksums.yaml +5 -5
  2. data/.ruby-version +1 -1
  3. data/.travis.yml +7 -10
  4. data/README.md +1 -1
  5. data/lib/rasti/form.rb +34 -129
  6. data/lib/rasti/form/errors.rb +7 -47
  7. data/lib/rasti/form/validable.rb +9 -3
  8. data/rasti-form.gemspec +3 -14
  9. data/spec/coverage_helper.rb +1 -3
  10. data/spec/minitest_helper.rb +1 -7
  11. data/spec/validations_spec.rb +301 -0
  12. metadata +11 -54
  13. data/lib/rasti/form/castable.rb +0 -25
  14. data/lib/rasti/form/formatable.rb +0 -19
  15. data/lib/rasti/form/types/array.rb +0 -54
  16. data/lib/rasti/form/types/boolean.rb +0 -42
  17. data/lib/rasti/form/types/enum.rb +0 -48
  18. data/lib/rasti/form/types/float.rb +0 -33
  19. data/lib/rasti/form/types/form.rb +0 -40
  20. data/lib/rasti/form/types/hash.rb +0 -39
  21. data/lib/rasti/form/types/integer.rb +0 -21
  22. data/lib/rasti/form/types/io.rb +0 -23
  23. data/lib/rasti/form/types/regexp.rb +0 -28
  24. data/lib/rasti/form/types/string.rb +0 -23
  25. data/lib/rasti/form/types/symbol.rb +0 -23
  26. data/lib/rasti/form/types/time.rb +0 -40
  27. data/lib/rasti/form/types/uuid.rb +0 -19
  28. data/lib/rasti/form/version.rb +0 -5
  29. data/spec/form_spec.rb +0 -350
  30. data/spec/types/array_spec.rb +0 -54
  31. data/spec/types/boolean_spec.rb +0 -24
  32. data/spec/types/enum_spec.rb +0 -28
  33. data/spec/types/float_spec.rb +0 -18
  34. data/spec/types/form_spec.rb +0 -41
  35. data/spec/types/hash_spec.rb +0 -20
  36. data/spec/types/integer_spec.rb +0 -18
  37. data/spec/types/io_spec.rb +0 -18
  38. data/spec/types/regexp_spec.rb +0 -20
  39. data/spec/types/string_spec.rb +0 -16
  40. data/spec/types/symbol_spec.rb +0 -16
  41. data/spec/types/time_spec.rb +0 -25
  42. data/spec/types/uuid_spec.rb +0 -18
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: 2.2.0
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: 2018-10-01 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
@@ -25,33 +25,33 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: bundler
28
+ name: rasti-model
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.12'
34
- type: :development
33
+ version: '1.0'
34
+ type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.12'
40
+ version: '1.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '11.0'
47
+ version: '12.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '11.0'
54
+ version: '12.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: minitest
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -160,41 +160,12 @@ files:
160
160
  - Rakefile
161
161
  - lib/rasti-form.rb
162
162
  - lib/rasti/form.rb
163
- - lib/rasti/form/castable.rb
164
163
  - lib/rasti/form/errors.rb
165
- - lib/rasti/form/formatable.rb
166
- - lib/rasti/form/types/array.rb
167
- - lib/rasti/form/types/boolean.rb
168
- - lib/rasti/form/types/enum.rb
169
- - lib/rasti/form/types/float.rb
170
- - lib/rasti/form/types/form.rb
171
- - lib/rasti/form/types/hash.rb
172
- - lib/rasti/form/types/integer.rb
173
- - lib/rasti/form/types/io.rb
174
- - lib/rasti/form/types/regexp.rb
175
- - lib/rasti/form/types/string.rb
176
- - lib/rasti/form/types/symbol.rb
177
- - lib/rasti/form/types/time.rb
178
- - lib/rasti/form/types/uuid.rb
179
164
  - lib/rasti/form/validable.rb
180
- - lib/rasti/form/version.rb
181
165
  - rasti-form.gemspec
182
166
  - spec/coverage_helper.rb
183
- - spec/form_spec.rb
184
167
  - spec/minitest_helper.rb
185
- - spec/types/array_spec.rb
186
- - spec/types/boolean_spec.rb
187
- - spec/types/enum_spec.rb
188
- - spec/types/float_spec.rb
189
- - spec/types/form_spec.rb
190
- - spec/types/hash_spec.rb
191
- - spec/types/integer_spec.rb
192
- - spec/types/io_spec.rb
193
- - spec/types/regexp_spec.rb
194
- - spec/types/string_spec.rb
195
- - spec/types/symbol_spec.rb
196
- - spec/types/time_spec.rb
197
- - spec/types/uuid_spec.rb
168
+ - spec/validations_spec.rb
198
169
  homepage: https://github.com/gabynaiman/rasti-form
199
170
  licenses:
200
171
  - MIT
@@ -214,25 +185,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
214
185
  - !ruby/object:Gem::Version
215
186
  version: '0'
216
187
  requirements: []
217
- rubyforge_project:
218
- rubygems_version: 2.6.8
188
+ rubygems_version: 3.0.6
219
189
  signing_key:
220
190
  specification_version: 4
221
191
  summary: Forms validations and type casting
222
192
  test_files:
223
193
  - spec/coverage_helper.rb
224
- - spec/form_spec.rb
225
194
  - spec/minitest_helper.rb
226
- - spec/types/array_spec.rb
227
- - spec/types/boolean_spec.rb
228
- - spec/types/enum_spec.rb
229
- - spec/types/float_spec.rb
230
- - spec/types/form_spec.rb
231
- - spec/types/hash_spec.rb
232
- - spec/types/integer_spec.rb
233
- - spec/types/io_spec.rb
234
- - spec/types/regexp_spec.rb
235
- - spec/types/string_spec.rb
236
- - spec/types/symbol_spec.rb
237
- - spec/types/time_spec.rb
238
- - 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,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
@@ -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