normalizy 1.7.0 → 2.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/README.md +4 -4
- data/lib/normalizy/config.rb +1 -1
- data/lib/normalizy/extensions.rb +25 -23
- data/lib/normalizy/filters/date.rb +4 -2
- data/lib/normalizy/filters/number.rb +1 -1
- data/lib/normalizy/filters/strip.rb +1 -1
- data/lib/normalizy/rspec/matcher.rb +11 -3
- data/lib/normalizy/version.rb +1 -1
- data/lib/normalizy.rb +1 -1
- metadata +3 -104
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7fbc57100ff4a77fb63503844a16059b78537836f4df58f0f64127d2bcfe3270
|
|
4
|
+
data.tar.gz: f0ac58e5e468721dc2ab116a0550b542c495e073d9315b420f8bddb754b327c2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f92bae33a40563537d7b6637118dbdf5b960b979a2941e6aa0859ad738a9dda2db74e1b444de3853ff61c2a4695866ad46efc96d3b34b3088bf16a6e6c87d124
|
|
7
|
+
data.tar.gz: cbf6c06467360321fa144d1800258d4af50215b1b661e9e2056ab1d0c17b712e137a4167d82bb9534030a9f35605faa4af2a140c09e6b2121f42e38d3b7a7560
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
## v2.0.0
|
|
2
|
+
|
|
3
|
+
### Break Changes
|
|
4
|
+
|
|
5
|
+
- Drops support for Ruby < 3.3;
|
|
6
|
+
|
|
7
|
+
### Fixes
|
|
8
|
+
|
|
9
|
+
- `date` filter now returns `nil` explicitly on invalid date to avoid Rails 8 compatibility issue where `errors.add` returns the added `ActiveModel::Error` object instead of `nil`;
|
|
10
|
+
|
|
1
11
|
## v1.7.0
|
|
2
12
|
|
|
3
13
|
### Features
|
data/README.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Normalizy
|
|
2
2
|
|
|
3
|
-
[](https://github.com/wbotelhos/normalizy/actions/workflows/tests.yml)
|
|
4
4
|
[](https://badge.fury.io/rb/normalizy)
|
|
5
|
-
[](https://
|
|
5
|
+
[](https://qlty.sh/gh/wbotelhos/projects/normalizy)
|
|
6
|
+
[](https://codecov.io/gh/wbotelhos/normalizy)
|
|
7
|
+
[](https://github.com/sponsors/wbotelhos)
|
|
8
8
|
|
|
9
9
|
Attribute normalizer for Rails.
|
|
10
10
|
|
data/lib/normalizy/config.rb
CHANGED
data/lib/normalizy/extensions.rb
CHANGED
|
@@ -8,11 +8,11 @@ module Normalizy
|
|
|
8
8
|
private
|
|
9
9
|
|
|
10
10
|
def extract_filter(rule, rule_options, attribute, filters: Normalizy.config.filters)
|
|
11
|
-
options = rule_options.merge(attribute
|
|
11
|
+
options = rule_options.merge(attribute:, object: self)
|
|
12
12
|
|
|
13
13
|
return [filters[rule] || rule, options] unless rule.is_a?(Hash)
|
|
14
14
|
|
|
15
|
-
filter
|
|
15
|
+
filter = filters[rule.keys.first] || rule
|
|
16
16
|
options = (rule.values.first || {}).merge(options)
|
|
17
17
|
|
|
18
18
|
[filter, options]
|
|
@@ -58,7 +58,7 @@ module Normalizy
|
|
|
58
58
|
|
|
59
59
|
unalias_for(rule_name).each do |unaliased_rule|
|
|
60
60
|
filter, filter_options = extract_filter(unaliased_rule, rule_options, attribute)
|
|
61
|
-
result
|
|
61
|
+
result = extract_value(result, filter, filter_options, block)
|
|
62
62
|
end
|
|
63
63
|
end
|
|
64
64
|
|
|
@@ -75,36 +75,38 @@ module Normalizy
|
|
|
75
75
|
|
|
76
76
|
def normalizy(*args, &block)
|
|
77
77
|
options = args.extract_options!
|
|
78
|
-
rules
|
|
78
|
+
rules = options[:with]
|
|
79
79
|
|
|
80
80
|
self.normalizy_rules ||= {}
|
|
81
81
|
|
|
82
82
|
args.each do |field|
|
|
83
83
|
normalizy_rules[field] ||= []
|
|
84
|
-
normalizy_rules[field] << { block
|
|
84
|
+
normalizy_rules[field] << { block:, options: options.except(:with), rules: }
|
|
85
85
|
end
|
|
86
86
|
|
|
87
|
-
prepend
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
87
|
+
prepend(
|
|
88
|
+
Module.new do
|
|
89
|
+
args.each do |attribute|
|
|
90
|
+
define_method :"#{attribute}=" do |value|
|
|
91
|
+
result = normalizy!(
|
|
92
|
+
attribute:,
|
|
93
|
+
block:,
|
|
94
|
+
options: options.except(:with),
|
|
95
|
+
rules:,
|
|
96
|
+
value:
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
if rules.is_a?(Hash) && rules.dig(:slug, :to).present?
|
|
100
|
+
write_attribute rules.dig(:slug, :to), result
|
|
101
|
+
|
|
102
|
+
super(value)
|
|
103
|
+
else
|
|
104
|
+
super(result)
|
|
105
|
+
end
|
|
104
106
|
end
|
|
105
107
|
end
|
|
106
108
|
end
|
|
107
|
-
|
|
109
|
+
)
|
|
108
110
|
end
|
|
109
111
|
end
|
|
110
112
|
end
|
|
@@ -14,11 +14,13 @@ module Normalizy
|
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
input = input.beginning_of_day if options[:adjust] == :begin && input.respond_to?(:beginning_of_day)
|
|
17
|
-
input = input.end_of_day
|
|
17
|
+
input = input.end_of_day if options[:adjust] == :end && input.respond_to?(:end_of_day)
|
|
18
18
|
|
|
19
19
|
input
|
|
20
20
|
rescue ArgumentError
|
|
21
|
-
options[:object].errors.add
|
|
21
|
+
options[:object].errors.add(options[:attribute], error_message(input, options))
|
|
22
|
+
|
|
23
|
+
nil
|
|
22
24
|
end
|
|
23
25
|
|
|
24
26
|
private
|
|
@@ -43,7 +43,7 @@ module Normalizy
|
|
|
43
43
|
|
|
44
44
|
return false if options.blank?
|
|
45
45
|
|
|
46
|
-
options = default_rules if options.
|
|
46
|
+
options = default_rules if options.filter_map { |option| option[:rules] }.blank?
|
|
47
47
|
|
|
48
48
|
return false if options.blank?
|
|
49
49
|
|
|
@@ -98,6 +98,14 @@ module Normalizy
|
|
|
98
98
|
@to.nil? ? :nil : %("#{@to}")
|
|
99
99
|
end
|
|
100
100
|
|
|
101
|
+
def format_hash(hash)
|
|
102
|
+
pairs = hash.map do |k, v|
|
|
103
|
+
"#{k}: #{v.is_a?(Hash) ? format_hash(v) : v.inspect}"
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
"{#{pairs.join(', ')}}"
|
|
107
|
+
end
|
|
108
|
+
|
|
101
109
|
def with_expected
|
|
102
110
|
@with
|
|
103
111
|
end
|
|
@@ -105,7 +113,7 @@ module Normalizy
|
|
|
105
113
|
def with_value
|
|
106
114
|
options = @subject.class.normalizy_rules[@attribute]
|
|
107
115
|
|
|
108
|
-
return :nil
|
|
116
|
+
return :nil if options.nil?
|
|
109
117
|
return %("#{options}") if options.blank?
|
|
110
118
|
|
|
111
119
|
result = options.map do |option|
|
|
@@ -113,7 +121,7 @@ module Normalizy
|
|
|
113
121
|
|
|
114
122
|
return :nil if rules.nil?
|
|
115
123
|
|
|
116
|
-
rules.presence || %("#{rules}")
|
|
124
|
+
rules.is_a?(Hash) ? format_hash(rules) : rules.presence || %("#{rules}")
|
|
117
125
|
end
|
|
118
126
|
|
|
119
127
|
result.join ', '
|
data/lib/normalizy/version.rb
CHANGED
data/lib/normalizy.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: normalizy
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Washington Botelho
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: activerecord
|
|
@@ -24,104 +23,6 @@ dependencies:
|
|
|
24
23
|
- - ">="
|
|
25
24
|
- !ruby/object:Gem::Version
|
|
26
25
|
version: '4.1'
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: codecov
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - ">="
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '0'
|
|
34
|
-
type: :development
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - ">="
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '0'
|
|
41
|
-
- !ruby/object:Gem::Dependency
|
|
42
|
-
name: debug
|
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
|
44
|
-
requirements:
|
|
45
|
-
- - ">="
|
|
46
|
-
- !ruby/object:Gem::Version
|
|
47
|
-
version: '0'
|
|
48
|
-
type: :development
|
|
49
|
-
prerelease: false
|
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
-
requirements:
|
|
52
|
-
- - ">="
|
|
53
|
-
- !ruby/object:Gem::Version
|
|
54
|
-
version: '0'
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: rspec-rails
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - ">="
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: '0'
|
|
62
|
-
type: :development
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - ">="
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '0'
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: rubocop-performance
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - ">="
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '0'
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - ">="
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '0'
|
|
83
|
-
- !ruby/object:Gem::Dependency
|
|
84
|
-
name: rubocop-rails
|
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - ">="
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: '0'
|
|
90
|
-
type: :development
|
|
91
|
-
prerelease: false
|
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
-
requirements:
|
|
94
|
-
- - ">="
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: '0'
|
|
97
|
-
- !ruby/object:Gem::Dependency
|
|
98
|
-
name: rubocop-rspec
|
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
|
100
|
-
requirements:
|
|
101
|
-
- - ">="
|
|
102
|
-
- !ruby/object:Gem::Version
|
|
103
|
-
version: '0'
|
|
104
|
-
type: :development
|
|
105
|
-
prerelease: false
|
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
-
requirements:
|
|
108
|
-
- - ">="
|
|
109
|
-
- !ruby/object:Gem::Version
|
|
110
|
-
version: '0'
|
|
111
|
-
- !ruby/object:Gem::Dependency
|
|
112
|
-
name: sqlite3
|
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
|
114
|
-
requirements:
|
|
115
|
-
- - ">="
|
|
116
|
-
- !ruby/object:Gem::Version
|
|
117
|
-
version: '0'
|
|
118
|
-
type: :development
|
|
119
|
-
prerelease: false
|
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
-
requirements:
|
|
122
|
-
- - ">="
|
|
123
|
-
- !ruby/object:Gem::Version
|
|
124
|
-
version: '0'
|
|
125
26
|
description: Attribute normalizer for Rails.
|
|
126
27
|
email: wbotelhos@gmail.com
|
|
127
28
|
executables: []
|
|
@@ -154,7 +55,6 @@ licenses:
|
|
|
154
55
|
- MIT
|
|
155
56
|
metadata:
|
|
156
57
|
rubygems_mfa_required: 'true'
|
|
157
|
-
post_install_message:
|
|
158
58
|
rdoc_options: []
|
|
159
59
|
require_paths:
|
|
160
60
|
- lib
|
|
@@ -169,8 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
169
69
|
- !ruby/object:Gem::Version
|
|
170
70
|
version: '0'
|
|
171
71
|
requirements: []
|
|
172
|
-
rubygems_version:
|
|
173
|
-
signing_key:
|
|
72
|
+
rubygems_version: 4.0.12
|
|
174
73
|
specification_version: 4
|
|
175
74
|
summary: Attribute normalizer for Rails.
|
|
176
75
|
test_files: []
|