schemacop 2.4.6 → 3.0.0.rc3
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/.gitignore +3 -0
- data/.releaser_config +0 -1
- data/.rubocop.yml +25 -1
- data/.travis.yml +3 -1
- data/CHANGELOG.md +33 -0
- data/README.md +53 -710
- data/README_V2.md +775 -0
- data/README_V3.md +1197 -0
- data/Rakefile +8 -12
- data/VERSION +1 -1
- data/lib/schemacop.rb +35 -36
- data/lib/schemacop/base_schema.rb +37 -0
- data/lib/schemacop/railtie.rb +10 -0
- data/lib/schemacop/schema.rb +1 -60
- data/lib/schemacop/schema2.rb +22 -0
- data/lib/schemacop/schema3.rb +21 -0
- data/lib/schemacop/scoped_env.rb +25 -13
- data/lib/schemacop/v2.rb +25 -0
- data/lib/schemacop/{caster.rb → v2/caster.rb} +16 -2
- data/lib/schemacop/{collector.rb → v2/collector.rb} +5 -2
- data/lib/schemacop/{dupper.rb → v2/dupper.rb} +1 -1
- data/lib/schemacop/{field_node.rb → v2/field_node.rb} +4 -3
- data/lib/schemacop/v2/node.rb +142 -0
- data/lib/schemacop/{node_resolver.rb → v2/node_resolver.rb} +1 -1
- data/lib/schemacop/v2/node_supporting_field.rb +70 -0
- data/lib/schemacop/{node_supporting_type.rb → v2/node_supporting_type.rb} +8 -5
- data/lib/schemacop/{node_with_block.rb → v2/node_with_block.rb} +3 -2
- data/lib/schemacop/v2/root_node.rb +0 -0
- data/lib/schemacop/v2/validator/array_validator.rb +32 -0
- data/lib/schemacop/{validator → v2/validator}/boolean_validator.rb +1 -1
- data/lib/schemacop/v2/validator/float_validator.rb +7 -0
- data/lib/schemacop/v2/validator/hash_validator.rb +37 -0
- data/lib/schemacop/v2/validator/integer_validator.rb +7 -0
- data/lib/schemacop/{validator → v2/validator}/nil_validator.rb +1 -1
- data/lib/schemacop/v2/validator/number_validator.rb +21 -0
- data/lib/schemacop/v2/validator/object_validator.rb +29 -0
- data/lib/schemacop/v2/validator/string_validator.rb +39 -0
- data/lib/schemacop/{validator → v2/validator}/symbol_validator.rb +1 -1
- data/lib/schemacop/v3.rb +45 -0
- data/lib/schemacop/v3/all_of_node.rb +27 -0
- data/lib/schemacop/v3/any_of_node.rb +28 -0
- data/lib/schemacop/v3/array_node.rb +218 -0
- data/lib/schemacop/v3/boolean_node.rb +16 -0
- data/lib/schemacop/v3/combination_node.rb +45 -0
- data/lib/schemacop/v3/context.rb +17 -0
- data/lib/schemacop/v3/dsl_scope.rb +46 -0
- data/lib/schemacop/v3/global_context.rb +114 -0
- data/lib/schemacop/v3/hash_node.rb +258 -0
- data/lib/schemacop/v3/integer_node.rb +13 -0
- data/lib/schemacop/v3/is_not_node.rb +32 -0
- data/lib/schemacop/v3/node.rb +219 -0
- data/lib/schemacop/v3/node_registry.rb +49 -0
- data/lib/schemacop/v3/number_node.rb +18 -0
- data/lib/schemacop/v3/numeric_node.rb +76 -0
- data/lib/schemacop/v3/object_node.rb +40 -0
- data/lib/schemacop/v3/one_of_node.rb +28 -0
- data/lib/schemacop/v3/reference_node.rb +49 -0
- data/lib/schemacop/v3/result.rb +58 -0
- data/lib/schemacop/v3/string_node.rb +124 -0
- data/lib/schemacop/v3/symbol_node.rb +13 -0
- data/schemacop.gemspec +24 -27
- data/test/lib/test_helper.rb +152 -0
- data/test/schemas/nested/group.rb +6 -0
- data/test/schemas/user.rb +7 -0
- data/test/unit/schemacop/v2/casting_test.rb +120 -0
- data/test/unit/schemacop/v2/collector_test.rb +47 -0
- data/test/unit/schemacop/v2/custom_check_test.rb +95 -0
- data/test/unit/schemacop/v2/custom_if_test.rb +97 -0
- data/test/unit/schemacop/v2/defaults_test.rb +95 -0
- data/test/unit/schemacop/v2/empty_test.rb +16 -0
- data/test/unit/schemacop/v2/nil_dis_allow_test.rb +43 -0
- data/test/unit/schemacop/v2/node_resolver_test.rb +28 -0
- data/test/unit/schemacop/v2/short_forms_test.rb +351 -0
- data/test/unit/schemacop/v2/types_test.rb +88 -0
- data/test/unit/schemacop/v2/validator_array_test.rb +99 -0
- data/test/unit/schemacop/v2/validator_boolean_test.rb +17 -0
- data/test/unit/schemacop/v2/validator_float_test.rb +59 -0
- data/test/unit/schemacop/v2/validator_hash_test.rb +95 -0
- data/test/unit/schemacop/v2/validator_integer_test.rb +48 -0
- data/test/unit/schemacop/v2/validator_nil_test.rb +15 -0
- data/test/unit/schemacop/v2/validator_number_test.rb +62 -0
- data/test/unit/schemacop/v2/validator_object_test.rb +141 -0
- data/test/unit/schemacop/v2/validator_string_test.rb +78 -0
- data/test/unit/schemacop/v2/validator_symbol_test.rb +18 -0
- data/test/unit/schemacop/v3/all_of_node_test.rb +198 -0
- data/test/unit/schemacop/v3/any_of_node_test.rb +218 -0
- data/test/unit/schemacop/v3/array_node_test.rb +815 -0
- data/test/unit/schemacop/v3/boolean_node_test.rb +126 -0
- data/test/unit/schemacop/v3/global_context_test.rb +164 -0
- data/test/unit/schemacop/v3/hash_node_test.rb +884 -0
- data/test/unit/schemacop/v3/integer_node_test.rb +323 -0
- data/test/unit/schemacop/v3/is_not_node_test.rb +173 -0
- data/test/unit/schemacop/v3/node_test.rb +148 -0
- data/test/unit/schemacop/v3/number_node_test.rb +292 -0
- data/test/unit/schemacop/v3/object_node_test.rb +170 -0
- data/test/unit/schemacop/v3/one_of_node_test.rb +187 -0
- data/test/unit/schemacop/v3/reference_node_test.rb +351 -0
- data/test/unit/schemacop/v3/string_node_test.rb +334 -0
- data/test/unit/schemacop/v3/symbol_node_test.rb +75 -0
- metadata +157 -150
- data/doc/Schemacop.html +0 -146
- data/doc/Schemacop/ArrayValidator.html +0 -329
- data/doc/Schemacop/BooleanValidator.html +0 -145
- data/doc/Schemacop/Caster.html +0 -379
- data/doc/Schemacop/Collector.html +0 -787
- data/doc/Schemacop/Dupper.html +0 -214
- data/doc/Schemacop/Exceptions.html +0 -115
- data/doc/Schemacop/Exceptions/InvalidSchemaError.html +0 -124
- data/doc/Schemacop/Exceptions/ValidationError.html +0 -124
- data/doc/Schemacop/FieldNode.html +0 -421
- data/doc/Schemacop/FloatValidator.html +0 -158
- data/doc/Schemacop/HashValidator.html +0 -293
- data/doc/Schemacop/IntegerValidator.html +0 -158
- data/doc/Schemacop/NilValidator.html +0 -145
- data/doc/Schemacop/Node.html +0 -1438
- data/doc/Schemacop/NodeResolver.html +0 -258
- data/doc/Schemacop/NodeSupportingField.html +0 -590
- data/doc/Schemacop/NodeSupportingType.html +0 -612
- data/doc/Schemacop/NodeWithBlock.html +0 -289
- data/doc/Schemacop/NumberValidator.html +0 -232
- data/doc/Schemacop/ObjectValidator.html +0 -298
- data/doc/Schemacop/RootNode.html +0 -171
- data/doc/Schemacop/Schema.html +0 -699
- data/doc/Schemacop/StringValidator.html +0 -295
- data/doc/Schemacop/SymbolValidator.html +0 -145
- data/doc/ScopedEnv.html +0 -351
- data/doc/_index.html +0 -379
- data/doc/class_list.html +0 -51
- data/doc/css/common.css +0 -1
- data/doc/css/full_list.css +0 -58
- data/doc/css/style.css +0 -496
- data/doc/file.README.html +0 -833
- data/doc/file_list.html +0 -56
- data/doc/frames.html +0 -17
- data/doc/index.html +0 -833
- data/doc/inheritance.graphml +0 -524
- data/doc/inheritance.pdf +0 -825
- data/doc/js/app.js +0 -303
- data/doc/js/full_list.js +0 -216
- data/doc/js/jquery.js +0 -4
- data/doc/method_list.html +0 -587
- data/doc/top-level-namespace.html +0 -112
- data/lib/schemacop/node.rb +0 -139
- data/lib/schemacop/node_supporting_field.rb +0 -58
- data/lib/schemacop/root_node.rb +0 -4
- data/lib/schemacop/validator/array_validator.rb +0 -30
- data/lib/schemacop/validator/float_validator.rb +0 -5
- data/lib/schemacop/validator/hash_validator.rb +0 -35
- data/lib/schemacop/validator/integer_validator.rb +0 -5
- data/lib/schemacop/validator/number_validator.rb +0 -19
- data/lib/schemacop/validator/object_validator.rb +0 -27
- data/lib/schemacop/validator/string_validator.rb +0 -37
- data/test/casting_test.rb +0 -100
- data/test/collector_test.rb +0 -45
- data/test/custom_check_test.rb +0 -93
- data/test/custom_if_test.rb +0 -95
- data/test/defaults_test.rb +0 -93
- data/test/empty_test.rb +0 -14
- data/test/nil_dis_allow_test.rb +0 -41
- data/test/node_resolver_test.rb +0 -26
- data/test/short_forms_test.rb +0 -349
- data/test/test_helper.rb +0 -13
- data/test/types_test.rb +0 -84
- data/test/validator_array_test.rb +0 -97
- data/test/validator_boolean_test.rb +0 -15
- data/test/validator_float_test.rb +0 -57
- data/test/validator_hash_test.rb +0 -93
- data/test/validator_integer_test.rb +0 -46
- data/test/validator_nil_test.rb +0 -13
- data/test/validator_number_test.rb +0 -60
- data/test/validator_object_test.rb +0 -139
- data/test/validator_string_test.rb +0 -76
- data/test/validator_symbol_test.rb +0 -16
    
        data/test/empty_test.rb
    DELETED
    
    | @@ -1,14 +0,0 @@ | |
