attribute_normalizer-extras 0.0.1 → 0.2.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
- SHA1:
3
- metadata.gz: 06c102320987edf49e01edf7ad800f760824e689
4
- data.tar.gz: f2d9e5a093333c58fb1e28d4cd225ba7ebb752ac
2
+ SHA256:
3
+ metadata.gz: c581c89805c67cd717dd67e74f96461667513783fe9c04d6500cd4845c5c9c65
4
+ data.tar.gz: 7c2a8604bb2dc440d3feb15d090c3c37f2fa455e0aea1743b5c064f067bdc3ed
5
5
  SHA512:
6
- metadata.gz: a413ecb4057958a57dcefb9e561deff102d745b695b5903ce22d20327f92c637123969dda1e0ff8d6cb51b89d4d5b5cbc71e40c84691c3d95fb641ae470ff055
7
- data.tar.gz: 565888fa99220bf84804cd9d3584220f7cfe00fdd70d95905c67b3846689204f9b8c88f9b4201a773b86e644e76213f780b61f304c644e9885a9ba7a8e0df879
6
+ metadata.gz: 3432b10ff2fc867edee4a4acf485743a684893c0942ee4fa7d600cbfd88494cc8d57deb1c277cb66922ec3905ffedf96100918c4fd06a8a754a6486f8bc1776c
7
+ data.tar.gz: ab1c3f3259115221928cd9a181b4a1e7ef1925b5bc494e424e97755fdd1b46335c751dc7f10f6827121650249beb06142e87cbaac18a1748cf913c5c15148c16
@@ -0,0 +1,14 @@
1
+ name: Ruby
2
+ on: [push,pull_request]
3
+ jobs:
4
+ build:
5
+ runs-on: ubuntu-latest
6
+ steps:
7
+ - uses: actions/checkout@v2
8
+ - name: Set up Ruby
9
+ uses: ruby/setup-ruby@v1
10
+ with:
11
+ ruby-version: '2.7'
12
+ bundler-cache: true
13
+ - name: Run Tests
14
+ run: bundle exec rake
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Build Status](https://github.com/amaabca/attribute_normalizer-extras/actions/workflows/main.yml/badge.svg)](https://github.com/amaabca/attribute_normalizer-extras/actions/workflows/main.yml)
2
+
1
3
  # AttributeNormalizer::Extras
2
4
 
3
5
  Extra normalizers for the [attribute_normalizer](https://rubygems.org/gems/attribute_normalizer) gem
@@ -6,8 +6,24 @@ require 'attribute_normalizer/extras/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "attribute_normalizer-extras"
8
8
  spec.version = AttributeNormalizer::Extras::VERSION
9
- spec.authors = ["Darko Dosenovic", "Michael van den Beuken", "Ruben Estevez", "Jordan Babe", "Mathieu Gilbert", "Ryan Jones", "Jonathan Weyermann"]
10
- spec.email = ["darko.dosenovic@ama.ab.ca", "michael.vandenbeuken@ama.ab.ca", "ruben.estevez@ama.ab.ca", "jordan.babe@ama.ab.ca", "mathieu.gilbert@ama.ab.ca", "ryan.jones@ama.ab.ca", "jonathan.weyermann@ama.ab.ca"]
9
+ spec.authors = [
10
+ "Darko Dosenovic",
11
+ "Michael van den Beuken",
12
+ "Ruben Estevez",
13
+ "Jordan Babe",
14
+ "Mathieu Gilbert",
15
+ "Zoie Carnegie",
16
+ "Jesse Doyle"
17
+ ]
18
+ spec.email = [
19
+ "darko.dosenovic@ama.ab.ca",
20
+ "michael.vandenbeuken@ama.ab.ca",
21
+ "ruben.estevez@ama.ab.ca",
22
+ "jordan.babe@ama.ab.ca",
23
+ "mathieu.gilbert@ama.ab.ca",
24
+ "zoie.carnegie@ama.ab.ca",
25
+ "jesse.doyle@ama.ab.ca"
26
+ ]
11
27
  spec.summary = %q{attribute_normalizer gem extras}
12
28
  spec.description = %q{Specific normalizers that we commonly use in our apps}
13
29
  spec.homepage = ""
@@ -18,13 +34,12 @@ Gem::Specification.new do |spec|
18
34
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
35
  spec.require_paths = ["lib"]
20
36
 
21
- spec.add_development_dependency "bundler", "~> 1.7"
22
- spec.add_development_dependency "rake", "~> 10.0"
23
- spec.add_development_dependency "pry", "~> 0.10"
37
+ spec.add_development_dependency "bundler"
38
+ spec.add_development_dependency "rake"
39
+ spec.add_development_dependency "pry"
24
40
  spec.add_development_dependency "rspec"
25
41
  spec.add_development_dependency "rspec-instafail"
26
42
  spec.add_development_dependency "simplecov"
27
43
 
28
44
  spec.add_runtime_dependency "attribute_normalizer", "~> 1.0"
29
45
  end
30
-
@@ -1,5 +1,5 @@
1
1
  module AttributeNormalizer
2
2
  module Extras
3
- VERSION = "0.0.1"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -3,11 +3,17 @@ require "attribute_normalizer/extras/version"
3
3
  require "attribute_normalizer/normalizers/gsub_normalizer"
4
4
  require "attribute_normalizer/normalizers/spaceless_normalizer"
5
5
  require "attribute_normalizer/normalizers/postal_code_normalizer"
6
+ require "attribute_normalizer/normalizers/float_normalizer"
7
+ require "attribute_normalizer/normalizers/downcase_normalizer"
8
+ require "attribute_normalizer/normalizers/upcase_normalizer"
6
9
 
7
10
  extras = {
8
- gsub: AttributeNormalizer::Normalizers::GsubNormalizer,
9
- postal_code: AttributeNormalizer::Normalizers::PostalCodeNormalizer,
10
- spaceless: AttributeNormalizer::Normalizers::SpacelessNormalizer
11
+ gsub: AttributeNormalizer::Normalizers::GsubNormalizer,
12
+ postal_code: AttributeNormalizer::Normalizers::PostalCodeNormalizer,
13
+ spaceless: AttributeNormalizer::Normalizers::SpacelessNormalizer,
14
+ float: AttributeNormalizer::Normalizers::FloatNormalizer,
15
+ downcase: AttributeNormalizer::Normalizers::DowncaseNormalizer,
16
+ upcase: AttributeNormalizer::Normalizers::UpcaseNormalizer
11
17
  }
12
18
 
13
19
  AttributeNormalizer.configuration.normalizers.merge! extras
@@ -0,0 +1,9 @@
1
+ module AttributeNormalizer
2
+ module Normalizers
3
+ module DowncaseNormalizer
4
+ def self.normalize(value, options = {})
5
+ options.fetch(:allow_nil, true) ? value&.downcase : value.to_s.downcase
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,69 @@
1
+ module AttributeNormalizer
2
+ module Normalizers
3
+ # Accept an input value of various types and coerce it into a float.
4
+ #
5
+ # Valid types for coersion are: String, Numeric, and NilClass.
6
+ #
7
+ # = Options
8
+ # allow_blank::
9
+ # Will not attempt to coerce nil or '' to a float if this evaluates to a
10
+ # truthy value. DEFAULT: false
11
+ #
12
+ # = Notes
13
+ # This normalizer does not handle negative values, or perform any rounding
14
+ #
15
+ # = Usage
16
+ # AttributeNormalizer::Normalizers::FloatNormalizer.normalize('$1,500.00')
17
+ module FloatNormalizer
18
+ DEFAULTS = {
19
+ blank: false
20
+ }.freeze
21
+
22
+ class << self
23
+ def normalize(value, opts = {})
24
+ case value
25
+ when String
26
+ handle_string(value, opts)
27
+ when Numeric
28
+ value.to_f
29
+ when NilClass
30
+ handle_nil(opts)
31
+ else
32
+ invalid_type!(value)
33
+ end
34
+ end
35
+
36
+ private
37
+
38
+ def handle_string(value, opts = {})
39
+ if opts.fetch(:allow_blank, DEFAULTS[:blank]) && blank?(value)
40
+ value
41
+ else
42
+ # Strip all characters except digits or '.'.
43
+ # Be warned that this will coerce '' or nil to 0.00.
44
+ # Use allow_blank: true if you don't want this behaviour.
45
+ value.gsub(/[^\d.]/, '').to_f
46
+ end
47
+ end
48
+
49
+ def handle_nil(opts = {})
50
+ if opts.fetch(:allow_blank, DEFAULTS[:blank])
51
+ nil
52
+ else
53
+ nil.to_f
54
+ end
55
+ end
56
+
57
+ def invalid_type!(value)
58
+ raise ArgumentError, "must pass a Numeric or a String, got: #{value.class}"
59
+ end
60
+
61
+ # This gem doesn't have a dependency on ActiveSupport - I'd rather not add
62
+ # the dependency just for String#blank?.
63
+ def blank?(value)
64
+ value.nil? || value.empty?
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -2,7 +2,9 @@ module AttributeNormalizer
2
2
  module Normalizers
3
3
  module PostalCodeNormalizer
4
4
  def self.normalize(value, options)
5
- GsubNormalizer.normalize value, pattern: /\W+|_/, replacement: ''
5
+ if value
6
+ GsubNormalizer.normalize value.upcase, pattern: /\W+|_/, replacement: ''
7
+ end
6
8
  end
7
9
  end
8
10
  end
@@ -0,0 +1,9 @@
1
+ module AttributeNormalizer
2
+ module Normalizers
3
+ module UpcaseNormalizer
4
+ def self.normalize(value, options = {})
5
+ options.fetch(:allow_nil, true) ? value&.upcase : value.to_s.upcase
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe AttributeNormalizer::Normalizers::DowncaseNormalizer do
4
+
5
+ describe '.normalizer' do
6
+ it 'downcase a string' do
7
+ normalized_text = subject.normalize "I AM big STRING"
8
+ expect(normalized_text).to eq "i am big string"
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+
3
+ describe AttributeNormalizer::Normalizers::FloatNormalizer do
4
+ describe '#normalize' do
5
+ let(:normalized) { described_class.normalize(value, opts) }
6
+
7
+ context 'with an Integer' do
8
+ let(:value) { 2 }
9
+ let(:opts) { Hash.new }
10
+
11
+ it 'returns a float' do
12
+ expect(normalized).to eq(2.0) # be careful: 2 == 2.to_f
13
+ expect(normalized).to be_a(Float)
14
+ end
15
+ end
16
+
17
+ context 'with nil' do
18
+ let(:value) { nil }
19
+
20
+ context 'with allow_blank: false' do
21
+ let(:opts) { { allow_blank: false } }
22
+
23
+ it 'returns nil.to_f (0.00)' do
24
+ expect(normalized).to eq(nil.to_f)
25
+ end
26
+ end
27
+
28
+ context 'with allow_blank: true' do
29
+ let(:opts) { { allow_blank: true } }
30
+
31
+ it 'returns nil' do
32
+ expect(normalized).to be nil
33
+ end
34
+ end
35
+ end
36
+
37
+ context 'with a String' do
38
+ let(:value) { '$1,500.01' }
39
+ let(:opts) { Hash.new }
40
+
41
+ it 'strips out invalid characters' do
42
+ expect(normalized).to eq(1500.01)
43
+ end
44
+ end
45
+
46
+ context 'with an empty String' do
47
+ let(:value) { '' }
48
+
49
+ context 'with allow_blank: false' do
50
+ let(:opts) { { allow_blank: false } }
51
+
52
+ it 'returns "".to_f (0.00)' do
53
+ expect(normalized).to eq(''.to_f)
54
+ end
55
+ end
56
+
57
+ context 'with allow_blank: true' do
58
+ let(:opts) { { allow_blank: true } }
59
+
60
+ it 'returns the empty string' do
61
+ expect(normalized).to eq('')
62
+ end
63
+ end
64
+ end
65
+
66
+ context 'with an invalid type' do
67
+ let(:value) { Array.new }
68
+ let(:opts) { Hash.new }
69
+
70
+ it 'raises ArgumentError' do
71
+ expect{ normalized }.to raise_error(ArgumentError)
72
+ end
73
+ end
74
+ end
75
+ end
@@ -14,6 +14,15 @@ describe AttributeNormalizer::Normalizers::PostalCodeNormalizer do
14
14
  it 'removes whitespace' do
15
15
  expect(subject.normalize " T1T 1T1 ", {}).to eq "T1T1T1"
16
16
  end
17
+
18
+ it 'upcases lowercase text' do
19
+ expect(subject.normalize "t6h1v2", {}).to eq "T6H1V2"
20
+ end
21
+
22
+ it 'returns nil if value is nil' do
23
+ expect(subject.normalize nil, {}).to be_nil
24
+ end
25
+
17
26
  end
18
27
 
19
28
  end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe AttributeNormalizer::Normalizers::UpcaseNormalizer do
4
+
5
+ describe '.normalizer' do
6
+ it 'upcase a string' do
7
+ normalized_text = subject.normalize "i AM big StrINg"
8
+ expect(normalized_text).to eq "I AM BIG STRING"
9
+ end
10
+ end
11
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: attribute_normalizer-extras
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Darko Dosenovic
@@ -9,109 +9,109 @@ authors:
9
9
  - Ruben Estevez
10
10
  - Jordan Babe
11
11
  - Mathieu Gilbert
12
- - Ryan Jones
13
- - Jonathan Weyermann
14
- autorequire:
12
+ - Zoie Carnegie
13
+ - Jesse Doyle
14
+ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2015-07-30 00:00:00.000000000 Z
17
+ date: 2021-12-10 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: bundler
21
21
  requirement: !ruby/object:Gem::Requirement
22
22
  requirements:
23
- - - ~>
23
+ - - ">="
24
24
  - !ruby/object:Gem::Version
25
- version: '1.7'
25
+ version: '0'
26
26
  type: :development
27
27
  prerelease: false
28
28
  version_requirements: !ruby/object:Gem::Requirement
29
29
  requirements:
30
- - - ~>
30
+ - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: '1.7'
32
+ version: '0'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: rake
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - ~>
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: '10.0'
39
+ version: '0'
40
40
  type: :development
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - ~>
44
+ - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: '10.0'
46
+ version: '0'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: pry
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - ~>
51
+ - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: '0.10'
53
+ version: '0'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - ~>
58
+ - - ">="
59
59
  - !ruby/object:Gem::Version
60
- version: '0.10'
60
+ version: '0'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: rspec
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - '>='
65
+ - - ">="
66
66
  - !ruby/object:Gem::Version
67
67
  version: '0'
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - '>='
72
+ - - ">="
73
73
  - !ruby/object:Gem::Version
74
74
  version: '0'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: rspec-instafail
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - '>='
79
+ - - ">="
80
80
  - !ruby/object:Gem::Version
81
81
  version: '0'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - '>='
86
+ - - ">="
87
87
  - !ruby/object:Gem::Version
88
88
  version: '0'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: simplecov
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
- - - '>='
93
+ - - ">="
94
94
  - !ruby/object:Gem::Version
95
95
  version: '0'
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
- - - '>='
100
+ - - ">="
101
101
  - !ruby/object:Gem::Version
102
102
  version: '0'
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: attribute_normalizer
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
- - - ~>
107
+ - - "~>"
108
108
  - !ruby/object:Gem::Version
109
109
  version: '1.0'
110
110
  type: :runtime
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
- - - ~>
114
+ - - "~>"
115
115
  - !ruby/object:Gem::Version
116
116
  version: '1.0'
117
117
  description: Specific normalizers that we commonly use in our apps
@@ -121,14 +121,14 @@ email:
121
121
  - ruben.estevez@ama.ab.ca
122
122
  - jordan.babe@ama.ab.ca
123
123
  - mathieu.gilbert@ama.ab.ca
124
- - ryan.jones@ama.ab.ca
125
- - jonathan.weyermann@ama.ab.ca
124
+ - zoie.carnegie@ama.ab.ca
125
+ - jesse.doyle@ama.ab.ca
126
126
  executables: []
127
127
  extensions: []
128
128
  extra_rdoc_files: []
129
129
  files:
130
- - .gitignore
131
- - .travis.yml
130
+ - ".github/workflows/main.yml"
131
+ - ".gitignore"
132
132
  - Gemfile
133
133
  - LICENSE.txt
134
134
  - README.md
@@ -136,39 +136,47 @@ files:
136
136
  - attribute_normalizer-extras.gemspec
137
137
  - lib/attribute_normalizer/extras.rb
138
138
  - lib/attribute_normalizer/extras/version.rb
139
+ - lib/attribute_normalizer/normalizers/downcase_normalizer.rb
140
+ - lib/attribute_normalizer/normalizers/float_normalizer.rb
139
141
  - lib/attribute_normalizer/normalizers/gsub_normalizer.rb
140
142
  - lib/attribute_normalizer/normalizers/postal_code_normalizer.rb
141
143
  - lib/attribute_normalizer/normalizers/spaceless_normalizer.rb
144
+ - lib/attribute_normalizer/normalizers/upcase_normalizer.rb
145
+ - spec/models/downcase_normalizer_spec.rb
146
+ - spec/models/float_normalizer_spec.rb
142
147
  - spec/models/gsub_normalizer_spec.rb
143
148
  - spec/models/postal_code_normalizer_spec.rb
144
149
  - spec/models/spaceless_normalizer_spec.rb
150
+ - spec/models/uppercase_normalizer_spec.rb
145
151
  - spec/spec_helper.rb
146
152
  homepage: ''
147
153
  licenses:
148
154
  - MIT
149
155
  metadata: {}
150
- post_install_message:
156
+ post_install_message:
151
157
  rdoc_options: []
152
158
  require_paths:
153
159
  - lib
154
160
  required_ruby_version: !ruby/object:Gem::Requirement
155
161
  requirements:
156
- - - '>='
162
+ - - ">="
157
163
  - !ruby/object:Gem::Version
158
164
  version: '0'
159
165
  required_rubygems_version: !ruby/object:Gem::Requirement
160
166
  requirements:
161
- - - '>='
167
+ - - ">="
162
168
  - !ruby/object:Gem::Version
163
169
  version: '0'
164
170
  requirements: []
165
- rubyforge_project:
166
- rubygems_version: 2.0.0
167
- signing_key:
171
+ rubygems_version: 3.2.33
172
+ signing_key:
168
173
  specification_version: 4
169
174
  summary: attribute_normalizer gem extras
170
175
  test_files:
176
+ - spec/models/downcase_normalizer_spec.rb
177
+ - spec/models/float_normalizer_spec.rb
171
178
  - spec/models/gsub_normalizer_spec.rb
172
179
  - spec/models/postal_code_normalizer_spec.rb
173
180
  - spec/models/spaceless_normalizer_spec.rb
181
+ - spec/models/uppercase_normalizer_spec.rb
174
182
  - spec/spec_helper.rb
data/.travis.yml DELETED
@@ -1,3 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.0.0