Class: Textus::Application::Maintenance::Migrate::Impl

Inherits:
Object
  • Object
show all
Defined in:
lib/textus/application/maintenance/migrate.rb

Instance Method Summary collapse

Constructor Details

#initialize(ctx:, caps:, session:) ⇒ Impl

Returns a new instance of Impl.



14
15
16
17
18
# File 'lib/textus/application/maintenance/migrate.rb', line 14

def initialize(ctx:, caps:, session:)
  @ctx     = ctx
  @caps    = caps
  @session = session
end

Instance Method Details

#call(plan_yaml:, dry_run: false) ⇒ Object

Raises:



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/textus/application/maintenance/migrate.rb', line 20

def call(plan_yaml:, dry_run: false)
  raw = YAML.safe_load(plan_yaml, permitted_classes: [Symbol], aliases: false)
  raise UsageError.new("migration plan must be a YAML mapping") unless raw.is_a?(Hash)

  ops = Array(raw["operations"])
  all_steps = []
  warnings = []

  ops.each do |op_hash|
    op_name = op_hash["op"]
    sub_plan = invoke_op(op_name, op_hash, dry_run: dry_run)
    all_steps.concat(sub_plan.steps)
    warnings.concat(sub_plan.warnings)
  end

  Plan.new(steps: all_steps, warnings: warnings)
end