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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ee7f65965cec5c289729431b01fcf23be051784ec7b18bf9b71ae00c698d9d93
4
- data.tar.gz: ad9ce5473030dec2eae92783feecf6895e8e5e841bee48b5af46f4b6579dcc12
3
+ metadata.gz: 7fbc57100ff4a77fb63503844a16059b78537836f4df58f0f64127d2bcfe3270
4
+ data.tar.gz: f0ac58e5e468721dc2ab116a0550b542c495e073d9315b420f8bddb754b327c2
5
5
  SHA512:
6
- metadata.gz: c2c043c42e3627fb56b02defc6a0081311da5b72dfb1da0ecda255abca81a734b4a47c4c25054f24d5c4dec75059862fa250482e54d84f79a6905ecde4e5a7cc
7
- data.tar.gz: eec956c476590a3a521f33ed58e657add31f52d391cb29362856d9dce14968f8d55df4f38b7d030071283da2d236ee1ec87654c5b6598a181ea45c227ef32216
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
- [![CI](https://github.com/wbotelhos/normalizy/workflows/CI/badge.svg)](https://github.com/wbotelhos/normalizy/actions)
3
+ [![Tests](https://github.com/wbotelhos/normalizy/workflows/Tests/badge.svg)](https://github.com/wbotelhos/normalizy/actions/workflows/tests.yml)
4
4
  [![Gem Version](https://badge.fury.io/rb/normalizy.svg)](https://badge.fury.io/rb/normalizy)
5
- [![Maintainability](https://api.codeclimate.com/v1/badges/3896d0a11bee012c818c/maintainability)](https://codeclimate.com/github/wbotelhos/normalizy/maintainability)
6
- [![codecov](https://codecov.io/gh/wbotelhos/normalizy/branch/master/graph/badge.svg?token=0XTRFDFHDq)](https://codecov.io/gh/wbotelhos/normalizy)
7
- [![Sponsor](https://img.shields.io/badge/sponsor-%3C3-green)](https://www.patreon.com/wbotelhos)
5
+ [![Maintainability](https://qlty.sh/gh/wbotelhos/projects/normalizy/maintainability.svg)](https://qlty.sh/gh/wbotelhos/projects/normalizy)
6
+ [![Coverage](https://codecov.io/gh/wbotelhos/normalizy/branch/master/graph/badge.svg?token=0XTRFDFHDq)](https://codecov.io/gh/wbotelhos/normalizy)
7
+ [![Sponsor](https://img.shields.io/badge/sponsor-%3C3-green)](https://github.com/sponsors/wbotelhos)
8
8
 
9
9
  Attribute normalizer for Rails.
10
10
 
@@ -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 = {
@@ -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: attribute, object: self)
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 = filters[rule.keys.first] || rule
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 = extract_value(result, filter, filter_options, block)
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 = options[:with]
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: block, options: options.except(:with), rules: rules }
84
+ normalizy_rules[field] << { block:, options: options.except(:with), rules: }
85
85
  end
86
86
 
87
- prepend Module.new {
88
- args.each do |attribute|
89
- define_method :"#{attribute}=" do |value|
90
- result = normalizy!(
91
- attribute: attribute,
92
- block: block,
93
- options: options.except(:with),
94
- rules: rules,
95
- value: value
96
- )
97
-
98
- if rules.is_a?(Hash) && rules.dig(:slug, :to).present?
99
- write_attribute rules.dig(:slug, :to), result
100
-
101
- super value
102
- else
103
- super result
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 if options[:adjust] == :end && input.respond_to?(: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 options[:attribute], error_message(input, options)
21
+ options[:object].errors.add(options[:attribute], error_message(input, options))
22
+
23
+ nil
22
24
  end
23
25
 
24
26
  private
@@ -8,7 +8,7 @@ module Normalizy
8
8
 
9
9
  value = input.gsub(/\D/, '')
10
10
 
11
- return nil if value.blank?
11
+ return nil if value.blank?
12
12
  return value.send(options[:cast]) if options[:cast]
13
13
 
14
14
  value
@@ -12,7 +12,7 @@ module Normalizy
12
12
  right: '\s*\z',
13
13
  }[options[:side] || :both]
14
14
 
15
- input.gsub Regexp.new(/#{regex}/), ''
15
+ input.gsub(/#{regex}/, '')
16
16
  end
17
17
  end
18
18
  end
@@ -43,7 +43,7 @@ module Normalizy
43
43
 
44
44
  return false if options.blank?
45
45
 
46
- options = default_rules if options.map { |option| option[:rules] }.compact.blank?
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 if options.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 ', '
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Normalizy
4
- VERSION = '1.7.0'
4
+ VERSION = '2.0.0'
5
5
  end
data/lib/normalizy.rb CHANGED
@@ -17,4 +17,4 @@ require 'normalizy/config'
17
17
  require 'normalizy/extensions'
18
18
  require 'normalizy/rspec/matcher'
19
19
 
20
- ActiveRecord::Base.include Normalizy::Extension
20
+ ActiveSupport.on_load(:active_record) { include Normalizy::Extension }
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: 1.7.0
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: 2022-05-18 00:00:00.000000000 Z
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: 3.1.6
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: []