hoodoo 2.2.1 → 2.2.2
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
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d3cfd418d564c82821044bc2a95cb8d1e194a134027bc9fac61a56f823157b61
|
4
|
+
data.tar.gz: abd1ca2e208d34fbd00146989234daac40611f24e32869fd56debb0b1d0e62a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c887163252c009e44267179282e725bcfc4a49ce20e48270ab688f446dd5a03bf29bdaeab692ae4411b0f38dca2a202edd3b7025336963e29f68cd612f12ce3f
|
7
|
+
data.tar.gz: fa52f3e1fdb454022cd24fbdf56cdf25b3355ee0fe3cced729ae2cb73437b14c3d137f1e2958fb7d2d636222b0cf301fa4d356a7226125b31a75a0b797ffafd9
|
@@ -7,6 +7,14 @@ module Hoodoo
|
|
7
7
|
#
|
8
8
|
class Decimal < Hoodoo::Presenters::Field
|
9
9
|
|
10
|
+
# In theory this is derived from Rubinius source, but "master" didn't seem
|
11
|
+
# to include it at the time of writing. See:
|
12
|
+
#
|
13
|
+
# https://github.com/rubinius/rubinius/
|
14
|
+
# https://stackoverflow.com/questions/1034418/determine-if-a-string-is-a-valid-float-value
|
15
|
+
#
|
16
|
+
VALIDATOR = Regexp.new('^\s*[+-]?((\d+_?)*\d+(\.(\d+_?)*\d+)?|\.(\d+_?)*\d+)(\s*|([eE][+-]?(\d+_?)*\d+)\s*)$')
|
17
|
+
|
10
18
|
# The precision of the Decimal.
|
11
19
|
#
|
12
20
|
attr_accessor :precision
|
@@ -28,11 +36,21 @@ module Hoodoo
|
|
28
36
|
|
29
37
|
# Check if data is a valid Decimal and return a Hoodoo::Errors instance.
|
30
38
|
#
|
39
|
+
# Decimals are expressed in JSON as Strings with any amount of leading or
|
40
|
+
# trailing space, can be positive or negative and may use simple (e.g.
|
41
|
+
# <tt>"-12.45"</tt>) or scientific (e.g. <tt>"-0.1245e2"</tt>) notation
|
42
|
+
# with a lower case or capital <tt>E</tt> in the latter case.
|
43
|
+
#
|
44
|
+
# A leading "0" before a decimal place may be omitted; "0.12" and ".12"
|
45
|
+
# are considered equivalent and valid. An optional leading "+" is allowed
|
46
|
+
# for positive numbers. Between digits, an underscore is permitted as a
|
47
|
+
# visual separator; "12_431_999" and "12431999" are equivalent and valid.
|
48
|
+
#
|
31
49
|
def validate( data, path = '' )
|
32
50
|
errors = super( data, path )
|
33
51
|
return errors if errors.has_errors? || ( ! @required && data.nil? )
|
34
52
|
|
35
|
-
unless data.is_a?( ::
|
53
|
+
unless data.is_a?( ::String ) && data.match( VALIDATOR ) != nil
|
36
54
|
errors.add_error(
|
37
55
|
'generic.invalid_decimal',
|
38
56
|
:message => "Field `#{ full_path( path ) }` is an invalid decimal",
|
data/lib/hoodoo/version.rb
CHANGED
@@ -12,11 +12,11 @@ module Hoodoo
|
|
12
12
|
# The Hoodoo gem version. If this changes, be sure to re-run
|
13
13
|
# <tt>bundle install</tt> or <tt>bundle update</tt>.
|
14
14
|
#
|
15
|
-
VERSION = '2.2.
|
15
|
+
VERSION = '2.2.2'
|
16
16
|
|
17
17
|
# The Hoodoo gem date. If this changes, be sure to re-run
|
18
18
|
# <tt>bundle install</tt> or <tt>bundle update</tt>.
|
19
19
|
#
|
20
|
-
DATE = '2017-11-
|
20
|
+
DATE = '2017-11-16'
|
21
21
|
|
22
22
|
end
|
@@ -274,7 +274,7 @@ describe Hoodoo::Presenters::Array do
|
|
274
274
|
'boolean' => { :valid => [ true ], :invalid => [ 4.51, 'false' ] },
|
275
275
|
'date' => { :valid => [ Date.today.iso8601 ], :invalid => [ Date.today, '23rd January 2041' ] },
|
276
276
|
'date_time' => { :valid => [ DateTime.now.iso8601 ], :invalid => [ DateTime.now, '2017-01-27 12:00' ] },
|
277
|
-
'decimal' => { :valid => [
|
277
|
+
'decimal' => { :valid => [ '4.51' ], :invalid => [ 4.51, BigDecimal.new( '4.51' ) ] },
|
278
278
|
'enum' => { :valid => [ 'one' ], :invalid => [ 'One', 1 ] },
|
279
279
|
'float' => { :valid => [ 4.51 ], :invalid => [ BigDecimal.new(4.51, 2), '4.51' ] },
|
280
280
|
'integer' => { :valid => [ 4 ], :invalid => [ '4' ] },
|
@@ -457,8 +457,8 @@ describe Hoodoo::Presenters::Array do
|
|
457
457
|
it 'validates entries' do
|
458
458
|
data = {
|
459
459
|
'numbers' => [
|
460
|
-
|
461
|
-
'not a decimal'
|
460
|
+
'42.21',
|
461
|
+
'41.0 not a decimal'
|
462
462
|
]
|
463
463
|
}
|
464
464
|
|
@@ -16,14 +16,69 @@ describe Hoodoo::Presenters::Decimal do
|
|
16
16
|
|
17
17
|
describe '#validate' do
|
18
18
|
it 'should return [] when valid decimal' do
|
19
|
-
|
19
|
+
[
|
20
|
+
'0',
|
21
|
+
'0.0',
|
22
|
+
' .123245e2 ',
|
23
|
+
' .1_2_3_2_4_5E-2 ',
|
24
|
+
' 0.123245e+2 ',
|
25
|
+
' 0_3.123245E2 ',
|
26
|
+
' 03.123245E2_3 ',
|
27
|
+
' 12.3245 ',
|
28
|
+
' 12.3245',
|
29
|
+
'12.3245 ',
|
30
|
+
'12.3245',
|
31
|
+
'12.00',
|
32
|
+
'12',
|
33
|
+
' -.123245e2 ',
|
34
|
+
' -.123245E2 ',
|
35
|
+
' -0.123245e2 ',
|
36
|
+
' -0.123245E2 ',
|
37
|
+
' -12.3245 ',
|
38
|
+
' -12.3245',
|
39
|
+
'-12.3245 ',
|
40
|
+
'-12.3245',
|
41
|
+
'-12.00',
|
42
|
+
'-12',
|
43
|
+
' +.123245e2 ',
|
44
|
+
' +.123245E2 ',
|
45
|
+
' +0.123245e2 ',
|
46
|
+
' +0.123245E2 ',
|
47
|
+
' +12.3245 ',
|
48
|
+
' +12.3245',
|
49
|
+
'+12.3245 ',
|
50
|
+
'+12.3245',
|
51
|
+
'+12.00',
|
52
|
+
'+12'
|
53
|
+
].each do | item |
|
54
|
+
expect( @inst.validate( item ).errors ).to eq( [] )
|
55
|
+
end
|
56
|
+
|
20
57
|
end
|
21
58
|
|
22
59
|
it 'should return correct error when data is not a decimal' do
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
60
|
+
[
|
61
|
+
'hello',
|
62
|
+
'!23.00',
|
63
|
+
'24!',
|
64
|
+
'23.41 suffix',
|
65
|
+
'+0.123245j2',
|
66
|
+
'0.123245e+-2',
|
67
|
+
'+-0.123245e2',
|
68
|
+
'03_.123245E2',
|
69
|
+
'03_.123245E2',
|
70
|
+
'03._123245E2',
|
71
|
+
'03.123245_E2',
|
72
|
+
'03.123245E23_',
|
73
|
+
].each do | item |
|
74
|
+
expect( @inst.validate( item ).errors ).to eq( [
|
75
|
+
{
|
76
|
+
'code' => "generic.invalid_decimal",
|
77
|
+
'message' => "Field `one` is an invalid decimal",
|
78
|
+
'reference' => "one"
|
79
|
+
}
|
80
|
+
] )
|
81
|
+
end
|
27
82
|
end
|
28
83
|
|
29
84
|
it 'should not return error when not required and absent' do
|
@@ -598,7 +598,7 @@ describe Hoodoo::Presenters::Hash do
|
|
598
598
|
'boolean' => { :valid => [ true ], :invalid => [ 4.51, 'false' ] },
|
599
599
|
'date' => { :valid => [ Date.today.iso8601 ], :invalid => [ Date.today, '23rd January 2041' ] },
|
600
600
|
'date_time' => { :valid => [ DateTime.now.iso8601 ], :invalid => [ DateTime.now, '2017-01-27 12:00' ] },
|
601
|
-
'decimal' => { :valid => [
|
601
|
+
'decimal' => { :valid => [ '4.51' ], :invalid => [ 4.51, BigDecimal.new( '4.51' ) ] },
|
602
602
|
'enum' => { :valid => [ 'one' ], :invalid => [ 'One', 1 ] },
|
603
603
|
'float' => { :valid => [ 4.51 ], :invalid => [ BigDecimal.new(4.51, 2), '4.51' ] },
|
604
604
|
'integer' => { :valid => [ 4 ], :invalid => [ '4' ] },
|
@@ -1166,7 +1166,7 @@ describe Hoodoo::Presenters::Hash do
|
|
1166
1166
|
'boolean' => { :definition => { :length => 9, :type => :boolean }, :valid => [ true ], :invalid => [ 4.51, 'false' ] },
|
1167
1167
|
'date' => { :definition => { :length => 9, :type => :date }, :valid => [ Date.today.iso8601 ], :invalid => [ Date.today, '23rd January 2041' ] },
|
1168
1168
|
'date_time' => { :definition => { :length => 9, :type => :date_time }, :valid => [ DateTime.now.iso8601 ], :invalid => [ DateTime.now, '2017-01-27 12:00' ] },
|
1169
|
-
'decimal' => { :definition => { :length => 9, :type => :decimal, :field_precision => 2 }, :valid => [
|
1169
|
+
'decimal' => { :definition => { :length => 9, :type => :decimal, :field_precision => 2 }, :valid => [ '4.51' ], :invalid => [ 4.51, BigDecimal.new( '4.51' ) ] },
|
1170
1170
|
'enum' => { :definition => { :length => 9, :type => :enum, :field_from => [ :one, :two, :three ] }, :valid => [ 'one' ], :invalid => [ 'One', 1 ] },
|
1171
1171
|
'float' => { :definition => { :length => 9, :type => :float }, :valid => [ 4.51 ], :invalid => [ BigDecimal.new(4.51, 2), '4.51' ] },
|
1172
1172
|
'integer' => { :definition => { :length => 9, :type => :integer }, :valid => [ 4 ], :invalid => [ '4' ] },
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hoodoo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Loyalty New Zealand
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11-
|
11
|
+
date: 2017-11-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dalli
|