formulario 0.1.3 → 0.1.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 43e7e8ebe1194dd3fa79eff4b7e39912f5317449fb32b5ed295702a4a97c1d4e
4
- data.tar.gz: f7ca81de7f65724ec3fda76f7fe065a55b364fb58bd97f25a3aee7c5a0616198
3
+ metadata.gz: 657eaba8043eef7c26eac89b91abb56d349f59999047792c0e9757039f1475c2
4
+ data.tar.gz: 87ce867672a70a3cdf0b429f848ff48d76157033932afc9086dcbaf9a5abf01b
5
5
  SHA512:
6
- metadata.gz: 3f080136b212a227067d474c84f0b5b5ade318115b66ad950822a3c2c7da9e65a330b2141c4999cb569d65130de70d968ef2161a2eb68a1dd953ab7cea0b3aea
7
- data.tar.gz: 815b0224ea87ced887e7b916f598dd9bbabe344f307076874de2748684133bd5328cd83fa666c52dd5da8ea3faf696c18a633cdfc054280862cd4c65b135bb6f
6
+ metadata.gz: 6f629959e95b64de4dd4082856660b525b845864577253bfd7acc25a7905372b65803e3851e4f8f4d0057dcb43255d064cdf3263559b95fc03c560aa49e634dd
7
+ data.tar.gz: a408b9e91a9be3c29047ce3fb50b17693f4fa62087f874a4e739641d1e9cb57f027fefbe5716e1695f770be32e703a665a08c979482cb9c4f59de2d17b27e492
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- formulario (0.1.3)
4
+ formulario (0.1.4)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -19,21 +19,21 @@ GEM
19
19
  pry-byebug (3.7.0)
20
20
  byebug (~> 11.0)
21
21
  pry (~> 0.10)
22
- rake (10.5.0)
23
- rspec (3.8.0)
24
- rspec-core (~> 3.8.0)
25
- rspec-expectations (~> 3.8.0)
26
- rspec-mocks (~> 3.8.0)
27
- rspec-core (3.8.2)
28
- rspec-support (~> 3.8.0)
29
- rspec-expectations (3.8.4)
22
+ rake (13.0.0)
23
+ rspec (3.9.0)
24
+ rspec-core (~> 3.9.0)
25
+ rspec-expectations (~> 3.9.0)
26
+ rspec-mocks (~> 3.9.0)
27
+ rspec-core (3.9.0)
28
+ rspec-support (~> 3.9.0)
29
+ rspec-expectations (3.9.0)
30
30
  diff-lcs (>= 1.2.0, < 2.0)
31
- rspec-support (~> 3.8.0)
32
- rspec-mocks (3.8.1)
31
+ rspec-support (~> 3.9.0)
32
+ rspec-mocks (3.9.0)
33
33
  diff-lcs (>= 1.2.0, < 2.0)
34
- rspec-support (~> 3.8.0)
35
- rspec-support (3.8.2)
36
- simplecov (0.17.0)
34
+ rspec-support (~> 3.9.0)
35
+ rspec-support (3.9.0)
36
+ simplecov (0.17.1)
37
37
  docile (~> 1.1)
38
38
  json (>= 1.8, < 3)
39
39
  simplecov-html (~> 0.10.0)
@@ -43,13 +43,13 @@ PLATFORMS
43
43
  ruby
44
44
 
45
45
  DEPENDENCIES
46
- awesome_print
47
- bundler (~> 2.0)
46
+ awesome_print (~> 1.8.0)
47
+ bundler
48
48
  formulario!
49
- pry-byebug
50
- rake (~> 10.0)
51
- rspec (~> 3.0)
52
- simplecov
49
+ pry-byebug (~> 3.7.0)
50
+ rake (~> 13.0.0)
51
+ rspec (~> 3.9.0)
52
+ simplecov (~> 0.17.1)
53
53
 
54
54
  BUNDLED WITH
55
55
  2.0.2
@@ -26,10 +26,10 @@ Gem::Specification.new do |spec|
26
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
27
  spec.require_paths = ["lib"]
28
28
 
29
- spec.add_development_dependency "bundler", "~> 2.0"
30
- spec.add_development_dependency "rake", "~> 10.0"
31
- spec.add_development_dependency "rspec", "~> 3.0"
32
- spec.add_development_dependency "awesome_print"
33
- spec.add_development_dependency "pry-byebug"
34
- spec.add_development_dependency "simplecov"
29
+ spec.add_development_dependency "bundler"
30
+ spec.add_development_dependency "rake", "~> 13.0.0"
31
+ spec.add_development_dependency "rspec", "~> 3.9.0"
32
+ spec.add_development_dependency "awesome_print", "~> 1.8.0"
33
+ spec.add_development_dependency "pry-byebug", "~> 3.7.0"
34
+ spec.add_development_dependency "simplecov", "~> 0.17.1"
35
35
  end
