Class: Caboose::Utilities::Schema
- Inherits:
-
Object
- Object
- Caboose::Utilities::Schema
- Defined in:
- app/models/caboose/utilities/schema.rb
Direct Known Subclasses
Class Method Summary collapse
-
.create_indexes ⇒ Object
Verifies (non-destructively) that the given indexes exist in the database.
-
.create_schema ⇒ Object
Verifies (non-destructively) that the given schema exists in the database.
-
.indexes ⇒ Object
Any column indexes that need to exist in the database.
-
.load_data ⇒ Object
Loads initial data into the database.
-
.remove_columns ⇒ Object
Removes a set of tables.
-
.removed_columns ⇒ Object
Columns (in order) that were removed in the development of the gem.
-
.rename_columns ⇒ Object
Renames a set of columns.
-
.rename_tables ⇒ Object
Renames a set of tables.
-
.renamed_columns ⇒ Object
Columns (in order) that were renamed in the development of the gem.
-
.renamed_tables ⇒ Object
Tables (in order) that were renamed in the development of the gem.
-
.schema ⇒ Object
The schema of the database { Model => [[name, data_type, options]] }.
Class Method Details
.create_indexes ⇒ Object
Verifies (non-destructively) that the given indexes exist in the database.
87 88 89 90 91 92 93 94 95 |
# File 'app/models/caboose/utilities/schema.rb', line 87 def self.create_indexes return if self.indexes.nil? c = ActiveRecord::Base.connection self.indexes.each do |model, arr| arr.each do |index| c.add_index model.table_name, index if !c.index_exists?(model.table_name, index) end end end |
.create_schema ⇒ Object
Verifies (non-destructively) that the given schema exists in the database.
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'app/models/caboose/utilities/schema.rb', line 39 def self.create_schema return if self.schema.nil? rename_tables rename_columns remove_columns c = ActiveRecord::Base.connection self.schema.each do |model, columns| tbl = model.table_name puts "Creating table #{tbl}..." c.create_table tbl if !c.table_exists?(tbl) columns.each do |col| puts "Creating column #{tbl}.#{col[0]}..." # Special case for attachments if col[1] == :attachment c. tbl, col[0] if !c.column_exists?(tbl, "#{col[0]}_file_size") next end # Skip if the column exists with the proper data type next if c.column_exists?(tbl, col[0], col[1]) # If the column doesn't exists, add it if !c.column_exists?(tbl, col[0]) if col.count > 2 c.add_column tbl, col[0], col[1], col[2] else c.add_column tbl, col[0], col[1] end # Column exists, but not with the correct data type, try to change it else c.execute("alter table #{tbl} alter column #{col[0]} type #{col[1]} using cast(#{col[0]} as #{col[1]})") end end end create_indexes self.schema.each do |model, columns| model.reset_column_information end end |
.indexes ⇒ Object
Any column indexes that need to exist in the database
20 21 22 |
# File 'app/models/caboose/utilities/schema.rb', line 20 def self.indexes return nil end |
.load_data ⇒ Object
Loads initial data into the database
31 32 |
# File 'app/models/caboose/utilities/schema.rb', line 31 def self.load_data end |
.remove_columns ⇒ Object
Removes a set of tables
121 122 123 124 125 126 127 128 129 130 |
# File 'app/models/caboose/utilities/schema.rb', line 121 def self.remove_columns return if self.removed_columns.nil? c = ActiveRecord::Base.connection self.removed_columns.each do |model, columns| next if !c.table_exists?(model.table_name) columns.each do |col| c.remove_column model.table_name, col if c.column_exists?(model.table_name, col) end end end |
.removed_columns ⇒ Object
Columns (in order) that were removed in the development of the gem.
15 16 17 |
# File 'app/models/caboose/utilities/schema.rb', line 15 def self.removed_columns return nil end |
.rename_columns ⇒ Object
Renames a set of columns
108 109 110 111 112 113 114 115 116 117 118 |
# File 'app/models/caboose/utilities/schema.rb', line 108 def self.rename_columns return if self.renamed_columns.nil? c = ActiveRecord::Base.connection self.renamed_columns.each do |model, cols| next if !c.table_exists? model.table_name cols.each do |old_name, new_name| next if !c.column_exists?(model.table_name, old_name) || c.column_exists?(model.table_name, new_name) c.rename_column model.table_name, old_name, new_name end end end |
.rename_tables ⇒ Object
Renames a set of tables
98 99 100 101 102 103 104 105 |
# File 'app/models/caboose/utilities/schema.rb', line 98 def self.rename_tables return if self.renamed_tables.nil? c = ActiveRecord::Base.connection self.renamed_tables.each do |old_name, new_name| next if !c.table_exists?(old_name) || c.table_exists?(new_name) c.rename_table old_name, new_name end end |
.renamed_columns ⇒ Object
Columns (in order) that were renamed in the development of the gem.
10 11 12 |
# File 'app/models/caboose/utilities/schema.rb', line 10 def self.renamed_columns return nil end |
.renamed_tables ⇒ Object
Tables (in order) that were renamed in the development of the gem.
5 6 7 |
# File 'app/models/caboose/utilities/schema.rb', line 5 def self.renamed_tables return nil end |
.schema ⇒ Object
The schema of the database { Model => [[name, data_type, options]] }
26 27 28 |
# File 'app/models/caboose/utilities/schema.rb', line 26 def self.schema raise NotImplementedError.new("You must implement this") end |