Module: Transform::Read

Extended by:
Transform
Defined in:
lib/transform/read.rb

Constant Summary

Constants included from Transform

Error

Class Method Summary collapse

Methods included from Transform

transform_const?, transformer?, transformer_const?, transformer_name, transformer_reflection

Class Method Details

.assure_instance_method(transformer) ⇒ Object



57
58
59
60
61
# 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) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 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) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# 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) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 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

.loggerObject



63
64
65
# File 'lib/transform/read.rb', line 63

def self.logger
  @logger ||= Log.get(self)
end