| 1 | 
            -
            require 'test_helper'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Schemacop
         | 
| 4 | 
            -
              class EmptyTest < Minitest::Test
         | 
| 5 | 
            -
                def test_empty_hash
         | 
| 6 | 
            -
                  schema = Schema.new do
         | 
| 7 | 
            -
                    type Hash
         | 
| 8 | 
            -
                  end
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                  assert_nothing_raised { schema.validate!({}) }
         | 
| 11 | 
            -
                  assert_verr { schema.validate!(foo: :bar) }
         | 
| 12 | 
            -
                end
         | 
| 13 | 
            -
              end
         | 
| 14 | 
            -
            end
         | 
    
        data/test/nil_dis_allow_test.rb
    DELETED
    
    | @@ -1,41 +0,0 @@ | |
| 1 | 
            -
            require 'test_helper'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            # Note: A test for req and opt is part of validator_hash_test.rb
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            module Schemacop
         | 
| 6 | 
            -
              class NilDisAllowTest < Minitest::Test
         | 
| 7 | 
            -
                def test_req
         | 
| 8 | 
            -
                  s = Schema.new do
         | 
| 9 | 
            -
                    req? :o do
         | 
| 10 | 
            -
                      type :boolean
         | 
| 11 | 
            -
                    end
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                    req :r do
         | 
