formalism 0.4.0 → 0.5.1

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: d720c9642bb31c7c706c3945de0f043c6dcb593d5e509afe137b396d38b2c9a1
4
- data.tar.gz: 8b98535c509f4c4845542203a92e6093141c32f76f6ffc1da4b092ba668f5cb3
3
+ metadata.gz: 6602ff26f0ec729c7cb6fd37fa2c7b8897183c8f44437eb0ddebf24228e79592
4
+ data.tar.gz: e59eb7d592c7ecce60c9cb504f0bd2df8e30529f69b484105fa8153e6f906d8d
5
5
  SHA512:
6
- metadata.gz: 99427b0a3845b7be7d09a18ffc5c450613433ce19fa103e8e1cb3134cd795011e24f346145ebac5666f0f9b26cebfc85e43ac479fc8c6ef82b28e12e88483802
7
- data.tar.gz: a072477df6a7850b2309f14431b933ced7ddac1eeeef9c1aab27277e206182984cb792ad721a0c2e6d2aa2451b676d5771462288491dc4fad48b956605b96ac4
6
+ metadata.gz: c2e3792160e741752a5493a6bfdfba8bf32316816fa3633b7bc1f6ae2a26c3bcba84ff7384248c7caf3bab91435c9727962853c4b233ba7afc38d9da7155064e
7
+ data.tar.gz: 62080409f97ec8d5f713f621f35264f5697e6f4acae2e8ac192ece91d386a52e23e355ed75e557820de2c0529c9f5c63ed467f0fae6cca5dcac6d200144cebe4
data/CHANGELOG.md CHANGED
@@ -1,9 +1,30 @@
1
1
  # Changelog
2
2
 
3
- ## master (unreleased)
3
+ ## Unreleased
4
+
5
+ ## 0.5.1 (2022-09-24)
6
+
7
+ * Allow `gorilla_patch` version 5.
8
+
9
+ ## 0.5.0 (2022-09-24)
10
+
11
+ * Drop Ruby 2.5 support.
12
+ * Add Ruby 3.1 support.
13
+ * Add coercion to `Object`.
14
+ * Add coercion to `Class`.
15
+ * Update development dependencies.
16
+ * Resolve new offenses from RuboCop.
17
+ * Resolve Ruby warnings.
18
+ * Increase tests coverage to 100%.
19
+ * Add `bundle-audit` CI task.
20
+ * Update metadata in gemspec.
4
21
 
5
22
  ## 0.4.0 (2021-02-11)
6
23
 
24
+ * Support Ruby 3.
25
+ * Update development dependencies.
26
+ * Resolve new RuboCop offenses.
27
+
7
28
  ## 0.3.1 (2020-10-02)
8
29
 
9
30
  * Fix `Float` coercion to `BigDecimal`.
data/README.md CHANGED
@@ -1,11 +1,11 @@
1
1
  # Formalism
2
2
 
