attribute_normalizer-extras 0.0.3 → 0.1.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
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