module Transform::Read
Public Class Methods
assure_instance_method(transformer)
click to toggle source
# File lib/transform/read.rb, line 57 def self.assure_instance_method(transformer) unless transformer.respond_to?(:instance) raise Error, "#{transformer.name} does not implement `instance'" end end
call(input, format_name, cls)
click to toggle source
# File lib/transform/read.rb, line 5 def self.call(input, format_name, cls) logger.trace { "Reading (Format Name: #{format_name.inspect})" } logger.trace(tags: [:data, :input]) { input.pretty_inspect } transformer_reflection = transformer_reflection(cls) format_reflection = transformer_reflection.get(format_name, coerce_constant: false) raw_data = format_reflection.(:read, input) instance = instance(raw_data, cls, transformer_reflection) logger.info { "Read (Format Name: #{format_name.inspect})" } logger.debug(tags: [:data, :output]) { instance.pretty_inspect } instance end
get_instance(transformer, raw_data, cls)
click to toggle source
# File lib/transform/read.rb, line 41 def self.get_instance(transformer, raw_data, cls) assure_instance_method(transformer) method = transformer.method(:instance) instance = nil case method.parameters.length when 1 instance = transformer.instance(raw_data) when 2 instance = transformer.instance(raw_data, cls) end instance end
instance(raw_data, cls, transformer_reflection=nil)
click to toggle source
# File lib/transform/read.rb, line 23 def self.instance(raw_data, cls, transformer_reflection=nil) logger.trace { "Transforming raw data to instance" } logger.trace(tags: [:data, :raw_data]) { raw_data.pretty_inspect } if transformer_reflection.nil? transformer_reflection = transformer_reflection(cls) end transformer = transformer_reflection.target instance = get_instance(transformer, raw_data, cls) logger.debug { "Transformed raw data to instance" } logger.debug(tags: [:data, :instance]) { instance.pretty_inspect } instance end
logger()
click to toggle source
# File lib/transform/read.rb, line 63 def self.logger @logger ||= Log.get(self) end