veto 0.1.3 → 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/README.md +7 -94
- data/lib/veto/blocks/block.rb +25 -0
- data/lib/veto/blocks/checker.rb +28 -0
- data/lib/veto/blocks/conditional_block.rb +26 -0
- data/lib/veto/blocks/validate_block.rb +18 -0
- data/lib/veto/blocks/validates_block.rb +51 -0
- data/lib/veto/blocks/with_options_block.rb +7 -0
- data/lib/veto/check_context_object.rb +10 -0
- data/lib/veto/checks/attribute_check.rb +19 -0
- data/lib/veto/checks/check.rb +7 -0
- data/lib/veto/checks/check_factory.rb +18 -0
- data/lib/veto/{validators/exact_length_validator.rb → checks/exact_length_check.rb} +5 -4
- data/lib/veto/{validators/format_validator.rb → checks/format_check.rb} +5 -4
- data/lib/veto/{validators/greater_than_validator.rb → checks/greater_than_check.rb} +2 -4
- data/lib/veto/{validators/greater_than_or_equal_to_validator.rb → checks/greater_than_or_equal_to_check.rb} +2 -4
- data/lib/veto/{validators/inclusion_validator.rb → checks/inclusion_check.rb} +2 -4
- data/lib/veto/{validators/integer_validator.rb → checks/integer_check.rb} +2 -4
- data/lib/veto/{validators/length_range_validator.rb → checks/length_range_check.rb} +2 -4
- data/lib/veto/{validators/less_than_validator.rb → checks/less_than_check.rb} +2 -4
- data/lib/veto/{validators/less_than_or_equal_to_validator.rb → checks/less_than_or_equal_to_check.rb} +2 -4
- data/lib/veto/{validators/max_length_validator.rb → checks/max_length_check.rb} +2 -4
- data/lib/veto/checks/method_check.rb +17 -0
- data/lib/veto/{validators/min_length_validator.rb → checks/min_length_check.rb} +2 -4
- data/lib/veto/{validators/not_null_validator.rb → checks/not_null_check.rb} +2 -4
- data/lib/veto/{validators/numeric_validator.rb → checks/numeric_check.rb} +2 -4
- data/lib/veto/{validators/presence_validator.rb → checks/presence_check.rb} +2 -4
- data/lib/veto/conditions/condition.rb +7 -0
- data/lib/veto/conditions/condition_factory.rb +18 -0
- data/lib/veto/conditions/conditions.rb +21 -0
- data/lib/veto/conditions/context_method_condition.rb +11 -0
- data/lib/veto/conditions/entity_eval_condition.rb +11 -0
- data/lib/veto/conditions/if_conditions.rb +8 -0
- data/lib/veto/conditions/if_unless_conditions.rb +21 -0
- data/lib/veto/conditions/passing_condition.rb +7 -0
- data/lib/veto/conditions/primative_condition.rb +11 -0
- data/lib/veto/conditions/proc_condition.rb +11 -0
- data/lib/veto/conditions/unless_conditions.rb +8 -0
- data/lib/veto/configuration.rb +38 -37
- data/lib/veto/errors.rb +27 -27
- data/lib/veto/exceptions.rb +13 -3
- data/lib/veto/model.rb +33 -35
- data/lib/veto/validator.rb +68 -169
- data/lib/veto/version.rb +1 -1
- data/lib/veto.rb +90 -49
- data/spec/blocks/block_spec.rb +31 -0
- data/spec/blocks/check_block_spec.rb +46 -0
- data/spec/blocks/conditional_block_spec.rb +36 -0
- data/spec/blocks/validate_block_spec.rb +18 -0
- data/spec/blocks/validates_block_spec.rb +22 -0
- data/spec/checks/exact_length_check_spec.rb +37 -0
- data/spec/checks/format_validator_spec.rb +37 -0
- data/spec/checks/greater_than_check_spec.rb +48 -0
- data/spec/checks/greater_than_or_equal_to_check_spec.rb +48 -0
- data/spec/checks/inclusion_check_spec.rb +37 -0
- data/spec/checks/integer_check_spec.rb +37 -0
- data/spec/checks/length_range_check_spec.rb +37 -0
- data/spec/checks/less_than_check_spec.rb +48 -0
- data/spec/checks/less_than_or_equal_to_check_spec.rb +48 -0
- data/spec/checks/max_length_check_spec.rb +48 -0
- data/spec/checks/method_check_spec.rb +13 -0
- data/spec/checks/min_length_check_spec.rb +48 -0
- data/spec/checks/not_null_check_spec.rb +37 -0
- data/spec/checks/numeric_check_spec.rb +37 -0
- data/spec/checks/presence_check_spec.rb +48 -0
- data/spec/conditions/condition_factory_spec.rb +31 -0
- data/spec/conditions/conditions_spec.rb +25 -0
- data/spec/conditions/context_method_condition_spec.rb +25 -0
- data/spec/conditions/entity_eval_condition_spec.rb +21 -0
- data/spec/conditions/if_conditions_spec.rb +65 -0
- data/spec/conditions/if_unless_conditions_spec.rb +33 -0
- data/spec/conditions/primative_condition_spec.rb +22 -0
- data/spec/conditions/proc_condition_spec.rb +25 -0
- data/spec/conditions/unless_conditions_spec.rb +65 -0
- data/spec/configuration/message_spec.rb +18 -23
- data/spec/spec_helper.rb +2 -1
- data/spec/validator_spec.rb +224 -115
- metadata +96 -61
- data/lib/veto/attribute_validator_factory.rb +0 -36
- data/lib/veto/builder.rb +0 -65
- data/lib/veto/conditions.rb +0 -23
- data/lib/veto/conditions_evaluator.rb +0 -30
- data/lib/veto/validators/abstract_validator.rb +0 -15
- data/lib/veto/validators/attribute_validator.rb +0 -22
- data/lib/veto/validators/custom_method_validator.rb +0 -19
- data/spec/attribute_validator_factory_spec.rb +0 -72
- data/spec/builder_spec.rb +0 -38
- data/spec/conditions_evaluator_spec.rb +0 -90
- data/spec/conditions_spec.rb +0 -16
- data/spec/configuration_spec.rb +0 -6
- data/spec/errors_spec.rb +0 -22
- data/spec/model_spec.rb +0 -67
- data/spec/system/validator_spec.rb +0 -530
- data/spec/validators/exact_length_validator_spec.rb +0 -37
- data/spec/validators/format_validator_spec.rb +0 -32
- data/spec/validators/inclusion_validator_spec.rb +0 -45
- data/spec/validators/integer_validator_spec.rb +0 -42
- data/spec/validators/length_range_validator_spec.rb +0 -55
- data/spec/validators/max_length_validator_spec.rb +0 -32
- data/spec/validators/min_length_validator_spec.rb +0 -32
- data/spec/validators/not_null_validator_spec.rb +0 -27
- data/spec/validators/numeric_validator_spec.rb +0 -42
- data/spec/validators/presence_validator_spec.rb +0 -47
- data/spec/veto_spec.rb +0 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 97744d7c933224418b8f716cfb6495ce2561d765
|
4
|
+
data.tar.gz: 14621abaec3c7a5492f679b590239255f40dc614
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ffa5ca8c717a8f3bf1f2b97ce4b9fca1f9068357afcb4213bb0570def26236895679c6adaa836685b9c8584de3c3510e6839ccde71f7e0c052ff992ae1c0dd42
|
7
|
+
data.tar.gz: 2c06f80971bc003ac56b30312d7bfedbf00c6c2d186f734cfdf3997fdd7c93ac8eb0c7e80f806fbb49e300e81dbb4652f6bcfc918c1545b06a42c082ffc2ece5
|
data/README.md
CHANGED
@@ -41,107 +41,20 @@ class Person
|
|
41
41
|
attr_reader :name, :age, :errors
|
42
42
|
end
|
43
43
|
|
44
|
-
person = Person.new
|
45
|
-
|
46
|
-
# Validation using class methods
|
44
|
+
person = Person.new
|
47
45
|
|
48
|
-
|
49
|
-
PersonValidator.validate!(person) # => # => Veto::InvalidEntity, ["name is not present", "..."]
|
46
|
+
# Validate entity
|
50
47
|
|
51
|
-
|
52
|
-
|
53
|
-
validator
|
54
|
-
validator.valid? # => false
|
55
|
-
validator.validate! # => # => Veto::InvalidEntity, ["name is not present", "..."]
|
48
|
+
validator = PersonValidator.new
|
49
|
+
validator.valid?(person) # => false
|
50
|
+
validator.validate!(person) # => # => Veto::InvalidEntity, ["name is not present", "..."]
|
56
51
|
validator.errors.full_messages # => ["first name is not present", "..."]
|
57
52
|
|
58
53
|
# If entity has errors attr_accessor, errors will be passed to the entity
|
59
54
|
|
60
55
|
person.errors # => nil
|
61
|
-
PersonValidator.
|
62
|
-
person
|
63
|
-
```
|
64
|
-
|
65
|
-
### Class Method Usage
|
66
|
-
|
67
|
-
The simplest way to validate an entity is to pass it directly to one of the validator's class methods.
|
68
|
-
|
69
|
-
#### valid?
|
70
|
-
|
71
|
-
Validate an entity by passing it to the `valid?` method.
|
72
|
-
|
73
|
-
```ruby
|
74
|
-
person = Person.new
|
75
|
-
PersonValidator.valid?(person) # => false
|
76
|
-
```
|
77
|
-
|
78
|
-
#### validate!
|
79
|
-
|
80
|
-
For strict validations, pass the entity to the `validate!` method instead. This method will raise an exception if the validation fails.
|
81
|
-
|
82
|
-
```ruby
|
83
|
-
person = Person.new
|
84
|
-
PersonValidator.validate!(person) # => Veto::InvalidEntity, ["first name is not present", "..."]
|
85
|
-
```
|
86
|
-
|
87
|
-
### Instance Method Usage
|
88
|
-
|
89
|
-
Using a validator instance is also simple, and has some advantages in regards to validation errors (more below). The validation methods available on a validator instance are the same as the class methods.
|
90
|
-
|
91
|
-
#### initialization
|
92
|
-
|
93
|
-
When creating a validator instance, the entity you wish to be validated needs to be passed as an argument to the `new` method.
|
94
|
-
|
95
|
-
```ruby
|
96
|
-
person = Person.new
|
97
|
-
validator = PersonValidator.new(person)
|
98
|
-
```
|
99
|
-
#### valid?
|
100
|
-
|
101
|
-
Calling the `valid?` method on a validator instance will return a boolean response, although the method does not receive arguments.
|
102
|
-
|
103
|
-
```ruby
|
104
|
-
person = Person.new
|
105
|
-
validator = PersonValidator.new(person)
|
106
|
-
validator.valid? # => false
|
107
|
-
```
|
108
|
-
|
109
|
-
#### validate!
|
110
|
-
|
111
|
-
For strict validations…
|
112
|
-
|
113
|
-
```ruby
|
114
|
-
person = Person.new
|
115
|
-
validator = PersonValidator.new(person)
|
116
|
-
validator.validate! # => Veto::InvalidEntity, ["first name is not present", "..."]
|
117
|
-
```
|
118
|
-
|
119
|
-
#### errors
|
120
|
-
|
121
|
-
The `errors` method will return an errors object. The errors object will contain the error messages generated during the most recent validation.
|
122
|
-
|
123
|
-
```ruby
|
124
|
-
person = Person.new
|
125
|
-
validator = PersonValidator.new(person)
|
126
|
-
validator.errors.full_messages # => []
|
127
|
-
|
128
|
-
validator.valid? # => false
|
129
|
-
validator.errors.full_messages # => ["first name is not present", "..."]
|
130
|
-
```
|
131
|
-
|
132
|
-
### Errors on Entity
|
133
|
-
|
134
|
-
Whether you're validating via validator class methods or a validator instance, if the entity being validated has an `errors` attr_accessor defined, the validator will attempt to populate the entity with an errors object each time it is validated.
|
135
|
-
|
136
|
-
```ruby
|
137
|
-
class Person
|
138
|
-
attr_accessor :errors, :first_name, :last_name, ...
|
139
|
-
end
|
140
|
-
|
141
|
-
person = Person.new
|
142
|
-
person.errors # => nil
|
143
|
-
|
144
|
-
PersonValidator.valid?(person) # => false
|
56
|
+
validator = PersonValidator.new
|
57
|
+
validator.valid?(person) # => false
|
145
58
|
person.errors.full_messages # => ["first name is not present", "..."]
|
146
59
|
```
|
147
60
|
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Veto
|
2
|
+
class Block
|
3
|
+
def initialize
|
4
|
+
@children = []
|
5
|
+
end
|
6
|
+
|
7
|
+
def call(*args)
|
8
|
+
call_children(*args)
|
9
|
+
end
|
10
|
+
|
11
|
+
def <<(child)
|
12
|
+
@children << child
|
13
|
+
end
|
14
|
+
|
15
|
+
def children
|
16
|
+
@children
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def call_children(*args)
|
22
|
+
children.each {|child| child.call(*args)}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Veto
|
2
|
+
class Checker < Block
|
3
|
+
def self.from_children(children=[])
|
4
|
+
inst = new
|
5
|
+
children.each{|child| inst << child }
|
6
|
+
inst
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(&block)
|
10
|
+
super
|
11
|
+
instance_eval(&block) if block_given?
|
12
|
+
end
|
13
|
+
|
14
|
+
def validates(*args)
|
15
|
+
self << ValidatesBlock.build(*args)
|
16
|
+
end
|
17
|
+
|
18
|
+
def validate(*args)
|
19
|
+
self << ValidateBlock.build(*args)
|
20
|
+
end
|
21
|
+
|
22
|
+
def with_options(*args, &block)
|
23
|
+
b = WithOptionsBlock.build(*args)
|
24
|
+
b << self.class.new(&block)
|
25
|
+
self << b
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Veto
|
2
|
+
class ConditionalBlock < Block
|
3
|
+
def initialize(options={})
|
4
|
+
@options = options
|
5
|
+
super()
|
6
|
+
end
|
7
|
+
|
8
|
+
def call(*args)
|
9
|
+
call_children(*args) if conditions.pass?(*args)
|
10
|
+
end
|
11
|
+
|
12
|
+
def options(hash={})
|
13
|
+
conditions_filter(:reject)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def conditions
|
19
|
+
IfUnlessConditions.new(conditions_filter(:select))
|
20
|
+
end
|
21
|
+
|
22
|
+
def conditions_filter(type)
|
23
|
+
@options.send(type){|k,v| [:if, :unless].include?(k)}
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Veto
|
2
|
+
class ValidateBlock < ConditionalBlock
|
3
|
+
def self.build(*args)
|
4
|
+
block = new(*args)
|
5
|
+
block << MethodCheck.new(block.method_name)
|
6
|
+
block
|
7
|
+
end
|
8
|
+
|
9
|
+
def initialize(method_name, options={})
|
10
|
+
@method_name = method_name
|
11
|
+
super(options)
|
12
|
+
end
|
13
|
+
|
14
|
+
def method_name
|
15
|
+
@method_name
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Veto
|
2
|
+
class ValidatesBlock < ConditionalBlock
|
3
|
+
class CheckBlock < ConditionalBlock
|
4
|
+
def self.build(*args)
|
5
|
+
block = new(*args)
|
6
|
+
block << ::Veto::CheckFactory.new(block.type, block.attribute_name, block.options)
|
7
|
+
block
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize(type, attribute_name, value_or_options=nil)
|
11
|
+
@type = type
|
12
|
+
@attribute_name = attribute_name
|
13
|
+
options =
|
14
|
+
case value_or_options
|
15
|
+
when TrueClass
|
16
|
+
{}
|
17
|
+
when Hash
|
18
|
+
value_or_options
|
19
|
+
when Range, Array
|
20
|
+
{:in => value_or_options}
|
21
|
+
else
|
22
|
+
{:with => value_or_options}
|
23
|
+
end
|
24
|
+
super(options)
|
25
|
+
end
|
26
|
+
|
27
|
+
def attribute_name
|
28
|
+
@attribute_name
|
29
|
+
end
|
30
|
+
|
31
|
+
def type
|
32
|
+
@type
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.build(*args)
|
37
|
+
block = new(*args)
|
38
|
+
block.options.each {|k,v| block << CheckBlock.build(k, block.attribute_name, v)}
|
39
|
+
block
|
40
|
+
end
|
41
|
+
|
42
|
+
def initialize(attribute_name, options={})
|
43
|
+
@attribute_name = attribute_name
|
44
|
+
super(options)
|
45
|
+
end
|
46
|
+
|
47
|
+
def attribute_name
|
48
|
+
@attribute_name
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Veto
|
2
|
+
class AttributeCheck < Check
|
3
|
+
def initialize(attribute_name, options={})
|
4
|
+
@attribute_name = attribute_name
|
5
|
+
@options = options
|
6
|
+
end
|
7
|
+
|
8
|
+
def call(cco)
|
9
|
+
value = cco.entity.public_send(@attribute_name)
|
10
|
+
check(@attribute_name, value, cco.errors, @options)
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def check(attribute_name, value, errors, options)
|
16
|
+
raise(NotImplementedError)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Veto
|
2
|
+
class CheckFactory
|
3
|
+
def self.new(type, attribute_name, options={})
|
4
|
+
class_name = "#{camel_case(type.to_s)}Check"
|
5
|
+
begin
|
6
|
+
Veto.const_get(class_name).new(attribute_name, options)
|
7
|
+
rescue NameError => e
|
8
|
+
raise(CheckNotAssigned, "Check not found: ::Veto::#{class_name}")
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def self.camel_case(str)
|
15
|
+
str.split('_').map{|w| w.capitalize }.join('')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -1,8 +1,9 @@
|
|
1
|
-
require 'veto/validators/attribute_validator'
|
2
|
-
|
3
1
|
module Veto
|
4
|
-
class
|
5
|
-
|
2
|
+
class ExactLengthCheck < AttributeCheck
|
3
|
+
|
4
|
+
private
|
5
|
+
|
6
|
+
def check(attribute, value, errors, options={})
|
6
7
|
exact = options.fetch(:with)
|
7
8
|
message = options.fetch(:message, :exact_length)
|
8
9
|
on = options.fetch(:on, attribute)
|
@@ -1,8 +1,9 @@
|
|
1
|
-
require 'veto/validators/attribute_validator'
|
2
|
-
|
3
1
|
module Veto
|
4
|
-
class
|
5
|
-
|
2
|
+
class FormatCheck < AttributeCheck
|
3
|
+
|
4
|
+
private
|
5
|
+
|
6
|
+
def check(attribute, value, errors, options={})
|
6
7
|
pattern = options.fetch(:with)
|
7
8
|
message = options.fetch(:message, :format)
|
8
9
|
on = options.fetch(:on, attribute)
|
@@ -1,8 +1,6 @@
|
|
1
|
-
require 'veto/validators/attribute_validator'
|
2
|
-
|
3
1
|
module Veto
|
4
|
-
class
|
5
|
-
def
|
2
|
+
class GreaterThanCheck < AttributeCheck
|
3
|
+
def check(attribute, value, errors, options={})
|
6
4
|
boundary = options.fetch(:with)
|
7
5
|
message = options.fetch(:message, :greater_than)
|
8
6
|
on = options.fetch(:on, attribute)
|
@@ -1,8 +1,6 @@
|
|
1
|
-
require 'veto/validators/attribute_validator'
|
2
|
-
|
3
1
|
module Veto
|
4
|
-
class
|
5
|
-
def
|
2
|
+
class GreaterThanOrEqualToCheck < AttributeCheck
|
3
|
+
def check(attribute, value, errors, options={})
|
6
4
|
boundary = options.fetch(:with)
|
7
5
|
message = options.fetch(:message, :greater_than_or_equal_to)
|
8
6
|
on = options.fetch(:on, attribute)
|
@@ -1,8 +1,6 @@
|
|
1
|
-
require 'veto/validators/attribute_validator'
|
2
|
-
|
3
1
|
module Veto
|
4
|
-
class
|
5
|
-
def
|
2
|
+
class InclusionCheck < AttributeCheck
|
3
|
+
def check(attribute, value, errors, options={})
|
6
4
|
set = options.fetch(:in)
|
7
5
|
inclusion_method = set.respond_to?(:cover?) ? :cover? : :include?
|
8
6
|
message = options.fetch(:message, :inclusion)
|
@@ -1,8 +1,6 @@
|
|
1
|
-
require 'veto/validators/attribute_validator'
|
2
|
-
|
3
1
|
module Veto
|
4
|
-
class
|
5
|
-
def
|
2
|
+
class IntegerCheck < AttributeCheck
|
3
|
+
def check(attribute, value, errors, options={})
|
6
4
|
message = options.fetch(:message, :integer)
|
7
5
|
on = options.fetch(:on, attribute)
|
8
6
|
|
@@ -1,8 +1,6 @@
|
|
1
|
-
require 'veto/validators/attribute_validator'
|
2
|
-
|
3
1
|
module Veto
|
4
|
-
class
|
5
|
-
def
|
2
|
+
class LengthRangeCheck < AttributeCheck
|
3
|
+
def check(attribute, value, errors, options={})
|
6
4
|
range = options.fetch(:in)
|
7
5
|
inclusion_method = range.respond_to?(:cover?) ? :cover? : :include?
|
8
6
|
message = options.fetch(:message, :length_range)
|
@@ -1,8 +1,6 @@
|
|
1
|
-
require 'veto/validators/attribute_validator'
|
2
|
-
|
3
1
|
module Veto
|
4
|
-
class
|
5
|
-
def
|
2
|
+
class LessThanCheck < AttributeCheck
|
3
|
+
def check(attribute, value, errors, options={})
|
6
4
|
boundary = options.fetch(:with)
|
7
5
|
message = options.fetch(:message, :less_than)
|
8
6
|
on = options.fetch(:on, attribute)
|
@@ -1,8 +1,6 @@
|
|
1
|
-
require 'veto/validators/attribute_validator'
|
2
|
-
|
3
1
|
module Veto
|
4
|
-
class
|
5
|
-
def
|
2
|
+
class LessThanOrEqualToCheck < AttributeCheck
|
3
|
+
def check(attribute, value, errors, options={})
|
6
4
|
boundary = options.fetch(:with)
|
7
5
|
message = options.fetch(:message, :less_than_or_equal_to)
|
8
6
|
on = options.fetch(:on, attribute)
|
@@ -1,8 +1,6 @@
|
|
1
|
-
require 'veto/validators/attribute_validator'
|
2
|
-
|
3
1
|
module Veto
|
4
|
-
class
|
5
|
-
def
|
2
|
+
class MaxLengthCheck < AttributeCheck
|
3
|
+
def check(attribute, value, errors, options={})
|
6
4
|
max = options.fetch(:with)
|
7
5
|
message = options.fetch(:message, :max_length)
|
8
6
|
on = options.fetch(:on, attribute)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Veto
|
2
|
+
class MethodCheck < Check
|
3
|
+
def initialize(method_name)
|
4
|
+
@method_name = method_name
|
5
|
+
end
|
6
|
+
|
7
|
+
def call(cco)
|
8
|
+
cco.context.send(@method_name, cco.entity)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def check(attribute_name, value, errors, options)
|
14
|
+
raise(NotImplementedError)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,8 +1,6 @@
|
|
1
|
-
require 'veto/validators/attribute_validator'
|
2
|
-
|
3
1
|
module Veto
|
4
|
-
class
|
5
|
-
def
|
2
|
+
class MinLengthCheck < AttributeCheck
|
3
|
+
def check(attribute, value, errors, options={})
|
6
4
|
min = options.fetch(:with)
|
7
5
|
message = options.fetch(:message, :min_length)
|
8
6
|
on = options.fetch(:on, attribute)
|
@@ -1,8 +1,6 @@
|
|
1
|
-
require 'veto/validators/attribute_validator'
|
2
|
-
|
3
1
|
module Veto
|
4
|
-
class
|
5
|
-
def
|
2
|
+
class NotNullCheck < AttributeCheck
|
3
|
+
def check(attribute, value, errors, options={})
|
6
4
|
message = options.fetch(:message, :not_null)
|
7
5
|
on = options.fetch(:on, attribute)
|
8
6
|
|
@@ -1,8 +1,6 @@
|
|
1
|
-
require 'veto/validators/attribute_validator'
|
2
|
-
|
3
1
|
module Veto
|
4
|
-
class
|
5
|
-
def
|
2
|
+
class NumericCheck < AttributeCheck
|
3
|
+
def check(attribute, value, errors, options={})
|
6
4
|
message = options.fetch(:message, :numeric)
|
7
5
|
on = options.fetch(:on, attribute)
|
8
6
|
|
@@ -1,8 +1,6 @@
|
|
1
|
-
require 'veto/validators/attribute_validator'
|
2
|
-
|
3
1
|
module Veto
|
4
|
-
class
|
5
|
-
def
|
2
|
+
class PresenceCheck < AttributeCheck
|
3
|
+
def check(attribute, value, errors, options={})
|
6
4
|
msg = options.fetch(:message, :presence)
|
7
5
|
on = options.fetch(:on, attribute)
|
8
6
|
v = value.is_a?(String) ? value.gsub(/\s+/, '') : value
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Veto
|
2
|
+
class ConditionFactory
|
3
|
+
def self.new(condition_option)
|
4
|
+
condition_class =
|
5
|
+
case condition_option
|
6
|
+
when String
|
7
|
+
EntityEvalCondition
|
8
|
+
when Symbol
|
9
|
+
ContextMethodCondition
|
10
|
+
when Proc
|
11
|
+
ProcCondition
|
12
|
+
else
|
13
|
+
PrimativeCondition
|
14
|
+
end
|
15
|
+
condition_class.new(condition_option)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Veto
|
2
|
+
class Conditions < Condition
|
3
|
+
extend Forwardable
|
4
|
+
|
5
|
+
def_delegators :conditions, :each, :size
|
6
|
+
|
7
|
+
def initialize(options_list=[])
|
8
|
+
@options_list = options_list
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def conditions
|
14
|
+
options_list.map{|options| ConditionFactory.new(options) }
|
15
|
+
end
|
16
|
+
|
17
|
+
def options_list
|
18
|
+
[*@options_list]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Veto
|
2
|
+
class IfUnlessConditions < Condition
|
3
|
+
def initialize(options)
|
4
|
+
@options = options
|
5
|
+
end
|
6
|
+
|
7
|
+
def pass?(*args)
|
8
|
+
if_conditions.pass?(*args) && unless_conditions.pass?(*args)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def if_conditions
|
14
|
+
IfConditions.new(@options[:if])
|
15
|
+
end
|
16
|
+
|
17
|
+
def unless_conditions
|
18
|
+
UnlessConditions.new(@options[:unless])
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|