flash_validators 0.0.1 → 1.0.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 +4 -4
- data/.travis.yml +2 -3
- data/README.md +483 -232
- data/config/locales/en.yml +12 -0
- data/lib/flash_validators.rb +6 -0
- data/lib/flash_validators/matchers/ensure_valid_alpha_format_of.rb +18 -0
- data/lib/flash_validators/matchers/ensure_valid_alpha_numeric_format_of.rb +18 -0
- data/lib/flash_validators/matchers/ensure_valid_boolean_format_of.rb +2 -4
- data/lib/flash_validators/matchers/ensure_valid_credit_card_format_of.rb +18 -0
- data/lib/flash_validators/matchers/ensure_valid_currency_format_of.rb +2 -4
- data/lib/flash_validators/matchers/ensure_valid_email_format_of.rb +2 -4
- data/lib/flash_validators/matchers/ensure_valid_equality_matcher_of.rb +2 -4
- data/lib/flash_validators/matchers/ensure_valid_hex_format_of.rb +2 -4
- data/lib/flash_validators/matchers/ensure_valid_imei_format_of.rb +2 -4
- data/lib/flash_validators/matchers/ensure_valid_ip_format_of.rb +2 -4
- data/lib/flash_validators/matchers/ensure_valid_latitude_format_of.rb +2 -4
- data/lib/flash_validators/matchers/ensure_valid_longitude_format_of.rb +2 -4
- data/lib/flash_validators/matchers/ensure_valid_mac_address_format_of.rb +2 -4
- data/lib/flash_validators/matchers/ensure_valid_name_format_of.rb +2 -4
- data/lib/flash_validators/matchers/ensure_valid_password_format_of.rb +2 -4
- data/lib/flash_validators/matchers/ensure_valid_phone_format_of.rb +2 -4
- data/lib/flash_validators/matchers/ensure_valid_slug_format_of.rb +2 -4
- data/lib/flash_validators/matchers/ensure_valid_ssn_format_of.rb +2 -4
- data/lib/flash_validators/matchers/ensure_valid_url_format_of.rb +2 -4
- data/lib/flash_validators/matchers/ensure_valid_username_format_of.rb +2 -4
- data/lib/flash_validators/validators/alpha_numeric_validator.rb +17 -0
- data/lib/flash_validators/validators/alpha_validator.rb +19 -0
- data/lib/flash_validators/validators/credit_card_validator.rb +25 -0
- data/lib/flash_validators/validators/password_validator.rb +9 -1
- data/lib/flash_validators/version.rb +2 -2
- data/spec/lib/alpha_numeric_validator_spec.rb +61 -0
- data/spec/lib/alpha_validator_spec.rb +120 -0
- data/spec/lib/credit_card_validator_spec.rb +316 -0
- data/spec/lib/currency_validator_spec.rb +1 -1
- data/spec/lib/password_validator_spec.rb +42 -0
- metadata +15 -3
data/config/locales/en.yml
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
en:
|
2
2
|
errors:
|
3
3
|
messages:
|
4
|
+
alpha: "is not a valid alpha characters"
|
5
|
+
alpha_numeric: "is not a valid alpha-numeric characters"
|
4
6
|
boolean: "is not a valid boolean"
|
7
|
+
credit_card: "is not a valid credit card"
|
5
8
|
currency: "is not a valid currency"
|
6
9
|
email: "is not a valid email"
|
7
10
|
equality: "is not %{operator} %{attr}"
|
@@ -20,9 +23,18 @@ en:
|
|
20
23
|
username: "is not a valid username"
|
21
24
|
flash_validators:
|
22
25
|
matchers:
|
26
|
+
ensure_valid_alpha_format_of:
|
27
|
+
failure_message_for_should: "#{model} should ensure valid alpha format of attribute #{attr}"
|
28
|
+
failure_message_for_should_not: "#{model} should not ensure valid alpha format of attribute #{attr}"
|
29
|
+
ensure_valid_alpha_numeric_format_of:
|
30
|
+
failure_message_for_should: "#{model} should ensure valid alpha numeric format of attribute #{attr}"
|
31
|
+
failure_message_for_should_not: "#{model} should not ensure valid alpha numeric format of attribute #{attr}"
|
23
32
|
ensure_valid_boolean_format_of:
|
24
33
|
failure_message_for_should: "#{model} should ensure valid boolean format of attribute #{attr}"
|
25
34
|
failure_message_for_should_not: "#{model} should not ensure valid boolean format of attribute #{attr}"
|
35
|
+
ensure_valid_credit_card_format_of:
|
36
|
+
failure_message_for_should: "#{model} should ensure valid credit card format of attribute #{attr}"
|
37
|
+
failure_message_for_should_not: "#{model} should not ensure valid credit card format of attribute #{attr}"
|
26
38
|
ensure_valid_currency_format_of:
|
27
39
|
failure_message_for_should: "#{model} should ensure valid currency format of attribute #{attr}"
|
28
40
|
failure_message_for_should_not: "#{model} should not ensure valid currency format of attribute #{attr}"
|
data/lib/flash_validators.rb
CHANGED
@@ -2,7 +2,10 @@ require 'active_model'
|
|
2
2
|
require 'active_support'
|
3
3
|
require 'rspec/matchers'
|
4
4
|
require 'flash_validators/version'
|
5
|
+
require 'flash_validators/validators/alpha_validator'
|
6
|
+
require 'flash_validators/validators/alpha_numeric_validator'
|
5
7
|
require 'flash_validators/validators/boolean_validator'
|
8
|
+
require 'flash_validators/validators/credit_card_validator'
|
6
9
|
require 'flash_validators/validators/currency_validator'
|
7
10
|
require 'flash_validators/validators/email_validator'
|
8
11
|
require 'flash_validators/validators/equality_validator'
|
@@ -21,7 +24,10 @@ require 'flash_validators/validators/url_validator'
|
|
21
24
|
require 'flash_validators/validators/username_validator'
|
22
25
|
|
23
26
|
if defined?(RSpec)
|
27
|
+
require 'flash_validators/matchers/ensure_valid_alpha_format_of'
|
28
|
+
require 'flash_validators/matchers/ensure_valid_alpha_numeric_format_of'
|
24
29
|
require 'flash_validators/matchers/ensure_valid_boolean_format_of'
|
30
|
+
require 'flash_validators/matchers/ensure_valid_credit_card_format_of'
|
25
31
|
require 'flash_validators/matchers/ensure_valid_currency_format_of'
|
26
32
|
require 'flash_validators/matchers/ensure_valid_email_format_of'
|
27
33
|
require 'flash_validators/matchers/ensure_valid_equality_matcher_of'
|
@@ -0,0 +1,18 @@
|
|
1
|
+
RSpec::Matchers.define :ensure_valid_alpha_format_of do |attribute|
|
2
|
+
match do |model|
|
3
|
+
model.send("#{attribute}=", "$1234.56")
|
4
|
+
model.valid?
|
5
|
+
|
6
|
+
if model.errors.has_key?(attribute)
|
7
|
+
model.errors[attribute].include?(I18n.t('errors.messages.alpha'))
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
failure_message do |model|
|
12
|
+
I18n.t('flash_validators.matchers.ensure_valid_alpha_format_of.failure_message_for_should', model: model.class)
|
13
|
+
end
|
14
|
+
|
15
|
+
failure_message_when_negated do |model|
|
16
|
+
I18n.t('flash_validators.matchers.ensure_valid_alpha_format_of.failure_message_for_should_not', model: model.class)
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
RSpec::Matchers.define :ensure_valid_alpha_numeric_format_of do |attribute|
|
2
|
+
match do |model|
|
3
|
+
model.send("#{attribute}=", "$1234.56")
|
4
|
+
model.valid?
|
5
|
+
|
6
|
+
if model.errors.has_key?(attribute)
|
7
|
+
model.errors[attribute].include?(I18n.t('errors.messages.alpha_numeric'))
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
failure_message do |model|
|
12
|
+
I18n.t('flash_validators.matchers.ensure_valid_alpha_numeric_format_of.failure_message_for_should', model: model.class)
|
13
|
+
end
|
14
|
+
|
15
|
+
failure_message_when_negated do |model|
|
16
|
+
I18n.t('flash_validators.matchers.ensure_valid_alpha_numeric_format_of.failure_message_for_should_not', model: model.class)
|
17
|
+
end
|
18
|
+
end
|
@@ -9,12 +9,10 @@ RSpec::Matchers.define :ensure_valid_boolean_format_of do |attribute|
|
|
9
9
|
end
|
10
10
|
|
11
11
|
failure_message do |model|
|
12
|
-
I18n.t
|
13
|
-
model: model.class
|
12
|
+
I18n.t('flash_validators.matchers.ensure_valid_boolean_format_of.failure_message_for_should', model: model.class)
|
14
13
|
end
|
15
14
|
|
16
15
|
failure_message_when_negated do |model|
|
17
|
-
I18n.t
|
18
|
-
model: model.class
|
16
|
+
I18n.t('flash_validators.matchers.ensure_valid_boolean_format_of.failure_message_for_should_not', model: model.class)
|
19
17
|
end
|
20
18
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
RSpec::Matchers.define :ensure_valid_credit_card_format_of do |attribute|
|
2
|
+
match do |model|
|
3
|
+
model.send("#{attribute}=", "9999")
|
4
|
+
model.valid?
|
5
|
+
|
6
|
+
if model.errors.has_key?(attribute)
|
7
|
+
model.errors[attribute].include?(I18n.t('errors.messages.credit_card'))
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
failure_message do |model|
|
12
|
+
I18n.t('flash_validators.matchers.ensure_valid_credit_card_format_of.failure_message_for_should', model: model.class)
|
13
|
+
end
|
14
|
+
|
15
|
+
failure_message_when_negated do |model|
|
16
|
+
I18n.t('flash_validators.matchers.ensure_valid_credit_card_format_of.failure_message_for_should_not', model: model.class)
|
17
|
+
end
|
18
|
+
end
|
@@ -9,12 +9,10 @@ RSpec::Matchers.define :ensure_valid_currency_format_of do |attribute|
|
|
9
9
|
end
|
10
10
|
|
11
11
|
failure_message do |model|
|
12
|
-
I18n.t
|
13
|
-
model: model.class
|
12
|
+
I18n.t('flash_validators.matchers.ensure_valid_currency_format_of.failure_message_for_should', model: model.class)
|
14
13
|
end
|
15
14
|
|
16
15
|
failure_message_when_negated do |model|
|
17
|
-
I18n.t
|
18
|
-
model: model.class
|
16
|
+
I18n.t('flash_validators.matchers.ensure_valid_currency_format_of.failure_message_for_should_not', model: model.class)
|
19
17
|
end
|
20
18
|
end
|
@@ -9,12 +9,10 @@ RSpec::Matchers.define :ensure_valid_email_format_of do |attribute|
|
|
9
9
|
end
|
10
10
|
|
11
11
|
failure_message do |model|
|
12
|
-
I18n.t
|
13
|
-
model: model.class
|
12
|
+
I18n.t('flash_validators.matchers.ensure_valid_email_format_of.failure_message_for_should', model: model.class)
|
14
13
|
end
|
15
14
|
|
16
15
|
failure_message_when_negated do |model|
|
17
|
-
I18n.t
|
18
|
-
model: model.class
|
16
|
+
I18n.t('flash_validators.matchers.ensure_valid_email_format_of.failure_message_for_should_not', model: model.class)
|
19
17
|
end
|
20
18
|
end
|
@@ -21,12 +21,10 @@ RSpec::Matchers.define :ensure_equality_of do |attribute|
|
|
21
21
|
end
|
22
22
|
|
23
23
|
failure_message do |model|
|
24
|
-
I18n.t
|
25
|
-
model: model.class, attr: attribute.inspect, operator: "operator"
|
24
|
+
I18n.t('flash_validators.matchers.ensure_valid_equality_format_of.failure_message_for_should', model: model.class, attr: attribute.inspect, operator: "operator")
|
26
25
|
end
|
27
26
|
|
28
27
|
failure_message_when_negated do |model|
|
29
|
-
I18n.t
|
30
|
-
model: model.class, attr: attribute.inspect, operator: "operator"
|
28
|
+
I18n.t('flash_validators.matchers.ensure_valid_equality_format_of.failure_message_for_should_not', model: model.class, attr: attribute.inspect, operator: "operator")
|
31
29
|
end
|
32
30
|
end
|
@@ -9,12 +9,10 @@ RSpec::Matchers.define :ensure_valid_hex_format_of do |attribute|
|
|
9
9
|
end
|
10
10
|
|
11
11
|
failure_message do |model|
|
12
|
-
I18n.t
|
13
|
-
model: model.class
|
12
|
+
I18n.t('flash_validators.matchers.ensure_valid_hex_format_of.failure_message_for_should', model: model.class)
|
14
13
|
end
|
15
14
|
|
16
15
|
failure_message_when_negated do |model|
|
17
|
-
I18n.t
|
18
|
-
model: model.class
|
16
|
+
I18n.t('flash_validators.matchers.ensure_valid_hex_format_of.failure_message_for_should_not', model: model.class)
|
19
17
|
end
|
20
18
|
end
|
@@ -9,12 +9,10 @@ RSpec::Matchers.define :ensure_valid_imei_format_of do |attribute|
|
|
9
9
|
end
|
10
10
|
|
11
11
|
failure_message do |model|
|
12
|
-
I18n.t
|
13
|
-
model: model.class
|
12
|
+
I18n.t('flash_validators.matchers.ensure_valid_imei_format_of.failure_message_for_should', model: model.class)
|
14
13
|
end
|
15
14
|
|
16
15
|
failure_message_when_negated do |model|
|
17
|
-
I18n.t
|
18
|
-
model: model.class
|
16
|
+
I18n.t('flash_validators.matchers.ensure_valid_imei_format_of.failure_message_for_should_not', model: model.class)
|
19
17
|
end
|
20
18
|
end
|
@@ -9,12 +9,10 @@ RSpec::Matchers.define :ensure_valid_ip_format_of do |attribute|
|
|
9
9
|
end
|
10
10
|
|
11
11
|
failure_message do |model|
|
12
|
-
I18n.t
|
13
|
-
model: model.class
|
12
|
+
I18n.t('flash_validators.matchers.ensure_valid_ip_format_of.failure_message_for_should', model: model.class)
|
14
13
|
end
|
15
14
|
|
16
15
|
failure_message_when_negated do |model|
|
17
|
-
I18n.t
|
18
|
-
model: model.class
|
16
|
+
I18n.t('flash_validators.matchers.ensure_valid_ip_format_of.failure_message_for_should_not', model: model.class)
|
19
17
|
end
|
20
18
|
end
|
@@ -9,12 +9,10 @@ RSpec::Matchers.define :ensure_valid_latitude_format_of do |attribute|
|
|
9
9
|
end
|
10
10
|
|
11
11
|
failure_message do |model|
|
12
|
-
I18n.t
|
13
|
-
model: model.class
|
12
|
+
I18n.t('flash_validators.matchers.ensure_valid_latitude_format_of.failure_message_for_should', model: model.class)
|
14
13
|
end
|
15
14
|
|
16
15
|
failure_message_when_negated do |model|
|
17
|
-
I18n.t
|
18
|
-
model: model.class
|
16
|
+
I18n.t('flash_validators.matchers.ensure_valid_latitude_format_of.failure_message_for_should_not', model: model.class)
|
19
17
|
end
|
20
18
|
end
|
@@ -9,12 +9,10 @@ RSpec::Matchers.define :ensure_valid_longitude_format_of do |attribute|
|
|
9
9
|
end
|
10
10
|
|
11
11
|
failure_message do |model|
|
12
|
-
I18n.t
|
13
|
-
model: model.class
|
12
|
+
I18n.t('flash_validators.matchers.ensure_valid_longitude_format_of.failure_message_for_should', model: model.class)
|
14
13
|
end
|
15
14
|
|
16
15
|
failure_message_when_negated do |model|
|
17
|
-
I18n.t
|
18
|
-
model: model.class
|
16
|
+
I18n.t('flash_validators.matchers.ensure_valid_longitude_format_of.failure_message_for_should_not', model: model.class)
|
19
17
|
end
|
20
18
|
end
|
@@ -9,12 +9,10 @@ RSpec::Matchers.define :ensure_valid_mac_address_format_of do |attribute|
|
|
9
9
|
end
|
10
10
|
|
11
11
|
failure_message do |model|
|
12
|
-
I18n.t
|
13
|
-
model: model.class
|
12
|
+
I18n.t('flash_validators.matchers.ensure_valid_mac_address_format_of.failure_message_for_should', model: model.class)
|
14
13
|
end
|
15
14
|
|
16
15
|
failure_message_when_negated do |model|
|
17
|
-
I18n.t
|
18
|
-
model: model.class
|
16
|
+
I18n.t('flash_validators.matchers.ensure_valid_mac_address_format_of.failure_message_for_should_not', model: model.class)
|
19
17
|
end
|
20
18
|
end
|
@@ -9,12 +9,10 @@ RSpec::Matchers.define :ensure_valid_name_format_of do |attribute|
|
|
9
9
|
end
|
10
10
|
|
11
11
|
failure_message do |model|
|
12
|
-
I18n.t
|
13
|
-
model: model.class
|
12
|
+
I18n.t('flash_validators.matchers.ensure_valid_name_format_of.failure_message_for_should', model: model.class)
|
14
13
|
end
|
15
14
|
|
16
15
|
failure_message_when_negated do |model|
|
17
|
-
I18n.t
|
18
|
-
model: model.class
|
16
|
+
I18n.t('flash_validators.matchers.ensure_valid_name_format_of.failure_message_for_should_not', model: model.class)
|
19
17
|
end
|
20
18
|
end
|
@@ -9,12 +9,10 @@ RSpec::Matchers.define :ensure_valid_password_format_of do |attribute|
|
|
9
9
|
end
|
10
10
|
|
11
11
|
failure_message do |model|
|
12
|
-
I18n.t
|
13
|
-
model: model.class
|
12
|
+
I18n.t('flash_validators.matchers.ensure_valid_password_format_of.failure_message_for_should', model: model.class)
|
14
13
|
end
|
15
14
|
|
16
15
|
failure_message_when_negated do |model|
|
17
|
-
I18n.t
|
18
|
-
model: model.class
|
16
|
+
I18n.t('flash_validators.matchers.ensure_valid_password_format_of.failure_message_for_should_not', model: model.class)
|
19
17
|
end
|
20
18
|
end
|
@@ -9,12 +9,10 @@ RSpec::Matchers.define :ensure_valid_phone_format_of do |attribute|
|
|
9
9
|
end
|
10
10
|
|
11
11
|
failure_message do |model|
|
12
|
-
I18n.t
|
13
|
-
model: model.class
|
12
|
+
I18n.t('flash_validators.matchers.ensure_valid_phone_format_of.failure_message_for_should', model: model.class)
|
14
13
|
end
|
15
14
|
|
16
15
|
failure_message_when_negated do |model|
|
17
|
-
I18n.t
|
18
|
-
model: model.class
|
16
|
+
I18n.t('flash_validators.matchers.ensure_valid_phone_format_of.failure_message_for_should_not', model: model.class)
|
19
17
|
end
|
20
18
|
end
|
@@ -9,12 +9,10 @@ RSpec::Matchers.define :ensure_valid_slug_format_of do |attribute|
|
|
9
9
|
end
|
10
10
|
|
11
11
|
failure_message do |model|
|
12
|
-
I18n.t
|
13
|
-
model: model.class
|
12
|
+
I18n.t('flash_validators.matchers.ensure_valid_slug_format_of.failure_message_for_should', model: model.class)
|
14
13
|
end
|
15
14
|
|
16
15
|
failure_message_when_negated do |model|
|
17
|
-
I18n.t
|
18
|
-
model: model.class
|
16
|
+
I18n.t('flash_validators.matchers.ensure_valid_slug_format_of.failure_message_for_should_not', model: model.class)
|
19
17
|
end
|
20
18
|
end
|
@@ -9,12 +9,10 @@ RSpec::Matchers.define :ensure_valid_ssn_format_of do |attribute|
|
|
9
9
|
end
|
10
10
|
|
11
11
|
failure_message do |model|
|
12
|
-
I18n.t
|
13
|
-
model: model.class
|
12
|
+
I18n.t('flash_validators.matchers.ensure_valid_ssn_format_of.failure_message_for_should', model: model.class)
|
14
13
|
end
|
15
14
|
|
16
15
|
failure_message_when_negated do |model|
|
17
|
-
I18n.t
|
18
|
-
model: model.class
|
16
|
+
I18n.t('flash_validators.matchers.ensure_valid_ssn_format_of.failure_message_for_should_not', model: model.class)
|
19
17
|
end
|
20
18
|
end
|
@@ -9,12 +9,10 @@ RSpec::Matchers.define :ensure_valid_url_format_of do |attribute|
|
|
9
9
|
end
|
10
10
|
|
11
11
|
failure_message do |model|
|
12
|
-
I18n.t
|
13
|
-
model: model.class
|
12
|
+
I18n.t('flash_validators.matchers.ensure_valid_url_format_of.failure_message_for_should', model: model.class)
|
14
13
|
end
|
15
14
|
|
16
15
|
failure_message_when_negated do |model|
|
17
|
-
I18n.t
|
18
|
-
model: model.class
|
16
|
+
I18n.t('flash_validators.matchers.ensure_valid_url_format_of.failure_message_for_should_not', model: model.class)
|
19
17
|
end
|
20
18
|
end
|
@@ -9,12 +9,10 @@ RSpec::Matchers.define :ensure_valid_username_format_of do |attribute|
|
|
9
9
|
end
|
10
10
|
|
11
11
|
failure_message do |model|
|
12
|
-
I18n.t
|
13
|
-
model: model.class
|
12
|
+
I18n.t('flash_validators.matchers.ensure_valid_username_format_of.failure_message_for_should', model: model.class)
|
14
13
|
end
|
15
14
|
|
16
15
|
failure_message_when_negated do |model|
|
17
|
-
I18n.t
|
18
|
-
model: model.class
|
16
|
+
I18n.t('flash_validators.matchers.ensure_valid_username_format_of.failure_message_for_should_not', model: model.class)
|
19
17
|
end
|
20
18
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class AlphaNumericValidator < ActiveModel::EachValidator
|
2
|
+
|
3
|
+
def validate_each(record, attribute, value)
|
4
|
+
strict_mode = options[:strict] || false
|
5
|
+
|
6
|
+
if strict_mode
|
7
|
+
format = /^[A-Za-z0-9]+$/i # Strict: requires no spaces to be included
|
8
|
+
else
|
9
|
+
format = /^[A-Za-z0-9 ]+$/i
|
10
|
+
end
|
11
|
+
|
12
|
+
unless value =~ format
|
13
|
+
record.errors[attribute] << (options[:message] || I18n.t('errors.messages.alpha_numeric'))
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class AlphaValidator < ActiveModel::EachValidator
|
2
|
+
|
3
|
+
def validate_each(record, attribute, value)
|
4
|
+
if options[:strict]
|
5
|
+
format = /^[A-Za-z]+$/i # Strict: requires no spaces to be included
|
6
|
+
elsif options[:lowercase]
|
7
|
+
format = /^[a-z]+$/
|
8
|
+
elsif options[:uppercase]
|
9
|
+
format = /^[A-Z]+$/
|
10
|
+
else
|
11
|
+
format = /^[A-Za-z ]+$/i
|
12
|
+
end
|
13
|
+
|
14
|
+
unless value =~ format
|
15
|
+
record.errors[attribute] << (options[:message] || I18n.t('errors.messages.alpha'))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class CreditCardValidator < ActiveModel::EachValidator
|
2
|
+
|
3
|
+
def validate_each(record, attribute, value)
|
4
|
+
if options[:american_express]
|
5
|
+
format = /^3[47][0-9]{13}$/
|
6
|
+
elsif options[:diners_club]
|
7
|
+
format = /^3(?:0[0-5]|[68][0-9])[0-9]{11}$/
|
8
|
+
elsif options[:discover]
|
9
|
+
format = /^6(?:011|5[0-9]{2})[0-9]{12}$/
|
10
|
+
elsif options[:jbc]
|
11
|
+
format = /^(?:2131|1800|35\d{3})\d{11}$/
|
12
|
+
elsif options[:master_card]
|
13
|
+
format = /^5[1-5][0-9]{14}$/
|
14
|
+
elsif options[:visa]
|
15
|
+
format = /^4[0-9]{12}(?:[0-9]{3})?$/
|
16
|
+
else
|
17
|
+
format = /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|6(?:011|5[0-9]{2})[0-9]{12}|(?:2131|1800|35\d{3})\d{11})$/
|
18
|
+
end
|
19
|
+
|
20
|
+
unless value.to_s =~ format
|
21
|
+
record.errors[attribute] << (options[:message] || I18n.t('errors.messages.credit_card'))
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|