schemacop 3.0.6 → 3.0.11
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/.releaser_config +1 -0
- data/CHANGELOG.md +24 -0
- data/README_V3.md +196 -36
- data/VERSION +1 -1
- data/lib/schemacop/v3/boolean_node.rb +4 -0
- data/lib/schemacop/v3/node.rb +9 -7
- data/lib/schemacop/v3/numeric_node.rb +1 -1
- data/lib/schemacop/v3/object_node.rb +0 -5
- data/lib/schemacop/v3/one_of_node.rb +23 -1
- data/lib/schemacop/v3/reference_node.rb +5 -1
- data/lib/schemacop/v3/string_node.rb +8 -2
- data/lib/schemacop/v3/symbol_node.rb +4 -0
- data/schemacop.gemspec +17 -29
- data/test/lib/test_helper.rb +3 -1
- data/test/unit/schemacop/v3/any_of_node_test.rb +2 -2
- data/test/unit/schemacop/v3/array_node_test.rb +19 -17
- data/test/unit/schemacop/v3/boolean_node_test.rb +54 -7
- data/test/unit/schemacop/v3/hash_node_test.rb +49 -11
- data/test/unit/schemacop/v3/integer_node_test.rb +49 -14
- data/test/unit/schemacop/v3/node_test.rb +10 -0
- data/test/unit/schemacop/v3/number_node_test.rb +43 -9
- data/test/unit/schemacop/v3/object_node_test.rb +21 -8
- data/test/unit/schemacop/v3/one_of_node_test.rb +12 -0
- data/test/unit/schemacop/v3/reference_node_test.rb +4 -4
- data/test/unit/schemacop/v3/string_node_test.rb +60 -11
- data/test/unit/schemacop/v3/symbol_node_test.rb +23 -6
- metadata +8 -8
| @@ -182,6 +182,18 @@ module Schemacop | |
| 182 182 | 
             
                      schema :one_of
         | 
| 183 183 | 
             
                    end
         | 
| 184 184 | 
             
                  end
         | 
| 185 | 
            +
             | 
| 186 | 
            +
                  def test_treat_blank_as_nil
         | 
| 187 | 
            +
                    schema :one_of, treat_blank_as_nil: true do
         | 
| 188 | 
            +
                      boo
         | 
| 189 | 
            +
                      str format: :boolean
         | 
| 190 | 
            +
                    end
         | 
| 191 | 
            +
             | 
| 192 | 
            +
                    assert_validation(nil)
         | 
| 193 | 
            +
                    assert_validation('')
         | 
| 194 | 
            +
                    assert_validation('true')
         | 
| 195 | 
            +
                    assert_validation(true)
         | 
| 196 | 
            +
                  end
         | 
| 185 197 | 
             
                end
         | 
| 186 198 | 
             
              end
         | 
| 187 199 | 
             
            end
         | 
| @@ -26,13 +26,13 @@ module Schemacop | |
| 26 26 | 
             
                      assert_validation(bar: { foo: 'String', baz: { foo: 42 } })
         | 
| 27 27 |  | 
| 28 28 | 
             
                      assert_validation(foo: 42) do
         | 
| 29 | 
            -
                        error '/foo', 'Invalid type, expected "string".'
         | 
| 29 | 
            +
                        error '/foo', 'Invalid type, got type "Integer", expected "string".'
         | 
| 30 30 | 
             
                      end
         | 
| 31 31 | 
             
                      assert_validation(bar: { foo: 42 }) do
         | 
| 32 | 
            -
                        error '/bar/foo', 'Invalid type, expected "string".'
         | 
| 32 | 
            +
                        error '/bar/foo', 'Invalid type, got type "Integer", expected "string".'
         | 
| 33 33 | 
             
                      end
         | 
| 34 34 | 
             
                      assert_validation(bar: { foo: 'String', baz: { foo: '42' } }) do
         | 
| 35 | 
            -
                        error '/bar/baz/foo', 'Invalid type, expected "integer".'
         | 