| 14 | 
            -
                      type :boolean
         | 
| 15 | 
            -
                    end
         | 
| 16 | 
            -
                  end
         | 
| 17 | 
            -
                  assert_nothing_raised { s.validate!(o: nil, r: false) }
         | 
| 18 | 
            -
                  assert_nothing_raised { s.validate!(o: false, r: false) }
         | 
| 19 | 
            -
                  assert_verr { s.validate!(o: true, r: nil) }
         | 
| 20 | 
            -
                  assert_verr { s.validate!(o: nil, r: nil) }
         | 
| 21 | 
            -
                  assert_verr { s.validate!(r: true) }
         | 
| 22 | 
            -
                end
         | 
| 23 | 
            -
             | 
| 24 | 
            -
                def test_opt
         | 
| 25 | 
            -
                  s = Schema.new do
         | 
| 26 | 
            -
                    opt :o do
         | 
| 27 | 
            -
                      type :boolean
         | 
| 28 | 
            -
                    end
         | 
| 29 | 
            -
                    opt! :r do
         | 
| 30 | 
            -
                      type :boolean
         | 
| 31 | 
            -
                    end
         | 
| 32 | 
            -
                  end
         | 
| 33 | 
            -
                  assert_nothing_raised { s.validate!(o: nil, r: false) }
         | 
| 34 | 
            -
                  assert_nothing_raised { s.validate!(o: false, r: false) }
         | 
| 35 | 
            -
                  assert_nothing_raised { s.validate!(r: true) }
         | 
| 36 | 
            -
                  assert_nothing_raised { s.validate!({}) }
         | 
| 37 | 
            -
                  assert_verr { s.validate!(o: true, r: nil) }
         | 
| 38 | 
            -
                  assert_verr { s.validate!(o: nil, r: nil) }
         | 
| 39 | 
            -
                end
         | 
| 40 | 
            -
              end
         | 
| 41 | 
            -
            end
         | 
    
        data/test/node_resolver_test.rb
    DELETED
    
    | @@ -1,26 +0,0 @@ | |
| 1 | 
            -
            require 'test_helper'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Schemacop
         | 
| 4 | 
            -
              class NodeResolverTest < Minitest::Test
         | 
| 5 | 
            -
                class ClassA; end
         | 
| 6 | 
            -
                class ClassB; end
         | 
| 7 | 
            -
                class ClassC; end
         | 
| 8 | 
            -
                class ClassD; end
         | 
| 9 | 
            -
             | 
| 10 | 
            -
                def test_insert_before
         | 
| 11 | 
            -
                  prev_node_classes = NodeResolver.node_classes
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                  NodeResolver.node_classes = []
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                  NodeResolver.register(ClassA)
         | 
| 16 | 
            -
                  NodeResolver.register(ClassB)
         | 
| 17 | 
            -
                  NodeResolver.register(ClassC)
         | 
| 18 | 
            -
                  NodeResolver.register(ClassD, before: ClassB)
         | 
| 19 | 
            -
             | 
| 20 | 
            -
                  assert_equal [ClassA, ClassD, ClassB, ClassC],
         | 
| 21 | 
            -
                               NodeResolver.node_classes
         | 
| 22 | 
            -
                ensure
         | 
| 23 | 
            -
                  NodeResolver.node_classes = prev_node_classes
         | 
| 24 | 
            -
                end
         | 
| 25 | 
            -
              end
         | 
| 26 | 
            -
            end
         | 
    
        data/test/short_forms_test.rb
    DELETED
    
    | @@ -1,349 +0,0 @@ | |
| 1 | 
            -
            require 'test_helper'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Schemacop
         | 
| 4 | 
            -
              class ShortFormsTest < Minitest::Test
         | 
| 5 | 
            -
                class User; end
         | 
| 6 | 
            -
                class Group; end
         | 
| 7 | 
            -
             | 
| 8 | 
            -
                def test_untyped
         | 
| 9 | 
            -
                  s = Schema.new do
         | 
| 10 | 
            -
                    req :foo
         | 
| 11 | 
            -
                  end
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                  assert_nothing_raised { s.validate!(foo: 3) }
         | 
