class Porridge::SerializerDefiner

{SerializerDefiner} is a class that wraps a {Factory} and allows serializes to be easily defined with an elegant DSL.

Constants

FACTORY_PREFIX
FIELD_SERIALIZER_SUFFIX
SERIALIZER_SUFFIX

Attributes

factory[R]

Public Class Methods

new(factory = Factory.new) click to toggle source
# File lib/porridge/serializer_definer.rb, line 16
def initialize(factory = Factory.new)
  @factory = factory
  @serializers = []
end

Public Instance Methods

added_serializers() click to toggle source
# File lib/porridge/serializer_definer.rb, line 48
def added_serializers
  @serializers
end
defined_serializer() click to toggle source
# File lib/porridge/serializer_definer.rb, line 44
def defined_serializer
  factory.serializers(*added_serializers)
end
method_missing(method_name, *args, &block) click to toggle source
Calls superclass method
# File lib/porridge/serializer_definer.rb, line 21
def method_missing(method_name, *args, &block)
  method_name = method_name.to_s
  return factory.send(method_name.delete_prefix(FACTORY_PREFIX), *args, &block) if create_method? method_name

  if serializer_method? method_name
    return add_serializer(factory.send(method_name + SERIALIZER_SUFFIX, *args, &block))
  end

  if field_serializer_method? method_name
    return add_serializer(factory.send(method_name + FIELD_SERIALIZER_SUFFIX, *args, &block))
  end

  super(method_name.to_sym, *args, &block)
end
respond_to_missing?(method_name, include_private = false) click to toggle source
Calls superclass method
# File lib/porridge/serializer_definer.rb, line 36
def respond_to_missing?(method_name, include_private = false)
  method_name = method_name.to_s
  super(method_name.to_sym, include_private) ||
    create_method?(method_name) ||
    serializer_method?(method_name) ||
    field_serializer_method?(method_name)
end
serializer(...) click to toggle source
# File lib/porridge/serializer_definer.rb, line 52
def serializer(...)
  add_serializer(factory.serializer(...))
end

Private Instance Methods

add_serializer(serializer) click to toggle source
# File lib/porridge/serializer_definer.rb, line 70
def add_serializer(serializer)
  @serializers << serializer
end
create_method?(method_name) click to toggle source
# File lib/porridge/serializer_definer.rb, line 58
def create_method?(method_name)
  method_name.start_with?(FACTORY_PREFIX) && factory.respond_to?(method_name.delete_prefix(FACTORY_PREFIX))
end
field_serializer_method?(method_name) click to toggle source
# File lib/porridge/serializer_definer.rb, line 66
def field_serializer_method?(method_name)
  factory.respond_to?(method_name + FIELD_SERIALIZER_SUFFIX)
end
serializer_method?(method_name) click to toggle source
# File lib/porridge/serializer_definer.rb, line 62
def serializer_method?(method_name)
  factory.respond_to?(method_name + SERIALIZER_SUFFIX)
end