class Sneakers::ContentType

Attributes

deserializer[R]
serializer[R]

Public Class Methods

deserialize(payload, content_type) click to toggle source
# File lib/sneakers/content_type.rb, line 23
def self.deserialize(payload, content_type)
  return payload unless content_type
  @_types[content_type].deserializer.(payload)
end
new(serializer, deserializer) click to toggle source
# File lib/sneakers/content_type.rb, line 38
def initialize(serializer, deserializer)
  @serializer = serializer
  @deserializer = deserializer
end
passthrough() click to toggle source
# File lib/sneakers/content_type.rb, line 34
def self.passthrough
  ->(payload) { payload }
end
register(content_type: nil, serializer: nil, deserializer: nil) click to toggle source
# File lib/sneakers/content_type.rb, line 3
def self.register(content_type: nil, serializer: nil, deserializer: nil)
  # This can be removed when support is dropped for ruby 2.0 and replaced
  # by a keyword arg with no default value
  fail ArgumentError, 'missing keyword: content_type' if content_type.nil?
  fail ArgumentError, 'missing keyword: serializer' if serializer.nil?
  fail ArgumentError, 'missing keyword: deserializer' if deserializer.nil?

  fail ArgumentError, "#{content_type} serializer must be a proc" unless serializer.is_a? Proc
  fail ArgumentError, "#{content_type} deserializer must be a proc" unless deserializer.is_a? Proc

  fail ArgumentError, "#{content_type} serializer must accept one argument, the payload" unless serializer.arity == 1
  fail ArgumentError, "#{content_type} deserializer must accept one argument, the payload" unless deserializer.arity == 1
  @_types[content_type] = new(serializer, deserializer)
end
reset!() click to toggle source
# File lib/sneakers/content_type.rb, line 28
def self.reset!
  @_types = Hash.new(
    new(passthrough, passthrough)
  )
end
serialize(payload, content_type) click to toggle source
# File lib/sneakers/content_type.rb, line 18
def self.serialize(payload, content_type)
  return payload unless content_type
  @_types[content_type].serializer.(payload)
end