common_validators 1.0.3 → 1.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: 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