class Realize::Logical::Switch
This type of transformer can be categorized as a “comparator”, meaning its intended desire is not a value resolution or value formatting, but a branching resolution. Specifically, you can define cases where, if the value matches, the transformers for the case would be executed. If no case is matched then the default_transformers
will be executed.
Attributes
cases[R]
default_transformers[R]
key[R]
Public Class Methods
new(key:, cases: [], default_transformers: [])
click to toggle source
# File lib/realize/logical/switch.rb, line 24 def initialize(key:, cases: [], default_transformers: []) raise ArgumentError, 'key is required' if key.to_s.empty? @cases = Case.array(cases) @default_transformers = Transformers.array(default_transformers) @key = key freeze end
Public Instance Methods
transform(resolver, value, time, record)
click to toggle source
# File lib/realize/logical/switch.rb, line 34 def transform(resolver, value, time, record) resolved_value = resolver.get(record, key) matched_case = cases.find { |c| c.match?(resolved_value) } transformers = matched_case ? matched_case.transformers : default_transformers return value if transformers.empty? transformers.inject(value) do |memo, transformer| transformer.transform(resolver, memo, time, record) end end