| 14 | 
            -
                  assert_nothing_raised { s.validate!(foo: '42') }
         | 
| 15 | 
            -
                  assert_nothing_raised { s.validate!(foo: Object.new) }
         | 
| 16 | 
            -
                  assert_verr { s.validate!(foo: nil) }
         | 
| 17 | 
            -
                end
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                def test_constructor_defaults_to_hash
         | 
| 20 | 
            -
                  s = Schema.new do
         | 
| 21 | 
            -
                    req! :r do
         | 
| 22 | 
            -
                      type :integer
         | 
| 23 | 
            -
                    end
         | 
| 24 | 
            -
                    opt? :o do
         | 
| 25 | 
            -
                      type :integer
         | 
| 26 | 
            -
                    end
         | 
| 27 | 
            -
                  end
         | 
| 28 | 
            -
             | 
| 29 | 
            -
                  assert_nothing_raised { s.validate!(r: 3) }
         | 
| 30 | 
            -
                  assert_nothing_raised { s.validate!(r: 3, o: 1) }
         | 
| 31 | 
            -
                  assert_verr { s.validate!(o: 1) }
         | 
| 32 | 
            -
                  assert_verr { s.validate!(1) }
         | 
| 33 | 
            -
                  assert_verr { s.validate!(r: 3, n: 5) }
         | 
| 34 | 
            -
                end
         | 
| 35 | 
            -
             | 
| 36 | 
            -
                def test_field_defaults_to_any
         | 
| 37 | 
            -
                  s = Schema.new do
         | 
| 38 | 
            -
                    type :hash do
         | 
| 39 | 
            -
                      req :r
         | 
| 40 | 
            -
                      opt :o
         | 
| 41 | 
            -
                    end
         | 
| 42 | 
            -
                  end
         | 
| 43 | 
            -
             | 
| 44 | 
            -
                  assert_nothing_raised { s.validate!(r: 3) }
         | 
| 45 | 
            -
                  assert_nothing_raised { s.validate!(r: 'asd', o: self) }
         | 
| 46 | 
            -
                  assert_verr { s.validate!(o: -5.3) }
         | 
| 47 | 
            -
                  assert_verr { s.validate!(Class) }
         | 
| 48 | 
            -
                  assert_verr { s.validate!(r: s, n: true) }
         | 
| 49 | 
            -
                end
         | 
| 50 | 
            -
             | 
| 51 | 
            -
                def test_inline_type_with_attrs_in_hash
         | 
| 52 | 
            -
                  s = Schema.new do
         | 
| 53 | 
            -
                    type :hash do
         | 
| 54 | 
            -
                      req :i, :integer, min: 5
         | 
| 55 | 
            -
                      opt :f, :float, min: 2.3, max: 3
         | 
| 56 | 
            -
                    end
         | 
| 57 | 
            -
                  end
         | 
| 58 | 
            -
             | 
| 59 | 
            -
                  assert_nothing_raised { s.validate!(i: 5) }
         | 
| 60 | 
            -
                  assert_nothing_raised { s.validate!(i: 5, f: 2.3) }
         | 
| 61 | 
            -
                  assert_verr { s.validate!(i: 4, f: 2.3) }
         | 
| 62 | 
            -
                  assert_verr { s.validate!(i: 5, f: 2.2) }
         | 
| 63 | 
            -
                  assert_verr { s.validate!(i: 5, f: 3.4) }
         | 
| 64 | 
            -
                  assert_verr { s.validate!(i: 5.3) }
         | 
| 65 | 
            -
                  assert_verr { s.validate!(j: 2.3) }
         | 
| 66 | 
            -
                  assert_verr { s.validate!({}) }
         | 
| 67 | 
            -
                end
         | 
| 68 | 
            -
             | 
| 69 | 
            -
                def test_inline_type_in_constructor
         | 
| 70 | 
            -
                  s = Schema.new :integer, min: 2, max: 4
         | 
| 71 | 
            -
                  assert_nothing_raised { s.validate!(3) }
         | 
| 72 | 
            -
                  assert_verr { s.validate!(5) }
         | 
| 73 | 
            -
                  assert_verr { s.validate!(1) }
         | 
| 74 | 
            -
                end
         | 
| 75 | 
            -
             | 
| 76 | 
            -
                def test_mixed_field_and_type_attrs
         | 
| 77 | 
            -
                  s = Schema.new do
         | 
| 78 | 
            -
                    req? :nilbool, :boolean
         | 
| 79 | 
            -
                    req? :nilint, :integer, min: 2, max: 3
         | 
| 80 | 
            -
                    opt! :optint, :integer, min: 2, max: 3
         | 
| 81 | 
            -
                  end
         | 
| 82 | 
            -
             | 
| 83 | 
            -
                  assert_nothing_raised { s.validate!(nilbool: nil, nilint: nil) }
         | 
| 84 | 
            -
                  assert_nothing_raised { s.validate!(nilbool: false, nilint: 2) }
         | 
| 85 | 
            -
                  assert_nothing_raised { s.validate!(nilbool: false, nilint: 3, optint: 2) }
         | 
| 86 | 
            -
                  assert_verr { s.validate!(nilbool: false, nilint: 2, optint: nil) }
         | 
| 87 | 
            -
                  assert_verr { s.validate!(nilbool: false, nilint: 2, optint: 4) }
         | 
| 88 | 
            -
                  assert_verr { s.validate!(nilbool: false, nilint: -5, optint: 2) }
         | 
| 89 | 
            -
                end
         | 
