Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

61 lines (50 sloc) 1.495 kB
module JsonSpec
module Matchers
class IncludeJson
include JsonSpec::Helpers
include JsonSpec::Exclusion
include JsonSpec::Messages
def initialize(expected_json = nil)
@expected_json = expected_json
end
def matches?(actual_json)
raise "Expected included JSON not provided" if @expected_json.nil?
actual = parse_json(actual_json, @path)
expected = exclude_keys(parse_json(@expected_json))
case actual
when Hash then
expected.is_a?(Hash) && actual.select { |k,v| expected.include? k } == expected ||
actual.values.map{|v| exclude_keys(v) }.include?(expected)
when Array then actual.map{|e| exclude_keys(e) }.include?(expected)
when String then actual.include?(expected)
else false
end
end
def at_path(path)
@path = path
self
end
def from_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 included JSON")
end
def failure_message_for_should_not
message_with_path("Expected excluded JSON")
end
def description
message_with_path("include JSON")
end
end
end
end
Jump to Line
Something went wrong with that request. Please try again.