class Rosetta::Translation

Attributes

deserializer[R]
serializer[R]
translator[R]
translator?[R]

Public Class Methods

new(deserializer, serializer) click to toggle source
# File lib/rosetta/translation.rb, line 20
def initialize(deserializer, serializer)
  @translator = Translation[deserializer => serializer]
  unless @translator
    @serializer = find_serializer(serializer)
    @deserializer = find_deserializer(deserializer)
  end
end
register(source, destination, object=nil, &block) click to toggle source
# File lib/rosetta/translation.rb, line 12
def register(source, destination, object=nil, &block)
  register_key({ source => destination }, object, &block)
end
Also aliased as: register_key
register_key(source, destination, object=nil, &block)
Alias for: register

Public Instance Methods

call(input) click to toggle source
# File lib/rosetta/translation.rb, line 28
def call(input)
  if translator?
    translator.call(input)
  else
    elements = deserializer.call(input)
    serializer.call(elements)
  end
rescue ConversionError => e
  raise e # No double-wrapping conversion errors
rescue StandardError
  raise TranslationError
end
to_proc() click to toggle source
# File lib/rosetta/translation.rb, line 41
def to_proc
  proc { |*args, &block| self.call(*args, &block) }
end

Private Instance Methods

find_deserializer(name_or_object) click to toggle source
# File lib/rosetta/translation.rb, line 54
def find_deserializer(name_or_object)
  is_name = name_or_object.is_a?(String) || name_or_object.is_a?(Symbol)
  object = name_or_object unless is_name
  Deserializers[name_or_object] || object ||
    raise(UnknownSerializer, "Unknown serializer for: #{name_or_object.inspect}")
end
find_serializer(name_or_object) click to toggle source
# File lib/rosetta/translation.rb, line 47
def find_serializer(name_or_object)
  is_name = name_or_object.is_a?(String) || name_or_object.is_a?(Symbol)
  object = name_or_object unless is_name
  Serializers[name_or_object] || object ||
    raise(UnknownSerializer, "Unknown serializer for: #{name_or_object.inspect}")
end