| 90 | 
            -
             | 
| 91 | 
            -
                def test_array_shortform_simple
         | 
| 92 | 
            -
                  s = Schema.new do
         | 
| 93 | 
            -
                    type(:array, :string)
         | 
| 94 | 
            -
                  end
         | 
| 95 | 
            -
                  assert_nothing_raised { s.validate!(%w(a b)) }
         | 
| 96 | 
            -
                end
         | 
| 97 | 
            -
             | 
| 98 | 
            -
                # TODO: Get the exception message into the assertion
         | 
| 99 | 
            -
                def test_array_shortform_invalid
         | 
| 100 | 
            -
                  assert_raises Exceptions::InvalidSchemaError do
         | 
| 101 | 
            -
                    Schema.new do
         | 
| 102 | 
            -
                      type(:array, [:array, :integer], min: 2)
         | 
| 103 | 
            -
                    end
         | 
| 104 | 
            -
                  end
         | 
| 105 | 
            -
                end
         | 
| 106 | 
            -
             | 
| 107 | 
            -
                def test_array_shortform_advanced1
         | 
| 108 | 
            -
                  s = Schema.new do
         | 
| 109 | 
            -
                    type(:array, [:array, :integer])
         | 
| 110 | 
            -
                  end
         | 
| 111 | 
            -
                  assert_nothing_raised { s.validate! [[], 3] }
         | 
| 112 | 
            -
                  assert_nothing_raised { s.validate! [[:a, 9], 3] }
         | 
| 113 | 
            -
                  assert_nothing_raised { s.validate! [[]] }
         | 
| 114 | 
            -
                  assert_nothing_raised { s.validate! [3] }
         | 
| 115 | 
            -
                  assert_verr { s.validate! [[], 'string'] }
         | 
| 116 | 
            -
                  assert_verr { s.validate! [3, 'string'] }
         | 
| 117 | 
            -
                  assert_verr { s.validate! ['string'] }
         | 
| 118 | 
            -
                end
         | 
| 119 | 
            -
             | 
| 120 | 
            -
                def test_array_shortform_advanced2
         | 
| 121 | 
            -
                  assert_raises Exceptions::InvalidSchemaError, 'No validation class found for type [:array, :integer].' do
         | 
| 122 | 
            -
                    Schema.new do
         | 
| 123 | 
            -
                      type([:array, [:array, :integer], :boolean])
         | 
| 124 | 
            -
                    end
         | 
| 125 | 
            -
                  end
         | 
| 126 | 
            -
                end
         | 
| 127 | 
            -
             | 
| 128 | 
            -
                # For explicit form test see types_test.rb
         | 
| 129 | 
            -
                def test_array_subtype_shortform
         | 
| 130 | 
            -
                  s = Schema.new do
         | 
| 131 | 
            -
                    type :array, :integer
         | 
| 132 | 
            -
                  end
         | 
| 133 | 
            -
                  assert_nothing_raised { s.validate! [5] }
         | 
| 134 | 
            -
                  assert_verr { s.validate! [nil] }
         | 
| 135 | 
            -
                  assert_verr { s.validate! ['a'] }
         | 
| 136 | 
            -
                  assert_verr { s.validate! [5, 'a'] }
         | 
| 137 | 
            -
                  assert_verr { s.validate! [5, nil] }
         | 
| 138 | 
            -
                end
         | 
| 139 | 
            -
             | 
| 140 | 
            -
                def test_array_subsubtype_shortform
         | 
| 141 | 
            -
                  s = Schema.new do
         | 
| 142 | 
            -
                    type :array, :array, :integer
         | 
| 143 | 
            -
                  end
         | 
| 144 | 
            -
                  assert_nothing_raised { s.validate! [[5]] }
         | 
| 145 | 
            -
                  assert_verr { s.validate! [5] }
         | 
| 146 | 
            -
                  assert_verr { s.validate! [[nil]] }
         | 
| 147 | 
            -
                  assert_verr { s.validate! [['a']] }
         | 
| 148 | 
            -
                  assert_verr { s.validate! [[5, 'a']] }
         | 
| 149 | 
            -
                  assert_verr { s.validate! [[5, nil]] }
         | 
| 150 | 
            -
                end
         | 
| 151 | 
            -
             | 
| 152 | 
            -
                def test_wild_mix_should_pass
         | 
| 153 | 
            -
                  s = Schema.new do
         | 
| 154 | 
            -
                    req :foo do
         | 
| 155 | 
            -
                      req? :bar, :object, classes: NilClass
         | 
| 156 | 
            -
                    end
         | 
| 157 | 
            -
                    req :name, :integer, min: 5, max: 7
         | 
| 158 | 
            -
                    req :id, [:integer, :string]
         | 
| 159 | 
            -
                    req :callback, :symbol
         | 
| 160 | 
            -
                    req :attrs do
         | 
| 161 | 
            -
                      req :color do
         | 
| 162 | 
            -
                        type :integer
         | 
| 163 | 
            -
                      end
         | 
| 164 | 
            -
                    end
         | 
| 165 | 
            -
                    req :colors, :array, [:string, :integer]
         | 
| 166 | 
            -
                    req :cars, :array, :hash do
         | 
| 167 | 
            -
                      req? :years, :array, :integer
         | 
| 168 | 
            -
                      req! :make, :string
         | 
| 169 | 
            -
                      req! :ps, :integer
         | 
| 170 | 
            -
                      req? :electric, :boolean
         | 
| 171 | 
            -
                    end
         | 
| 172 | 
            -
                  end
         | 
