Moved README to README.markdown
[merb_radiant.git] / lib / radiant / extension_migrator.rb_
bloba1ea0bf8986408d3a50b4b2635350c015c88ccf1
1 # FIXME Rails dependencies / use gem
3 module Radiant
4   class ExtensionMigrator < ActiveRecord::Migrator
5   
6     def self.migrate_extensions
7       Extension.descendants.each do |ext|
8         ext.migrator.migrate
9       end
10     end
11   
12     def initialize(extension)
13       @extension = extension
14       @migrations_path = @extension.root + '/db/migrate'
15     end
16   
17     def migrate_with_extension_support(how = :up)
18       raise StandardError.new("This database does not yet support migrations") unless ActiveRecord::Base.connection.supports_migrations?
19     
20       if [:up, :down].include?(how)
21         @direction = how
22         @target_version = nil
23       else
24         @target_version = how
25         case
26           when @target_version.nil?, current_version < @target_version
27             @direction = :up
28           when current_version > @target_version
29             @direction = :down
30           when current_version == @target_version
31             return # You're on the right version
32         end
33       end
34     
35       migrate_without_extension_support
36     end
37     alias_method_chain :migrate, :extension_support
38     
39     def current_version
40       @extension.meta.schema_version
41     end
42   
43     def set_schema_version(version)
44       @extension.meta.update_attributes(:schema_version => (down? ? version.to_i - 1 : version.to_i))
45     end
46   
47   end
49 end