Module: Migratrix::MigrationStrategy

Included in:
Migration
Defined in:
lib/migratrix/migration_strategy.rb

Overview

TODO: blatant asymmetry here: extraction.extract gets options, but transform and load do not–and they should.

MigrationStrategy

This module defines the basic strategy for a generic migration: extract gets a collection of items, transform transforms each item, then load calls save on that final transformed object.

Instance Method Summary collapse

Instance Method Details

#extractObject



11
12
13
14
15
16
17
# File 'lib/migratrix/migration_strategy.rb', line 11

def extract
  extracted_items = {}
  extractions.each do |name, extraction|
    extracted_items[name] = extraction.extract(options)
  end
  extracted_items
end

#load(transformed_items) ⇒ Object

Saves the migrated data by “loading” it into our database or other data sink. Loaders have their own names, and by default they depend on a transformed_items key of the same name, but you may override this behavior by setting :source => :name or possibly :source => [:name1, :name2, etc].



35
36
37
38
39
40
41
# File 'lib/migratrix/migration_strategy.rb', line 35

def load(transformed_items)
  loaded_items = { }
  loads.each do |name, load|
    loaded_items[load.name] = load.load transformed_items[load.transform]
  end
  loaded_items
end

#migrateObject

Perform the migration



44
45
46
47
48
49
50
# File 'lib/migratrix/migration_strategy.rb', line 44

def migrate
  # This fn || @var API lets you write a method and either set the
  # @var or return the value.
  @extracted_items = extract || @extracted_items
  @transformed_items = transform(@extracted_items) || @transformed_items
  load @transformed_items
end

#transform(extracted_items) ⇒ Object

Transforms source data into outputs. @transformed_items is a hash of name => transformed_items.



22
23
24
25
26
27
28
# File 'lib/migratrix/migration_strategy.rb', line 22

def transform(extracted_items)
  transformed_items = { }
  transforms.each do |name, transform|
    transformed_items[transform.name] = transform.transform extracted_items[transform.extraction]
  end
  transformed_items
end