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