class EqualJson

Attributes

actual[RW]
currentActualObj[RW]
currentExpectedObj[RW]
currentJsonKey[RW]
expected[RW]
jsonPath[RW]
jsonPathRoot[RW]

Public Class Methods

new(expected) click to toggle source
# File lib/eq_json.rb, line 11
def initialize(expected)
  @expected = expected
  @jsonPathRoot = "$."
  @jsonPath = @jsonPathRoot
  @messageGenerator = EqJsonMessageGenerator.new(self)
end

Public Instance Methods

description() click to toggle source
# File lib/eq_json.rb, line 38
def description
  "Excpect {@expected}"
end
failure_message() click to toggle source
# File lib/eq_json.rb, line 24
def failure_message
  if RSpec.configuration.methods.include? :json_debug_config
    if RSpec.configuration.json_debug_config?
      debugDumper = EqJsonDebugDumper.new(self)
      debugDumper.dump()
    end
  end
  return @failureMessage
end
failure_message_when_negated() click to toggle source
# File lib/eq_json.rb, line 34
def failure_message_when_negated
  "Expeced failure_message_when_nagated"
end
matches?(actual) click to toggle source
# File lib/eq_json.rb, line 18
def matches?(actual)
  @actual = actual

  matchesObject?(@expected, @actual)
end

Private Instance Methods

addKeyToPath(jsonKey) click to toggle source
# File lib/eq_json.rb, line 131
def addKeyToPath(jsonKey)
  if @jsonPath[@jsonPath.length-1] != "."
    @jsonPath << "."
  end
  @jsonPath << "#{jsonKey}"
end
arrays_match?(expectedObj, actualArray) click to toggle source
# File lib/eq_json.rb, line 65
def arrays_match?(expectedObj, actualArray)
  unless actualArray.class == expectedObj.class
    @failureMessage = @messageGenerator.generateTypeMissMatchFailureMessage()
    return false;
  end

  unless actualArray.length == expectedObj.length
    @failureMessage = @messageGenerator.generateDifferentSizeArrayMessage();
    return false;
  end

  arrayUtil = EqualJsonArray.new

  expectedObj.each do |expectedItem|

    expectedCount = expectedObj.count do |item|
      arrayUtil.itemEqual?(expectedItem, item)
    end

    actualCount = actualArray.count do |candidate|
      arrayUtil.itemEqual?(expectedItem, candidate)
    end

    if expectedCount != actualCount
      @failureMessage = @messageGenerator.generateExpectedItemNotFoundInArray(expectedItem, expectedCount, actualCount)
      return false
    end

  end

  return true
end
hashes_match?(expectedObj, actualHash) click to toggle source
# File lib/eq_json.rb, line 98
def hashes_match?(expectedObj, actualHash)
  unless actualHash.class == expectedObj.class
    @failureMessage = @messageGenerator.generateTypeMissMatchFailureMessage()
    return false;
  end

  unless actualHash.length == expectedObj.length
    @failureMessage = @messageGenerator.generateDifferentKeyMessage();
    return false;
  end

  expectedObj.each do |expectedKey, expectedValue|
    @currentJsonKey = expectedKey
    actualValue = actualHash[expectedKey]
    unless actualHash.has_key? expectedKey
      @currentActualObj = actualHash
      @currentExpectedObj = expectedObj
      @failureMessage = @messageGenerator.generateDifferentKeyMessage()
      return false
    end

    addKeyToPath(expectedKey)
    match = matchesObject?(expectedValue, actualHash[expectedKey])
    removeKeyFromPath(expectedKey)
    if match == false
      return false;
    end
  end

  return true

end
matchesObject?(expectedObj, actualObj) click to toggle source
# File lib/eq_json.rb, line 44
def matchesObject?(expectedObj, actualObj)

  @currentActualObj = actualObj
  @currentExpectedObj = expectedObj

  case actualObj
    when Array
      return arrays_match?(expectedObj, actualObj)
    when Hash
      return hashes_match?(expectedObj, actualObj)
    else
      unless expectedObj == actualObj
        @failureMessage = @messageGenerator.generateDifferentValueMessage();
        return false;
      end
  end

  return true;

end
removeKeyFromPath(jsonKey) click to toggle source
# File lib/eq_json.rb, line 138
def removeKeyFromPath(jsonKey)
  @jsonPath = @jsonPath[0, @jsonPath.length - "#{jsonKey}".length - 1]
  if @jsonPath == "$"
    @jsonPath << "."
  end
end