normalizy 1.6.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 +26 -6
- data/README.md +15 -4
- data/lib/normalizy/config.rb +3 -2
- 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/slug.rb +1 -1
- data/lib/normalizy/filters/strip.rb +2 -2
- data/lib/normalizy/filters/truncate.rb +16 -0
- data/lib/normalizy/rspec/matcher.rb +11 -3
- data/lib/normalizy/version.rb +1 -1
- data/lib/normalizy.rb +1 -1
- metadata +6 -105
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,23 @@
|
|
|
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
|
+
|
|
11
|
+
## v1.7.0
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
- Adds `truncate` filter; [#3](https://github.com/wbotelhos/normalizy/pull/3) by [rafaeldev](https://github.com/rafaeldev)
|
|
16
|
+
|
|
17
|
+
### Updates
|
|
18
|
+
|
|
19
|
+
- Adds RuboCop task on the CI;
|
|
20
|
+
|
|
1
21
|
## v1.6.0
|
|
2
22
|
|
|
3
23
|
### Fixes
|
|
@@ -9,13 +29,13 @@
|
|
|
9
29
|
- Adds Code Quality;
|
|
10
30
|
- Adds Test Coverage;
|
|
11
31
|
- Migrates the build to Github Actions;
|
|
12
|
-
- Removes Git dependency for build;
|
|
32
|
+
- Removes Git dependency for the build;
|
|
13
33
|
|
|
14
34
|
## v1.5.0
|
|
15
35
|
|
|
16
36
|
### Features
|
|
17
37
|
|
|
18
|
-
- Filter `date` now supports call object that
|
|
38
|
+
- Filter `date` now supports call object that responds to `beginning_of_day` or `end_of_day`;
|
|
19
39
|
|
|
20
40
|
## v1.4.0
|
|
21
41
|
|
|
@@ -39,19 +59,19 @@
|
|
|
39
59
|
|
|
40
60
|
### Fixes
|
|
41
61
|
|
|
42
|
-
- When
|
|
62
|
+
- When using `slug` filter the original values were not saved.
|
|
43
63
|
|
|
44
64
|
## v1.1.0
|
|
45
65
|
|
|
46
66
|
### Features
|
|
47
67
|
|
|
48
|
-
- Added `slug` filter with option to apply the value on other
|
|
68
|
+
- Added `slug` filter with the option to apply the value on other fields.
|
|
49
69
|
|
|
50
70
|
## v1.0.1
|
|
51
71
|
|
|
52
72
|
### Fixes
|
|
53
73
|
|
|
54
|
-
- When `type` options
|
|
74
|
+
- When `type` options were `cents` and had no decimal on the number, extra decimals were added.
|
|
55
75
|
|
|
56
76
|
## v1.0.0
|
|
57
77
|
|
|
@@ -73,7 +93,7 @@
|
|
|
73
93
|
### Updates
|
|
74
94
|
|
|
75
95
|
- `number` filter no more make cast automatically.
|
|
76
|
-
- `number` now accept `cast` options with method to be used on cast type;
|
|
96
|
+
- `number` now accept `cast` options with a method to be used on cast type;
|
|
77
97
|
|
|
78
98
|
### Features
|
|
79
99
|
|
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
|
|
|
@@ -406,6 +406,17 @@ normalizy :name, with: { strip: { side: :both } }
|
|
|
406
406
|
|
|
407
407
|
As you can see, the rules can be passed as Symbol/String or as Hash if it has options.
|
|
408
408
|
|
|
409
|
+
### Truncate
|
|
410
|
+
|
|
411
|
+
Remove excedent string part from a gived limit.
|
|
412
|
+
|
|
413
|
+
```ruby
|
|
414
|
+
normalizy :description, with: { truncate: { limit: 10 } }
|
|
415
|
+
|
|
416
|
+
'Once upon a time in a world far far away'
|
|
417
|
+
# 'Once upon '
|
|
418
|
+
```
|
|
419
|
+
|
|
409
420
|
## Multiple Filters
|
|
410
421
|
|
|
411
422
|
You can normalize with a couple of filters at once:
|
data/lib/normalizy/config.rb
CHANGED
|
@@ -20,7 +20,7 @@ module Normalizy
|
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
def initialize
|
|
23
|
-
@default_filters
|
|
23
|
+
@default_filters = {}
|
|
24
24
|
@normalizy_aliases = {}
|
|
25
25
|
|
|
26
26
|
@filters = {
|
|
@@ -29,7 +29,8 @@ module Normalizy
|
|
|
29
29
|
number: Normalizy::Filters::Number,
|
|
30
30
|
percent: Normalizy::Filters::Percent,
|
|
31
31
|
slug: Normalizy::Filters::Slug,
|
|
32
|
-
strip: Normalizy::Filters::Strip
|
|
32
|
+
strip: Normalizy::Filters::Strip,
|
|
33
|
+
truncate: Normalizy::Filters::Truncate,
|
|
33
34
|
}
|
|
34
35
|
end
|
|
35
36
|
end
|
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
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Normalizy
|
|
4
|
+
module Filters
|
|
5
|
+
module Truncate
|
|
6
|
+
module_function
|
|
7
|
+
|
|
8
|
+
def call(input, options = {})
|
|
9
|
+
return input unless options[:limit].is_a?(Integer)
|
|
10
|
+
return input unless input.is_a?(String)
|
|
11
|
+
|
|
12
|
+
input[0, options[:limit]]
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -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: pry-byebug
|
|
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: []
|
|
@@ -146,13 +47,14 @@ files:
|
|
|
146
47
|
- lib/normalizy/filters/percent.rb
|
|
147
48
|
- lib/normalizy/filters/slug.rb
|
|
148
49
|
- lib/normalizy/filters/strip.rb
|
|
50
|
+
- lib/normalizy/filters/truncate.rb
|
|
149
51
|
- lib/normalizy/rspec/matcher.rb
|
|
150
52
|
- lib/normalizy/version.rb
|
|
151
53
|
homepage: https://github.com/wbotelhos/normalizy
|
|
152
54
|
licenses:
|
|
153
55
|
- MIT
|
|
154
|
-
metadata:
|
|
155
|
-
|
|
56
|
+
metadata:
|
|
57
|
+
rubygems_mfa_required: 'true'
|
|
156
58
|
rdoc_options: []
|
|
157
59
|
require_paths:
|
|
158
60
|
- lib
|
|
@@ -167,8 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
167
69
|
- !ruby/object:Gem::Version
|
|
168
70
|
version: '0'
|
|
169
71
|
requirements: []
|
|
170
|
-
rubygems_version:
|
|
171
|
-
signing_key:
|
|
72
|
+
rubygems_version: 4.0.12
|
|
172
73
|
specification_version: 4
|
|
173
74
|
summary: Attribute normalizer for Rails.
|
|
174
75
|
test_files: []
|