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
| @@ -0,0 +1,37 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Veto::NumericCheck do
         | 
| 4 | 
            +
              context 'when value is numeric' do
         | 
| 5 | 
            +
                it 'assigns no errors' do
         | 
| 6 | 
            +
                  entity = stub(:name => 123)
         | 
| 7 | 
            +
                  errors = new_errors
         | 
| 8 | 
            +
                  check = new_check(:name)
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  check.call(new_cto(entity, errors))
         | 
| 11 | 
            +
                  errors[:name].must_be_nil
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              context 'when value is not numeric' do
         | 
| 16 | 
            +
                it 'assigns no errors' do
         | 
| 17 | 
            +
                  entity = stub(:name => 'abc')
         | 
| 18 | 
            +
                  errors = new_errors
         | 
| 19 | 
            +
                  check = new_check(:name)
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  check.call(new_cto(entity, errors))
         | 
| 22 | 
            +
                  errors[:name].must_equal(["is not a number"])
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              def new_cto(entity, errors)
         | 
| 27 | 
            +
                stub(:entity => entity, :errors => errors)
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              def new_check(*args)
         | 
| 31 | 
            +
                Veto::NumericCheck.new(*args)
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
              def new_errors
         | 
| 35 | 
            +
                Veto::Errors.new
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
            end
         | 
| @@ -0,0 +1,48 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Veto::PresenceCheck do
         | 
| 4 | 
            +
              context 'when value is not null' do
         | 
| 5 | 
            +
                it 'assigns no errors' do
         | 
| 6 | 
            +
                  entity = stub(:name => 'abcde')
         | 
| 7 | 
            +
                  errors = new_errors
         | 
| 8 | 
            +
                  check = new_check(:name)
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  check.call(new_cto(entity, errors))
         | 
| 11 | 
            +
                  errors[:name].must_be_nil
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              context 'when value is blank' do
         | 
| 16 | 
            +
                it 'assigns no errors' do
         | 
| 17 | 
            +
                  entity = stub(:name => '')
         | 
| 18 | 
            +
                  errors = new_errors
         | 
| 19 | 
            +
                  check = new_check(:name)
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  check.call(new_cto(entity, errors))
         | 
| 22 | 
            +
                  errors[:name].must_equal(["is not present"])
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              context 'when value null' do
         | 
| 27 | 
            +
                it 'assigns no errors' do
         | 
| 28 | 
            +
                  entity = stub(:name => nil)
         | 
| 29 | 
            +
                  errors = new_errors
         | 
| 30 | 
            +
                  check = new_check(:name)
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                  check.call(new_cto(entity, errors))
         | 
| 33 | 
            +
                  errors[:name].must_equal(["is not present"])
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              def new_cto(entity, errors)
         | 
| 38 | 
            +
                stub(:entity => entity, :errors => errors)
         | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
              def new_check(*args)
         | 
| 42 | 
            +
                Veto::PresenceCheck.new(*args)
         | 
| 43 | 
            +
              end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
              def new_errors
         | 
| 46 | 
            +
                Veto::Errors.new
         | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
            end
         | 
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Veto::ConditionFactory do
         | 
| 4 | 
            +
              context 'when condition is a string' do
         | 
| 5 | 
            +
                it 'returns entity eval condition instance' do
         | 
| 6 | 
            +
                  factory.new('a-string').must_be_instance_of(Veto::EntityEvalCondition)
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              context 'when condition is a symbol' do
         | 
| 11 | 
            +
                it 'returns validator method condition instance' do
         | 
| 12 | 
            +
                  factory.new(:a_symbol).must_be_instance_of(Veto::ContextMethodCondition)
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              context 'when condition is a proc' do
         | 
| 17 | 
            +
                it 'returns proc condition instance' do
         | 
| 18 | 
            +
                  factory.new(Proc.new{'blah'}).must_be_instance_of(Veto::ProcCondition)
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              context 'when condition is any other general statement or primative' do
         | 
