Class: Card::Migration
Class Method Summary
collapse
Instance Method Summary
collapse
#create_card, #create_card!, #create_or_update, #create_or_update!, #resolve_name_conflict, #update_card, #update_card!
Class Method Details
.assume_migrated_upto_version ⇒ Object
53
54
55
56
57
58
|
# File 'lib/card/migration.rb', line 53
def assume_migrated_upto_version
schema_mode do
ActiveRecord::Schema.assume_migrated_upto_version schema,
migration_paths
end
end
|
.data_path(filename = nil) ⇒ Object
60
61
62
63
|
# File 'lib/card/migration.rb', line 60
def data_path filename=nil
path = migration_paths.first
File.join([path, 'data', filename].compact)
end
|
.find_unused_name(base_name) ⇒ Object
19
20
21
22
23
24
25
26
27
|
# File 'lib/card/migration.rb', line 19
def find_unused_name base_name
test_name = base_name
add = 1
while Card.exists?(test_name)
test_name = "#{base_name}#{add}"
add += 1
end
test_name
end
|
.migration_paths(mig_type = type) ⇒ Object
29
30
31
|
# File 'lib/card/migration.rb', line 29
def migration_paths mig_type=type
Cardio.migration_paths mig_type
end
|
.schema(mig_type = type) ⇒ Object
33
34
35
|
# File 'lib/card/migration.rb', line 33
def schema mig_type=type
Cardio.schema mig_type
end
|
.schema_mode(mig_type = type) {|paths| ... } ⇒ Object
41
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/card/migration.rb', line 41
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
paths = Cardio.migration_paths(type)
yield(paths)
ActiveRecord::Base.table_name_suffix = original_suffix
ActiveRecord::SchemaMigration.reset_table_name
end
|
.schema_suffix(mig_type = type) ⇒ Object
37
38
39
|
# File 'lib/card/migration.rb', line 37
def schema_suffix mig_type=type
Cardio.schema_suffix mig_type
end
|
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.
15
16
17
|
# File 'lib/card/migration.rb', line 15
def type
@type || (ancestors[1] && ancestors[1].type)
end
|
Instance Method Details
#data_path(filename = nil) ⇒ Object
94
95
96
|
# File 'lib/card/migration.rb', line 94
def data_path filename=nil
self.class.data_path filename
end
|
123
124
125
|
# File 'lib/card/migration.rb', line 123
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’
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
# File 'lib/card/migration.rb', line 108
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
81
82
83
84
85
86
|
# File 'lib/card/migration.rb', line 81
def import_json filename, merge_opts={}
Card::Mailer.perform_deliveries = false
output_file = File.join data_path, "unmerged_#{filename}"
merge_opts[:output_file] ||= output_file
Card.merge_list read_json(filename), merge_opts
end
|
#migration_paths ⇒ Object
102
103
104
|
# File 'lib/card/migration.rb', line 102
def migration_paths
Cardio.paths self.class.type
end
|
#read_json(filename) ⇒ Object
88
89
90
91
92
|
# File 'lib/card/migration.rb', line 88
def read_json filename
raw_json = File.read data_path(filename)
json = JSON.parse raw_json
json['card']['value']
end
|
#schema_mode ⇒ Object
98
99
100
|
# File 'lib/card/migration.rb', line 98
def schema_mode
Cardio.schema_mode self.class.type
end
|
#update_machine_output ⇒ Object
127
128
129
|
# File 'lib/card/migration.rb', line 127
def update_machine_output
Card.search(right: { codename: 'machine_output' }).each(&:delete)
end
|