| 35 | 
            +
                        error '/bar/baz/foo', 'Invalid type, got type "String", expected "integer".'
         | 
| 36 36 | 
             
                      end
         | 
| 37 37 |  | 
| 38 38 | 
             
                      assert_json({
         | 
| @@ -306,7 +306,7 @@ module Schemacop | |
| 306 306 | 
             
                    with_context context do
         | 
| 307 307 | 
             
                      assert_validation(first_name: 'John', last_name: 'Doe')
         | 
| 308 308 | 
             
                      assert_validation(first_name: 'John', last_name: 42) do
         | 
| 309 | 
            -
                        error '/last_name', 'Invalid type, expected "string".'
         | 
| 309 | 
            +
                        error '/last_name', 'Invalid type, got type "Integer", expected "string".'
         | 
| 310 310 | 
             
                      end
         | 
| 311 311 | 
             
                    end
         | 
| 312 312 |  | 
| @@ -3,7 +3,9 @@ require 'test_helper' | |
| 3 3 | 
             
            module Schemacop
         | 
| 4 4 | 
             
              module V3
         | 
| 5 5 | 
             
                class StringNodeTest < V3Test
         | 
| 6 | 
            -
                   | 
| 6 | 
            +
                  def self.invalid_type_error(type)
         | 
| 7 | 
            +
                    "Invalid type, got type \"#{type}\", expected \"string\"."
         | 
| 8 | 
            +
                  end
         | 
| 7 9 |  | 
| 8 10 | 
             
                  def test_basic
         | 
| 9 11 | 
             
                    schema :string
         | 
| @@ -33,7 +35,7 @@ module Schemacop | |
| 33 35 | 
             
                    assert_json(type: :string)
         | 
| 34 36 |  | 
| 35 37 | 
             
                    assert_validation 42 do
         | 
| 36 | 
            -
                      error '/',  | 
| 38 | 
            +
                      error '/', StringNodeTest.invalid_type_error(Integer)
         | 
| 37 39 | 
             
                    end
         | 
| 38 40 |  | 
| 39 41 | 
             
                    schema { str! :name }
         | 
| @@ -41,11 +43,11 @@ module Schemacop | |
| 41 43 | 
             
                    assert_json(type: :object, properties: { name: { type: :string } }, required: %i[name], additionalProperties: false)
         | 
| 42 44 |  | 
| 43 45 | 
             
                    assert_validation name: :foo do
         | 
| 44 | 
            -
                      error '/name',  | 
| 46 | 
            +
                      error '/name', StringNodeTest.invalid_type_error(Symbol)
         | 
| 45 47 | 
             
                    end
         | 
| 46 48 |  | 
| 47 49 | 
             
                    assert_validation name: 234 do
         | 
| 48 | 
            -
                      error '/name',  | 
| 50 | 
            +
                      error '/name', StringNodeTest.invalid_type_error(Integer)
         | 
| 49 51 | 
             
                    end
         | 
| 50 52 | 
             
                  end
         | 
| 51 53 |  | 
| @@ -190,7 +192,7 @@ module Schemacop | |
| 190 192 | 
             
                    assert_validation ''
         | 
| 191 193 |  | 
| 192 194 | 
             
                    assert_validation 234 do
         | 
| 193 | 
            -
                      error '/',  | 
| 195 | 
            +
                      error '/', StringNodeTest.invalid_type_error(Integer)
         | 
| 194 196 | 
             
                    end
         | 
| 195 197 |  | 
| 196 198 | 
             
                    assert_cast(nil, nil)
         | 
| @@ -218,7 +220,7 @@ module Schemacop | |
| 218 220 | 
             
                    # Integer value 42 is in the enum of allowed values, but it's not a string,
         | 
| 219 221 | 
             
                    # so the validation still fails
         | 
| 220 222 | 
             
                    assert_validation 42 do
         | 
| 221 | 
            -
                      error '/',  | 
| 223 | 
            +
                      error '/', StringNodeTest.invalid_type_error(Integer)
         | 
| 222 224 | 
             
                    end
         | 
| 223 225 | 
             
                  end
         | 
| 224 226 |  | 
| @@ -278,7 +280,7 @@ module Schemacop | |
| 278 280 | 
             
                    assert_validation(nil)
         | 
| 279 281 | 
             
                    assert_validation('Foo')
         | 
| 280 282 | 
             
                    assert_validation(5) do
         | 
| 281 | 
            -
                      error '/',  | 
| 283 | 
            +
                      error '/', StringNodeTest.invalid_type_error(Integer)
         | 
| 282 284 | 
             
                    end
         | 
| 283 285 |  | 
| 284 286 | 
             
                    assert_cast('Foo', 'Foo')
         | 
| @@ -297,7 +299,7 @@ module Schemacop | |
| 297 299 | 
             
                    assert_validation(nil)
         | 
| 298 300 | 
             
                    assert_validation('123')
         | 
| 299 301 | 
             
                    assert_validation(5) do
         | 
| 300 | 
            -
                      error '/',  | 
| 302 | 
            +
                      error '/', StringNodeTest.invalid_type_error(Integer)
         | 
| 301 303 | 
             
                    end
         | 
| 302 304 |  | 
| 303 305 | 
             
                    assert_cast('123', 123)
         | 
| @@ -364,13 +366,13 @@ module Schemacop | |
| 364 366 | 
             
                    # Even we put those types in the enum, they need to fail the validations,
         | 
| 365 367 | 
             
                    # as they are not strings
         | 
| 366 368 | 
             
                    assert_validation(1) do
         | 
| 367 | 
            -
                      error '/',  | 
| 369 | 
            +
                      error '/', StringNodeTest.invalid_type_error(Integer)
         | 
| 368 370 | 
             
                    end
         | 
| 369 371 | 
             
                    assert_validation(:bar) do
         | 
| 370 | 
            -
                      error '/',  | 
| 372 | 
            +
                      error '/', StringNodeTest.invalid_type_error(Symbol)
         | 
| 371 373 | 
             
                    end
         | 
| 372 374 | 
             
                    assert_validation({ qux: 42 }) do
         | 
| 373 | 
            -
                      error '/',  | 
| 375 | 
            +
                      error '/', StringNodeTest.invalid_type_error(Hash)
         | 
| 374 376 | 
             
                    end
         | 
| 375 377 |  | 
| 376 378 | 
             
                    # These need to fail validation, as they are not in the enum list
         | 
| @@ -400,6 +402,53 @@ module Schemacop | |
| 400 402 | 
             
                                  ]
         | 
| 401 403 | 
             
                                })
         | 