| 23 | 
            +
                it 'returns primative condition instance' do
         | 
| 24 | 
            +
                  factory.new(true).must_be_instance_of(Veto::PrimativeCondition)
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              def factory
         | 
| 29 | 
            +
                Veto::ConditionFactory
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Veto::Conditions do
         | 
| 4 | 
            +
              it 'accepts single option' do
         | 
| 5 | 
            +
                group = new_conditions(:good_method?)
         | 
| 6 | 
            +
                group.size.must_equal(1)
         | 
| 7 | 
            +
              end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              it 'accepts array of options' do
         | 
| 10 | 
            +
                group = new_conditions([:good_method?, Proc.new{ 'blah' }])
         | 
| 11 | 
            +
                group.size.must_equal(2)
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              it 'iterates through conditions' do
         | 
| 15 | 
            +
                group = new_conditions([:good_method?, Proc.new{ 'blah' }])
         | 
| 16 | 
            +
                condition_list = []
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                group.each {|c| condition_list << c.class.name }
         | 
| 19 | 
            +
                condition_list.must_equal(["Veto::ContextMethodCondition", "Veto::ProcCondition"])
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              def new_conditions(*args)
         | 
| 23 | 
            +
                Veto::Conditions.new(*args)
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Veto::ContextMethodCondition do
         | 
| 4 | 
            +
              context 'when context method returns truthy value' do
         | 
| 5 | 
            +
                it 'passes' do
         | 
| 6 | 
            +
                  context = stub(:is_good? => true)
         | 
| 7 | 
            +
                  cco = stub(:context => context, :entity => stub)
         | 
| 8 | 
            +
                  condition = new_condition(:is_good?)
         | 
| 9 | 
            +
                  condition.pass?(cco).must_equal(true)
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              context 'when context method returns falsy value' do
         | 
| 14 | 
            +
                it 'fails' do
         | 
| 15 | 
            +
                  context = stub(:is_good? => false)
         | 
| 16 | 
            +
                  cco = stub(:context => context, :entity => stub)
         | 
| 17 | 
            +
                  condition = new_condition(:is_good?)
         | 
| 18 | 
            +
                  condition.pass?(cco).must_equal(false)
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              def new_condition(*args)
         | 
| 23 | 
            +
                Veto::ContextMethodCondition.new(*args)
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Veto::EntityEvalCondition do
         | 
| 4 | 
            +
              it 'passes when entity evals to truthy value' do
         | 
| 5 | 
            +
                entity = stub(:today_is_good => 'yup')
         | 
| 6 | 
            +
                cco = stub(:entity => entity)
         | 
| 7 | 
            +
                condition = new_condition('today_is_good')
         | 
| 8 | 
            +
                condition.pass?(cco).must_equal(true)
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              it 'fails when entity evals to falsy value' do
         | 
| 12 | 
            +
                entity = stub(:today_is_good => false)
         | 
| 13 | 
            +
                cco = stub(:entity => entity)
         | 
| 14 | 
            +
                condition = new_condition('today_is_good')
         | 
| 15 | 
            +
                condition.pass?(cco).must_equal(false)
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              def new_condition(*args)
         | 
| 19 | 
            +
                Veto::EntityEvalCondition.new(*args)
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
            end
         | 
| @@ -0,0 +1,65 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Veto::IfConditions do
         | 
| 4 | 
            +
              context 'with passing condition' do
         | 
| 5 | 
            +
                it 'correctly evalutes conditions' do
         | 
| 6 | 
            +
                  circle          = stub(:is_round? => true, :can_roll? => true, :has_corners? => false, :is_stackable? => false)
         | 
| 7 | 
            +
                  cco             = stub(:entity => circle)
         | 
| 8 | 
            +
                  eval_condition  = 'can_roll?'                           # pass
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  condition = new_conditions(eval_condition)
         | 
