evelpidon_validators 0.3.0 → 0.4.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.
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Evelpidon Validators changelog
2
2
 
3
+ ## 0.4.0 / 2012-01-13
4
+
5
+ * Fix for nested forms and sibling finding
6
+ * Added CreditCardValidator
7
+
3
8
  ## 0.3.0 / 2011-12-29
4
9
 
5
10
  * Added AssociationValidator
data/README.md CHANGED
@@ -13,6 +13,8 @@ already loaded.
13
13
  * Different
14
14
  * Less
15
15
  * More
16
+ * Associated
17
+ * Credit Card
16
18
 
17
19
  ## Installation
18
20
 
@@ -24,4 +24,5 @@ Gem::Specification.new do |s|
24
24
  s.add_development_dependency "test-unit"
25
25
 
26
26
  s.add_runtime_dependency "activemodel"
27
+ s.add_runtime_dependency "credit_card_validator"
27
28
  end
@@ -0,0 +1,7 @@
1
+ clientSideValidations.validators.remote['credit_card'] = function(element, options) {
2
+ if ($.ajax({
3
+ url: '/validators/credit_card.json',
4
+ data: { value: element.val(), type: clientSideValidations.helpers.getSiblingField(element, options.type).val() },
5
+ async: false
6
+ }).status == 404) { return options.message; }
7
+ };
@@ -4,6 +4,6 @@
4
4
  clientSideValidations.helpers = clientSideValidations.helpers || {};
5
5
 
6
6
  clientSideValidations.helpers.getSiblingField = function(field, siblingName) {
7
- var thanName = field.attr('name').replace(/\[[^\]]*\]/, '[' + siblingName + ']');
7
+ var thanName = field.attr('name').replace(/\[[^\]]*\]$/, '[' + siblingName + ']');
8
8
  return field.parents('form').find("[name='" + thanName + "']");
9
9
  };
@@ -2,3 +2,4 @@ require "evelpidon_validators/different"
2
2
  require "evelpidon_validators/greater"
3
3
  require "evelpidon_validators/less"
4
4
  require "evelpidon_validators/associated"