@@ -18,4 +18,6 @@ require "formulario/fields/form_field"
18
18
 
19
19
  require "formulario/fields/id"
20
20
 
21
+ require "formulario/fields/unvalidated_field"
22
+
21
23
  require "formulario/fields/field"
@@ -29,11 +29,11 @@ module Formulario
29
29
  end
30
30
 
31
31
  def self.type_for(field_type)
32
- type_for = TYPES.fetch(field_type) { field_type }
33
- if type_for < ::Formulario::Form
34
- FormField[type_for]
32
+ type = TYPES.fetch(field_type) { field_type }
33
+ if type < ::Formulario::Form
34
+ FormField[type]
35
35
  else
36
- type_for
36
+ type
37
37
  end
38
38
  end
39
39
 
@@ -77,13 +77,5 @@ module Formulario
77
77
  @raw_value = raw_value
78
78
  freeze
79
79
  end
80
-
81
- # TODO: Extract field types
82
- # TODO: Add
83
- # Date
84
- # Time
85
- # DateTime
86
- # Boolean
87
- # Boolean
88
80
  end
89
81
  end
@@ -8,6 +8,7 @@ module Formulario
8
8
  rescue ArgumentError, TypeError => e
9
9
  ExceptionalValue.new(raw_value, reasons: ['needs to represent an integer'])
10
10
  end
11
+
11
12
  end
12
13
  end
13
14
  end
@@ -0,0 +1,79 @@
1
+ module Formulario
2
+ class Field
3
+ class UnvalidatedField
4
+ attr_accessor :field_name
5
+
6
+ attr_accessor :value
7
+ attr_accessor :field_type
8
+ attr_accessor :default
9
+ attr_accessor :validators
10
+
11
+ attr_accessor :form
12
+
13
+ def initialize(
14
+ field_name: ,
15
+
16
+ value: nil,
17
+ field_type: Field,
18
+ default: Field.type_for(field_type).default,
19
+ validators: []
20
+ )
21
+
22
+
23
+ @field_name = field_name
24
+
25
+ @field_type = field_type
26
+ @default = default
27
+ @validators = validators
28
+
29
+ end
30
+
31
+ def validate(validator=Undefined,
32
+ message: Undefined, &validation_block)
33
+
34
+ validation_function = case
35
+ when block_given?
36
+ validation_block
37
+ when validator.is_a?(Symbol)
38
+ validator
39
+ when validator.is_a?(::Formulario::Validator)
40
+ validator
41
+ end
42
+
43
+ validators << {
44
+ validator: validation_function,
45
+ message: message,
46
+ }
47
+ end
48
+
49
+ def validate!(form)
50
+ self.form = form
51
+
52
+ validators.inject(field_type.for(value.value)) do |current_value, validator_hash|
53
+ validator_block = case validator_hash[:validator]
54
+ when ::Formulario::Validator
55
+ validator_hash[:validator]
56
+ when Symbol
57
+ ::Formulario::Validator.new(&value.method(validator_hash[:validator]))
58
+ when Proc
59
+ ::Formulario::Validator.new(&validator_hash[:validator])
60
+ end
61
+
62
+ if instance_exec(value: value.value, object: self, field_name: field_name, &validator_block.to_proc).valid?
63
+ current_value
64
+ else
65
+ message = if validator_hash[:validator].is_a?(::Formulario::Validator)
66
+ validator_hash[:validator].message
67
+ end
68
+
69
+ ::Formulario::Field::ExceptionalValue
70
+ .new(current_value,
71
+ reasons: message || validator_hash[:message])
72
+ end
73
+ end
74
+
75
+ end
76
+
77
+ end
78
+ end
79
+ end
@@ -14,7 +14,7 @@ module Formulario
14
14
 
15
15
  def self.default
16
16
  params = __fields.each_with_object({}) { |field, res|
17
- default_value = field.last[:default]
17
+ default_value = field.last.default
18
18
  res[field.first] = default_value.is_a?(Proc) ? nil : default_value
19
19
  }
20
20
 
@@ -30,18 +30,18 @@ module Formulario
30
30
  field_name = field_info.first
31
31
  options = field_info.last
32
32
 
33
- res[field_name] = options[:value].value
33
+ res[field_name] = options.value.value
34
34
  }
35
35
  end