| 11 | 
            +
                  condition.pass?(cco).must_equal(true)
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              context 'with failing condition' do
         | 
| 16 | 
            +
                it 'correctly evalutes conditions' do
         | 
| 17 | 
            +
                  circle          = stub(:is_round? => true, :can_roll? => true, :has_corners? => false, :is_stackable? => false)
         | 
| 18 | 
            +
                  cco             = stub(:entity => circle)
         | 
| 19 | 
            +
                  eval_condition  = 'is_stackable?'                       # fail
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  condition = new_conditions(eval_condition)
         | 
| 22 | 
            +
                  condition.pass?(cco).must_equal(false)
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              context 'with passing conditions' do
         | 
| 27 | 
            +
                it 'correctly evalutes conditions' do
         | 
| 28 | 
            +
                  circle          = stub(:is_round? => true, :can_roll? => true, :has_corners? => false, :is_stackable? => false)
         | 
| 29 | 
            +
                  cco             = stub(:entity => circle)
         | 
| 30 | 
            +
                  proc_condition  = Proc.new{|entity| entity.is_round?}   # pass
         | 
| 31 | 
            +
                  eval_condition  = 'can_roll?'                           # pass
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  condition = new_conditions([proc_condition, eval_condition])
         | 
| 34 | 
            +
                  condition.pass?(cco).must_equal(true)
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              context 'with one passing and one failing condition' do
         | 
| 39 | 
            +
                it 'correctly evalutes conditions' do
         | 
| 40 | 
            +
                  circle          = stub(:is_round? => true, :can_roll? => true, :has_corners? => false, :is_stackable? => false)
         | 
| 41 | 
            +
                  cco             = stub(:entity => circle)
         | 
| 42 | 
            +
                  proc_condition  = Proc.new{|entity| entity.is_round?}    # pass
         | 
| 43 | 
            +
                  eval_condition  = 'has_corners?'                         # fail
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  condition = new_conditions([proc_condition, eval_condition])
         | 
| 46 | 
            +
                  condition.pass?(cco).must_equal(false)
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              context 'with failing conditions' do
         | 
| 51 | 
            +
                it 'correctly evalutes conditions' do
         | 
| 52 | 
            +
                  circle          = stub(:is_round? => true, :can_roll? => true, :has_corners? => false, :is_stackable? => false)
         | 
| 53 | 
            +
                  cco             = stub(:entity => circle)
         | 
| 54 | 
            +
                  proc_condition  = Proc.new{|entity| entity.has_corners?}  # fail
         | 
| 55 | 
            +
                  eval_condition  = 'is_stackable?'                         # fail
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  condition = new_conditions([proc_condition, eval_condition])
         | 
| 58 | 
            +
                  condition.pass?(cco).must_equal(false)
         | 
| 59 | 
            +
                end
         | 
| 60 | 
            +
              end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
              def new_conditions(*args)
         | 
| 63 | 
            +
                Veto::IfConditions.new(*args)
         | 
| 64 | 
            +
              end
         | 
| 65 | 
            +
            end
         | 
| @@ -0,0 +1,33 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Veto::IfUnlessConditions do
         | 
| 4 | 
            +
              context 'when passing conditions' do
         | 
| 5 | 
            +
                it 'correctly evaluates conditions' do
         | 
| 6 | 
            +
                  circle   = stub(:is_round? => true, :can_roll? => true, :has_corners? => false, :is_stackable? => false)
         | 
| 7 | 
            +
                  cco      = stub(:entity => circle)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  condition = new_if_unless_conditions(
         | 
| 10 | 
            +
                    :if => 'can_roll?',
         | 
| 11 | 
            +
                    :unless => 'has_corners?'
         | 
| 12 | 
            +
                  )
         | 
| 13 | 
            +
                  condition.pass?(cco).must_equal(true)
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              context 'when failing conditions' do
         | 
| 18 | 
            +
                it 'correctly evaluates conditions' do
         | 