| 173 | 
            -
             | 
| 174 | 
            -
                  assert_nothing_raised do
         | 
| 175 | 
            -
                    s.validate!(
         | 
| 176 | 
            -
                      name: 6,
         | 
| 177 | 
            -
                      foo: { bar: nil },
         | 
| 178 | 
            -
                      attrs: { color: 5 },
         | 
| 179 | 
            -
                      id: 'hallo',
         | 
| 180 | 
            -
                      callback: :funky_function,
         | 
| 181 | 
            -
                      colors: [5, 'sdf'],
         | 
| 182 | 
            -
                      cars: [
         | 
| 183 | 
            -
                        {
         | 
| 184 | 
            -
                          make: 'Tesla',
         | 
| 185 | 
            -
                          ps: 5,
         | 
| 186 | 
            -
                          electric: nil,
         | 
| 187 | 
            -
                          years: [1993, 1990]
         | 
| 188 | 
            -
                        }
         | 
| 189 | 
            -
                      ]
         | 
| 190 | 
            -
                    )
         | 
| 191 | 
            -
                  end
         | 
| 192 | 
            -
                end
         | 
| 193 | 
            -
             | 
| 194 | 
            -
                def test_super_deep_wild_should_pass
         | 
| 195 | 
            -
                  s = Schema.new do
         | 
| 196 | 
            -
                    type :hash do
         | 
| 197 | 
            -
                      opt? :bla do
         | 
| 198 | 
            -
                        type :string
         | 
| 199 | 
            -
                      end
         | 
| 200 | 
            -
                      req :id do
         | 
| 201 | 
            -
                        type :string
         | 
| 202 | 
            -
                      end
         | 
| 203 | 
            -
                      req? :friends do
         | 
| 204 | 
            -
                        type :array do
         | 
| 205 | 
            -
                          type :string, min: 3, max: 6
         | 
| 206 | 
            -
                          type :boolean
         | 
| 207 | 
            -
                          type :hash do
         | 
| 208 | 
            -
                            req :rod do
         | 
| 209 | 
            -
                              type :hash do
         | 
| 210 | 
            -
                                req :fritz do
         | 
| 211 | 
            -
                                  type :array, min: 2 do
         | 
| 212 | 
            -
                                    type :array do
         | 
| 213 | 
            -
                                      type :integer, min: 1
         | 
| 214 | 
            -
                                    end
         | 
| 215 | 
            -
                                  end
         | 
| 216 | 
            -
                                end
         | 
| 217 | 
            -
                              end
         | 
| 218 | 
            -
                            end
         | 
| 219 | 
            -
                          end
         | 
| 220 | 
            -
                        end
         | 
| 221 | 
            -
                      end
         | 
| 222 | 
            -
                    end
         | 
| 223 | 
            -
                    type :integer, min: 3
         | 
| 224 | 
            -
                  end
         | 
| 225 | 
            -
             | 
| 226 | 
            -
                  assert_nothing_raised do
         | 
| 227 | 
            -
                    s.validate!(
         | 
| 228 | 
            -
                      id: 'meine ID',
         | 
| 229 | 
            -
                      friends: [
         | 
| 230 | 
            -
                        'Rodney',
         | 
| 231 | 
            -
                        true,
         | 
| 232 | 
            -
                        false,
         | 
| 233 | 
            -
                        {
         | 
| 234 | 
            -
                          rod: {
         | 
| 235 | 
            -
                            fritz:
         | 
| 236 | 
            -
                            [
         | 
| 237 | 
            -
                              [1],
         | 
| 238 | 
            -
                              [3]
         | 
| 239 | 
            -
                            ]
         | 
| 240 | 
            -
                          }
         | 
| 241 | 
            -
                        }
         | 
| 242 | 
            -
                      ]
         | 
| 243 | 
            -
                    )
         | 
| 244 | 
            -
                  end
         | 
| 245 | 
            -
                  assert_nothing_raised { s.validate!(id: 'my ID', friends: nil) }
         | 
| 246 | 
            -
                  assert_nothing_raised { s.validate!(3) }
         | 
| 247 | 
            -
                end
         | 
| 248 | 
            -
             | 
| 249 | 
            -
                def test_example_from_readme
         | 
| 250 | 
            -
                  schema = Schema.new do
         | 
| 251 | 
            -
                    req :naming, :hash do
         | 
| 252 | 
            -
                      opt :first_name, :string
         | 
| 253 | 
            -
                      req :last_name, :string
         | 
| 254 | 
            -
                    end
         | 
| 255 | 
            -
                    opt! :age, :integer, min: 18
         | 
| 256 | 
            -
                    req? :password do
         | 
| 257 | 
            -
                      type :string, check: proc { |pw| pw.include?('*') }
         | 
| 258 | 
            -
                      type :integer
         | 
| 259 | 
            -
                    end
         | 
| 260 | 
            -
                  end
         | 
| 261 | 
            -
             | 
| 262 | 
            -
                  assert_nothing_raised do
         | 
| 263 | 
            -
                    schema.validate!(
         | 
| 264 | 
            -
                      naming: { first_name: 'John',
         | 
| 265 | 
            -
                                last_name: 'Doe' },
         | 
| 266 | 
            -
                      age: 34,
         | 
| 267 | 
            -
                      password: 'my*pass'
         | 
| 268 | 
            -
                    )
         | 
| 269 | 
            -
                  end
         | 
| 270 | 
            -
             | 
| 271 | 
            -
                  assert_verr do
         | 
