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
- #extract ⇒ Object
-
#load(transformed_items) ⇒ Object
Saves the migrated data by “loading” it into our database or other data sink.
-
#migrate ⇒ Object
Perform the migration.
-
#transform(extracted_items) ⇒ Object
Transforms source data into outputs.
Instance Method Details
#extract ⇒ Object
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() 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 |
#migrate ⇒ Object
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 |