validation_kit 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,8 +4,8 @@ module ValidationKit
4
4
  ALL_LOWERCASE = -1
5
5
 
6
6
  def validate_each(record, attribute, value)
7
- next if value.nil?
8
- next if value.gsub(/\W/, "").size < 3 # skip very short words
7
+ return if value.nil?
8
+ return if value.gsub(/\W/, "").size < 3 # skip very short words
9
9
  error = nil
10
10
 
11
11
  if (value.upcase == value)
@@ -14,7 +14,7 @@ module ValidationKit
14
14
  error = ALL_LOWERCASE
15
15
  end
16
16
 
17
- next if error.nil?
17
+ return if error.nil?
18
18
 
19
19
  item_name = I18n.t("activerecord.models.attributes.#{name.underscore}.#{attribute}",
20
20
  :default => nil) or options[:attribute_name] or attribute
@@ -23,9 +23,9 @@ module ValidationKit
23
23
  country = false
24
24
  end
25
25
 
26
- next unless country
26
+ return unless country
27
27
  current_regex = regex_for_country(country)
28
- next unless current_regex
28
+ return unless current_regex
29
29
 
30
30
  new_value = value.to_s.gsub(/[^0-9]/, '')
31
31
  new_value ||= ''
@@ -0,0 +1,87 @@
1
+ module ValidationKit
2
+ class PostalCodeValidator < ActiveModel::EachValidator
3
+ def postal_code_regex_for_country(country_code)
4
+ if country_code.blank?
5
+ nil
6
+ elsif ["AU", "NZ"].include?(country_code)
7
+ /\d{4}/
8
+ elsif ["US"].include?(country_code)
9
+ /\d{5}(-\d{4})?/
10
+ elsif ["CA"].include?(country_code)
11
+ /[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTWVXYZ]\d[ABCEGHJKLMNPRSTWVXYZ]\d/
12
+ else
13
+ nil
14
+ end
15
+ end
16
+
17
+ def disallowed_characters_for_country(country_code)
18
+ if country_code.blank?
19
+ nil
20
+ elsif ["US", "AU", "NZ"].include?(country_code)
21
+ /[^0-9]/
22
+ elsif ["CA", "UK"].include?(country_code)
23
+ /[^0-9A-Z]/
24
+ else
25
+ nil
26
+ end
27
+ end
28
+
29
+ def validate_each(record, attribute, value)
30
+ if options[:country].is_a?(String)
31
+ country = options[:country]
32
+ elsif options[:country].is_a?(Symbol) and record.respond_to?(options[:country])
33
+ country = record.send(options[:country])
34
+ elsif record.respond_to?(:country)
35
+ country = record.send(:country)
36
+ else
37
+ country = false
38
+ end
39
+
40
+ return unless country
41
+ current_regex = postal_code_regex_for_country(country)
42
+ return unless current_regex
43
+ disallowed_characters = disallowed_characters_for_country(country)
44
+
45
+ new_value = value.nil? ? "" : value.upcase.gsub(disallowed_characters, '')
46
+
47
+ unless (options[:allow_blank] && new_value.blank?) || new_value =~ current_regex
48
+ message = I18n.t("activerecord.errors.models.#{name.underscore}.attributes.#{attribute}.invalid",
49
+ :default => [:"activerecord.errors.models.#{name.underscore}.invalid",
50
+ options[:message],
51
+ :'activerecord.errors.messages.invalid'])
52
+ record.errors[attribute] << message
53
+ else
54
+ record.send(attr_name.to_s + '=',
55
+ format_as_postal_code(new_value, country, disallowed_characters)
56
+ ) if options[:set]
57
+ end
58
+ end
59
+
60
+ def format_as_postal_code(arg, country_code, disallowed_characters)
61
+ return nil if (arg.blank? or country_code.blank? or !postal_code_regex_for_country(country_code))
62
+
63
+ postal_code = arg.gsub(disallowed_characters, '')
64
+
65
+ if ["US"].include?(country_code)
66
+ digit_count = postal_code.length
67
+ if digit_count == 5
68
+ return postal_code
69
+ elsif digit_count == 9
70
+ return "%s-%s" % [postal_code[0..4], postal_code[5..8]]
71
+ else
72
+ return nil
73
+ end
74
+
75
+ elsif ["AU", "NZ"].include?(country_code)
76
+ postal_code
77
+
78
+ elsif ["CA"].include?(country_code)
79
+ fsa = postal_code[0..2]
80
+ lda = postal_code[3..5]
81
+
82
+ postal_code = "%s %s" % [fsa, lda]
83
+ postal_code.upcase
84
+ end
85
+ end
86
+ end
87
+ end
@@ -1,3 +1,3 @@
1
1
  module ValidationKit
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -1,8 +1,10 @@
1
1
  require "validation_kit/version"
2
2
 
3
- validators = Dir[File.join(File.expand_path(File.join('..', __FILE__)), '**', '*.rb')]
3
+ lib_path = File.dirname(__FILE__)
4
+ validators = Dir[File.join(lib_path, '**', '*_validator.rb')]
4
5
  validators.each do |v|
5
6
  require v
7
+ validator_class = File.basename(v, '.rb').camelize
8
+ validator = "ValidationKit::#{validator_class}".constantize
9
+ ActiveModel::Validations.const_set(validator_class, validator)
6
10
  end