| 272 | 
            -
                    schema.validate!(
         | 
| 273 | 
            -
                      naming: { first_name: 'John',
         | 
| 274 | 
            -
                                last_name: 'Doe' },
         | 
| 275 | 
            -
                      age: 12,
         | 
| 276 | 
            -
                      password: 'my*pass'
         | 
| 277 | 
            -
                    )
         | 
| 278 | 
            -
                  end
         | 
| 279 | 
            -
             | 
| 280 | 
            -
                  assert_verr do
         | 
| 281 | 
            -
                    schema.validate!(
         | 
| 282 | 
            -
                      naming: { first_name: 'John',
         | 
| 283 | 
            -
                                last_name: 'Doe' },
         | 
| 284 | 
            -
                      age: 12,
         | 
| 285 | 
            -
                      password: 'mypass'
         | 
| 286 | 
            -
                    )
         | 
| 287 | 
            -
                  end
         | 
| 288 | 
            -
             | 
| 289 | 
            -
                  schema2 = Schema.new do
         | 
| 290 | 
            -
                    req :description,
         | 
| 291 | 
            -
                        :string,
         | 
| 292 | 
            -
                        if: proc { |str| str.start_with?('Abstract: ') },
         | 
| 293 | 
            -
                        max: 35,
         | 
| 294 | 
            -
                        check: proc { |str| !str.end_with?('.') }
         | 
| 295 | 
            -
                    req :description, :string, min: 35
         | 
| 296 | 
            -
                  end
         | 
| 297 | 
            -
             | 
| 298 | 
            -
                  assert_nothing_raised { schema2.validate!(description: 'Abstract: a short description') }
         | 
| 299 | 
            -
                  assert_nothing_raised { schema2.validate!(description: 'Since this is no abstract, we expect it to be longer.') }
         | 
| 300 | 
            -
                  assert_verr { schema2.validate!(description: 'Abstract: A short description.') }
         | 
| 301 | 
            -
                  assert_verr { schema2.validate!(description: 'Abstract: This is gonna be way way too long for an abstract.') }
         | 
| 302 | 
            -
                  assert_verr { schema2.validate!(description: 'This is too short.') }
         | 
| 303 | 
            -
                end
         | 
| 304 | 
            -
             | 
| 305 | 
            -
                def test_one_line_subtype_with_options
         | 
| 306 | 
            -
                  s = Schema.new do
         | 
| 307 | 
            -
                    type :array, :integer, min: 3
         | 
| 308 | 
            -
                  end
         | 
| 309 | 
            -
                  assert_nothing_raised { s.validate!([3]) }
         | 
| 310 | 
            -
                  assert_nothing_raised { s.validate!([3, 4, 5]) }
         | 
| 311 | 
            -
                  assert_verr { s.validate!([3, 2]) }
         | 
| 312 | 
            -
                  assert_verr { s.validate!([5, 'string']) }
         | 
| 313 | 
            -
                end
         | 
| 314 | 
            -
             | 
| 315 | 
            -
                def test_one_line_array_schema
         | 
| 316 | 
            -
                  s = Schema.new :array, :integer, min: 3
         | 
| 317 | 
            -
                  assert_nothing_raised { s.validate!([3]) }
         | 
| 318 | 
            -
                  assert_nothing_raised { s.validate!([3, 4, 5]) }
         | 
| 319 | 
            -
                  assert_verr { s.validate!([3, 2]) }
         | 
| 320 | 
            -
                  assert_verr { s.validate!([5, 'string']) }
         | 
| 321 | 
            -
                end
         | 
| 322 | 
            -
             | 
| 323 | 
            -
                def test_implicit_hash
         | 
| 324 | 
            -
                  s = Schema.new do
         | 
| 325 | 
            -
                    req :bar
         | 
| 326 | 
            -
                  end
         | 
| 327 | 
            -
                  assert_nothing_raised { s.validate!(bar: 2) }
         | 
| 328 | 
            -
                  assert_verr { s.validate!(foo: 2) }
         | 
| 329 | 
            -
                  assert_verr { s.validate!([2]) }
         | 
| 330 | 
            -
                end
         | 
| 331 | 
            -
             | 
| 332 | 
            -
                def test_one_line_string_schema
         | 
| 333 | 
            -
                  s = Schema.new :string, min: 4
         | 
| 334 | 
            -
                  assert_nothing_raised { s.validate!('1234') }
         | 
| 335 | 
            -
                  assert_verr { s.validate!('123') }
         | 
| 336 | 
            -
                  assert_verr { s.validate!(string: '1234') }
         | 
| 337 | 
            -
                end
         | 
| 338 | 
            -
             | 
| 339 | 
            -
                def test_inline_objects
         | 
| 340 | 
            -
                  s = Schema.new do
         | 
| 341 | 
            -
                    req :user, User
         | 
| 342 | 
            -
                    req :group, Group
         | 
| 343 | 
            -
                  end
         | 
| 344 | 
            -
             | 
| 345 | 
            -
                  assert_nothing_raised { s.validate!(user: User.new, group: Group.new) }
         | 
| 346 | 
            -
                  assert_verr { s.validate!(user: Group.new, group: User.new) }
         | 
| 347 | 
            -
                end
         | 
| 348 | 
            -
              end
         | 
| 349 | 
            -
            end
         | 
    
        data/test/test_helper.rb
    DELETED
    
    | @@ -1,13 +0,0 @@ | |
| 1 | 
            -
            require 'minitest/autorun'
         | 
| 2 | 
            -
            require 'schemacop'
         | 
