Module: Transform::Write

Extended by:
Transform
Defined in:
lib/transform/write.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_raw_data_method(transformer) ⇒ Object



56
57
58
59
60
# File 'lib/transform/write.rb', line 56

def self.assure_raw_data_method(transformer)
  unless transformer.respond_to?(:raw_data)
    raise Error, "#{transformer.name} does not implement `raw_data'"
  end
end

.call(input, format_name) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/transform/write.rb', line 5

def self.call(input, format_name)
  logger.trace { "Writing (Format Name: #{format_name.inspect})" }
  logger.trace(tags: [:data, :input]) { input.pretty_inspect }

  transformer_reflection = transformer_reflection(input)

  format_reflection = transformer_reflection.get(format_name, coerce_constant: false)

  raw_data = raw_data(input, transformer_reflection)

  output = format_reflection.(:write, raw_data)

  logger.info { "Wrote (Format Name: #{format_name.inspect})" }
  logger.debug(tags: [:data, :output]) { output.pretty_inspect }

  output
end

.get_raw_data(transformer, instance) ⇒ Object

This is not strictly necessary since Reflection does this but it provides symmetry with Read, which cannot use Reflection



51
52
53
54
# File 'lib/transform/write.rb', line 51

def self.get_raw_data(transformer, instance)
  assure_raw_data_method(transformer)
  transformer.raw_data(instance)
end

.loggerObject



62
63
64
# File 'lib/transform/write.rb', line 62

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

.raw_data(instance, transformer_reflection = nil) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/transform/write.rb', line 23

def self.raw_data(instance, transformer_reflection=nil)
  logger.trace { "Transforming instance to raw data" }
  logger.trace(tags: [:data, :instance]) { instance.pretty_inspect }

  if transformer_reflection.nil?
    subject_constant = Reflect.constant(instance)
    transformer_name = transformer_name(subject_constant)

    if transformer_name.nil?
      raise Error, "#{subject_constant.name} doesn't have a `Transformer' or 'Transform' namespace"
    end

    transformer_reflection = Reflect.(instance, transformer_name, strict: true)
  end

  ## could be the object if not coercing to constant
  ## transformer = transformer_reflection.constant
  transformer = transformer_reflection.target
  raw_data = get_raw_data(transformer, instance)

  logger.debug { "Transformed to raw data" }
  logger.debug(tags: [:data, :raw_data]) { raw_data.pretty_inspect }

  raw_data
end