rspec-matchers-adhere_to_schema 0.1.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 +7 -0
- data/LICENSE.md +20 -0
- data/README.md +126 -0
- data/lib/rspec/matchers/adhere_to_schema.rb +123 -0
- data/lib/rspec/matchers/adhere_to_schema/identity.rb +24 -0
- data/lib/tasks/rspec.rake +6 -0
- data/lib/tasks/rubocop.rake +6 -0
- data/vendor/jsonapi.schema +370 -0
- metadata +294 -0
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: 5314dc649f47d5e615edb0c1556f917ccf6c1190
         | 
| 4 | 
            +
              data.tar.gz: c16504f267514f6758683d1ef4db4203a3ae8e52
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: 5a7bb6bfdcfcf6865a361751b2fce73afbe11a6612f905ab1edb34b0b78ce1e7adc8d796060b35fe089285a3f2dd9c165213ab9f90f63500f49b06f0a7adac2e
         | 
| 7 | 
            +
              data.tar.gz: 65011201cf67a54e9e0fb2013ab0bb5e90202a7605af8a43b846b60df2b06368544a5bc2e777f492b01e514c90fc1034a691ac9fd102ec4b460d4e6331ff8622
         | 
    
        data/LICENSE.md
    ADDED
    
    | @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            Copyright (c) 2016 [Pooyan Khosravi]().
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Permission is hereby granted, free of charge, to any person obtaining
         | 
| 4 | 
            +
            a copy of this software and associated documentation files (the
         | 
| 5 | 
            +
            "Software"), to deal in the Software without restriction, including
         | 
| 6 | 
            +
            without limitation the rights to use, copy, modify, merge, publish,
         | 
| 7 | 
            +
            distribute, sublicense, and/or sell copies of the Software, and to
         | 
| 8 | 
            +
            permit persons to whom the Software is furnished to do so, subject to
         | 
| 9 | 
            +
            the following conditions:
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            The above copyright notice and this permission notice shall be
         | 
| 12 | 
            +
            included in all copies or substantial portions of the Software.
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         | 
| 15 | 
            +
            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         | 
| 16 | 
            +
            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         | 
| 17 | 
            +
            NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         | 
| 18 | 
            +
            LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         | 
| 19 | 
            +
            OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         | 
| 20 | 
            +
            WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         | 
    
        data/README.md
    ADDED
    
    | @@ -0,0 +1,126 @@ | |
