Sha256: f1774f72004897a2f8d4a1b736b3ac6d2df4fe6ea759393edcdc0263f1619897

Contents?: true

Size: 1.33 KB

Versions: 5

Compression:

Stored size: 1.33 KB

Contents

module JsonSpec
  module Matchers
    class BeJsonEql
      include JsonSpec::Helpers
      include JsonSpec::Exclusion
      include JsonSpec::Messages

      attr_reader :expected, :actual

      def diffable?
        true
      end

      def initialize(expected_json = nil)
        @expected_json = expected_json
      end

      def matches?(actual_json)
        raise "Expected equivalent JSON not provided" if @expected_json.nil?

        @actual, @expected = scrub(actual_json, @path), scrub(@expected_json)
        @actual == @expected
      end

      def at_path(path)
        @path = path
        self
      end

      def to_file(path)
        @expected_json = load_json(path)
        self
      end

      def excluding(*keys)
        excluded_keys.merge(keys.map(&:to_s))
        self
      end

      def including(*keys)
        excluded_keys.subtract(keys.map(&:to_s))
        self
      end

      def failure_message_for_should
        message_with_path("Expected equivalent JSON")
      end

      def failure_message_for_should_not
        message_with_path("Expected inequivalent JSON")
      end

      def description
        message_with_path("equal JSON")
      end

      private
        def scrub(json, path = nil)
          generate_normalized_json(exclude_keys(parse_json(json, path))).chomp + "\n"
        end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
json_spec-1.1.1 lib/json_spec/matchers/be_json_eql.rb
json_spec-1.1.0 lib/json_spec/matchers/be_json_eql.rb
json_spec-1.0.3 lib/json_spec/matchers/be_json_eql.rb
json_spec-1.0.2 lib/json_spec/matchers/be_json_eql.rb
json_spec-1.0.0 lib/json_spec/matchers/be_json_eql.rb