module Cell::Schema
Constants
- MAX_CELL_ID_SIZE
- MAX_SCHEMA_NAME_LENGTH
- SCHEMA_PREFIX
Public Class Methods
schema_name_for_cell_id(cell_id)
click to toggle source
# File lib/cell/schema.rb, line 11 def self.schema_name_for_cell_id(cell_id) SCHEMA_PREFIX + cell_id.to_s.gsub(/[^a-z0-9_]/i, '-') end
Private Class Methods
prepended(cls)
click to toggle source
# File lib/cell/schema.rb, line 42 def self.prepended(cls) cls.after_create :create_schema! cls.after_update_commit :update_schema!, if: :cell_id_changed? cls.after_destroy_commit :destroy_schema! end
Public Instance Methods
schema_name()
click to toggle source
# File lib/cell/schema.rb, line 15 def schema_name Schema.schema_name_for_cell_id(cell_id) end
Private Instance Methods
create_schema!()
click to toggle source
# File lib/cell/schema.rb, line 20 def create_schema! con = self.class.connection con.transaction do CloneSchema.clone_schema(Meta.prototype_schema, schema_name) CloneSchema.copy_schema_migrations_to(schema_name) end end
destroy_schema!()
click to toggle source
# File lib/cell/schema.rb, line 28 def destroy_schema! con = self.class.connection con.execute "DROP SCHEMA #{con.quote_schema_name(schema_name)} CASCADE" end
update_schema!()
click to toggle source
# File lib/cell/schema.rb, line 33 def update_schema! src, dst = cell_id_change_set src = self.class.schema_name_for_cell_id(src) con = self.class.connection con.execute "ALTER SCHEMA #{con.quote_schema_name(src)} RENAME " + "TO #{con.quote_schema_name(schema_name)}" end