common_validators 1.0.3 → 1.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: 145d58318d64d1dec90cf8fa41516755d8278822
4
- data.tar.gz: 52cc2f970a43d5044cd089be6eb4ec9664037f61
3
+ metadata.gz: d988741f639f92a4b78583e01e4be5c63ad55bd1
4
+ data.tar.gz: bd01cb9d66ad674994afa62b96465033fff88608
5
5
  SHA512:
6
- metadata.gz: 41d2cf19ed249f8b7650d8ab972b43688f3af3deaafb9e2357c245d922a48cf806b9c9525d7d1aa249b6e873f7dfbf305f0c0bf429e761fa3da3e9448ff8f2c0
7
- data.tar.gz: e1cd1f860c38cccc9461d2552fcf7b9e3364cb0dc0c7875d08d17b39c542fbbcd67e9c873763047d5a014c13fa0a63d51d49a639923c076855dd5f51c2e238dd
6
+ metadata.gz: 7ba5d948547f2052aa1b1a7ef5895c1fc993a20be7bcd4234288f924c2b326806ee80e01e597aa8158762297c5977af46bac9f472d955c652f310eb286549578
7
+ data.tar.gz: 527d1f8d6d86eccdfc1f7385e42cea26a98b1a3be8bf5a5b6951483f5b3dfdb3eb2ae0f9cc169d8989945cdc0a1484e20bea2f3a22885eb5e10f04ffa2d2b2f4
data/.travis.yml CHANGED
@@ -1,5 +1,4 @@
1
1
  language: ruby
2
2
 
3
3
  rvm:
4
- - 1.9.3
5
-
4
+ - 2.0.0
@@ -4,13 +4,16 @@ require 'bigdecimal'
4
4
  #
5
5
  # NOTE: Currently limited to USD/CAD values.
6
6
  #
7
- # Includes an option to limit value to only whole dollar amounts.
7
+ # Options:
8
+ #
9
+ # * `exclude_cents = true|false` determines if amount can have cents (default false)
10
+ # * `allow_negative = true|false` determines if amount can be negative (default false)
8
11
  #
9
12
  # A blank value is considered valid (use presence validator to check for that)
10
13
  #
11
14
  # Examples
12
15
  # validates :amount, money_format: true # optional
13
- # validates :amount, money_format: { exclude_cents: true }
16
+ # validates :amount, money_format: { exclude_cents: true, allow_negative: true }
14
17
  # validates :amount, money_format: true, presence: true # required
15
18
  class MoneyFormatValidator < ActiveModel::EachValidator
16
19
  MONEY_REGEX = /\A[-+]?\d+(\.\d{1,2})?\z/
@@ -40,9 +43,18 @@ class MoneyFormatValidator < ActiveModel::EachValidator
40
43
  if options[:exclude_cents] && value_has_cents?(value)
41
44
  record.errors.add(attr_name, :money_format_has_cents)
42
45
  end
46
+
47
+ # Check if value is negative but shouldn't
48
+ if value_is_negative?(value)
49
+ record.errors.add(attr_name, :money_format_is_negative) unless options[:allow_negative]
50
+ end
43
51
  end
44
52
 
45
53
  def value_has_cents?(value)
46
54
  BigDecimal.new(value.to_i) != BigDecimal.new(value)
47
55
  end
56
+
57
+ def value_is_negative?(value)
58
+ value.to_i < 0
59
+ end
48
60
  end
@@ -5,6 +5,7 @@ en:
5
5
  email_format: "is invalid"
6
6
  money_format: "is invalid"
7
7
  money_format_has_cents: "must not include cents"
8
+ money_format_is_negative: "must not be negative"
8
9
  phone_number_format: "is invalid"
9
10
  slug_format: "is invalid, only lowercase letters and numbers allowed"
10
11
  url_format: "is invalid"
@@ -1,3 +1,3 @@
1
1
  module CommonValidators
2
- VERSION = "1.0.3"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -3,10 +3,11 @@ require File.expand_path("../../../app/validators/money_format_validator", __FI
3
3
 
4
4
  class TestModel
5
5
  include ActiveModel::Validations
6
- attr_accessor :amount, :whole_amount
6
+ attr_accessor :amount, :whole_amount, :negative_amount
7
7
 
8
8
  validates :amount, money_format: true
9
9
  validates :whole_amount, money_format: { exclude_cents: true }
10
+ validates :negative_amount, money_format: { allow_negative: true }
10
11
  end
11
12
 
12
13
  class MoneyFormatValidatorTest < ActiveSupport::TestCase
@@ -29,6 +30,7 @@ class MoneyFormatValidatorTest < ActiveSupport::TestCase
29
30
  assert_invalid_amount "1,000.12"
30
31
  assert_invalid_amount "1000000.999"
31
32
  assert_invalid_amount 100.999
33
+ assert_invalid_amount -1
32
34
  assert_invalid_amount BigDecimal.new("100.999")
33
35
 
34
36
  assert_invalid_amount "100.99", :whole_amount
@@ -42,7 +44,7 @@ class MoneyFormatValidatorTest < ActiveSupport::TestCase
42
44
  assert_valid_amount "1.00"
43
45
  assert_valid_amount "1.99"
44
46
  assert_valid_amount "+1.99"
45
- assert_valid_amount "-1.99"
47
+ assert_valid_amount "-1.99", :negative_amount
46
48
  assert_valid_amount "100000000.99"
47
49
  assert_valid_amount 100
48
50
  assert_valid_amount 100.99
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: common_validators
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerry Shaw
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-19 00:00:00.000000000 Z
11
+ date: 2014-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -200,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
200
  version: '0'
201
201
  requirements: []
202
202
  rubyforge_project:
203
- rubygems_version: 2.0.14
203
+ rubygems_version: 2.1.11
204
204
  signing_key:
205
205
  specification_version: 4
206
206
  summary: Common validators for Rails applications