36
36
 
37
37
  def fields
38
38
  @fields ||= __fields.each_with_object({}) { |field, result|
39
- result[field.first] = field.last[:value]
39
+ result[field.first] = field.last.value
40
40
  }
41
41
  end
42
42
 
43
43
  def valid?
44
- __fields.none? { |_, value:, **options| value.exceptional? }
44
+ __fields.none? { |_, field| field.value.exceptional? }
45
45
  end
46
46
 
47
47
  def error_fields
@@ -76,13 +76,15 @@ module Formulario
76
76
  field_type=Field,
77
77
  default: Field.type_for(field_type).default)
78
78
 
79
- __fields[field_name.to_sym] = {
80
- default: default,
79
+ __fields[field_name.to_sym] = Field::UnvalidatedField.new(
80
+ field_name: field_name,
81
+ field_type: Field.type_for(field_type),
82
+ default: default,
81
83
  validators: [],
82
- }
84
+ )
83
85
 
84
86
  define_method(field_name) do
85
- __fields.dig(field_name.to_sym, :value)
87
+ __fields[field_name.to_sym].value
86
88
  end
87
89
 
88
90
  define_method("set_#{field_name}") do |raw_value|
@@ -92,7 +94,7 @@ module Formulario
92
94
  end
93
95
 
94
96
  define_method("#{field_name}=") do |raw_value|
95
- __fields[field_name.to_sym][:value] = Field.type_for(field_type).for(
97
+ __fields[field_name.to_sym].value = Field.type_for(field_type).for(
96
98
  send("set_#{field_name}", raw_value)
97
99
  )
98
100
  end
@@ -100,48 +102,13 @@ module Formulario
100
102
 
101
103
  def self.validate(field_name, validator=Undefined,
102
104
  message: Undefined, &validation_block)
103
-
104
- validation_function = case
105
- when block_given?
106
- validation_block
107
- when validator.is_a?(Symbol)
108
- validator
109
- when validator.is_a?(::Formulario::Validator)
110
- validator
111
- end
112
-
113
- __fields[field_name][:validators] << {
114
- validator: validation_function,
115
- message: message,
116
- }
105
+ __fields[field_name]
106
+ .validate(validator, message: message, &validation_block)
117
107
  end
118
108
 
119
109
  def __validate!
120
- __fields.each do |field_name, validators:, value:, **options|
121
- __fields[field_name][:value] =
122
- validators.inject(value) do |current_value, validator_hash|
123
-
124
- validator_block = case validator_hash[:validator]
125
- when ::Formulario::Validator
126
- validator_hash[:validator]
127
- when Symbol
128
- ::Formulario::Validator.new(&method(validator_hash[:validator]))
129
- when Proc
130
- ::Formulario::Validator.new(&validator_hash[:validator])
131
- end
132
-
133
- if instance_exec(value: value.value, object: self, field_name: field_name, &validator_block.to_proc).valid?
134
- current_value
135
- else
136
- message = if validator_hash[:validator].is_a?(::Formulario::Validator)
137
- validator_hash[:validator].message
138
- end
139
-
140
- ::Formulario::Field::ExceptionalValue
141
- .new(current_value,
142
- reasons: message || validator_hash[:message])
143
- end
144
- end
110
+ __fields.each do |field_name, unvalidated_field|
111
+ __fields[field_name].value = unvalidated_field.validate!(self)
145
112
  end
146
113
  end
147
114
  end
@@ -1,3 +1,3 @@
1
1
  module Formulario
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
metadata CHANGED
@@ -1,99 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: formulario
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Federico Iachetti
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-08-28 00:00:00.000000000 Z
11
+ date: 2019-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '2.0'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: 13.0.0
34
34
  type: :development
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: '10.0'
40
+ version: 13.0.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.0'
47
+ version: 3.9.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: '3.0'
54
+ version: 3.9.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: awesome_print
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 1.8.0
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: 1.8.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: pry-byebug
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 3.7.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: 3.7.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: simplecov
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: 0.17.1
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">="
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: 0.17.1
97
97
  description: Create form objects for your project. This forms are framework agnostic.
98
98
  email:
99
99
  - iachetti.federico@gmail.com
@@ -128,6 +128,7 @@ files:
128
128
  - lib/formulario/fields/integer.rb
129
129
  - lib/formulario/fields/string.rb
130
130
  - lib/formulario/fields/time.rb
131
+ - lib/formulario/fields/unvalidated_field.rb
131
132
  - lib/formulario/form.rb
132
133
  - lib/formulario/utils.rb
133
134
  - lib/formulario/validator.rb