valid 0.1.1

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/lib/validation.rb ADDED
@@ -0,0 +1,14 @@
1
+ require 'validation/validator'
2
+
3
+ module Validation
4
+
5
+ class << self
6
+ private
7
+
8
+ def included(mod)
9
+ mod.module_eval do
10
+ extend Validation::Rules
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,45 @@
1
+ module Validation
2
+ module Rule
3
+ class Email
4
+
5
+ # taken from: https://github.com/emmanuel/aequitas/blob/master/lib/aequitas/rule/format/email_address.rb
6
+ EMAIL_ADDRESS = begin
7
+ letter = 'a-zA-Z'
8
+ digit = '0-9'
9
+ atext = "[#{letter}#{digit}\!\#\$\%\&\'\*+\/\=\?\^\_\`\{\|\}\~\-]"
10
+ dot_atom_text = "#{atext}+([.]#{atext}*)+"
11
+ dot_atom = dot_atom_text
12
+ no_ws_ctl = '\x01-\x08\x11\x12\x14-\x1f\x7f'
13
+ qtext = "[^#{no_ws_ctl}\\x0d\\x22\\x5c]" # Non-whitespace, non-control character except for \ and "
14
+ text = '[\x01-\x09\x11\x12\x14-\x7f]'
15
+ quoted_pair = "(\\x5c#{text})"
16
+ qcontent = "(?:#{qtext}|#{quoted_pair})"
17
+ quoted_string = "[\"]#{qcontent}+[\"]"
18
+ atom = "#{atext}+"
19
+ word = "(?:#{atom}|#{quoted_string})"
20
+ obs_local_part = "#{word}([.]#{word})*"
21
+ local_part = "(?:#{dot_atom}|#{quoted_string}|#{obs_local_part})"
22
+ dtext = "[#{no_ws_ctl}\\x21-\\x5a\\x5e-\\x7e]"
23
+ dcontent = "(?:#{dtext}|#{quoted_pair})"
24
+ domain_literal = "\\[#{dcontent}+\\]"
25
+ obs_domain = "#{atom}([.]#{atom})+"
26
+ domain = "(?:#{dot_atom}|#{domain_literal}|#{obs_domain})"
27
+ addr_spec = "#{local_part}\@#{domain}"
28
+ pattern = /\A#{addr_spec}\z/u
29
+ end
30
+
31
+ def valid_value?(value)
32
+ !!EMAIL_ADDRESS.match(value)
33
+ end
34
+
35
+
36
+ def error_key
37
+ :email
38
+ end
39
+
40
+ def params
41
+ {}
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,29 @@
1
+ module Validation
2
+ module Rule
3
+ class Length
4
+ def initialize(params)
5
+ @params = params
6
+ end
7
+
8
+ def params
9
+ @params
10
+ end
11
+
12
+ def valid_value?(value)
13
+ valid = true
14
+
15
+ @params.each_pair do |key, param|
16
+ valid = false if key == :minimum && value.length < param
17
+ valid = false if key == :maximum && value.length > param
18
+ valid = false if key == :exact && value.length != param
19
+ end
20
+
21
+ valid
22
+ end
23
+
24
+ def error_key
25
+ :length
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,17 @@
1
+ module Validation
2
+ module Rule
3
+ class NotEmpty
4
+ def params
5
+ {}
6
+ end
7
+
8
+ def valid_value?(value)
9
+ ! (value.nil? || value.empty?)
10
+ end
11
+
12
+ def error_key
13
+ :not_empty
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module Validation
2
+ module Rule
3
+ class Numeric
4
+ def valid_value?(value)
5
+ !!/^[0-9]+$/.match(value.to_s)
6
+ end
7
+
8
+ def error_key
9
+ :numeric
10
+ end
11
+
12
+ def params
13
+ {}
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,79 @@
1
+ module Validation
2
+ module Rules
3
+ def rules
4
+ @rules ||= {}
5
+ end
6
+
7
+ def errors
8
+ @errors ||= {}
9
+ end
10
+
11
+ def rule(field, rule)
12
+ field = field.to_sym
13
+ if rules[field].nil?
14
+ rules[field] = []
15
+ end
16
+
17
+ begin
18
+ if rule.respond_to?(:each_pair)
19
+ rule.each_pair do |key, value|
20
+ r = Validation::Rule.const_get(camelize(key))
21
+ rules[field] << r.new(value)
22
+ end
23
+ elsif rule.respond_to?(:each)
24
+ rule.each do |r|
25
+ r = Validation::Rule.const_get(camelize(r))
26
+ rules[field] << r.new
27
+ end
28
+ else
29
+ rule = Validation::Rule.const_get(camelize(rule))
30
+ rules[field] << rule.new
31
+ end
32
+ rescue NameError => e
33
+ raise InvalidRule
34
+ end
35
+ end
36
+
37
+ def valid?
38
+ valid = true
39
+
40
+ rules.each_pair do |field, rules|
41
+ if ! @obj.respond_to?(field)
42
+ raise InvalidKey
43
+ end
44
+
45
+ rules.each do |r|
46
+ if ! r.valid_value?(@obj.send(field))
47
+ valid = false
48
+ errors[field] = {:rule => r.error_key, :params => r.params}
49
+ break
50
+ end
51
+ end
52
+ end
53
+
54
+ @valid = valid
55
+ end
56
+
57
+ protected
58
+
59
+ def camelize(term)
60
+ string = term.to_s
61
+ string = string.sub(/^[a-z\d]*/) { $&.capitalize }
62
+ string.gsub(/(?:_|(\/))([a-z\d]*)/i) { $2.capitalize }.gsub('/', '::')
63
+ end
64
+ end
65
+
66
+ class Validator
67
+ include Validation::Rules
68
+
69
+ def initialize(obj)
70
+ @obj = obj
71
+ end
72
+ end
73
+
74
+ class InvalidKey < RuntimeError
75
+ end
76
+
77
+ class InvalidRule < RuntimeError
78
+ end
79
+ end
metadata ADDED
@@ -0,0 +1,51 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: valid
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jeremy Bush
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-06-16 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description:
15
+ email:
16
+ - contractfrombelow@gmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - lib/validation.rb
22
+ - lib/validation/rule/email.rb
23
+ - lib/validation/rule/not_empty.rb
24
+ - lib/validation/rule/numeric.rb
25
+ - lib/validation/rule/length.rb
26
+ - lib/validation/validator.rb
27
+ homepage: https://github.com/zombor/validation
28
+ licenses: []
29
+ post_install_message:
30
+ rdoc_options: []
31
+ require_paths:
32
+ - lib
33
+ required_ruby_version: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ required_rubygems_version: !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ requirements: []
46
+ rubyforge_project:
47
+ rubygems_version: 1.8.17
48
+ signing_key:
49
+ specification_version: 3
50
+ summary: A standalone, generic object validator for ruby
51
+ test_files: []