json-schema 0.1.7 → 0.1.8
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.
- data/README.textile +5 -1
- data/lib/json-schema/validator.rb +19 -7
- data/test/test_jsonschema.rb +20 -0
- metadata +4 -4
    
        data/README.textile
    CHANGED
    
    | @@ -24,8 +24,9 @@ require 'json-schema' | |
| 24 24 | 
             
            JSON::Validator.validate('schema.json', 'data.json')
         | 
| 25 25 |  | 
| 26 26 | 
             
            schema = {
         | 
| 27 | 
            +
              "type" => "object",
         | 
| 27 28 | 
             
              "properties" => {
         | 
| 28 | 
            -
                "a" => {"type" => "integer"}
         | 
| 29 | 
            +
                "a" => {"type" => "integer", "required" => true}
         | 
| 29 30 | 
             
              }
         | 
| 30 31 | 
             
            }
         | 
| 31 32 |  | 
| @@ -35,6 +36,9 @@ data = { | |
| 35 36 |  | 
| 36 37 | 
             
            JSON::Validator.validate(schema, data)
         | 
| 37 38 |  | 
| 39 | 
            +
            data = [data,data,data]
         | 
| 40 | 
            +
            JSON::Validator.validate(schema, data, :list => true)
         | 
| 41 | 
            +
             | 
| 38 42 | 
             
            data = {
         | 
| 39 43 | 
             
              "a" => "taco"
         | 
| 40 44 | 
             
            }
         | 
| @@ -20,6 +20,9 @@ module JSON | |
| 20 20 |  | 
| 21 21 | 
             
                @@schemas = {}
         | 
| 22 22 | 
             
                @@cache_schemas = false
         | 
| 23 | 
            +
                @@default_opts = {
         | 
| 24 | 
            +
                  :list => false
         | 
| 25 | 
            +
                }
         | 
| 23 26 |  | 
| 24 27 | 
             
                ValidationMethods = [
         | 
| 25 28 | 
             
                  "type",
         | 
| @@ -45,7 +48,8 @@ module JSON | |
| 45 48 | 
             
                ]
         | 
| 46 49 |  | 
| 47 50 |  | 
| 48 | 
            -
                def initialize(schema_data, data)
         | 
| 51 | 
            +
                def initialize(schema_data, data, opts={})
         | 
| 52 | 
            +
                  @options = @@default_opts.clone.merge(opts)
         | 
| 49 53 | 
             
                  @base_schema = initialize_schema(schema_data)
         | 
| 50 54 | 
             
                  @data = initialize_data(data)    
         | 
| 51 55 | 
             
                  build_schemas(@base_schema)
         | 
| @@ -579,13 +583,13 @@ module JSON | |
| 579 583 |  | 
| 580 584 |  | 
| 581 585 | 
             
                class << self
         | 
| 582 | 
            -
                  def validate(schema, data)
         | 
| 583 | 
            -
                    validator = JSON::Validator.new(schema, data)
         | 
| 586 | 
            +
                  def validate(schema, data,opts={})
         | 
| 587 | 
            +
                    validator = JSON::Validator.new(schema, data, opts)
         | 
| 584 588 | 
             
                    validator.validate
         | 
| 585 589 | 
             
                  end
         | 
| 586 590 |  | 
| 587 | 
            -
                  def validate2(schema, data)
         | 
| 588 | 
            -
                    validator = JSON::Validator.new(schema, data)
         | 
| 591 | 
            +
                  def validate2(schema, data,opts={})
         | 
| 592 | 
            +
                    validator = JSON::Validator.new(schema, data, opts)
         | 
| 589 593 | 
             
                    validator.validate2
         | 
| 590 594 | 
             
                  end
         | 
| 591 595 |  | 
| @@ -615,8 +619,9 @@ module JSON | |
| 615 619 | 
             
                  if schema.is_a?(String)
         | 
| 616 620 | 
             
                    begin
         | 
| 617 621 | 
             
                      # Build a fake URI for this
         | 
| 618 | 
            -
                      schema_uri = URI.parse("file://#{Dir.pwd}/#{Digest::SHA1.hexdigest(schema)} | 
| 622 | 
            +
                      schema_uri = URI.parse("file://#{Dir.pwd}/#{Digest::SHA1.hexdigest(schema)}")
         | 
| 619 623 | 
             
                      schema = JSON::Schema.new(JSON.parse(schema),schema_uri)
         | 
| 624 | 
            +
                      Validator.add_schema(schema)
         | 
| 620 625 | 
             
                    rescue
         | 
| 621 626 | 
             
                      # Build a uri for it
         | 
| 622 627 | 
             
                      schema_uri = URI.parse(schema)
         | 
| @@ -637,12 +642,19 @@ module JSON | |
| 637 642 | 
             
                    end
         | 
| 638 643 | 
             
                  elsif schema.is_a?(Hash)
         | 
| 639 644 | 
             
                    schema = schema.to_json
         | 
| 640 | 
            -
                    schema_uri = URI.parse("file://#{Dir.pwd}/#{Digest::SHA1.hexdigest(schema)} | 
| 645 | 
            +
                    schema_uri = URI.parse("file://#{Dir.pwd}/#{Digest::SHA1.hexdigest(schema)}")
         | 
| 641 646 | 
             
                    schema = JSON::Schema.new(JSON.parse(schema),schema_uri)
         | 
| 647 | 
            +
                    Validator.add_schema(schema)
         | 
| 642 648 | 
             
                  else
         | 
| 643 649 | 
             
                    raise "Invalid schema - must be either a string or a hash"
         | 
| 644 650 | 
             
                  end
         | 
| 645 651 |  | 
| 652 | 
            +
                  if @options[:list]
         | 
| 653 | 
            +
                    inter_json = {:type => "array", :items => schema.schema}.to_json
         | 
| 654 | 
            +
                    wrapper_schema = JSON::Schema.new(JSON.parse(inter_json),URI.parse("file://#{Dir.pwd}/#{Digest::SHA1.hexdigest(inter_json)}"))
         | 
| 655 | 
            +
                    schema = wrapper_schema
         | 
| 656 | 
            +
                  end      
         | 
| 657 | 
            +
                  
         | 
| 646 658 | 
             
                  schema
         | 
| 647 659 | 
             
                end
         | 
| 648 660 |  | 
    
        data/test/test_jsonschema.rb
    CHANGED
    
    | @@ -724,5 +724,25 @@ class JSONSchemaTest < Test::Unit::TestCase | |
| 724 724 | 
             
                data = [1,"string","string"]
         | 
| 725 725 | 
             
                assert(!JSON::Validator.validate(schema,data))
         | 
| 726 726 | 
             
              end
         | 
| 727 | 
            +
              
         | 
| 728 | 
            +
              
         | 
| 729 | 
            +
              def test_list_option
         | 
| 730 | 
            +
                schema = {
         | 
| 731 | 
            +
                  "type" => "object",
         | 
| 732 | 
            +
                  "properties" => { "a" => {"type" => "integer", "required" => true} }
         | 
| 733 | 
            +
                }
         | 
| 734 | 
            +
                
         | 
| 735 | 
            +
                data = [{"a" => 1},{"a" => 2},{"a" => 3}]
         | 
| 736 | 
            +
                assert(JSON::Validator.validate(schema,data,:list => true))
         | 
| 737 | 
            +
                assert(!JSON::Validator.validate(schema,data))    
         | 
| 738 | 
            +
                
         | 
| 739 | 
            +
                data = [{"a" => 1},{"b" => 2},{"a" => 3}]
         | 
| 740 | 
            +
                assert(!JSON::Validator.validate(schema,data,:list => true))
         | 
| 741 | 
            +
                
         | 
| 742 | 
            +
                data = {"a" => 1}
         | 
| 743 | 
            +
                assert(!JSON::Validator.validate(schema,data,:list => true))
         | 
| 744 | 
            +
                
         | 
| 745 | 
            +
              end
         | 
| 746 | 
            +
              
         | 
| 727 747 | 
             
            end
         | 
| 728 748 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,13 +1,13 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: json-schema
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              hash:  | 
| 4 | 
            +
              hash: 11
         | 
| 5 5 | 
             
              prerelease: false
         | 
| 6 6 | 
             
              segments: 
         | 
| 7 7 | 
             
              - 0
         | 
| 8 8 | 
             
              - 1
         | 
| 9 | 
            -
              -  | 
| 10 | 
            -
              version: 0.1. | 
| 9 | 
            +
              - 8
         | 
| 10 | 
            +
              version: 0.1.8
         | 
| 11 11 | 
             
            platform: ruby
         | 
| 12 12 | 
             
            authors: 
         | 
| 13 13 | 
             
            - Kenny Hoxworth
         | 
| @@ -15,7 +15,7 @@ autorequire: | |
| 15 15 | 
             
            bindir: bin
         | 
| 16 16 | 
             
            cert_chain: []
         | 
| 17 17 |  | 
| 18 | 
            -
            date: 2010-12- | 
| 18 | 
            +
            date: 2010-12-14 00:00:00 -05:00
         | 
| 19 19 | 
             
            default_executable: 
         | 
| 20 20 | 
             
            dependencies: 
         | 
| 21 21 | 
             
            - !ruby/object:Gem::Dependency 
         |