| 19 | 
            +
                  circle   = stub(:is_round? => true, :can_roll? => true, :has_corners? => false, :is_stackable? => false)
         | 
| 20 | 
            +
                  cco      = stub(:entity => circle)
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  condition = new_if_unless_conditions(
         | 
| 23 | 
            +
                    :if => 'has_corners?',
         | 
| 24 | 
            +
                    :unless => 'can_roll?'
         | 
| 25 | 
            +
                  )
         | 
| 26 | 
            +
                  condition.pass?(cco).must_equal(false)
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              def new_if_unless_conditions(*args)
         | 
| 31 | 
            +
                Veto::IfUnlessConditions.new(*args)
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
            end
         | 
| @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Veto::PrimativeCondition do
         | 
| 4 | 
            +
              context 'when input coerses to true' do
         | 
| 5 | 
            +
                it 'passes' do
         | 
| 6 | 
            +
                  new_condition(true).pass?.must_equal(true)
         | 
| 7 | 
            +
                  new_condition('string').pass?.must_equal(true)
         | 
| 8 | 
            +
                  new_condition(:symbol).pass?.must_equal(true)
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              context 'when input coerses to false' do
         | 
| 13 | 
            +
                it 'fails' do
         | 
| 14 | 
            +
                  new_condition(false).pass?.must_equal(false)
         | 
| 15 | 
            +
                  new_condition('blah' == 'blahblah').pass?.must_equal(false)
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              def new_condition(*args)
         | 
| 20 | 
            +
                Veto::PrimativeCondition.new(*args)
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Veto::ProcCondition do
         | 
| 4 | 
            +
              context 'when proc returns truthy value' do
         | 
| 5 | 
            +
                it 'passes' do
         | 
| 6 | 
            +
                  entity = stub(:good? => true)
         | 
| 7 | 
            +
                  cco = stub(:entity => entity)
         | 
| 8 | 
            +
                  condition = new_condition(Proc.new{|e| e.good? })
         | 
| 9 | 
            +
                  condition.pass?(cco).must_equal(true)
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              context 'when proc returns falsy value' do
         | 
| 14 | 
            +
                it 'fails' do
         | 
| 15 | 
            +
                  entity = stub(:good? => false)
         | 
| 16 | 
            +
                  cco = stub(:entity => entity)
         | 
| 17 | 
            +
                  condition = new_condition(Proc.new{|e| e.good? })
         | 
| 18 | 
            +
                  condition.pass?(cco).must_equal(false)
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
              
         | 
| 22 | 
            +
              def new_condition(*args)
         | 
| 23 | 
            +
                Veto::ProcCondition.new(*args)
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,65 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe Veto::UnlessConditions do
         | 
| 4 | 
            +
              context 'with passing condition' do
         | 
| 5 | 
            +
                it 'correctly evalutes conditions' do
         | 
| 6 | 
            +
                  circle          = stub(:is_round? => true, :can_roll? => true, :has_corners? => false, :is_stackable? => false)
         | 
| 7 | 
            +
                  cco             = stub(:entity => circle)
         | 
| 8 | 
            +
                  eval_condition  = 'has_corners?'                           # fail
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  condition = new_conditions(eval_condition)
         | 
| 11 | 
            +
                  condition.pass?(cco).must_equal(true)
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              context 'with failing condition' do
         | 
| 16 | 
            +
                it 'correctly evalutes conditions' do
         | 
| 17 | 
            +
                  circle          = stub(:is_round? => true, :can_roll? => true, :has_corners? => false, :is_stackable? => false)
         | 
| 18 | 
            +
                  cco             = stub(:entity => circle)
         | 
| 19 | 
            +
                  eval_condition  = 'is_round?'                              # pass
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  condition = new_conditions(eval_condition)
         | 
| 22 | 
            +
                  condition.pass?(cco).must_equal(false)
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              context 'with passing conditions' do
         | 
| 27 | 
            +
                it 'correctly evalutes conditions' do
         | 
