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
         |