Class: Card::Migration
- Defined in:
- lib/card/migration.rb
Direct Known Subclasses
Class Method Summary collapse
- .assume_migrated_upto_version ⇒ Object
- .data_path(filename = nil) ⇒ Object
- .find_unused_name(base_name) ⇒ Object
- .migration_paths(mig_type = type) ⇒ Object
- .schema(mig_type = type) ⇒ Object
- .schema_mode(mig_type = type) ⇒ Object
- .schema_suffix(mig_type = type) ⇒ Object
-
.type ⇒ Object
Rake tasks use class methods, migrations use instance methods.
Instance Method Summary collapse
- #contentedly(&block) ⇒ Object
- #data_path(filename = nil) ⇒ Object
- #down ⇒ Object
-
#exec_migration(conn, direction) ⇒ Object
Execute this migration in the named direction copied from ActiveRecord to wrap “up” in “contentendly”.
- #import_json(filename, merge_opts = {}) ⇒ Object
- #migration_paths ⇒ Object
- #read_json(filename) ⇒ Object
- #schema_mode ⇒ Object
Class Method Details
.assume_migrated_upto_version ⇒ Object
51 52 53 54 55 |
# File 'lib/card/migration.rb', line 51 def assume_migrated_upto_version schema_mode do ActiveRecord::Schema.assume_migrated_upto_version schema, migration_paths end end |
.data_path(filename = nil) ⇒ Object
57 58 59 60 |
# File 'lib/card/migration.rb', line 57 def data_path filename=nil path = migration_paths.first File.join( [ migration_paths.first, 'data', filename ].compact ) end |
.find_unused_name(base_name) ⇒ Object
18 19 20 21 22 23 24 25 26 |
# File 'lib/card/migration.rb', line 18 def find_unused_name base_name test_name = base_name add = 1 while Card.exists?(test_name) do test_name = "#{base_name}#{add}" add +=1 end test_name end |
.migration_paths(mig_type = type) ⇒ Object
28 29 30 |
# File 'lib/card/migration.rb', line 28 def migration_paths mig_type=type Cardio.migration_paths mig_type end |
.schema(mig_type = type) ⇒ Object
32 33 34 |
# File 'lib/card/migration.rb', line 32 def schema mig_type=type Cardio.schema mig_type end |
.schema_mode(mig_type = type) ⇒ Object
40 41 42 43 44 45 46 47 48 49 |
# File 'lib/card/migration.rb', line 40 def schema_mode mig_type=type new_suffix = schema_suffix mig_type original_suffix = ActiveRecord::Base.table_name_suffix ActiveRecord::Base.table_name_suffix = new_suffix ActiveRecord::SchemaMigration.reset_table_name yield ActiveRecord::Base.table_name_suffix = original_suffix ActiveRecord::SchemaMigration.reset_table_name end |
.schema_suffix(mig_type = type) ⇒ Object
36 37 38 |
# File 'lib/card/migration.rb', line 36 def schema_suffix mig_type=type Cardio.schema_suffix mig_type end |
.type ⇒ Object
Rake tasks use class methods, migrations use instance methods. To avoid repetition a lot of instance methods here just call class methods. The subclass Card::CoreMigration needs a different @type so we can’t use a class variable @@type. It has to be a class instance variable. Migrations are subclasses of Card::Migration or Card::CoreMigration but they don’t inherit the @type. The method below solves this problem.
14 15 16 |
# File 'lib/card/migration.rb', line 14 def type @type || (ancestors[1] && ancestors[1].type) end |
Instance Method Details
#contentedly(&block) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/card/migration.rb', line 64 def contentedly &block Card::Cache.reset_global Cardio.schema_mode '' do Card::Auth.as_bot do ActiveRecord::Base.transaction do begin yield ensure Card::Cache.reset_global end end end end end |
#data_path(filename = nil) ⇒ Object
91 92 93 |
# File 'lib/card/migration.rb', line 91 def data_path filename=nil self.class.data_path filename end |
#down ⇒ Object
121 122 123 |
# File 'lib/card/migration.rb', line 121 def down raise ActiveRecord::IrreversibleMigration end |
#exec_migration(conn, direction) ⇒ Object
Execute this migration in the named direction copied from ActiveRecord to wrap “up” in “contentendly”
105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/card/migration.rb', line 105 def exec_migration(conn, direction) @connection = conn if respond_to?(:change) if direction == :down revert { change } else change end else contentedly { send(direction) } end ensure @connection = nil end |
#import_json(filename, merge_opts = {}) ⇒ Object
79 80 81 82 83 |
# File 'lib/card/migration.rb', line 79 def import_json filename, merge_opts={} Card.config.action_mailer.perform_deliveries = false merge_opts.reverse_merge! :output_file=>File.join(data_path,"unmerged_#{ filename }") Card.merge_list read_json(filename), merge_opts end |
#migration_paths ⇒ Object
99 100 101 |
# File 'lib/card/migration.rb', line 99 def migration_paths Cardio.paths self.class.type end |
#read_json(filename) ⇒ Object
85 86 87 88 89 |
# File 'lib/card/migration.rb', line 85 def read_json filename raw_json = File.read( data_path filename ) json = JSON.parse raw_json json["card"]["value"] end |
#schema_mode ⇒ Object
95 96 97 |
# File 'lib/card/migration.rb', line 95 def schema_mode Cardio.schema_mode self.class.type end |