| 28 | 
            +
                  circle          = stub(:is_round? => true, :can_roll? => true, :has_corners? => false, :is_stackable? => false)
         | 
| 29 | 
            +
                  cco             = stub(:entity => circle)
         | 
| 30 | 
            +
                  proc_condition  = Proc.new{|entity| entity.is_stackable?}   # fail
         | 
| 31 | 
            +
                  eval_condition  = 'has_corners?'                            # fail
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  condition = new_conditions([proc_condition, eval_condition])
         | 
| 34 | 
            +
                  condition.pass?(cco).must_equal(true)
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              context 'with one passing and one failing condition' do
         | 
| 39 | 
            +
                it 'correctly evalutes conditions' do
         | 
| 40 | 
            +
                  circle          = stub(:is_round? => true, :can_roll? => true, :has_corners? => false, :is_stackable? => false)
         | 
| 41 | 
            +
                  cco             = stub(:entity => circle)
         | 
| 42 | 
            +
                  proc_condition  = Proc.new{|entity| entity.is_round?}       # pass
         | 
| 43 | 
            +
                  eval_condition  = 'is_stackable?'                           # fail
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  condition = new_conditions([proc_condition, eval_condition])
         | 
| 46 | 
            +
                  condition.pass?(cco).must_equal(false)
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              context 'with failing conditions' do
         | 
| 51 | 
            +
                it 'correctly evalutes conditions' do
         | 
| 52 | 
            +
                  circle          = stub(:is_round? => true, :can_roll? => true, :has_corners? => false, :is_stackable? => false)
         | 
| 53 | 
            +
                  cco             = stub(:entity => circle)
         | 
| 54 | 
            +
                  proc_condition  = Proc.new{|entity| entity.is_round?}        # pass
         | 
| 55 | 
            +
                  eval_condition  = 'can_roll?'                                # pass
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  condition = new_conditions([proc_condition, eval_condition])
         | 
| 58 | 
            +
                  condition.pass?(cco).must_equal(false)
         | 
| 59 | 
            +
                end
         | 
| 60 | 
            +
              end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
              def new_conditions(*args)
         | 
| 63 | 
            +
                Veto::UnlessConditions.new(*args)
         | 
| 64 | 
            +
              end
         | 
| 65 | 
            +
            end
         | 
| @@ -1,30 +1,25 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 | 
            -
            require 'veto/configuration'
         | 
| 3 2 |  | 
| 4 3 | 
             
            describe Veto::Configuration::Message do
         | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 4 | 
            +
              it 'gets message for check type' do
         | 
| 5 | 
            +
                msg = new_message
         | 
| 6 | 
            +
                msg.get(:exact_length, 23).must_equal('is not 23 characters')
         | 
| 7 | 
            +
              end
         | 
| 7 8 |  | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
            		end
         | 
| 14 | 
            -
            	end
         | 
| 9 | 
            +
              it 'overrides message for check type' do
         | 
| 10 | 
            +
                msg = new_message
         | 
| 11 | 
            +
                msg.set(:exact_length, Proc.new{'custom message'})
         | 
| 12 | 
            +
                msg.get(:exact_length).must_equal('custom message')
         | 
| 13 | 
            +
              end
         | 
| 15 14 |  | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
            		end
         | 
| 15 | 
            +
              context 'when type unknown' do
         | 
| 16 | 
            +
                it 'outputs default message' do
         | 
| 17 | 
            +
                  msg = new_message
         | 
| 18 | 
            +
                  msg.get(:does_not_exist).must_equal('is not valid')
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
              end
         | 
| 23 21 |  | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
            			end
         | 
| 28 | 
            -
            		end
         | 
| 29 | 
            -
            	end
         | 
| 22 | 
            +
              def new_message
         | 
| 23 | 
            +
                Veto::Configuration::Message.new
         | 
| 24 | 
            +
              end
         | 
| 30 25 | 
             
            end
         |