common_validators 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -7,13 +7,35 @@ Collection of common validators for Rails applications.
7
7
 
8
8
  [RubyDoc Documentation](http://rubydoc.info/github/gshaw/common_validators/master/frames)
9
9
 
10
- ### Examples
11
-
12
- ```
13
- validates :email, email_format: true, presence: true
14
- validates :date, date_format: true
15
- validates :amount, money_format: { exclude_cents: true }
16
- validates :phone_number, phone_number_format: true
17
- validates :slug, slug_format: true
18
- validates :url, url_format: true
19
- ```
10
+ ## Usage
11
+
12
+ In your ActiveRecord models include one more validations on your model's fields.
13
+
14
+ validates :email, email_format: true, presence: true
15
+ validates :date, date_format: true
16
+ validates :amount, money_format: { exclude_cents: true }
17
+ validates :phone_number, phone_number_format: true
18
+ validates :slug, slug_format: true
19
+ validates :url, url_format: true
20
+
21
+ ## Installation
22
+
23
+ Add this line to your application's Gemfile:
24
+
25
+ gem 'venture_base'
26
+
27
+ And then execute:
28
+
29
+ $ bundle
30
+
31
+ Or install it yourself as:
32
+
33
+ $ gem install venture_base
34
+
35
+ ## Contributing
36
+
37
+ 1. Fork it
38
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
39
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
40
+ 4. Push to the branch (`git push origin my-new-feature`)
41
+ 5. Create new Pull Request
@@ -1,3 +1,5 @@
1
+ require 'bigdecimal'
2
+
1
3
  # Validate fields to look like currency values
2
4
  #
3
5
  # NOTE: Currently limited to USD/CAD values.
@@ -10,9 +12,6 @@
10
12
  # validates :amount, money_format: true # optional
11
13
  # validates :amount, money_format: { exclude_cents: true }
12
14
  # validates :amount, money_format: true, presence: true # required
13
-
14
- require 'bigdecimal'
15
-
16
15
  class MoneyFormatValidator < ActiveModel::EachValidator
17
16
  MONEY_REGEX = /\A[-+]?\d+(\.\d{1,2})?\z/
18
17
 
@@ -24,8 +23,20 @@ class MoneyFormatValidator < ActiveModel::EachValidator
24
23
  end
25
24
  return if value.blank?
26
25
 
26
+ # Need to first convert BigDecimal to floating point representation of string
27
+ if value.kind_of?(BigDecimal)
28
+ value = value.to_s("F")
29
+ end
30
+
31
+ # Finally convert any other types to string and clean off whitespace
32
+ value = value.to_s.strip
33
+
34
+ # Regex seems a bit odd to use here (vs converting to BigDeciaml) but we need
35
+ # to check for values that BigDecimal can't represent (e.g., "badvalue") so
36
+ # for now this works.
27
37
  record.errors.add(attr_name, :money_format, options) unless value =~ MONEY_REGEX
28
38
 
39
+ # Check if value has cents but shouldn't
29
40
  if options[:exclude_cents] && value_has_cents?(value)
30
41
  record.errors.add(attr_name, :money_format_whole_number)
31
42
  end
@@ -18,7 +18,9 @@ Gem::Specification.new do |spec|
18
18
  spec.require_paths = ["lib"]
19
19
 
20
20
  spec.required_ruby_version = ">= 1.9"
21
- spec.add_dependency 'rails', '~> 3.2'
21
+
22
+ spec.add_dependency "rails", "~> 3.2"
23
+ spec.add_dependency "bigdecimal"
22
24
 
23
25
  spec.add_development_dependency "bundler", "~> 1.3"
24
26
  spec.add_development_dependency "rake"
@@ -1,3 +1,3 @@
1
1
  module CommonValidators
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -27,6 +27,9 @@ class MoneyFormatValidatorTest < ActiveSupport::TestCase
27
27
  assert_invalid_amount "10 20"
28
28
  assert_invalid_amount "10.123"
29
29
  assert_invalid_amount "1,000.12"
30
+ assert_invalid_amount "1000000.999"
31
+ assert_invalid_amount 100.999
32
+ assert_invalid_amount BigDecimal.new("100.999")
30
33
 
31
34
  assert_invalid_amount "100.99", :whole_amount
32
35
  assert_invalid_amount "100.1", :whole_amount
@@ -34,13 +37,16 @@ class MoneyFormatValidatorTest < ActiveSupport::TestCase
34
37
 
35
38
  test "valid amount" do
36
39
  assert_valid_amount ""
40
+ assert_valid_amount "0"
37
41
  assert_valid_amount "1"
38
42
  assert_valid_amount "1.00"
39
43
  assert_valid_amount "1.99"
40
44
  assert_valid_amount "+1.99"
41
45
  assert_valid_amount "-1.99"
42
- assert_valid_amount "100000.99"
43
- assert_valid_amount "100000.99"
46
+ assert_valid_amount "100000000.99"
47
+ assert_valid_amount 100
48
+ assert_valid_amount 100.99
49
+ assert_valid_amount BigDecimal.new("100.99")
44
50
 
45
51
  assert_valid_amount "100.00", :whole_amount
46
52
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: common_validators
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -27,6 +27,22 @@ dependencies:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
29
  version: '3.2'
30
+ - !ruby/object:Gem::Dependency
31
+ name: bigdecimal
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
30
46
  - !ruby/object:Gem::Dependency
31
47
  name: bundler
32
48
  requirement: !ruby/object:Gem::Requirement
@@ -145,7 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
161
  version: '0'
146
162
  segments:
147
163
  - 0
148
- hash: -2601123242860977824
164
+ hash: -922536056553976169
149
165
  requirements: []
150
166
  rubyforge_project:
151
167
  rubygems_version: 1.8.23