| 402 404 | 
             
                  end
         | 
| 405 | 
            +
             | 
| 406 | 
            +
                  def test_cast_empty_or_whitespace_string
         | 
| 407 | 
            +
                    schema :string
         | 
| 408 | 
            +
             | 
| 409 | 
            +
                    assert_cast(nil, nil)
         | 
| 410 | 
            +
                    assert_cast('', '')
         | 
| 411 | 
            +
                    assert_cast('    ', '    ')
         | 
| 412 | 
            +
                    assert_cast("\n", "\n")
         | 
| 413 | 
            +
                    assert_cast("\t", "\t")
         | 
| 414 | 
            +
                  end
         | 
| 415 | 
            +
             | 
| 416 | 
            +
                  def test_cast_empty_or_whitespace_string_required
         | 
| 417 | 
            +
                    schema :string, required: true
         | 
| 418 | 
            +
             | 
| 419 | 
            +
                    assert_validation(nil) do
         | 
| 420 | 
            +
                      error '/', 'Value must be given.'
         | 
| 421 | 
            +
                    end
         | 
| 422 | 
            +
             | 
| 423 | 
            +
                    assert_cast('', '')
         | 
| 424 | 
            +
                    assert_cast('    ', '    ')
         | 
| 425 | 
            +
                    assert_cast("\n", "\n")
         | 