3
3
  [![Cirrus CI - Base Branch Build Status](https://img.shields.io/cirrus/github/AlexWayfer/formalism?style=flat-square)](https://cirrus-ci.com/github/AlexWayfer/formalism)
4
- [![Codecov branch](https://img.shields.io/codecov/c/github/AlexWayfer/formalism/master.svg?style=flat-square)](https://codecov.io/gh/AlexWayfer/formalism)
4
+ [![Codecov branch](https://img.shields.io/codecov/c/github/AlexWayfer/formalism/main.svg?style=flat-square)](https://codecov.io/gh/AlexWayfer/formalism)
5
5
  [![Code Climate](https://img.shields.io/codeclimate/maintainability/AlexWayfer/formalism.svg?style=flat-square)](https://codeclimate.com/github/AlexWayfer/formalism)
6
6
  [![Depfu](https://img.shields.io/depfu/AlexWayfer/benchmark_toys?style=flat-square)](https://depfu.com/repos/github/AlexWayfer/formalism)
7
- [![Inline docs](https://inch-ci.org/github/AlexWayfer/formalism.svg?branch=master)](https://inch-ci.org/github/AlexWayfer/formalism)
8
- [![license](https://img.shields.io/github/license/AlexWayfer/formalism.svg?style=flat-square)](https://github.com/AlexWayfer/formalism/blob/master/LICENSE.txt)
7
+ [![Inline docs](https://inch-ci.org/github/AlexWayfer/formalism.svg?branch=main)](https://inch-ci.org/github/AlexWayfer/formalism)
8
+ [![license](https://img.shields.io/github/license/AlexWayfer/formalism.svg?style=flat-square)](https://github.com/AlexWayfer/formalism/blob/main/LICENSE.txt)
9
9
  [![Gem](https://img.shields.io/gem/v/formalism.svg?style=flat-square)](https://rubygems.org/gems/formalism)
10
10
 
11
11
  Ruby gem for forms with validations and nesting.
@@ -8,12 +8,13 @@ module Formalism
8
8
  def initialize(value, *)
9
9
  @value = value
10
10
 
11
- type_name = self.class.name.split('::')[3..-1].join('::')
11
+ type_name = self.class.name.split('::')[3..].join('::')
12
12
 
13
13
  @type =
14
- if Object.const_defined?(type_name, false)
15
- then Object.const_get(type_name, false)
16
- else type_name
14
+ if ::Object.const_defined?(type_name, false)
15
+ ::Object.const_get(type_name, false)
16
+ else
17
+ type_name
17
18
  end
18
19
  end
19
20
 
@@ -26,7 +27,7 @@ module Formalism
26
27
  private
27
28
 
28
29
  def should_be_coreced?
29
- @type != 'Base' && !(@type.is_a?(Class) && @value.is_a?(@type))
30
+ @type != 'Base' && !(@type.is_a?(::Class) && @value.is_a?(@type))
30
31
  end
31
32
  end
32
33
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Formalism
4
+ class Form < Action
5
+ class Coercion
6
+ ## Class for coercion to Class
7
+ class Class < Base
8
+ private
9
+
10
+ def execute
11
+ return @value if @value.is_a? Class
12
+
13
+ return if @value.to_s.empty?
14
+
15
+ ::Object.const_get(@value)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Formalism
4
+ class Form < Action
5
+ class Coercion
6
+ ## Class for coercion to Object (formally everything is Object)
7
+ class Object < Base
8
+ private
9
+
10
+ def execute
11
+ ## There are other `is_a?` checks, fuck it
12
+ # return unless @value.respond_to? :is_a? ## BasicObject
13
+
14
+ @value if @value.is_a? ::Object
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -38,8 +38,7 @@ module Formalism
38
38
 
39
39
  def nested(name, form = nil, **options)
40
40
  unless form || options.key?(:initialize)
41
- raise ArgumentError, 'Neither form class nor initialize block ' \
42
- 'is not present'
41
+ raise ArgumentError, 'Neither form class nor initialize block is not present'
43
42
  end
44
43
 
45
44
  fields_and_nested_forms[name] = options.merge(form: form)
@@ -132,9 +131,7 @@ module Formalism
132
131
  for_merge ? select_for_merge(:nested_forms) : nested_forms
133
132
 
134
133
  fields(for_merge: for_merge).merge(
135
- merging_nested_forms
136
- .map { |name, _nested_form| [name, public_send(name)] }
137
- .to_h
134
+ merging_nested_forms.to_h { |name, _nested_form| [name, public_send(name)] }
138
135
  )
139
136
  end
140
137
 
@@ -52,7 +52,9 @@ module Formalism
52
52
  end
53
53
 
54
54
  def fill_nested_form(name, options)
55
- return unless (form = initialize_nested_form(name, options))
55
+ args = args_for_nested_form(name, options)
56
+
57
+ return unless (form = initialize_nested_form(options, args))
56
58
 
57
59
  nested_forms[name] = form
58
60
  end
@@ -61,19 +63,24 @@ module Formalism
61
63
  default.is_a?(Proc) ? instance_exec(&default) : default
62
64
  end
63
65
 
64
- def initialize_nested_form(name, options)
65
- args =
66
- if @params.key?(name) then [send("params_for_nested_#{name}")]
67
- elsif instance_respond_to?(name) then [instance_public_send(name)]
68
- elsif options.key?(:default) then [process_default(options[:default])]
69
- else []
70
- end
71
-
66
+ def initialize_nested_form(options, args)
72
67
  result =
73
68
  instance_exec options[:form], &options.fetch(:initialize, ->(form) { form.new(*args) })
74
69
  result.runnable = false unless runnable
75
70
  result
76
71
  end
72
+
73
+ def args_for_nested_form(name, options)
74
+ if @params.key?(name)
75
+ [send("params_for_nested_#{name}")]
76
+ elsif instance_respond_to?(name)
77
+ [instance_public_send(name)]
78
+ elsif options.key?(:default)
79
+ [process_default(options[:default])]
80
+ else
81
+ []
82
+ end
83
+ end
77
84
  end
78
85
 
79
86
  private_constant :Filling
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Formalism
4
- VERSION = '0.4.0'
4
+ VERSION = '0.5.1'
5
5
  end
metadata CHANGED
@@ -1,29 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: formalism
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Popov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-10 00:00:00.000000000 Z
11
+ date: 2022-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gorilla_patch
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '4'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '6'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: '4'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '6'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: module_methods
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -67,47 +73,47 @@ dependencies:
67
73
  - !ruby/object:Gem::Version
68
74
  version: '2.0'
69
75
  - !ruby/object:Gem::Dependency
70
- name: gem_toys
76
+ name: bundler-audit
71
77
  requirement: !ruby/object:Gem::Requirement
72
78
  requirements:
73
79
  - - "~>"
74
80
  - !ruby/object:Gem::Version
75
- version: 0.6.0
81
+ version: 0.9.0
76
82
  type: :development
77
83
  prerelease: false
78
84
  version_requirements: !ruby/object:Gem::Requirement
79
85
  requirements:
80
86
  - - "~>"
81
87
  - !ruby/object:Gem::Version
82
- version: 0.6.0
88
+ version: 0.9.0
83
89
  - !ruby/object:Gem::Dependency
84
- name: toys
90
+ name: gem_toys
85
91
  requirement: !ruby/object:Gem::Requirement
86
92
  requirements:
87
93
  - - "~>"
88
94
  - !ruby/object:Gem::Version
89
- version: 0.11.0
95
+ version: 0.12.1
90
96
  type: :development
91
97
  prerelease: false
92
98
  version_requirements: !ruby/object:Gem::Requirement
93
99
  requirements:
94
100
  - - "~>"
95
101
  - !ruby/object:Gem::Version
96
- version: 0.11.0
102
+ version: 0.12.1
97
103
  - !ruby/object:Gem::Dependency
98
- name: codecov
104
+ name: toys
99
105
  requirement: !ruby/object:Gem::Requirement
100
106
  requirements:
101
107
  - - "~>"
102
108
  - !ruby/object:Gem::Version
103
- version: 0.4.2
109
+ version: 0.13.0
104
110
  type: :development
105
111
  prerelease: false
106
112
  version_requirements: !ruby/object:Gem::Requirement
107
113
  requirements:
108
114
  - - "~>"
109
115
  - !ruby/object:Gem::Version
110
- version: 0.4.2
116
+ version: 0.13.0
111
117
  - !ruby/object:Gem::Dependency
112
118
  name: rspec
113
119
  requirement: !ruby/object:Gem::Requirement
@@ -136,20 +142,34 @@ dependencies:
136
142
  - - "~>"
137
143
  - !ruby/object:Gem::Version
138
144
  version: 0.21.2
145
+ - !ruby/object:Gem::Dependency
146
+ name: simplecov-cobertura
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '2.1'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '2.1'
139
159
  - !ruby/object:Gem::Dependency
140
160
  name: rubocop
141
161
  requirement: !ruby/object:Gem::Requirement
142
162
  requirements:
143
163
  - - "~>"
144
164
  - !ruby/object:Gem::Version
145
- version: '1.4'
165
+ version: 1.36.0
146
166
  type: :development
147
167
  prerelease: false
148
168
  version_requirements: !ruby/object:Gem::Requirement
149
169
  requirements:
150
170
  - - "~>"
151
171
  - !ruby/object:Gem::Version
152
- version: '1.4'
172
+ version: 1.36.0
153
173
  - !ruby/object:Gem::Dependency
154
174
  name: rubocop-performance
155
175
  requirement: !ruby/object:Gem::Requirement
@@ -198,10 +218,12 @@ files:
198
218
  - lib/formalism/form/coercion/array.rb
199
219
  - lib/formalism/form/coercion/bigdecimal.rb
200
220
  - lib/formalism/form/coercion/boolean.rb
221
+ - lib/formalism/form/coercion/class.rb
201
222
  - lib/formalism/form/coercion/date.rb
202
223
  - lib/formalism/form/coercion/float.rb
203
224
  - lib/formalism/form/coercion/hash.rb
204
225
  - lib/formalism/form/coercion/integer.rb
226
+ - lib/formalism/form/coercion/object.rb
205
227
  - lib/formalism/form/coercion/string.rb
206
228
  - lib/formalism/form/coercion/symbol.rb
207
229
  - lib/formalism/form/coercion/time.rb
@@ -214,9 +236,13 @@ homepage: https://github.com/AlexWayfer/formalism
214
236
  licenses:
215
237
  - MIT
216
238
  metadata:
217
- source_code_uri: https://github.com/AlexWayfer/formalism
239
+ bug_tracker_uri: https://github.com/AlexWayfer/formalism/issues
240
+ changelog_uri: https://github.com/AlexWayfer/formalism/blob/v0.5.1/CHANGELOG.md
241
+ documentation_uri: http://www.rubydoc.info/gems/formalism/0.5.1
218
242
  homepage_uri: https://github.com/AlexWayfer/formalism
219
- changelog_uri: https://github.com/AlexWayfer/formalism/blob/master/CHANGELOG.md
243
+ rubygems_mfa_required: 'true'
244
+ source_code_uri: https://github.com/AlexWayfer/formalism
245
+ wiki_uri: https://github.com/AlexWayfer/formalism/wiki
220
246
  post_install_message:
221
247
  rdoc_options: []
222
248
  require_paths:
@@ -225,7 +251,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
225
251
  requirements:
226
252
  - - ">="
227
253
  - !ruby/object:Gem::Version
228
- version: '2.5'
254
+ version: '2.6'
229
255
  - - "<"
230
256
  - !ruby/object:Gem::Version
231
257
  version: '4'
@@ -235,7 +261,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
235
261
  - !ruby/object:Gem::Version
236
262
  version: '0'
237
263
  requirements: []
238
- rubygems_version: 3.2.3
264
+ rubygems_version: 3.3.7
239
265
  signing_key:
240
266
  specification_version: 4
241
267
  summary: Forms with input data validations and nesting