attribute_normalizer-extras 0.0.3 → 0.1.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
  SHA1:
3
- metadata.gz: beb68db8e9ad83583260876034337efe70bd1e7e
4
- data.tar.gz: f4a7f569158487f8bbbd1b3173a47ebd7d1160ad
3
+ metadata.gz: 198d6ba06e3bf0684606c59ab78c5ec48b7c66cd
4
+ data.tar.gz: 2c56bc94c71b061a1176b3104a0ee13532aa0d7a
5
5
  SHA512:
6
- metadata.gz: 06804e8594de2739324784966cf364f5826e899677109c3eaad443c03b4d5f80d82320b71428448a855aa6a6d36b6d1d1eea989dc1f5fe92880472110708f2be
7
- data.tar.gz: f0d0cbd95948eb656a10b57d154eba5697ac38670f24690d56623dff44164b189a4f37e46da3fa03f9c244fac36e64f7083bf87e81c175b32a3cdb2277a91db9
6
+ metadata.gz: be01b427c0cd5950265ba50e8f589db39935be9e624145079996420b014bc3b319a49d2d89d0f4840f783eaaca234a836ef45ff5c2862e0bd2b78f983a28006e
7
+ data.tar.gz: cfad5fcaea65ec6b8075a5a8b8a0cd1b145b73e77f0c1cb5f026c06040faad4ce6fae823eca943b3c387fc5f0dd68098e3b5018bec9c3c5677c9315b9a66154a
@@ -6,8 +6,8 @@ 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 = ["Darko Dosenovic", "Michael van den Beuken", "Ruben Estevez", "Jordan Babe", "Mathieu Gilbert", "Ryan Jones", "Jonathan Weyermann", "Jesse Doyle"]
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", "jesse.doyle@ama.ab.ca"]
11
11
  spec.summary = %q{attribute_normalizer gem extras}
12
12
  spec.description = %q{Specific normalizers that we commonly use in our apps}
13
13
  spec.homepage = ""
@@ -18,13 +18,12 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.7"
22
- spec.add_development_dependency "rake", "~> 10.0"
23
- spec.add_development_dependency "pry", "~> 0.10"
21
+ spec.add_development_dependency "bundler"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "pry"
24
24
  spec.add_development_dependency "rspec"
25
25
  spec.add_development_dependency "rspec-instafail"
26
26
  spec.add_development_dependency "simplecov"
27
27
 
28
28
  spec.add_runtime_dependency "attribute_normalizer", "~> 1.0"
29
29
  end
30
-
@@ -3,11 +3,13 @@ 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"
6
7
 
7
8
  extras = {
8
- gsub: AttributeNormalizer::Normalizers::GsubNormalizer,
9
- postal_code: AttributeNormalizer::Normalizers::PostalCodeNormalizer,
10
- spaceless: AttributeNormalizer::Normalizers::SpacelessNormalizer
9
+ gsub: AttributeNormalizer::Normalizers::GsubNormalizer,
10
+ postal_code: AttributeNormalizer::Normalizers::PostalCodeNormalizer,
11
+ spaceless: AttributeNormalizer::Normalizers::SpacelessNormalizer,
12
+ float: AttributeNormalizer::Normalizers::FloatNormalizer
11
13
  }
12
14
 
13
15
  AttributeNormalizer.configuration.normalizers.merge! extras
@@ -1,5 +1,5 @@
1
1
  module AttributeNormalizer
2
2
  module Extras
3
- VERSION = "0.0.3"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  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.upcase, pattern: /\W+|_/, replacement: '' unless value==nil
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,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
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.3
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Darko Dosenovic
@@ -11,107 +11,108 @@ authors:
11
11
  - Mathieu Gilbert
12
12
  - Ryan Jones
13
13
  - Jonathan Weyermann
14
+ - Jesse Doyle
14
15
  autorequire:
15
16
  bindir: bin
16
17
  cert_chain: []
17
- date: 2015-11-09 00:00:00.000000000 Z
18
+ date: 2017-01-16 00:00:00.000000000 Z
18
19
  dependencies:
19
20
  - !ruby/object:Gem::Dependency
20
21
  name: bundler
21
22
  requirement: !ruby/object:Gem::Requirement
22
23
  requirements:
23
- - - ~>
24
+ - - ">="
24
25
  - !ruby/object:Gem::Version
25
- version: '1.7'
26
+ version: '0'
26
27
  type: :development
27
28
  prerelease: false
28
29
  version_requirements: !ruby/object:Gem::Requirement
29
30
  requirements:
30
- - - ~>
31
+ - - ">="
31
32
  - !ruby/object:Gem::Version
32
- version: '1.7'
33
+ version: '0'
33
34
  - !ruby/object:Gem::Dependency
34
35
  name: rake
35
36
  requirement: !ruby/object:Gem::Requirement
36
37
  requirements:
37
- - - ~>
38
+ - - ">="
38
39
  - !ruby/object:Gem::Version
39
- version: '10.0'
40
+ version: '0'
40
41
  type: :development
41
42
  prerelease: false
42
43
  version_requirements: !ruby/object:Gem::Requirement
43
44
  requirements:
44
- - - ~>
45
+ - - ">="
45
46
  - !ruby/object:Gem::Version
46
- version: '10.0'
47
+ version: '0'
47
48
  - !ruby/object:Gem::Dependency
48
49
  name: pry
49
50
  requirement: !ruby/object:Gem::Requirement
