formulario 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
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