| 1 | 
            +
            # RSpec Matcher `adhere_to_schema`
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            [](http://badge.fury.io/rb/rspec_matcher_match_schema)
         | 
| 4 | 
            +
            [](https://codeclimate.com/github/pekhee/rspec_matcher_match_schema)
         | 
| 5 | 
            +
            [](https://codeclimate.com/github/pekhee/rspec_matcher_match_schema)
         | 
| 6 | 
            +
            [](https://gemnasium.com/pekhee/rspec_matcher_match_schema)
         | 
| 7 | 
            +
            [](https://travis-ci.org/pekhee/rspec_matcher_match_schema)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            <!-- Tocer[start]: Auto-generated, don't remove. -->
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            # Table of Contents
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            - [Features](#features)
         | 
| 14 | 
            +
            - [Requirements](#requirements)
         | 
| 15 | 
            +
            - [Setup](#setup)
         | 
| 16 | 
            +
            - [Usage](#usage)
         | 
| 17 | 
            +
            - [Tests](#tests)
         | 
| 18 | 
            +
            - [Versioning](#versioning)
         | 
| 19 | 
            +
            - [Code of Conduct](#code-of-conduct)
         | 
| 20 | 
            +
            - [Contributions](#contributions)
         | 
| 21 | 
            +
            - [License](#license)
         | 
| 22 | 
            +
            - [History](#history)
         | 
| 23 | 
            +
            - [Credits](#credits)
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            <!-- Tocer[finish]: Auto-generated, don't remove. -->
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            # Features
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            - Test if some data adheres to specified json schema
         | 
| 30 | 
            +
            - Define json schema in a schemas directory and they will be automatically
         | 
| 31 | 
            +
            picked
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            # Requirements
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            0. [MRI 2.2.3](https://www.ruby-lang.org)
         | 
| 36 | 
            +
            1. [RSpec 3.x](http://rspec.info)
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            # Setup
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            To install, type the following:
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                gem install rspec-matchers-adhere_to_schema
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            Add the following to your Gemfile:
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                gem "rspec-matchers-adhere_to_schema"
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            This gem is signed. Use pekhee.pem as public key.
         | 
| 49 | 
            +
             | 
| 50 | 
            +
            # Usage
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                RSpec.describe "a user document" do
         | 
| 53 | 
            +
                  subject do
         | 
| 54 | 
            +
                    JSON.parse <<-JSON_DOC
         | 
| 55 | 
            +
                      {
         | 
| 56 | 
            +
                        firstName: "Pooyan",
         | 
| 57 | 
            +
                        lastName: "Khosravi"
         | 
| 58 | 
            +
                      }
         | 
| 59 | 
            +
                    JSON_DOC
         | 
| 60 | 
            +
                  end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                  let :user_schema do
         | 
| 63 | 
            +
                    JSON.parse <<-JSON_SCHEMA
         | 
| 64 | 
            +
                      {
         | 
| 65 | 
            +
                        "title": "User Schema",
         | 
| 66 | 
            +
                        "type": "object",
         | 
| 67 | 
            +
                        "properties": {
         | 
| 68 | 
            +
                          "firstName": {
         | 
| 69 | 
            +
                            "type": "string"
         | 
| 70 | 
            +
                          },
         | 
| 71 | 
            +
                          "lastName": {
         | 
| 72 | 
            +
                            "type": "string"
         | 
| 73 | 
            +
                          },
         | 
| 74 | 
            +
                          "age": {
         | 
| 75 | 
            +
                            "description": "Age in years",
         | 
| 76 | 
            +
                            "type": "integer",
         | 
| 77 | 
            +
                            "minimum": 0
         | 
| 78 | 
            +
                          }
         | 
| 79 | 
            +
                        },
         | 
| 80 | 
            +
                        "required": ["firstName", "lastName"]
         | 
| 81 | 
            +
                      }
         | 
| 82 | 
            +
                    JSON_SCHEMA
         | 
| 83 | 
            +
                  end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                  it "adheres to user schema" do
         | 
| 86 | 
            +
                    expect(subject).to match_schema user_schema
         | 
| 87 | 
            +
                    expect(subject).to matche_schema :user # spec/schemas/user.json
         | 
| 88 | 
            +
                  end
         | 
| 89 | 
            +
                end
         | 
| 90 | 
            +
             | 
| 91 | 
            +
            # Tests
         | 
| 92 | 
            +
             | 
| 93 | 
            +
            To test, run:
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                bundle exec rake
         | 
| 96 | 
            +
             | 
| 97 | 
            +
            # Versioning
         | 
| 98 | 
            +
             | 
| 99 | 
            +
            Read [Semantic Versioning](http://semver.org) for details. Briefly, it means:
         | 
| 100 | 
            +
             | 
| 101 | 
            +
            - Patch (x.y.Z) - Incremented for small, backwards compatible bug fixes.
         | 
| 102 | 
            +
            - Minor (x.Y.z) - Incremented for new, backwards compatible public API enhancements and/or bug fixes.
         | 
| 103 | 
            +
            - Major (X.y.z) - Incremented for any backwards incompatible public API changes.
         | 
| 104 | 
            +
             | 
| 105 | 
            +
            # Code of Conduct
         | 
| 106 | 
            +
             | 
| 107 | 
            +
            Please note that this project is released with a [CODE OF CONDUCT](CODE_OF_CONDUCT.md). By participating in this project
         | 
| 108 | 
            +
            you agree to abide by its terms.
         | 
| 109 | 
            +
             | 
| 110 | 
            +
            # Contributions
         | 
| 111 | 
            +
             | 
| 112 | 
            +
            Read [CONTRIBUTING](CONTRIBUTING.md) for details.
         | 
| 113 | 
            +
             | 
| 114 | 
            +
            # License
         | 
| 115 | 
            +
             | 
| 116 | 
            +
            Copyright (c) 2016 [Pooyan Khosravi]().
         | 
| 117 | 
            +
            Read the [LICENSE](LICENSE.md) for details.
         | 
| 118 | 
            +
             | 
| 119 | 
            +
            # History
         | 
| 120 | 
            +
             | 
| 121 | 
            +
            Read the [CHANGELOG](CHANGELOG.md) for details.
         | 
| 122 | 
            +
            Built with [Gemsmith](https://github.com/bkuhlmann/gemsmith).
         | 
| 123 | 
            +
             | 
| 124 | 
            +
            # Credits
         | 
| 125 | 
            +
             | 
| 126 | 
            +
            Developed by [Pooyan Khosravi]().
         | 
| @@ -0,0 +1,123 @@ | |
| 1 | 
            +
            require "rspec/matchers/adhere_to_schema/identity"
         | 
| 2 | 
            +
            require "pathname"
         | 
| 3 | 
            +
            require "rspec/matcher"
         | 
| 4 | 
            +
            require "json-schema"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module RSpec
         | 
| 7 | 
            +
              module Matchers
         | 
| 8 | 
            +
                # Check if given data matches a json schema.
         | 
| 9 | 
            +
                #
         | 
| 10 | 
            +
                # Includes jsonapi.org schema, supports passing objects as schemas or
         | 
| 11 | 
            +
                # schema files under spec/schemas/NAME.json.
         | 
| 12 | 
            +
                #
         | 
| 13 | 
            +
                # @example
         | 
| 14 | 
            +
                #   it "is jsonapi compatible and follows article schema" do
         | 
| 15 | 
            +
                #     expect(data).to adhere_to_schema(:article_schema).and_jsonapi
         | 
| 16 | 
            +
                #   end
         | 
| 17 | 
            +
                # @note You can use adhere_to_jsonapi to just make sure data follows
         | 
| 18 | 
            +
                #   jsonapi.
         | 
| 19 | 
            +
                class AdhereToSchema
         | 
| 20 | 
            +
                  include RSpec::Matcher
         | 
| 21 | 
            +
                  JSONAPI = Pathname.new(__FILE__).join("..", "..", "..", "..", "vendor", "jsonapi.schema").to_s
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  register_as :adhere_to_schema
         | 
| 24 | 
            +
                  register_as :adhere_to_jsonapi, jsonapi: true
         | 
| 25 | 
            +
                  attr_accessor :jsonapi, :errors
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  # @method jsonapi
         | 
| 28 | 
            +
                  # @api private
         | 
| 29 | 
            +
                  # @return [Boolean]
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  # @method errors
         | 
| 32 | 
            +
                  # @api private
         | 
| 33 | 
            +
                  # @return [Array]
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  # Defines schemas dir, Feel free to replace with another string.
         | 
| 36 | 
            +
                  # @return [String]
         | 
| 37 | 
            +
                  def self.schema_dir
         | 
| 38 | 
            +
                    File.expand_path(File.join(RSpec.configuration.default_path, "schemas"))
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                  # @api private
         | 
| 42 | 
            +
                  # @note Errors are created on the fly in an append only style
         | 
| 43 | 
            +
                  def initialize
         | 
| 44 | 
            +
                    self.errors = []
         | 
| 45 | 
            +
                  end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  # @api private
         | 
| 48 | 
            +
                  # Main logic
         | 
| 49 | 
            +
                  # @note uses throw as control flow
         | 
| 50 | 
            +
                  def match
         | 
| 51 | 
            +
                    validate_input
         | 
| 52 | 
            +
                    validate_with_schema schema  if schema?
         | 
| 53 | 
            +
                    validate_with_schema JSONAPI if jsonapi?
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                    true
         | 
| 56 | 
            +
                  end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                  # @api private
         | 
| 59 | 
            +
                  def failure_message
         | 
| 60 | 
            +
                    <<-MSG.gsub(/^\s+/, " ")
         | 
| 61 | 
            +
                      expected data to match against #{schema_name} schema but data had following errors.
         | 
| 62 | 
            +
                      errors:
         | 
| 63 | 
            +
                      #{errors}
         | 
| 64 | 
            +
                      ----
         | 
| 65 | 
            +
                      data:
         | 
| 66 | 
            +
                      #{data}
         | 
| 67 | 
            +
                    MSG
         | 
| 68 | 
            +
                  end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                  # @api private
         | 
| 71 | 
            +
                  def failure_message_when_negated
         | 
| 72 | 
            +
                    "expected data to not match #{schema_name} but it did."
         | 
| 73 | 
            +
                  end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                  # Indicates that matcher should try to match agains jsonapi too
         | 
| 76 | 
            +
                  # @return [self]
         | 
| 77 | 
            +
                  def and_jsonapi
         | 
| 78 | 
            +
                    self.jsonapi = true
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                    self
         | 
| 81 | 
            +
                  end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                  private
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                  alias_method :schema_name, :expected
         | 
| 86 | 
            +
                  alias_method :data, :actual
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                  def schema
         | 
| 89 | 
            +
                    return schema_name if schema_name.is_a? Hash
         | 
| 90 | 
            +
                    File.join self.class.schema_dir, "#{schema_name}.json"
         | 
| 91 | 
            +
                  end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                  def schema?
         | 
| 94 | 
            +
                    !undefined?
         | 
| 95 | 
            +
                  end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                  def jsonapi?
         | 
| 98 | 
            +
                    jsonapi == true
         | 
| 99 | 
            +
                  end
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                  def valid_schema?
         | 
| 102 | 
            +
                    return true if undefined?
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                    schema.is_a?(Hash) || File.exist?(schema)
         | 
| 105 | 
            +
                  end
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                  # @api private
         | 
| 108 | 
            +
                  # @note Throws
         | 
| 109 | 
            +
                  def validate_input
         | 
| 110 | 
            +
                    raise "#{schema} does not exist" unless valid_schema?
         | 
| 111 | 
            +
                    resolve_expectation if data.nil? || data == "" # There is no data to validate
         | 
| 112 | 
            +
                  end
         | 
| 113 | 
            +
             | 
| 114 | 
            +
                  # @api private
         | 
| 115 | 
            +
                  # @note Throws
         | 
| 116 | 
            +
                  def validate_with_schema file
         | 
| 117 | 
            +
                    return true if JSON::Validator.validate(file, data)
         | 
| 118 | 
            +
                    self.errors += JSON::Validator.fully_validate(file, data)
         | 
| 119 | 
            +
                    reject_expectation
         | 
| 120 | 
            +
                  end
         | 
| 121 | 
            +
                end
         | 
| 122 | 
            +
              end
         | 
| 123 | 
            +
            end
         | 
| @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            module RSpec
         | 
| 2 | 
            +
              module Matchers
         | 
| 3 | 
            +
                class AdhereToSchema
         | 
| 4 | 
            +
                  # Gem identity information.
         | 
| 5 | 
            +
                  module Identity
         | 
| 6 | 
            +
                    def self.name
         | 
| 7 | 
            +
                      "rspec-matchers-adhere_to_schema"
         | 
| 8 | 
            +
                    end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                    def self.label
         | 
| 11 | 
            +
                      "RSpec::Matchers::AdhereToSchema"
         | 
| 12 | 
            +
                    end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                    def self.version
         | 
| 15 | 
            +
                      "0.1.0"
         | 
| 16 | 
            +
                    end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                    def self.version_label
         | 
| 19 | 
            +
                      "#{label} #{version}"
         | 
| 20 | 
            +
                    end
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
            end
         | 
| @@ -0,0 +1,370 @@ | |
| 1 | 
            +
            {
         | 
| 2 | 
            +
              "$schema": "http://json-schema.org/draft-04/schema#",
         | 
| 3 | 
            +
              "title": "JSON API Schema",
         | 
| 4 | 
            +
              "description": "This is a schema for responses in the JSON API format. For more, see http://jsonapi.org",
         | 
| 5 | 
            +
              "oneOf": [
         | 
| 6 | 
            +
                {
         | 
| 7 | 
            +
                  "$ref": "#/definitions/success"
         | 
| 8 | 
            +
                },
         | 
| 9 | 
            +
                {
         | 
| 10 | 
            +
                  "$ref": "#/definitions/failure"
         | 
| 11 | 
            +
                },
         | 
| 12 | 
            +
                {
         | 
| 13 | 
            +
                  "$ref": "#/definitions/info"
         | 
| 14 | 
            +
                }
         | 
| 15 | 
            +
              ],
         | 
| 16 | 
            +
              
         | 
| 17 | 
            +
              "definitions": {
         | 
| 18 | 
            +
                "success": {
         | 
| 19 | 
            +
                  "type": "object",
         | 
| 20 | 
            +
                  "required": [
         | 
| 21 | 
            +
                    "data"
         | 
| 22 | 
            +
                  ],
         | 
| 23 | 
            +
                  "properties": {
         | 
| 24 | 
            +
                    "data": {
         | 
| 25 | 
            +
                      "$ref": "#/definitions/data"
         | 
| 26 | 
            +
                    },
         | 
| 27 | 
            +
                    "included": {
         | 
| 28 | 
            +
                      "description": "To reduce the number of HTTP requests, servers **MAY** allow responses that include related resources along with the requested primary resources. Such responses are called \"compound documents\".",
         | 
| 29 | 
            +
                      "type": "array",
         | 
| 30 | 
            +
                      "items": {
         | 
| 31 | 
            +
                        "$ref": "#/definitions/resource"
         | 
| 32 | 
            +
                      },
         | 
| 33 | 
            +
                      "uniqueItems": true
         | 
| 34 | 
            +
                    },
         | 
| 35 | 
            +
                    "meta": {
         | 
| 36 | 
            +
                      "$ref": "#/definitions/meta"
         | 
| 37 | 
            +
                    },
         | 
| 38 | 
            +
                    "links": {
         | 
| 39 | 
            +
                      "description": "Link members related to the primary data.",
         | 
| 40 | 
            +
                      "allOf": [
         | 
| 41 | 
            +
                        {
         | 
| 42 | 
            +
                          "$ref": "#/definitions/links"
         | 
| 43 | 
            +
                        },
         | 
| 44 | 
            +
                        {
         | 
| 45 | 
            +
                          "$ref": "#/definitions/pagination"
         | 
| 46 | 
            +
                        }
         | 
| 47 | 
            +
                      ]
         | 
| 48 | 
            +
                    },
         | 
| 49 | 
            +
                    "jsonapi": {
         | 
| 50 | 
            +
                      "$ref": "#/definitions/jsonapi"
         | 
| 51 | 
            +
                    }
         | 
| 52 | 
            +
                  },
         | 
| 53 | 
            +
                  "additionalProperties": false
         | 
| 54 | 
            +
                },
         | 
| 55 | 
            +
                "failure": {
         | 
| 56 | 
            +
                  "type": "object",
         | 
| 57 | 
            +
                  "required": [
         | 
| 58 | 
            +
                    "errors"
         | 
| 59 | 
            +
                  ],
         | 
| 60 | 
            +
                  "properties": {
         | 
| 61 | 
            +
                    "errors": {
         | 
| 62 | 
            +
                      "type": "array",
         | 
| 63 | 
            +
                      "items": {
         | 
| 64 | 
            +
                        "$ref": "#/definitions/error"
         | 
| 65 | 
            +
                      },
         | 
| 66 | 
            +
                      "uniqueItems": true
         | 
| 67 | 
            +
                    },
         | 
| 68 | 
            +
                    "meta": {
         | 
| 69 | 
            +
                      "$ref": "#/definitions/meta"
         | 
| 70 | 
            +
                    },
         | 
| 71 | 
            +
                    "jsonapi": {
         | 
| 72 | 
            +
                      "$ref": "#/definitions/jsonapi"
         | 
| 73 | 
            +
                    }
         | 
| 74 | 
            +
                  },
         | 
| 75 | 
            +
                  "additionalProperties": false
         | 
| 76 | 
            +
                },
         | 
| 77 | 
            +
                "info": {
         | 
| 78 | 
            +
                  "type": "object",
         | 
| 79 | 
            +
                  "required": [
         | 
| 80 | 
            +
                    "meta"
         | 
| 81 | 
            +
                  ],
         | 
| 82 | 
            +
                  "properties": {
         | 
| 83 | 
            +
                    "meta": {
         | 
| 84 | 
            +
                      "$ref": "#/definitions/meta"
         | 
| 85 | 
            +
                    },
         | 
| 86 | 
            +
                    "links": {
         | 
| 87 | 
            +
                      "$ref": "#/definitions/links"
         | 
| 88 | 
            +
                    },
         | 
| 89 | 
            +
                    "jsonapi": {
         | 
| 90 | 
            +
                      "$ref": "#/definitions/jsonapi"
         | 
| 91 | 
            +
                    }
         | 
| 92 | 
            +
                  },
         | 
| 93 | 
            +
                  "additionalProperties": false
         | 
| 94 | 
            +
                },
         | 
| 95 | 
            +
                
         | 
| 96 | 
            +
                "meta": {
         | 
| 97 | 
            +
                  "description": "Non-standard meta-information that can not be represented as an attribute or relationship.",
         | 
| 98 | 
            +
                  "type": "object",
         | 
| 99 | 
            +
                  "additionalProperties": true
         | 
| 100 | 
            +
                },
         | 
| 101 | 
            +
                "data": {
         | 
| 102 | 
            +
                  "description": "The document's \"primary data\" is a representation of the resource or collection of resources targeted by a request.",
         | 
| 103 | 
            +
                  "oneOf": [
         | 
| 104 | 
            +
                    {
         | 
| 105 | 
            +
                      "$ref": "#/definitions/resource"
         | 
| 106 | 
            +
                    },
         | 
| 107 | 
            +
                    {
         | 
| 108 | 
            +
                      "description": "An array of resource objects, an array of resource identifier objects, or an empty array ([]), for requests that target resource collections.",
         | 
| 109 | 
            +
                      "type": "array",
         | 
| 110 | 
            +
                      "items": {
         | 
| 111 | 
            +
                        "$ref": "#/definitions/resource"
         | 
| 112 | 
            +
                      },
         | 
| 113 | 
            +
                      "uniqueItems": true
         | 
| 114 | 
            +
                    },
         | 
| 115 | 
            +
                    {
         | 
| 116 | 
            +
                      "description": "null if the request is one that might correspond to a single resource, but doesn't currently.",
         | 
| 117 | 
            +
                      "type": "null"
         | 
| 118 | 
            +
                    }
         | 
| 119 | 
            +
                  ]
         | 
| 120 | 
            +
                },
         | 
| 121 | 
            +
                "resource": {
         | 
| 122 | 
            +
                  "description": "\"Resource objects\" appear in a JSON API document to represent resources.",
         | 
| 123 | 
            +
                  "type": "object",
         | 
| 124 | 
            +
                  "required": [
         | 
| 125 | 
            +
                    "type",
         | 
| 126 | 
            +
                    "id"
         | 
| 127 | 
            +
                  ],
         | 
| 128 | 
            +
                  "properties": {
         | 
| 129 | 
            +
                    "type": {
         | 
| 130 | 
            +
                      "type": "string"
         | 
| 131 | 
            +
                    },
         | 
| 132 | 
            +
                    "id": {
         | 
| 133 | 
            +
                      "type": "string"
         | 
| 134 | 
            +
                    },
         | 
| 135 | 
            +
                    "attributes": {
         | 
| 136 | 
            +
                      "$ref": "#/definitions/attributes"
         | 
| 137 | 
            +
                    },
         | 
| 138 | 
            +
                    "relationships": {
         | 
| 139 | 
            +
                      "$ref": "#/definitions/relationships"
         | 
| 140 | 
            +
                    },
         | 
| 141 | 
            +
                    "links": {
         | 
| 142 | 
            +
                      "$ref": "#/definitions/links"
         | 
| 143 | 
            +
                    },
         | 
| 144 | 
            +
                    "meta": {
         | 
| 145 | 
            +
                      "$ref": "#/definitions/meta"
         | 
| 146 | 
            +
                    }
         | 
| 147 | 
            +
                  },
         | 
| 148 | 
            +
                  "additionalProperties": false
         | 
| 149 | 
            +
                },
         | 
| 150 | 
            +
                
         | 
| 151 | 
            +
                "links": {
         | 
| 152 | 
            +
                  "description": "A resource object **MAY** contain references to other resource objects (\"relationships\"). Relationships may be to-one or to-many. Relationships can be specified by including a member in a resource's links object.",
         | 
| 153 | 
            +
                  "type": "object",
         | 
| 154 | 
            +
                  "properties": {
         | 
| 155 | 
            +
                    "self": {
         | 
| 156 | 
            +
                      "description": "A `self` member, whose value is a URL for the relationship itself (a \"relationship URL\"). This URL allows the client to directly manipulate the relationship. For example, it would allow a client to remove an `author` from an `article` without deleting the people resource itself.",
         | 
| 157 | 
            +
                      "type": "string",
         | 
| 158 | 
            +
                      "format": "uri"
         | 
| 159 | 
            +
                    },
         | 
| 160 | 
            +
                    "related": {
         | 
| 161 | 
            +
                      "$ref": "#/definitions/link"
         | 
| 162 | 
            +
                    }
         | 
| 163 | 
            +
                  },
         | 
| 164 | 
            +
                  "additionalProperties": true
         | 
| 165 | 
            +
                },
         | 
| 166 | 
            +
                "link": {
         | 
| 167 | 
            +
                  "description": "A link **MUST** be represented as either: a string containing the link's URL or a link object.",
         | 
| 168 | 
            +
                  "oneOf": [
         | 
| 169 | 
            +
                    {
         | 
| 170 | 
            +
                      "description": "A string containing the link's URL.",
         | 
| 171 | 
            +
                      "type": "string",
         | 
| 172 | 
            +
                      "format": "uri"
         | 
| 173 | 
            +
                    },
         | 
| 174 | 
            +
                    {
         | 
| 175 | 
            +
                      "type": "object",
         | 
| 176 | 
            +
                      "required": [
         | 
| 177 | 
            +
                        "href"
         | 
| 178 | 
            +
                      ],
         | 
| 179 | 
            +
                      "properties": {
         | 
| 180 | 
            +
                        "href": {
         | 
| 181 | 
            +
                          "description": "A string containing the link's URL.",
         | 
| 182 | 
            +
                          "type": "string",
         | 
| 183 | 
            +
                          "format": "uri"
         | 
| 184 | 
            +
                        },
         | 
| 185 | 
            +
                        "meta": {
         | 
| 186 | 
            +
                          "$ref": "#/definitions/meta"
         | 
| 187 | 
            +
                        }
         | 
| 188 | 
            +
                      }
         | 
| 189 | 
            +
                    }
         | 
| 190 | 
            +
                  ]
         | 
| 191 | 
            +
                },
         | 
| 192 | 
            +
             | 
| 193 | 
            +
                "attributes": {
         | 
| 194 | 
            +
                  "description": "Members of the attributes object (\"attributes\") represent information about the resource object in which it's defined.",
         | 
| 195 | 
            +
                  "type": "object",
         | 
| 196 | 
            +
                  "patternProperties": {
         | 
| 197 | 
            +
                    "^(?!relationships$|links$)\\w[-\\w_]*$": {
         | 
| 198 | 
            +
                      "description": "Attributes may contain any valid JSON value."
         | 
| 199 | 
            +
                    }
         | 
| 200 | 
            +
                  },
         | 
| 201 | 
            +
                  "additionalProperties": false
         | 
| 202 | 
            +
                },
         | 
| 203 | 
            +
             | 
| 204 | 
            +
                "relationships": {
         | 
| 205 | 
            +
                  "description": "Members of the relationships object (\"relationships\") represent references from the resource object in which it's defined to other resource objects.",
         | 
| 206 | 
            +
                  "type": "object",
         | 
| 207 | 
            +
                  "patternProperties": {
         | 
| 208 | 
            +
                    "^\\w[-\\w_]*$": {
         | 
| 209 | 
            +
                      "properties": {
         | 
| 210 | 
            +
                        "links": {
         | 
| 211 | 
            +
                          "$ref": "#/definitions/links"
         | 
| 212 | 
            +
                        },
         | 
| 213 | 
            +
                        "data": {
         | 
| 214 | 
            +
                          "description": "Member, whose value represents \"resource linkage\".",
         | 
| 215 | 
            +
                          "oneOf": [
         | 
| 216 | 
            +
                            {
         | 
| 217 | 
            +
                              "$ref": "#/definitions/relationshipToOne"
         | 
| 218 | 
            +
                            },
         | 
| 219 | 
            +
                            {
         | 
| 220 | 
            +
                              "$ref": "#/definitions/relationshipToMany"
         | 
| 221 | 
            +
                            }
         | 
| 222 | 
            +
                          ]
         | 
| 223 | 
            +
                        },
         | 
| 224 | 
            +
                        "meta": {
         | 
| 225 | 
            +
                          "$ref": "#/definitions/meta"
         | 
| 226 | 
            +
                        }
         | 
| 227 | 
            +
                      },
         | 
| 228 | 
            +
                      "additionalProperties": false
         | 
| 229 | 
            +
                    }
         | 
| 230 | 
            +
                  },
         | 
| 231 | 
            +
                  "additionalProperties": false
         | 
| 232 | 
            +
                },
         | 
| 233 | 
            +
                "relationshipToOne": {
         | 
| 234 | 
            +
                  "description": "References to other resource objects in a to-one (\"relationship\"). Relationships can be specified by including a member in a resource's links object.",
         | 
| 235 | 
            +
                  "anyOf": [
         | 
| 236 | 
            +
                    {
         | 
| 237 | 
            +
                      "$ref": "#/definitions/empty"
         | 
| 238 | 
            +
                    },
         | 
| 239 | 
            +
                    {
         | 
| 240 | 
            +
                      "$ref": "#/definitions/linkage"
         | 
| 241 | 
            +
                    }
         | 
| 242 | 
            +
                  ]
         | 
| 243 | 
            +
                },
         | 
| 244 | 
            +
                "relationshipToMany": {
         | 
| 245 | 
            +
                  "description": "An array of objects each containing \"type\" and \"id\" members for to-many relationships.",
         | 
| 246 | 
            +
                  "type": "array",
         | 
| 247 | 
            +
                  "items": {
         | 
| 248 | 
            +
                    "$ref": "#/definitions/linkage"
         | 
| 249 | 
            +
                  },
         | 
| 250 | 
            +
                  "uniqueItems": true
         | 
| 251 | 
            +
                },
         | 
| 252 | 
            +
                "empty": {
         | 
| 253 | 
            +
                  "description": "Describes an empty to-one relationship.",
         | 
| 254 | 
            +
                  "type": "null"
         | 
| 255 | 
            +
                },
         | 
| 256 | 
            +
                "linkage": {
         | 
| 257 | 
            +
                  "description": "The \"type\" and \"id\" to non-empty members.",
         | 
| 258 | 
            +
                  "type": "object",
         | 
| 259 | 
            +
                  "required": [
         | 
| 260 | 
            +
                    "type",
         | 
| 261 | 
            +
                    "id"
         | 
| 262 | 
            +
                  ],
         | 
| 263 | 
            +
                  "properties": {
         | 
| 264 | 
            +
                    "type": {
         | 
| 265 | 
            +
                      "type": "string"
         | 
| 266 | 
            +
                    },
         | 
| 267 | 
            +
                    "id": {
         | 
| 268 | 
            +
                      "type": "string"
         | 
| 269 | 
            +
                    },
         | 
| 270 | 
            +
                    "meta": {
         | 
| 271 | 
            +
                      "$ref": "#/definitions/meta"
         | 
| 272 | 
            +
                    }
         | 
| 273 | 
            +
                  },
         | 
| 274 | 
            +
                  "additionalProperties": false
         | 
| 275 | 
            +
                },
         | 
| 276 | 
            +
                "pagination": {
         | 
| 277 | 
            +
                  "type": "object",
         | 
| 278 | 
            +
                  "properties": {
         | 
| 279 | 
            +
                    "first": {
         | 
| 280 | 
            +
                      "description": "The first page of data",
         | 
| 281 | 
            +
                      "oneOf": [
         | 
| 282 | 
            +
                        { "type": "string", "format": "uri" },
         | 
| 283 | 
            +
                        { "type": "null" }
         | 
| 284 | 
            +
                      ]
         | 
| 285 | 
            +
                    },
         | 
| 286 | 
            +
                    "last": {
         | 
| 287 | 
            +
                      "description": "The last page of data",
         | 
| 288 | 
            +
                      "oneOf": [
         | 
| 289 | 
            +
                        { "type": "string", "format": "uri" },
         | 
| 290 | 
            +
                        { "type": "null" }
         | 
| 291 | 
            +
                      ]
         | 
| 292 | 
            +
                    },
         | 
| 293 | 
            +
                    "prev": {
         | 
| 294 | 
            +
                      "description": "The previous page of data",
         | 
| 295 | 
            +
                      "oneOf": [
         | 
| 296 | 
            +
                        { "type": "string", "format": "uri" },
         | 
| 297 | 
            +
                        { "type": "null" }
         | 
| 298 | 
            +
                      ]
         | 
| 299 | 
            +
                    },
         | 
| 300 | 
            +
                    "next": {
         | 
| 301 | 
            +
                      "description": "The next page of data",
         | 
| 302 | 
            +
                      "oneOf": [
         | 
| 303 | 
            +
                        { "type": "string", "format": "uri" },
         | 
| 304 | 
            +
                        { "type": "null" }
         | 
| 305 | 
            +
                      ]
         | 
| 306 | 
            +
                    }
         | 
| 307 | 
            +
                  }
         | 
| 308 | 
            +
                },
         | 
| 309 | 
            +
                
         | 
| 310 | 
            +
                "jsonapi": {
         | 
| 311 | 
            +
                  "description": "An object describing the server's implementation",
         | 
| 312 | 
            +
                  "type": "object",
         | 
| 313 | 
            +
                  "properties": {
         | 
| 314 | 
            +
                    "version": {
         | 
| 315 | 
            +
                      "type": "string"
         | 
| 316 | 
            +
                    },
         | 
| 317 | 
            +
                    "meta": {
         | 
| 318 | 
            +
                      "$ref": "#/definitions/meta"
         | 
| 319 | 
            +
                    }
         | 
| 320 | 
            +
                  },
         | 
| 321 | 
            +
                  "additionalProperties": false
         | 
| 322 | 
            +
                },
         | 
| 323 | 
            +
                
         | 
| 324 | 
            +
                "error": {
         | 
| 325 | 
            +
                  "type": "object",
         | 
| 326 | 
            +
                  "properties": {
         | 
| 327 | 
            +
                    "id": {
         | 
| 328 | 
            +
                      "description": "A unique identifier for this particular occurrence of the problem.",
         | 
| 329 | 
            +
                      "type": "string"
         | 
| 330 | 
            +
                    },
         | 
| 331 | 
            +
                    "links": {
         | 
| 332 | 
            +
                      "$ref": "#/definitions/links"
         | 
| 333 | 
            +
                    },
         | 
| 334 | 
            +
                    "status": {
         | 
| 335 | 
            +
                      "description": "The HTTP status code applicable to this problem, expressed as a string value.",
         | 
| 336 | 
            +
                      "type": "string"
         | 
| 337 | 
            +
                    },
         | 
| 338 | 
            +
                    "code": {
         | 
| 339 | 
            +
                      "description": "An application-specific error code, expressed as a string value.",
         | 
| 340 | 
            +
                      "type": "string"
         | 
| 341 | 
            +
                    },
         | 
| 342 | 
            +
                    "title": {
         | 
| 343 | 
            +
                      "description": "A short, human-readable summary of the problem. It **SHOULD NOT** change from occurrence to occurrence of the problem, except for purposes of localization.",
         | 
| 344 | 
            +
                      "type": "string"
         | 
| 345 | 
            +
                    },
         | 
| 346 | 
            +
                    "detail": {
         | 
| 347 | 
            +
                      "description": "A human-readable explanation specific to this occurrence of the problem.",
         | 
| 348 | 
            +
                      "type": "string"
         | 
| 349 | 
            +
                    },
         | 
| 350 | 
            +
                    "source": {
         | 
| 351 | 
            +
                      "type": "object",
         | 
| 352 | 
            +
                      "properties": {
         | 
| 353 | 
            +
                        "pointer": {
         | 
| 354 | 
            +
                          "description": "A JSON Pointer [RFC6901] to the associated entity in the request document [e.g. \"/data\" for a primary data object, or \"/data/attributes/title\" for a specific attribute].",
         | 
| 355 | 
            +
                          "type": "string"
         | 
| 356 | 
            +
                        },
         | 
| 357 | 
            +
                        "parameter": {
         | 
| 358 | 
            +
                          "description": "A string indicating which query parameter caused the error.",
         | 
| 359 | 
            +
                          "type": "string"
         | 
| 360 | 
            +
                        }
         | 
| 361 | 
            +
                      }
         | 
| 362 | 
            +
                    },
         | 
| 363 | 
            +
                    "meta": {
         | 
| 364 | 
            +
                      "$ref": "#/definitions/meta"
         | 
| 365 | 
            +
                    }
         | 
| 366 | 
            +
                  },
         | 
| 367 | 
            +
                  "additionalProperties": false
         | 
| 368 | 
            +
                }
         | 
| 369 | 
            +
              }
         | 
| 370 | 
            +
            }
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,294 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: rspec-matchers-adhere_to_schema
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.1.0
         | 
| 5 | 
            +
            platform: ruby
         | 
| 6 | 
            +
            authors:
         | 
| 7 | 
            +
            - Pooyan Khosravi
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 | 
            +
            bindir: bin
         | 
| 10 | 
            +
            cert_chain: []
         | 
| 11 | 
            +
            date: 2016-03-11 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            +
              name: rspec-matcher
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - ">="
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: '0'
         | 
| 20 | 
            +
              type: :runtime
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - ">="
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: '0'
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: json-schema
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - ">="
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: '0'
         | 
| 34 | 
            +
              type: :runtime
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            +
                requirements:
         | 
| 38 | 
            +
                - - ">="
         | 
| 39 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            +
                    version: '0'
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: rake
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - ">="
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: '0'
         | 
| 48 | 
            +
              type: :development
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - ">="
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: '0'
         | 
| 55 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            +
              name: gemsmith
         | 
| 57 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 | 
            +
                requirements:
         | 
| 59 | 
            +
                - - ">="
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                    version: '0'
         | 
| 62 | 
            +
              type: :development
         | 
| 63 | 
            +
              prerelease: false
         | 
| 64 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                requirements:
         | 
| 66 | 
            +
                - - ">="
         | 
| 67 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            +
                    version: '0'
         | 
| 69 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 70 | 
            +
              name: pry
         | 
| 71 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 | 
            +
                requirements:
         | 
| 73 | 
            +
                - - ">="
         | 
| 74 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            +
                    version: '0'
         | 
| 76 | 
            +
              type: :development
         | 
| 77 | 
            +
              prerelease: false
         | 
| 78 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 | 
            +
                requirements:
         | 
| 80 | 
            +
                - - ">="
         | 
| 81 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            +
                    version: '0'
         | 
| 83 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 84 | 
            +
              name: pry-byebug
         | 
| 85 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 86 | 
            +
                requirements:
         | 
| 87 | 
            +
                - - ">="
         | 
| 88 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            +
                    version: '0'
         | 
| 90 | 
            +
              type: :development
         | 
| 91 | 
            +
              prerelease: false
         | 
| 92 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 93 | 
            +
                requirements:
         | 
| 94 | 
            +
                - - ">="
         | 
| 95 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 96 | 
            +
                    version: '0'
         | 
| 97 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 98 | 
            +
              name: pry-remote
         | 
| 99 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 100 | 
            +
                requirements:
         | 
| 101 | 
            +
                - - ">="
         | 
| 102 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 103 | 
            +
                    version: '0'
         | 
| 104 | 
            +
              type: :development
         | 
| 105 | 
            +
              prerelease: false
         | 
| 106 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 107 | 
            +
                requirements:
         | 
| 108 | 
            +
                - - ">="
         | 
| 109 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 110 | 
            +
                    version: '0'
         | 
| 111 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 112 | 
            +
              name: pry-state
         | 
| 113 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 114 | 
            +
                requirements:
         | 
| 115 | 
            +
                - - ">="
         | 
| 116 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 117 | 
            +
                    version: '0'
         | 
| 118 | 
            +
              type: :development
         | 
| 119 | 
            +
              prerelease: false
         | 
| 120 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 121 | 
            +
                requirements:
         | 
| 122 | 
            +
                - - ">="
         | 
| 123 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 124 | 
            +
                    version: '0'
         | 
| 125 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 126 | 
            +
              name: pry-rescue
         | 
| 127 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 128 | 
            +
                requirements:
         | 
| 129 | 
            +
                - - ">="
         | 
| 130 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 131 | 
            +
                    version: '0'
         | 
| 132 | 
            +
              type: :development
         | 
| 133 | 
            +
              prerelease: false
         | 
| 134 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 135 | 
            +
                requirements:
         | 
| 136 | 
            +
                - - ">="
         | 
| 137 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 138 | 
            +
                    version: '0'
         | 
| 139 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 140 | 
            +
              name: pry-stack_explorer
         | 
| 141 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 142 | 
            +
                requirements:
         | 
| 143 | 
            +
                - - ">="
         | 
| 144 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 145 | 
            +
                    version: '0'
         | 
| 146 | 
            +
              type: :development
         | 
| 147 | 
            +
              prerelease: false
         | 
| 148 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 149 | 
            +
                requirements:
         | 
| 150 | 
            +
                - - ">="
         | 
| 151 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 152 | 
            +
                    version: '0'
         | 
| 153 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 154 | 
            +
              name: rspec
         | 
| 155 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 156 | 
            +
                requirements:
         | 
| 157 | 
            +
                - - ">="
         | 
| 158 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 159 | 
            +
                    version: '0'
         | 
| 160 | 
            +
              type: :development
         | 
| 161 | 
            +
              prerelease: false
         | 
| 162 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 163 | 
            +
                requirements:
         | 
| 164 | 
            +
                - - ">="
         | 
| 165 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 166 | 
            +
                    version: '0'
         | 
| 167 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 168 | 
            +
              name: rb-fsevent
         | 
| 169 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 170 | 
            +
                requirements:
         | 
| 171 | 
            +
                - - ">="
         | 
| 172 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 173 | 
            +
                    version: '0'
         | 
| 174 | 
            +
              type: :development
         | 
| 175 | 
            +
              prerelease: false
         | 
| 176 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 177 | 
            +
                requirements:
         | 
| 178 | 
            +
                - - ">="
         | 
| 179 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 180 | 
            +
                    version: '0'
         | 
| 181 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 182 | 
            +
              name: guard-rspec
         | 
| 183 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 184 | 
            +
                requirements:
         | 
| 185 | 
            +
                - - ">="
         | 
| 186 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 187 | 
            +
                    version: '0'
         | 
| 188 | 
            +
              type: :development
         | 
| 189 | 
            +
              prerelease: false
         | 
| 190 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 191 | 
            +
                requirements:
         | 
| 192 | 
            +
                - - ">="
         | 
| 193 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 194 | 
            +
                    version: '0'
         | 
| 195 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 196 | 
            +
              name: terminal-notifier
         | 
| 197 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 198 | 
            +
                requirements:
         | 
| 199 | 
            +
                - - ">="
         | 
| 200 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 201 | 
            +
                    version: '0'
         | 
| 202 | 
            +
              type: :development
         | 
| 203 | 
            +
              prerelease: false
         | 
| 204 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 205 | 
            +
                requirements:
         | 
| 206 | 
            +
                - - ">="
         | 
| 207 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 208 | 
            +
                    version: '0'
         | 
| 209 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 210 | 
            +
              name: terminal-notifier-guard
         | 
| 211 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 212 | 
            +
                requirements:
         | 
| 213 | 
            +
                - - ">="
         | 
| 214 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 215 | 
            +
                    version: '0'
         | 
| 216 | 
            +
              type: :development
         | 
| 217 | 
            +
              prerelease: false
         | 
| 218 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 219 | 
            +
                requirements:
         | 
| 220 | 
            +
                - - ">="
         | 
| 221 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 222 | 
            +
                    version: '0'
         | 
| 223 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 224 | 
            +
              name: rubocop
         | 
| 225 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 226 | 
            +
                requirements:
         | 
| 227 | 
            +
                - - ">="
         | 
| 228 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 229 | 
            +
                    version: '0'
         | 
| 230 | 
            +
              type: :development
         | 
| 231 | 
            +
              prerelease: false
         | 
| 232 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 233 | 
            +
                requirements:
         | 
| 234 | 
            +
                - - ">="
         | 
| 235 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 236 | 
            +
                    version: '0'
         | 
| 237 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 238 | 
            +
              name: codeclimate-test-reporter
         | 
| 239 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 240 | 
            +
                requirements:
         | 
| 241 | 
            +
                - - ">="
         | 
| 242 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 243 | 
            +
                    version: '0'
         | 
| 244 | 
            +
              type: :development
         | 
| 245 | 
            +
              prerelease: false
         | 
| 246 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 247 | 
            +
                requirements:
         | 
| 248 | 
            +
                - - ">="
         | 
| 249 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 250 | 
            +
                    version: '0'
         | 
| 251 | 
            +
            description: |-
         | 
| 252 | 
            +
              checks if expected adheres to specified json schema document. document can
         | 
| 253 | 
            +
                be another object or name of a file containing it.
         | 
| 254 | 
            +
            email:
         | 
| 255 | 
            +
            - pekhee@gmail.com
         | 
| 256 | 
            +
            executables: []
         | 
| 257 | 
            +
            extensions: []
         | 
| 258 | 
            +
            extra_rdoc_files:
         | 
| 259 | 
            +
            - README.md
         | 
| 260 | 
            +
            - LICENSE.md
         | 
| 261 | 
            +
            files:
         | 
| 262 | 
            +
            - LICENSE.md
         | 
| 263 | 
            +
            - README.md
         | 
| 264 | 
            +
            - lib/rspec/matchers/adhere_to_schema.rb
         | 
| 265 | 
            +
            - lib/rspec/matchers/adhere_to_schema/identity.rb
         | 
| 266 | 
            +
            - lib/tasks/rspec.rake
         | 
| 267 | 
            +
            - lib/tasks/rubocop.rake
         | 
| 268 | 
            +
            - vendor/jsonapi.schema
         | 
| 269 | 
            +
            homepage: https://github.com/pekhee/rspec_matchers_adhere_to_schema
         | 
| 270 | 
            +
            licenses:
         | 
| 271 | 
            +
            - MIT
         | 
| 272 | 
            +
            metadata: {}
         | 
| 273 | 
            +
            post_install_message: 
         | 
| 274 | 
            +
            rdoc_options: []
         | 
| 275 | 
            +
            require_paths:
         | 
| 276 | 
            +
            - lib
         | 
| 277 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 278 | 
            +
              requirements:
         | 
| 279 | 
            +
              - - ">="
         | 
| 280 | 
            +
                - !ruby/object:Gem::Version
         | 
| 281 | 
            +
                  version: '0'
         | 
| 282 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 283 | 
            +
              requirements:
         | 
| 284 | 
            +
              - - ">="
         | 
| 285 | 
            +
                - !ruby/object:Gem::Version
         | 
| 286 | 
            +
                  version: '0'
         | 
| 287 | 
            +
            requirements: []
         | 
| 288 | 
            +
            rubyforge_project: 
         | 
| 289 | 
            +
            rubygems_version: 2.4.5.1
         | 
| 290 | 
            +
            signing_key: 
         | 
| 291 | 
            +
            specification_version: 4
         | 
| 292 | 
            +
            summary: rspec matcher to check output agains a json schema document
         | 
| 293 | 
            +
            test_files: []
         | 
| 294 | 
            +
            has_rdoc: 
         |