| 3 | 
            -
            require 'pry'
         | 
| 4 | 
            -
            require 'colorize'
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            def assert_verr(&_block)
         | 
| 7 | 
            -
              assert_raises(Schemacop::Exceptions::ValidationError) { yield }
         | 
| 8 | 
            -
            end
         | 
| 9 | 
            -
             | 
| 10 | 
            -
            def assert_nothing_raised(&_block)
         | 
| 11 | 
            -
              yield
         | 
| 12 | 
            -
              assert true
         | 
| 13 | 
            -
            end
         | 
    
        data/test/types_test.rb
    DELETED
    
    | @@ -1,84 +0,0 @@ | |
| 1 | 
            -
            require 'test_helper'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Schemacop
         | 
| 4 | 
            -
              class TypesTest < Minitest::Test
         | 
| 5 | 
            -
                def setup
         | 
| 6 | 
            -
                  @datatype_samples = { array: [],
         | 
| 7 | 
            -
                                        boolean: true,
         | 
| 8 | 
            -
                                        float: 2.3,
         | 
| 9 | 
            -
                                        hash: {},
         | 
| 10 | 
            -
                                        integer: -5,
         | 
| 11 | 
            -
                                        number: -3.2,
         | 
| 12 | 
            -
                                        symbol: :thing,
         | 
| 13 | 
            -
                                        object: self,
         | 
| 14 | 
            -
                                        string: 'miau' }.freeze
         | 
| 15 | 
            -
                end
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                def test_multitype
         | 
| 18 | 
            -
                  assert_only_types_allowed(
         | 
| 19 | 
            -
                    Schema.new do
         | 
| 20 | 
            -
                      type :integer
         | 
| 21 | 
            -
                      type :boolean
         | 
| 22 | 
            -
                    end, [:integer, :boolean]
         | 
| 23 | 
            -
                  )
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                  assert_only_types_allowed(
         | 
| 26 | 
            -
                    Schema.new([:integer, :boolean]),
         | 
| 27 | 
            -
                    [:integer, :boolean]
         | 
| 28 | 
            -
                  )
         | 
| 29 | 
            -
                end
         | 
| 30 | 
            -
             | 
| 31 | 
            -
                def test_all_data_types
         | 
| 32 | 
            -
                  @datatype_samples.keys.each do |type|
         | 
| 33 | 
            -
                    assert_only_types_allowed(Schema.new(type), type)
         | 
| 34 | 
            -
                  end
         | 
| 35 | 
            -
                end
         | 
| 36 | 
            -
             | 
| 37 | 
            -
                def test_conditional_types
         | 
| 38 | 
            -
                  s = Schema.new do
         | 
| 39 | 
            -
                    type :boolean
         | 
| 40 | 
            -
                    type :integer, min: 5
         | 
| 41 | 
            -
                  end
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                  assert_nothing_raised { s.validate! true }
         | 
| 44 | 
            -
                  assert_nothing_raised { s.validate! false }
         | 
| 45 | 
            -
                  assert_nothing_raised { s.validate! 5 }
         | 
| 46 | 
            -
             | 
| 47 | 
            -
                  assert_verr { s.validate! 'sali' }
         | 
| 48 | 
            -
                  assert_verr { s.validate! 4 }
         | 
| 49 | 
            -
                end
         | 
| 50 | 
            -
             | 
| 51 | 
            -
                # For short form test see short_forms_test.rb
         | 
| 52 | 
            -
                def test_array_subtype_explicit
         | 
| 53 | 
            -
                  s = Schema.new do
         | 
| 54 | 
            -
                    type :array do
         | 
| 55 | 
            -
                      type :integer
         | 
| 56 | 
            -
                    end
         | 
| 57 | 
            -
                  end
         | 
| 58 | 
            -
                  assert_nothing_raised { s.validate! [5] }
         | 
| 59 | 
            -
                  assert_verr { s.validate! [nil] }
         | 
| 60 | 
            -
                  assert_verr { s.validate! ['a'] }
         | 
| 61 | 
            -
                  assert_verr { s.validate! [5, 'a'] }
         | 
| 62 | 
            -
                  assert_verr { s.validate! [5, nil] }
         | 
| 63 | 
            -
                end
         | 
| 64 | 
            -
             | 
| 65 | 
            -
                private
         | 
| 66 | 
            -
             | 
| 67 | 
            -
                def assert_only_types_allowed(schema, allowed_types)
         | 
| 68 | 
            -
                  allowed_types = [*allowed_types]
         | 
| 69 | 
            -
                  @datatype_samples.each do |type, data|
         | 
| 70 | 
            -
                    if allowed_types.include?(type) ||
         | 
| 71 | 
            -
                       # All the weird cases need to be differentiated
         | 
| 72 | 
            -
                       (type == :float && allowed_types.include?(:number)) ||
         | 
| 73 | 
            -
                       (type == :integer && allowed_types.include?(:number)) ||
         | 
| 74 | 
            -
                       (type == :number && allowed_types.include?(:float)) ||
         | 
| 75 | 
            -
                       allowed_types.include?(:object)
         | 
| 76 | 
            -
             | 
| 77 | 
            -
                      assert_nothing_raised { schema.validate! data }
         | 
| 78 | 
            -
                    else
         | 
| 79 | 
            -
                      assert_verr { schema.validate! data }
         | 
| 80 | 
            -
                    end
         | 
| 81 | 
            -
                  end
         | 
| 82 | 
            -
                end
         | 
| 83 | 
            -
              end
         | 
| 84 | 
            -
            end
         |