| 426 | 
            +
                    assert_cast("\t", "\t")
         | 
| 427 | 
            +
                  end
         | 
| 428 | 
            +
             | 
| 429 | 
            +
                  def test_empty_or_whitespace_string_blank_not_allowed
         | 
| 430 | 
            +
                    schema :string, allow_blank: false
         | 
| 431 | 
            +
             | 
| 432 | 
            +
                    assert_validation(nil) do
         | 
| 433 | 
            +
                      error '/', 'String is blank but must not be blank!'
         | 
| 434 | 
            +
                    end
         | 
| 435 | 
            +
             | 
| 436 | 
            +
                    assert_validation('') do
         | 
| 437 | 
            +
                      error '/', 'String is blank but must not be blank!'
         | 
| 438 | 
            +
                    end
         | 
| 439 | 
            +
             | 
| 440 | 
            +
                    assert_validation('   ') do
         | 
| 441 | 
            +
                      error '/', 'String is blank but must not be blank!'
         | 
| 442 | 
            +
                    end
         | 
| 443 | 
            +
             | 
| 444 | 
            +
                    assert_validation("\n") do
         | 
| 445 | 
            +
                      error '/', 'String is blank but must not be blank!'
         | 
| 446 | 
            +
                    end
         | 
| 447 | 
            +
             | 
| 448 | 
            +
                    assert_validation("\t") do
         | 
| 449 | 
            +
                      error '/', 'String is blank but must not be blank!'
         | 
| 450 | 
            +
                    end
         | 
| 451 | 
            +
                  end
         | 
| 403 452 | 
             
                end
         | 
| 404 453 | 
             
              end
         | 
| 405 454 | 
             
            end
         | 
| @@ -3,7 +3,10 @@ require 'test_helper' | |
| 3 3 | 
             
            module Schemacop
         | 
| 4 4 | 
             
              module V3
         | 
| 5 5 | 
             
                class SymbolNodeTest < V3Test
         | 
| 6 | 
            -
                   | 
| 6 | 
            +
                  def self.invalid_type_error(type)
         | 
| 7 | 
            +
                    type = type.class unless type.class == Class
         | 
| 8 | 
            +
                    "Invalid type, got type \"#{type}\", expected \"Symbol\"."
         | 
| 9 | 
            +
                  end
         | 
| 7 10 |  | 
| 8 11 | 
             
                  def test_basic
         | 
| 9 12 | 
             
                    schema :symbol
         | 
| @@ -11,10 +14,10 @@ module Schemacop | |
| 11 14 | 
             
                    assert_validation :foo
         | 
| 12 15 | 
             
                    assert_validation :'n0238n)Q(hqr3hrw3'
         | 
| 13 16 | 
             
                    assert_validation 42 do
         | 
| 14 | 
            -
                      error '/',  | 
| 17 | 
            +
                      error '/', SymbolNodeTest.invalid_type_error(Integer)
         | 
| 15 18 | 
             
                    end
         | 
| 16 19 | 
             
                    assert_validation '42' do
         | 
| 17 | 
            -
                      error '/',  | 
| 20 | 
            +
                      error '/', SymbolNodeTest.invalid_type_error(String)
         | 
| 18 21 | 
             
                    end
         | 
| 19 22 | 
             
                    assert_json({})
         | 
| 20 23 | 
             
                  end
         | 
| @@ -56,13 +59,13 @@ module Schemacop | |
| 56 59 | 
             
                    # Even we put those types in the enum, they need to fail the validations,
         | 
| 57 60 | 
             
                    # as they are not symbols
         | 
| 58 61 | 
             
                    assert_validation('foo') do
         | 
| 59 | 
            -
                      error '/',  | 
| 62 | 
            +
                      error '/', SymbolNodeTest.invalid_type_error(String)
         | 
| 60 63 | 
             
                    end
         | 
