Class: Lutaml::Model::Transformer

Inherits:
Object
  • Object
show all
Defined in:
lib/lutaml/model/services/transformer.rb

Direct Known Subclasses

ExportTransformer, ImportTransformer

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(rule, attribute, format = nil) ⇒ Transformer

Returns a new instance of Transformer.



43
44
45
46
47
# File 'lib/lutaml/model/services/transformer.rb', line 43

def initialize(rule, attribute, format = nil)
  @rule = rule
  @attribute = attribute
  @format = format
end

Instance Attribute Details

#attributeObject (readonly)

Returns the value of attribute attribute.



41
42
43
# File 'lib/lutaml/model/services/transformer.rb', line 41

def attribute
  @attribute
end

#formatObject (readonly)

Returns the value of attribute format.



41
42
43
# File 'lib/lutaml/model/services/transformer.rb', line 41

def format
  @format
end

#ruleObject (readonly)

Returns the value of attribute rule.



41
42
43
# File 'lib/lutaml/model/services/transformer.rb', line 41

def rule
  @rule
end

Class Method Details

.call(value, rule, attribute, format: nil) ⇒ Object



5
6
7
# File 'lib/lutaml/model/services/transformer.rb', line 5

def call(value, rule, attribute, format: nil)
  new(rule, attribute, format).call(value)
end

Instance Method Details

#apply_class_transformer(value, transformer_class, format) ⇒ Object



68
69
70
71
72
73
74
# File 'lib/lutaml/model/services/transformer.rb', line 68

def apply_class_transformer(value, transformer_class, format)
  if export_direction?
    transformer_class.to(value, format)
  else
    transformer_class.from(value, format)
  end
end

#call(value) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/lutaml/model/services/transformer.rb', line 49

def call(value)
  methods = transformation_methods

  class_transformers = ordered_sources.filter_map do |obj|
    next unless obj&.transform.is_a?(Class) &&
      obj.transform < Lutaml::Model::ValueTransformer

    obj.transform
  end

  result = class_transformers.reduce(value) do |v, transformer_class|
    apply_class_transformer(v, transformer_class, format)
  end

  methods.reduce(result) do |transformed_value, method|
    method.call(transformed_value)
  end
end

#export_direction?Boolean

Returns:

  • (Boolean)


76
77
78
# File 'lib/lutaml/model/services/transformer.rb', line 76

def export_direction?
  false
end

#get_transform(obj, direction) ⇒ Object



80
81
82
83
84
85
# File 'lib/lutaml/model/services/transformer.rb', line 80

def get_transform(obj, direction)
  transform = obj&.transform
  return nil if transform.is_a?(Class)

  transform.is_a?(::Hash) ? transform[direction] : transform
end