50
51
  requirements:
51
- - - ~>
52
+ - - ">="
52
53
  - !ruby/object:Gem::Version
53
- version: '0.10'
54
+ version: '0'
54
55
  type: :development
55
56
  prerelease: false
56
57
  version_requirements: !ruby/object:Gem::Requirement
57
58
  requirements:
58
- - - ~>
59
+ - - ">="
59
60
  - !ruby/object:Gem::Version
60
- version: '0.10'
61
+ version: '0'
61
62
  - !ruby/object:Gem::Dependency
62
63
  name: rspec
63
64
  requirement: !ruby/object:Gem::Requirement
64
65
  requirements:
65
- - - '>='
66
+ - - ">="
66
67
  - !ruby/object:Gem::Version
67
68
  version: '0'
68
69
  type: :development
69
70
  prerelease: false
70
71
  version_requirements: !ruby/object:Gem::Requirement
71
72
  requirements:
72
- - - '>='
73
+ - - ">="
73
74
  - !ruby/object:Gem::Version
74
75
  version: '0'
75
76
  - !ruby/object:Gem::Dependency
76
77
  name: rspec-instafail
77
78
  requirement: !ruby/object:Gem::Requirement
78
79
  requirements:
79
- - - '>='
80
+ - - ">="
80
81
  - !ruby/object:Gem::Version
81
82
  version: '0'
82
83
  type: :development
83
84
  prerelease: false
84
85
  version_requirements: !ruby/object:Gem::Requirement
85
86
  requirements:
86
- - - '>='
87
+ - - ">="
87
88
  - !ruby/object:Gem::Version
88
89
  version: '0'
89
90
  - !ruby/object:Gem::Dependency
90
91
  name: simplecov
91
92
  requirement: !ruby/object:Gem::Requirement
92
93
  requirements:
93
- - - '>='
94
+ - - ">="
94
95
  - !ruby/object:Gem::Version
95
96
  version: '0'
96
97
  type: :development
97
98
  prerelease: false
98
99
  version_requirements: !ruby/object:Gem::Requirement
99
100
  requirements:
100
- - - '>='
101
+ - - ">="
101
102
  - !ruby/object:Gem::Version
102
103
  version: '0'
103
104
  - !ruby/object:Gem::Dependency
104
105
  name: attribute_normalizer
105
106
  requirement: !ruby/object:Gem::Requirement
106
107
  requirements:
107
- - - ~>
108
+ - - "~>"
108
109
  - !ruby/object:Gem::Version
109
110
  version: '1.0'
110
111
  type: :runtime
111
112
  prerelease: false
112
113
  version_requirements: !ruby/object:Gem::Requirement
113
114
  requirements:
114
- - - ~>
115
+ - - "~>"
115
116
  - !ruby/object:Gem::Version
116
117
  version: '1.0'
117
118
  description: Specific normalizers that we commonly use in our apps
@@ -123,23 +124,25 @@ email:
123
124
  - mathieu.gilbert@ama.ab.ca
124
125
  - ryan.jones@ama.ab.ca
125
126
  - jonathan.weyermann@ama.ab.ca
127
+ - jesse.doyle@ama.ab.ca
126
128
  executables: []
127
129
  extensions: []
128
130
  extra_rdoc_files: []
129
131
  files:
130
- - .gitignore
131
- - .travis.yml
132
+ - ".gitignore"
133
+ - ".travis.yml"
132
134
  - Gemfile
133
135
  - LICENSE.txt
134
136
  - README.md
135
137
  - Rakefile
136
- - attribute_normalizer-extras-0.0.2.gem
137
138
  - attribute_normalizer-extras.gemspec
138
139
  - lib/attribute_normalizer/extras.rb
139
140
  - lib/attribute_normalizer/extras/version.rb
141
+ - lib/attribute_normalizer/normalizers/float_normalizer.rb
140
142
  - lib/attribute_normalizer/normalizers/gsub_normalizer.rb
141
143
  - lib/attribute_normalizer/normalizers/postal_code_normalizer.rb
142
144
  - lib/attribute_normalizer/normalizers/spaceless_normalizer.rb
145
+ - spec/models/float_normalizer_spec.rb
143
146
  - spec/models/gsub_normalizer_spec.rb
144
147
  - spec/models/postal_code_normalizer_spec.rb
145
148
  - spec/models/spaceless_normalizer_spec.rb
@@ -154,21 +157,22 @@ require_paths:
154
157
  - lib
155
158
  required_ruby_version: !ruby/object:Gem::Requirement
156
159
  requirements:
157
- - - '>='
160
+ - - ">="
158
161
  - !ruby/object:Gem::Version
159
162
  version: '0'
160
163
  required_rubygems_version: !ruby/object:Gem::Requirement
161
164
  requirements:
162
- - - '>='
165
+ - - ">="
163
166
  - !ruby/object:Gem::Version
164
167
  version: '0'
165
168
  requirements: []
166
169
  rubyforge_project:
167
- rubygems_version: 2.0.3
170
+ rubygems_version: 2.5.1
168
171
  signing_key:
169
172
  specification_version: 4
170
173
  summary: attribute_normalizer gem extras
171
174
  test_files:
175
+ - spec/models/float_normalizer_spec.rb
172
176
  - spec/models/gsub_normalizer_spec.rb
173
177
  - spec/models/postal_code_normalizer_spec.rb
174
178
  - spec/models/spaceless_normalizer_spec.rb
Binary file