5
+ require "evelpidon_validators/credit_card"
@@ -0,0 +1,31 @@
1
+ require 'credit_card_validator'
2
+
3
+ if defined?(Rails) && Rails.env == 'development'
4
+ ::CreditCardValidator::Validator.options[:test_numbers_are_valid] = true
5
+ end
6
+
7
+ module ActiveModel
8
+ module Validations
9
+ class CreditCardValidator < EachValidator
10
+ def self.valid_credit_card?(number, type)
11
+ ::CreditCardValidator::Validator.options[:allowed_card_types] = [(type || '').underscore.to_sym]
12
+ ::CreditCardValidator::Validator.valid?(number)
13
+ end
14
+
15
+ def validate_each(record, attribute, value)
16
+ unless self.class.valid_credit_card? value, record.send(options[:type])
17
+ record.errors.add(attribute, :credit_card, options)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ module ClientSideValidations::Middleware
25
+ class CreditCard < Base
26
+ def response
27
+ self.status = ActiveModel::Validations::CreditCardValidator.valid_credit_card?(request.params[:value], request.params[:type]) ? 200 : 404
28
+ super
29
+ end
30
+ end
31
+ end if defined?(ClientSideValidations)
@@ -1,3 +1,3 @@
1
1
  module EvelpidonValidators
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -0,0 +1,98 @@
1
+ require 'test_helper'
2
+ require 'evelpidon_validators/credit_card'
3
+
4
+ class CreditCardValidatorTest < ActiveSupport::TestCase
5
+
6
+ class Payment
7
+ include ActiveModel::Validations
8
+ attr_accessor :card_type, :card_number
9
+ validates :card_number, :credit_card => { :type => :card_type }
10
+ end
11
+
12
+ setup do
13
+ CreditCardValidator::Validator.options[:test_numbers_are_valid] = true
14
+ @payment = Payment.new
15
+ end
16
+
17
+ test "visa cards" do
18
+ assert_valid_card_type_and_number 'Visa', '4111111111111111'
19
+ assert_valid_card_type_and_number 'visa', '4111111111111111'
20
+
21
+ assert_invalid_card_type_and_number 'MasterCard', '4111111111111111'
22
+ assert_invalid_card_type_and_number 'DinersClub', '4111111111111111'
23
+ assert_invalid_card_type_and_number 'Amex', '4111111111111111'
24
+ assert_invalid_card_type_and_number 'Discover', '4111111111111111'
25
+ assert_invalid_card_type_and_number 'Maestro', '4111111111111111'
26
+ end
27
+
28
+ test "master card cards" do
29
+ assert_valid_card_type_and_number 'MasterCard', '5555555555554444'
30
+ assert_valid_card_type_and_number 'master_card', '5555555555554444'
31
+
32
+ assert_invalid_card_type_and_number 'Visa', '5555555555554444'
33
+ assert_invalid_card_type_and_number 'DinersClub', '5555555555554444'
34
+ assert_invalid_card_type_and_number 'Amex', '5555555555554444'
35
+ assert_invalid_card_type_and_number 'Discover', '5555555555554444'
36
+ assert_invalid_card_type_and_number 'Maestro', '5555555555554444'
37
+ end
38
+
39
+ test "diners club cards" do
40
+ assert_valid_card_type_and_number 'DinersClub', '30569309025904'
41
+ assert_valid_card_type_and_number 'diners_club', '30569309025904'
42
+
43
+ assert_invalid_card_type_and_number 'Visa', '30569309025904'
44
+ assert_invalid_card_type_and_number 'MasterCard', '30569309025904'
45
+ assert_invalid_card_type_and_number 'Amex', '30569309025904'
46
+ assert_invalid_card_type_and_number 'Discover', '30569309025904'
47
+ assert_invalid_card_type_and_number 'Maestro', '30569309025904'
48
+ end
49
+
50
+ test "amex cards" do
51
+ assert_valid_card_type_and_number 'Amex', '371449635398431'
52
+ assert_valid_card_type_and_number 'amex', '371449635398431'
53
+
54
+ assert_invalid_card_type_and_number 'Visa', '371449635398431'
55
+ assert_invalid_card_type_and_number 'MasterCard', '371449635398431'
56
+ assert_invalid_card_type_and_number 'DinersClub', '371449635398431'
57
+ assert_invalid_card_type_and_number 'Discover', '371449635398431'
58
+ assert_invalid_card_type_and_number 'Maestro', '371449635398431'
59
+ end
60
+
61
+ test "discover cards" do
62
+ assert_valid_card_type_and_number 'Discover', '6011000990139424'
63
+ assert_valid_card_type_and_number 'discover', '6011000990139424'
64
+
65
+ assert_invalid_card_type_and_number 'Visa', '6011000990139424'
66
+ assert_invalid_card_type_and_number 'MasterCard', '6011000990139424'
67
+ assert_invalid_card_type_and_number 'DinersClub', '6011000990139424'
68
+ assert_invalid_card_type_and_number 'Amex', '6011000990139424'
69
+ assert_invalid_card_type_and_number 'Maestro', '6011000990139424'
70
+ end
71
+
72
+ test "maestro cards" do
73
+ assert_valid_card_type_and_number 'Maestro', '6759671431256542'
74
+ assert_valid_card_type_and_number 'maestro', '6759671431256542'
75
+
76
+ assert_invalid_card_type_and_number 'Visa', '6759671431256542'
77
+ assert_invalid_card_type_and_number 'MasterCard', '6759671431256542'
78
+ assert_invalid_card_type_and_number 'DinersClub', '6759671431256542'
79
+ assert_invalid_card_type_and_number 'Discover', '6759671431256542'
80
+ assert_invalid_card_type_and_number 'Discover', '6759671431256542'
81
+ end
82
+
83
+ #########
84
+ protected
85
+ #########
86
+
87
+ def assert_valid_card_type_and_number(type, number)
88
+ @payment.card_type = type
89
+ @payment.card_number = number
90
+ assert_valid_attribute @payment, :card_number
91
+ end
92
+
93
+ def assert_invalid_card_type_and_number(type, number)
94
+ @payment.card_type = type
95
+ @payment.card_number = number
96
+ assert_invalid_attribute @payment, :card_number
97
+ end
98
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evelpidon_validators
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2011-12-29 00:00:00.000000000 Z
13
+ date: 2012-01-13 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
17
- requirement: &17211260 !ruby/object:Gem::Requirement
17
+ requirement: &16770240 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *17211260
25
+ version_requirements: *16770240
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: activesupport
28
- requirement: &17210780 !ruby/object:Gem::Requirement
28
+ requirement: &16769800 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *17210780
36
+ version_requirements: *16769800
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: evelpidon_test_helpers
39
- requirement: &17210360 !ruby/object:Gem::Requirement
39
+ requirement: &16769340 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *17210360
47
+ version_requirements: *16769340
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: test-unit
50
- requirement: &17209920 !ruby/object:Gem::Requirement
50
+ requirement: &16768860 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *17209920
58
+ version_requirements: *16768860
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: activemodel
61
- requirement: &17209440 !ruby/object:Gem::Requirement
61
+ requirement: &16768380 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,7 +66,18 @@ dependencies:
66
66
  version: '0'
67
67
  type: :runtime
68
68
  prerelease: false
69
- version_requirements: *17209440
69
+ version_requirements: *16768380
70
+ - !ruby/object:Gem::Dependency
71
+ name: credit_card_validator
72
+ requirement: &16767920 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ type: :runtime
79
+ prerelease: false
80
+ version_requirements: *16767920
70
81
  description: Useful ActiveModel validators with ClientSideValidations support.
71
82
  email:
72
83
  - n.dimitrakopoulos@pamediakopes.gr
@@ -83,18 +94,21 @@ files:
83
94
  - Rakefile
84
95
  - evelpidon_validators.gemspec
85
96
  - lib/assets/javascripts/evelpidon_validators.js
97
+ - lib/assets/javascripts/evelpidon_validators/credit_card.js
86
98
  - lib/assets/javascripts/evelpidon_validators/different.js
87
99
  - lib/assets/javascripts/evelpidon_validators/greater.js
88
100
  - lib/assets/javascripts/evelpidon_validators/less.js
89
101
  - lib/evelpidon_validators.rb
90
102
  - lib/evelpidon_validators/all.rb
91
103
  - lib/evelpidon_validators/associated.rb
104
+ - lib/evelpidon_validators/credit_card.rb
92
105
  - lib/evelpidon_validators/different.rb
93
106
  - lib/evelpidon_validators/greater.rb
94
107
  - lib/evelpidon_validators/less.rb
95
108
  - lib/evelpidon_validators/rails.rb
96
109
  - lib/evelpidon_validators/version.rb
97
110
  - test/associated_test.rb
111
+ - test/credit_card_test.rb
98
112
  - test/different_test.rb
99
113
  - test/greater_test.rb
100
114
  - test/less_test.rb