Class: Migratrix::Migration
- Includes:
- ActiveModel::AttributeMethods, Callbacks, Loggable, MigrationStrategy, ValidOptions
- Defined in:
- lib/migratrix/migration.rb
Overview
Superclass for all migrations. Migratrix COULD check to see that a loaded migration inherits from this class, but hey, duck typing.
Constant Summary
Constants included from Callbacks
Instance Attribute Summary collapse
-
#options ⇒ Object
Returns the value of attribute options.
Class Method Summary collapse
- .extend_extraction(nickname, options = nil) ⇒ Object
-
.extend_load(nickname, options = nil) ⇒ Object
def self.set_load(name, type, options={}) loads = Migratrix.load(name, type, options) end.
- .extend_transform(nickname, options = nil) ⇒ Object
- .extractions ⇒ Object
- .loads ⇒ Object
-
.set_extraction(nickname, registered_name = nil, options = nil) ⇒ Object
extraction crap set_extraction :nickname, :registered_name, options_hash set_extraction :nickname, :registered_name # options = {} set_extraction :registered_name, options_hash # nickname = :default set_extraction :registered_name # nickname = :default, options={}.
-
.set_load(nickname, registered_name = nil, options = nil) ⇒ Object
load crap set_load :nickname, :registered_name, options_hash set_load :nickname, :registered_name # options = {} set_load :registered_name, options_hash # nickname = :default set_load :registered_name # nickname = :default, options={}.
-
.set_transform(nickname, registered_name = nil, options = nil) ⇒ Object
transform crap set_transform :nickname, :registered_name, options_hash set_transform :nickname, :registered_name # options = {} set_transform :registered_name, options_hash # nickname = :default set_transform :registered_name # nickname = :default, options={}.
- .transforms ⇒ Object
-
.valid_options ⇒ Object
TODO: Technically, we need to ask our extractions, transformers and loaders for THEIR valid options as well.
Instance Method Summary collapse
- #extractions ⇒ Object
-
#initialize(options = {}) ⇒ Migration
constructor
A new instance of Migration.
- #loads ⇒ Object
- #transforms ⇒ Object
Methods included from Callbacks
#extract, #load, #migrate, #transform
Methods included from MigrationStrategy
#extract, #load, #migrate, #transform
Constructor Details
Instance Attribute Details
#options ⇒ Object
Returns the value of attribute options.
13 14 15 |
# File 'lib/migratrix/migration.rb', line 13 def @options end |
Class Method Details
.extend_extraction(nickname, options = nil) ⇒ Object
66 67 68 69 70 71 72 |
# File 'lib/migratrix/migration.rb', line 66 def self.extend_extraction(nickname, =nil) nickname, = :default, nickname if .nil? migration = ancestors.detect {|k| k.respond_to?(:extractions) && k.extractions[nickname]} raise ExtractionNotDefined.new("Could not extend extraction '%s'; no parent Migration defines it" % nickname) unless migration extraction = migration.extractions[nickname] extractions[nickname] = extraction.class.new(nickname, extraction..merge()) end |
.extend_load(nickname, options = nil) ⇒ Object
def self.set_load(name, type, options={})
loads[name] = Migratrix.load(name, type, options)
end
158 159 160 161 162 163 164 |
# File 'lib/migratrix/migration.rb', line 158 def self.extend_load(nickname, =nil) nickname, = :default, nickname if .nil? migration = ancestors.detect {|k| k.respond_to?(:loads) && k.loads[nickname]} raise LoadNotDefined.new("Could not extend load '%s'; no parent Migration defines it" % nickname) unless migration load = migration.loads[nickname] loads[nickname] = load.class.new(nickname, load..merge()) end |
.extend_transform(nickname, options = nil) ⇒ Object
110 111 112 113 114 115 116 |
# File 'lib/migratrix/migration.rb', line 110 def self.extend_transform(nickname, =nil) nickname, = :default, nickname if .nil? migration = ancestors.detect {|k| k.respond_to?(:transforms) && k.transforms[nickname]} raise TransformNotDefined.new("Could not extend transform '%s'; no parent Migration defines it" % nickname) unless migration transform = migration.transforms[nickname] transforms[nickname] = transform.class.new(nickname, transform..merge()) end |
.extractions ⇒ Object
74 75 76 77 78 79 80 81 82 83 |
# File 'lib/migratrix/migration.rb', line 74 def self.extractions @extractions ||= {} ancestry = ancestors.select {|klass| klass != self && klass.respond_to?(:extractions) }.reverse # take oldest ancestor and merge extractions forward ext = {} ancestry.each do |ancestor| ext = ext.merge(ancestor.extractions || {}) end @extractions = ext.merge(@extractions) end |
.loads ⇒ Object
166 167 168 169 170 171 172 173 174 175 |
# File 'lib/migratrix/migration.rb', line 166 def self.loads @loads ||= {} ancestry = ancestors.select {|klass| klass != self && klass.respond_to?(:loads) }.reverse # take oldest ancestor and merge loads forward ext = {} ancestry.each do |ancestor| ext = ext.merge(ancestor.loads || {}) end @loads = ext.merge(@loads) end |
.set_extraction(nickname, registered_name = nil, options = nil) ⇒ Object
extraction crap set_extraction :nickname, :registered_name, options_hash set_extraction :nickname, :registered_name # options = {} set_extraction :registered_name, options_hash # nickname = :default set_extraction :registered_name # nickname = :default, options={}
52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/migratrix/migration.rb', line 52 def self.set_extraction(nickname, registered_name=nil, =nil) # barf, seriously these args need some detangler. if registered_name.nil? nickname, registered_name, = :default, nickname, {} elsif .nil? if registered_name.is_a?(Hash) nickname, registered_name, = :default, nickname, registered_name else nickname, registered_name, = nickname, registered_name, {} end end extractions[nickname] = Migratrix.extraction(nickname, registered_name, ) end |
.set_load(nickname, registered_name = nil, options = nil) ⇒ Object
load crap set_load :nickname, :registered_name, options_hash set_load :nickname, :registered_name # options = {} set_load :registered_name, options_hash # nickname = :default set_load :registered_name # nickname = :default, options={}
140 141 142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/migratrix/migration.rb', line 140 def self.set_load(nickname, registered_name=nil, =nil) # barf, seriously these args need some detangler. if registered_name.nil? nickname, registered_name, = :default, nickname, {} elsif .nil? if registered_name.is_a?(Hash) nickname, registered_name, = :default, nickname, registered_name else nickname, registered_name, = nickname, registered_name, {} end end loads[nickname] = Migratrix.load(nickname, registered_name, ) end |
.set_transform(nickname, registered_name = nil, options = nil) ⇒ Object
transform crap set_transform :nickname, :registered_name, options_hash set_transform :nickname, :registered_name # options = {} set_transform :registered_name, options_hash # nickname = :default set_transform :registered_name # nickname = :default, options={}
96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/migratrix/migration.rb', line 96 def self.set_transform(nickname, registered_name=nil, =nil) # barf, seriously these args need some detangler. if registered_name.nil? nickname, registered_name, = :default, nickname, {} elsif .nil? if registered_name.is_a?(Hash) nickname, registered_name, = :default, nickname, registered_name else nickname, registered_name, = nickname, registered_name, {} end end transforms[nickname] = Migratrix.transform(nickname, registered_name, ) end |
.transforms ⇒ Object
118 119 120 121 122 123 124 125 126 127 |
# File 'lib/migratrix/migration.rb', line 118 def self.transforms @transforms ||= {} ancestry = ancestors.select {|klass| klass != self && klass.respond_to?(:transforms) }.reverse # take oldest ancestor and merge transforms forward ext = {} ancestry.each do |ancestor| ext = ext.merge(ancestor.transforms || {}) end @transforms = ext.merge(@transforms) end |
.valid_options ⇒ Object
TODO: Technically, we need to ask our extractions, transformers and loaders for THEIR valid options as well. limit, offset, order and where are all extraction-only options, and fetchall is an ActiveRecord-specific option
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/migratrix/migration.rb', line 25 def self. opts = super # wacky, I know, but the extended ValidOptions module is in the super chain. (I <3 Ruby) if extractions extractions.each do |name, extraction| opts += extraction. end end if transforms transforms.each do |name, transform| opts += transform. end end if loads loads.each do |name, load| opts += load. end end opts.uniq.sort end |
Instance Method Details
#extractions ⇒ Object
85 86 87 |
# File 'lib/migratrix/migration.rb', line 85 def extractions self.class.extractions end |
#loads ⇒ Object
177 178 179 |
# File 'lib/migratrix/migration.rb', line 177 def loads self.class.loads end |
#transforms ⇒ Object
129 130 131 |
# File 'lib/migratrix/migration.rb', line 129 def transforms self.class.transforms end |