7
-
8
- module ValidationKit; end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: validation_kit
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:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-03-08 00:00:00.000000000 Z
13
+ date: 2012-03-12 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description: A collection of various validators for Rails forms
16
16
  email:
@@ -24,16 +24,16 @@ files:
24
24
  - Gemfile
25
25
  - Rakefile
26
26
  - lib/validation_kit.rb
27
- - lib/validation_kit/validates_as_email/README
28
- - lib/validation_kit/validates_as_email/validates_as_email.rb
29
- - lib/validation_kit/validates_as_phone/README
30
- - lib/validation_kit/validates_as_phone/validates_as_phone.rb
31
- - lib/validation_kit/validates_as_postal_code/README
32
- - lib/validation_kit/validates_as_postal_code/validates_as_postal_code.rb
33
- - lib/validation_kit/validates_mixed_case_of/README
34
- - lib/validation_kit/validates_mixed_case_of/config/locales/en.yml
35
- - lib/validation_kit/validates_mixed_case_of/config/locales/fr.yml
36
- - lib/validation_kit/validates_mixed_case_of/validates_mixed_case_of.rb
27
+ - lib/validation_kit/email_validator/README
28
+ - lib/validation_kit/email_validator/email_validator.rb
29
+ - lib/validation_kit/mixed_case_validator/README
30
+ - lib/validation_kit/mixed_case_validator/config/locales/en.yml
31
+ - lib/validation_kit/mixed_case_validator/config/locales/fr.yml
32
+ - lib/validation_kit/mixed_case_validator/mixed_case_validator.rb
33
+ - lib/validation_kit/phone_validator/README
34
+ - lib/validation_kit/phone_validator/phone_validator.rb
35
+ - lib/validation_kit/postal_code_validator/README
36
+ - lib/validation_kit/postal_code_validator/postal_code_validator.rb
37
37
  - lib/validation_kit/version.rb
38
38
  - validation_kit.gemspec
39
39
  homepage: https://github.com/turbovote/validation_kit
@@ -1,89 +0,0 @@
1
- module ValidationKit
2
- class PostalCodeValidator < ActiveModel::EachValidator
3
-
4
- def postal_code_regex_for_country(country_code)
5
- if country_code.blank?
6
- nil
7
- elsif ["AU", "NZ"].include?(country_code)
8
- /\d{4}/
9
- elsif ["US"].include?(country_code)
10
- /\d{5}(-\d{4})?/
11
- elsif ["CA"].include?(country_code)
12
- /[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTWVXYZ]\d[ABCEGHJKLMNPRSTWVXYZ]\d/
13
- else
14
- nil
15
- end
16
- end
17
-
18
- def disallowed_characters_for_country(country_code)
19
- if country_code.blank?
20
- nil
21
- elsif ["US", "AU", "NZ"].include?(country_code)
22
- /[^0-9]/
23
- elsif ["CA", "UK"].include?(country_code)
24
- /[^0-9A-Z]/
25
- else
26
- nil
27
- end
28
- end
29
-
30
- def validate_each(record, attribute, value)
31
- if options[:country].is_a?(String)
32
- country = options[:country]
33
- elsif options[:country].is_a?(Symbol) and record.respond_to?(options[:country])
34
- country = record.send(options[:country])
35
- elsif record.respond_to?(:country)
36
- country = record.send(:country)
37
- else
38
- country = false
39
- end
40
-
41
- next unless country
42
- current_regex = postal_code_regex_for_country(country)
43
- next unless current_regex
44
- disallowed_characters = disallowed_characters_for_country(country)
45
-
46
- new_value = value.nil? ? "" : value.upcase.gsub(disallowed_characters, '')
47
-
48
- unless (options[:allow_blank] && new_value.blank?) || new_value =~ current_regex
49
- message = I18n.t("activerecord.errors.models.#{name.underscore}.attributes.#{attribute}.invalid",
50
- :default => [:"activerecord.errors.models.#{name.underscore}.invalid",
51
- options[:message],
52
- :'activerecord.errors.messages.invalid'])
53
- record.errors[attribute] << message
54
- else
55
- record.send(attr_name.to_s + '=',
56
- format_as_postal_code(new_value, country, disallowed_characters)
57
- ) if options[:set]
58
- end
59
- end
60
-
61
- def format_as_postal_code(arg, country_code, disallowed_characters)
62
- return nil if (arg.blank? or country_code.blank? or !postal_code_regex_for_country(country_code))
63
-
64
- postal_code = arg.gsub(disallowed_characters, '')
65
-
66
- if ["US"].include?(country_code)
67
- digit_count = postal_code.length
68
- if digit_count == 5
69
- return postal_code
70
- elsif digit_count == 9
71
- return "%s-%s" % [postal_code[0..4], postal_code[5..8]]
72
- else
73
- return nil
74
- end
75
-
76
- elsif ["AU", "NZ"].include?(country_code)
77
- postal_code
78
-
79
- elsif ["CA"].include?(country_code)
80
- fsa = postal_code[0..2]
81
- lda = postal_code[3..5]
82
-
83
- postal_code = "%s %s" % [fsa, lda]
84
- postal_code.upcase
85
- end
86
- end
87
- end
88
- end
89
- end