Module: Trailblazer::Activity::DSL::Linear::VariableMapping::Normalizer

Defined in:
lib/trailblazer/activity/dsl/linear/feature/variable_mapping.rb

Overview

Steps that are added to the DSL normalizer.

Class Method Summary collapse

Class Method Details

.convert_symbol_options(ctx, non_symbol_options:, output_with_outer_ctx: nil) ⇒ Object

TODO: remove me once :input API is removed. Convert :input, :output and :inject to In() and friends.



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/trailblazer/activity/dsl/linear/feature/variable_mapping.rb', line 42

def self.convert_symbol_options(ctx, non_symbol_options:, output_with_outer_ctx: nil, **)
  input, output, inject = ctx.delete(:input), ctx.delete(:output), ctx.delete(:inject)
  return unless input || output || inject

  dsl_options = {}

  # TODO: warn, deprecate etc
  dsl_options.merge!(VariableMapping::DSL.In() => input) if input

  if output
    options = {}
    options = options.merge(with_outer_ctx: output_with_outer_ctx) unless output_with_outer_ctx.nil?

    dsl_options.merge!(VariableMapping::DSL.Out(**options) => output)
  end

  if inject
    inject.collect do |filter|
      filter = filter.is_a?(Symbol) ? [filter] : filter

      dsl_options.merge!(VariableMapping::DSL.Inject() => filter)
    end
  end

  ctx.merge!(
    non_symbol_options:           non_symbol_options.merge(dsl_options),
    input_output_inject_options:  [{input: input, output: output, inject: inject}, dsl_options], # yes, there were {:input} options.
  )
end

.deprecate_input_output_inject_option(input_output_inject_options, *composable_options) ⇒ Object

TODO: remove for TRB 2.2.



102
103
104
105
106
107
108
109
110
111
112
# File 'lib/trailblazer/activity/dsl/linear/feature/variable_mapping.rb', line 102

def self.deprecate_input_output_inject_option(input_output_inject_options, *composable_options)
  return unless input_output_inject_options.any?
  options, _dsl_options = input_output_inject_options

  deprecated_options_count = options.find_all { |(name, option)| option }.count + (options[:inject] ? options[:inject].count - 1 : 0)
  composable_options_count = composable_options.collect { |options| options.size }.sum

  return if composable_options_count == deprecated_options_count

  Activity::Deprecate.warn Linear::Deprecate.dsl_caller_location, %(You are mixing #{options.inspect} with In(), Out() and Inject().\n#{VariableMapping.deprecation_link})
end

.input_output_dsl(ctx, non_symbol_options:, in_filters: nil, out_filters: nil, **options) ⇒ Object



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/trailblazer/activity/dsl/linear/feature/variable_mapping.rb', line 85

def self.input_output_dsl(ctx, non_symbol_options:, in_filters: nil, out_filters: nil, **options)
  # no :input/:output/:inject/Input()/Output() passed.
  return unless in_filters || out_filters

  extension = Linear.VariableMapping(in_filters: in_filters, out_filters: out_filters, **options)

  record = Linear::Normalizer::Inherit.Record((in_filters + out_filters).to_h, type: :variable_mapping)

  non_symbol_options = non_symbol_options.merge(record)
  non_symbol_options = non_symbol_options.merge(Linear::Strategy.Extension(is_generic: true)  => extension)

  ctx.merge!(
    non_symbol_options: non_symbol_options
  )
end

.normalize_input_output_filters(ctx, non_symbol_options:, input_output_inject_options: []) ⇒ Object

Process => [:model], Inject() => [:current_user], Out() => [:model]



73
74
75
76
77
78
79
80
81
82
83
# File 'lib/trailblazer/activity/dsl/linear/feature/variable_mapping.rb', line 73

def self.normalize_input_output_filters(ctx, non_symbol_options:, input_output_inject_options: [], **)
  in_exts     = non_symbol_options.find_all { |k, v| k.is_a?(VariableMapping::DSL::In) || k.is_a?(VariableMapping::DSL::Inject) }
  output_exts = non_symbol_options.find_all { |k, v| k.is_a?(VariableMapping::DSL::Out) }

  return unless in_exts.any? || output_exts.any?

  deprecate_input_output_inject_option(input_output_inject_options, in_exts, output_exts)

  ctx[:in_filters]  = in_exts
  ctx[:out_filters] = output_exts
end