| 61 64 | 
             
                    assert_validation(1) do
         | 
| 62 | 
            -
                      error '/',  | 
| 65 | 
            +
                      error '/', SymbolNodeTest.invalid_type_error(Integer)
         | 
| 63 66 | 
             
                    end
         | 
| 64 67 | 
             
                    assert_validation({ qux: 42 }) do
         | 
| 65 | 
            -
                      error '/',  | 
| 68 | 
            +
                      error '/', SymbolNodeTest.invalid_type_error(Hash)
         | 
| 66 69 | 
             
                    end
         | 
| 67 70 |  | 
| 68 71 | 
             
                    # These need to fail validation, as they are not in the enum list
         | 
| @@ -70,6 +73,20 @@ module Schemacop | |
| 70 73 | 
             
                      error '/', 'Value not included in enum [1, 2, "foo", :bar, {:qux=>42}].'
         | 
| 71 74 | 
             
                    end
         | 
| 72 75 | 
             
                  end
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                  # rubocop:disable Lint/BooleanSymbol
         | 
| 78 | 
            +
                  def test_cast_str
         | 
| 79 | 
            +
                    schema :symbol, cast_str: true
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                    assert_cast('true', :true)
         | 
| 82 | 
            +
                    assert_cast('foo', :foo)
         | 
| 83 | 
            +
                    assert_cast('1', :'1')
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                    assert_cast(:true, :true)
         | 
| 86 | 
            +
                    assert_cast(:foo, :foo)
         | 
| 87 | 
            +
                    assert_cast(:'1', :'1')
         | 
| 88 | 
            +
                  end
         | 
| 89 | 
            +
                  # rubocop:enable Lint/BooleanSymbol
         | 
| 73 90 | 
             
                end
         | 
| 74 91 | 
             
              end
         | 
| 75 92 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: schemacop
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 3.0. | 
| 4 | 
            +
              version: 3.0.11
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Sitrox
         | 
| 8 | 
            -
            autorequire:
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2021- | 
| 11 | 
            +
            date: 2021-03-26 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activesupport
         | 
| @@ -164,8 +164,8 @@ dependencies: | |
| 164 164 | 
             
                - - '='
         | 
| 165 165 | 
             
                  - !ruby/object:Gem::Version
         | 
| 166 166 | 
             
                    version: 0.21.2
         | 
| 167 | 
            -
            description:
         | 
| 168 | 
            -
            email:
         | 
| 167 | 
            +
            description: 
         | 
| 168 | 
            +
            email: 
         | 
| 169 169 | 
             
            executables: []
         | 
| 170 170 | 
             
            extensions: []
         | 
| 171 171 | 
             
            extra_rdoc_files: []
         | 
| @@ -277,7 +277,7 @@ homepage: https://github.com/sitrox/schemacop | |
| 277 277 | 
             
            licenses:
         | 
| 278 278 | 
             
            - MIT
         | 
| 279 279 | 
             
            metadata: {}
         | 
| 280 | 
            -
            post_install_message:
         | 
| 280 | 
            +
            post_install_message: 
         | 
| 281 281 | 
             
            rdoc_options: []
         | 
| 282 282 | 
             
            require_paths:
         | 
| 283 283 | 
             
            - lib
         | 
| @@ -292,8 +292,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 292 292 | 
             
                - !ruby/object:Gem::Version
         | 
| 293 293 | 
             
                  version: '0'
         | 
| 294 294 | 
             
            requirements: []
         | 
| 295 | 
            -
            rubygems_version: 3.1. | 
| 296 | 
            -
            signing_key:
         | 
| 295 | 
            +
            rubygems_version: 3.1.2
         | 
| 296 | 
            +
            signing_key: 
         | 
| 297 297 | 
             
            specification_version: 4
         | 
| 298 298 | 
             
            summary: Schemacop validates ruby structures consisting of nested hashes and arrays
         | 
| 299 299 | 
             
              against simple schema definitions.
         |