attribute_normalizer-extras 0.0.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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