class ActiveModelSerializers::Test::Serializer::AssertSerializer

def a_serializer?

def a_serializer?
  ->(exp) { exp.is_a?(Class) && exp < ActiveModel::Serializer }
end

def event_name

def event_name
  ::ActiveModelSerializers::Logging::RENDER_EVENT
end

def initialize

def initialize
  @serializers = Set.new
  @_subscribers = []
end

def matches?

def matches?
  # Force body to be read in case the template is being streamed.
  response.body
  case expectation
  when a_serializer? then matches_class?
  when Symbol        then matches_symbol?
  when String        then matches_string?
  when Regexp        then matches_regexp?
  when NilClass      then matches_nil?
  else fail ArgumentError, 'assert_serializer only accepts a String, Symbol, Regexp, ActiveModel::Serializer, or nil'
  end
end

def matches_class?

def matches_class?
  serializers.include?(expectation.name)
end

def matches_nil?

def matches_nil?
  serializers.empty?
end

def matches_regexp?

def matches_regexp?
  serializers.any? do |serializer|
    serializer.match(expectation)
  end
end

def matches_string?

def matches_string?
  !expectation.empty? && serializers.include?(expectation)
end

def matches_symbol?

def matches_symbol?
  camelize_expectation = expectation.to_s.camelize
  serializers.include?(camelize_expectation)
end

def message=(message)

def message=(message)
  @message = message || "expecting <#{expectation.inspect}> but rendering with <#{serializers.to_a}>"
end

def subscribe

def subscribe
  @_subscribers << ActiveSupport::Notifications.subscribe(event_name) do |_name, _start, _finish, _id, payload|
    serializer = payload[:serializer].name
    serializers << serializer
  end
end

def unsubscribe

def unsubscribe
  @_subscribers.each do |subscriber|
    ActiveSupport::Notifications.unsubscribe(subscriber)
  end
end