class JSONAPI::Resources::Matchers::Relationship

Attributes

expected_class_name[RW]
expected_relation_name[RW]
name[RW]
relationship_type[RW]
resource[RW]

Public Class Methods

new(relationship_type, name) click to toggle source
# File lib/jsonapi/resources/matchers/relationship.rb, line 12
def initialize(relationship_type, name)
  self.relationship_type = relationship_type
  self.name = name
end

Public Instance Methods

description() click to toggle source
# File lib/jsonapi/resources/matchers/relationship.rb, line 17
def description
  "#{humanized_relationship_type} `#{name}`"
end
failure_message() click to toggle source
# File lib/jsonapi/resources/matchers/relationship.rb, line 57
def failure_message
  resource_name = resource.class.name.demodulize
  message = ["expected `#{resource_name}` to #{humanized_relationship_type} `#{name}`"]
  if self.expected_class_name
    message << "with class name `#{self.expected_class_name}`"
  end
  if self.expected_relation_name
    message << "with relation name `#{self.expected_relation_name}`"
  end
  message.join(" ")
end
has_key_in_relationships?() click to toggle source
# File lib/jsonapi/resources/matchers/relationship.rb, line 38
def has_key_in_relationships?
  serialized_hash = JSONAPI::ResourceSerializer.new(resource.class).
    serialize_to_hash(resource).with_indifferent_access
  expected_key = JSONAPI.configuration.key_formatter.format(name.to_s)
  relationships = serialized_hash["data"]["relationships"]
  return false if relationships.nil?
  relationships.has_key?(expected_key)
end
humanized_relationship_type() click to toggle source
# File lib/jsonapi/resources/matchers/relationship.rb, line 21
def humanized_relationship_type
  relationship_type.to_s.gsub('_',' ')
end
is_serializable?() click to toggle source
# File lib/jsonapi/resources/matchers/relationship.rb, line 34
def is_serializable?
  CheckSerialization.(self.resource)
end
matches?(resource) click to toggle source
# File lib/jsonapi/resources/matchers/relationship.rb, line 25
def matches?(resource)
  self.resource = resource

  is_serializable? &&
  has_key_in_relationships? &&
    matches_class_name? &&
    matches_relation_name?
end
matches_class_name?() click to toggle source
# File lib/jsonapi/resources/matchers/relationship.rb, line 69
def matches_class_name?
  return true if self.expected_class_name.nil?
  association = resource.class._relationships[name]
  actual_class_name = association.class_name
  self.expected_class_name == actual_class_name
end
matches_relation_name?() click to toggle source
# File lib/jsonapi/resources/matchers/relationship.rb, line 76
def matches_relation_name?
  return true if self.expected_relation_name.nil?
  association = resource.class._relationships[name]
  actual_relation_name = association.relation_name({})
  self.expected_relation_name == actual_relation_name
end
with_class_name(name) click to toggle source
# File lib/jsonapi/resources/matchers/relationship.rb, line 47
def with_class_name(name)
  self.expected_class_name = name
  self
end
with_relation_name(name) click to toggle source
# File lib/jsonapi/resources/matchers/relationship.rb, line 52
def with_relation_name(name)
  self.expected_relation_name = name
  self
end