drexed-validators 0.0.6 → 0.0.7
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/README.md +1 -1
- data/app/validators/currency_validator.rb +7 -0
- data/app/validators/email_validator.rb +7 -0
- data/app/validators/file_size_validator.rb +71 -0
- data/app/validators/hex_validator.rb +7 -0
- data/app/validators/html_validator.rb +7 -0
- data/app/validators/ip_validator.rb +7 -0
- data/app/validators/name_validator.rb +7 -0
- data/app/validators/password_validator.rb +7 -0
- data/app/validators/phone_validator.rb +32 -0
- data/app/validators/slug_validator.rb +7 -0
- data/app/validators/ssn_validator.rb +7 -0
- data/app/validators/url_validator.rb +7 -0
- data/app/validators/username_validator.rb +7 -0
- data/app/validators/zipcode_validator.rb +7 -0
- data/lib/drexed/validators.rb +0 -2
- data/lib/drexed/validators/version.rb +1 -1
- metadata +16 -4
- data/lib/active_model/validations/email_validator.rb +0 -11
- data/lib/active_model/validations/url_validator.rb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f314feca89c2256b04e440521356729b39b8053
|
4
|
+
data.tar.gz: 32628191163fcce1e2b04d5cd35afca1bcc65f60
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aac895f1e0c55dde4f3f0c13e183b9b55963daad7013bd1be56118647c3c839d4f7dc224b10c7772e6a5075b6a062b09e3cc07d31ad15a2fb354848b583fe026
|
7
|
+
data.tar.gz: fc44d8de5c8f8e77ba0ce670935d88442c34bf6aa8faa42f32a8558ed4b17f301a9e600083bf0dc1d23e6873ef27b74651e3fdff25fff7b3f53ca0f5aea481e7
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Validate commonly used attributes easily with drexed-validators.
|
4
4
|
|
5
|
-
Currently supported validators: email, url
|
5
|
+
Currently supported validators: currency, email, file_size, hex, HTML, IP, name, password, phone, slug, ssn, url, username, and zipcode
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
@@ -0,0 +1,7 @@
|
|
1
|
+
class EmailValidator < ActiveModel::EachValidator
|
2
|
+
def validate_each(object, attribute, value)
|
3
|
+
unless value =~ /\A[A-Z0-9._%a-z\-]+@(?:[A-Z0-9a-z\-]+\.)+[A-Za-z]{2,4}\z/i
|
4
|
+
object.errors[attribute] << (options[:message] || "is not formatted properly")
|
5
|
+
end
|
6
|
+
end
|
7
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
class FileSizeValidator < ActiveModel::EachValidator
|
2
|
+
MESSAGES = { is: :wrong_size, minimum: :size_too_small, maximum: :size_too_big }.freeze
|
3
|
+
CHECKS = { is: :==, minimum: :>=, maximum: :<= }.freeze
|
4
|
+
|
5
|
+
DEFAULT_TOKENIZER = lambda { |value| value.split(//) }
|
6
|
+
RESERVED_OPTIONS = [:minimum, :maximum, :within, :is, :tokenizer, :too_short, :too_long]
|
7
|
+
|
8
|
+
def initialize(options)
|
9
|
+
if range = (options.delete(:in) || options.delete(:within))
|
10
|
+
raise ArgumentError, ":in and :within must be a Range" unless range.is_a?(Range)
|
11
|
+
options[:minimum], options[:maximum] = range.begin, range.end
|
12
|
+
options[:maximum] -= 1 if range.exclude_end?
|
13
|
+
end
|
14
|
+
|
15
|
+
super
|
16
|
+
end
|
17
|
+
|
18
|
+
def check_validity!
|
19
|
+
keys = CHECKS.keys & options.keys
|
20
|
+
|
21
|
+
if keys.empty?
|
22
|
+
raise ArgumentError, 'Range unspecified. Specify the :within, :maximum, :minimum, or :is option.'
|
23
|
+
end
|
24
|
+
|
25
|
+
keys.each do |key|
|
26
|
+
value = options[key]
|
27
|
+
|
28
|
+
unless (value.is_a?(Integer) && value >= 0) || value.is_a?(Proc)
|
29
|
+
raise ArgumentError, ":#{key} must be a nonnegative Integer or Proc"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def validate_each(record, attribute, value)
|
35
|
+
unless value.kind_of? CarrierWave::Uploader::Base
|
36
|
+
raise ArgumentError, "A CarrierWave::Uploader::Base object was expected"
|
37
|
+
end
|
38
|
+
|
39
|
+
if value.kind_of?(String)
|
40
|
+
value = (options[:tokenizer] || DEFAULT_TOKENIZER).call(value)
|
41
|
+
end
|
42
|
+
|
43
|
+
CHECKS.each do |key, validity_check|
|
44
|
+
next unless check_value = options[key]
|
45
|
+
|
46
|
+
check_value = check_value.call(record) if check_value.is_a?(Proc)
|
47
|
+
|
48
|
+
value ||= [] if key == :maximum
|
49
|
+
|
50
|
+
value_size = value.size
|
51
|
+
next if value_size.send(validity_check, check_value)
|
52
|
+
|
53
|
+
errors_options = options.except(*RESERVED_OPTIONS)
|
54
|
+
errors_options[:file_size] = help.number_to_human_size check_value
|
55
|
+
|
56
|
+
default_message = options[MESSAGES[key]]
|
57
|
+
errors_options[:message] ||= default_message if default_message
|
58
|
+
|
59
|
+
record.errors.add(attribute, MESSAGES[key], errors_options)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def help
|
64
|
+
Helper.instance
|
65
|
+
end
|
66
|
+
|
67
|
+
class Helper
|
68
|
+
include Singleton
|
69
|
+
include ActionView::Helpers::NumberHelper
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
class IpValidator < ActiveModel::EachValidator
|
2
|
+
def validate_each(object, attribute, value)
|
3
|
+
unless value =~ /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
|
4
|
+
object.errors[attribute] << (options[:message] || "is not formatted properly")
|
5
|
+
end
|
6
|
+
end
|
7
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class PhoneFormatValidator < ActiveModel::EachValidator
|
2
|
+
def validate_each record, attribute, value
|
3
|
+
region = options[:region] || :north_america
|
4
|
+
|
5
|
+
formatted_value = value.gsub(/[\s\.\+\(\)-]*/, "")
|
6
|
+
is_number = !(formatted_value =~ /^[-+]?[0-9]+$/).nil?
|
7
|
+
unless is_number && validate_by_region(region, formatted_value)
|
8
|
+
message = attribute.to_s.humanize + ' doesn\'t match an acceptable format.'
|
9
|
+
record.errors[attribute] << (options[:message] || message )
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def validate_by_region(region, formatted_value)
|
14
|
+
if region == :north_america
|
15
|
+
valid_eleven_digit?(formatted_value) || valid_ten_digit?(formatted_value) || valid_seven_digit?(formatted_value)
|
16
|
+
else
|
17
|
+
false
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def valid_seven_digit?(input)
|
22
|
+
input.length == 7 && input[0] != "0" && input[0] != "1"
|
23
|
+
end
|
24
|
+
|
25
|
+
def valid_ten_digit?(input)
|
26
|
+
input.length == 10 && input[0] != "0" && input[0] != "1" && valid_seven_digit?(input.slice(-7, 7))
|
27
|
+
end
|
28
|
+
|
29
|
+
def valid_eleven_digit?(input)
|
30
|
+
input.length == 11 && input[0] == "1" && valid_ten_digit?(input.slice(-10, 10))
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
class UrlValidator < ActiveModel::EachValidator
|
2
|
+
def validate_each(object, attribute, value)
|
3
|
+
unless value =~ /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
|
4
|
+
object.errors[attribute] << (options[:message] || "is not formatted properly")
|
5
|
+
end
|
6
|
+
end
|
7
|
+
end
|
data/lib/drexed/validators.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: drexed-validators
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Juan Gomez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-12-
|
11
|
+
date: 2013-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -50,9 +50,21 @@ files:
|
|
50
50
|
- LICENSE.txt
|
51
51
|
- README.md
|
52
52
|
- Rakefile
|
53
|
+
- app/validators/currency_validator.rb
|
54
|
+
- app/validators/email_validator.rb
|
55
|
+
- app/validators/file_size_validator.rb
|
56
|
+
- app/validators/hex_validator.rb
|
57
|
+
- app/validators/html_validator.rb
|
58
|
+
- app/validators/ip_validator.rb
|
59
|
+
- app/validators/name_validator.rb
|
60
|
+
- app/validators/password_validator.rb
|
61
|
+
- app/validators/phone_validator.rb
|
62
|
+
- app/validators/slug_validator.rb
|
63
|
+
- app/validators/ssn_validator.rb
|
64
|
+
- app/validators/url_validator.rb
|
65
|
+
- app/validators/username_validator.rb
|
66
|
+
- app/validators/zipcode_validator.rb
|
53
67
|
- drexed-validators.gemspec
|
54
|
-
- lib/active_model/validations/email_validator.rb
|
55
|
-
- lib/active_model/validations/url_validator.rb
|
56
68
|
- lib/drexed/validators.rb
|
57
69
|
- lib/drexed/validators/version.rb
|
58
70
|
homepage: https://github.com/drexed/drexed-validators
|
@@ -1,11 +0,0 @@
|
|
1
|
-
module ActiveModel
|
2
|
-
module Validations
|
3
|
-
class EmailValidator < EachValidator
|
4
|
-
def validate_each(object, attribute, value)
|
5
|
-
unless value =~ /\A[A-Z0-9._%a-z\-]+@(?:[A-Z0-9a-z\-]+\.)+[A-Za-z]{2,4}\z/i
|
6
|
-
object.errors[attribute] << (options[:message] || "is not formatted properly")
|
7
|
-
end
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
module ActiveModel
|
2
|
-
module Validations
|
3
|
-
class UrlValidator < EachValidator
|
4
|
-
def validate_each(object, attribute, value)
|
5
|
-
unless value =~ /https?:\/\/[\S]+/i
|
6
|
-
object.errors[attribute] << (options[:message] || "is not formatted properly")
|
7
|
-
end
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|