Module: ActiveRecord::ConnectionAdapters::SchemaStatements

Defined in:
lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements.rb

Instance Method Summary collapse

Instance Method Details

#add_content_column(table_name, column_name, type, options = {}) ⇒ Object

Adds a column to both the primary and versioned table. Save needing two calls. This is only needed if your content block is versioned, otherwise add_column will work just fine.



76
77
78
79
# File 'lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements.rb', line 76

def add_content_column(table_name, column_name, type, options={})
  add_column table_name, column_name, type, options
  add_column versioned_(table_name), column_name, type, options
end

#cms_(table_name) ⇒ Object

Sticks :cms_ in front of a table name.



6
7
8
# File 'lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements.rb', line 6

def cms_(table_name)
  "cms_#{table_name}"
end

#create_content_table(table_name, options = {}, &block) ⇒ Object

Create a table and its versioned counterpart. Example:

create_content_table :cms_events
=> :cms_events
=> :cms_event_versions

Parameters:

  • table_name (Symbol)

    The namespaced versioned of the content table (i.e. :cms_events or :bcms_news_articles)

  • options (defaults to: {})
  • :versioned (Hash)

    a customizable set of options

  • :name (Hash)

    a customizable set of options



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements.rb', line 19

def create_content_table(table_name, options={}, &block)
  defaults = {
      versioned: true,
      name: true
  }
  options = defaults.merge(options)

  versioned = options.delete(:versioned)
  named = options.delete(:name)

  create_table table_name, options, &block
  change_table table_name do |td|
    if versioned
      td.integer :version
      td.integer :lock_version, :default => 0
    end
    td.string :name if !column_exists?(table_name.to_sym, :name) && named
    td.boolean :published, :default => false
    td.boolean :deleted, :default => false
    td.boolean :archived, :default => false
    td.integer :created_by_id
    td.integer :updated_by_id
    td.timestamps unless column_exists?(table_name.to_sym, :created_at)
  end

  if versioned
    table_name_versioned = versioned_(table_name)
    create_table table_name_versioned, options, &block
    change_table table_name_versioned do |vt|
      vt.integer :original_record_id
      vt.integer :version
      vt.string :name if !column_exists?(table_name_versioned, :name) && named
      vt.boolean :published, :default => false
      vt.boolean :deleted, :default => false
      vt.boolean :archived, :default => false
      vt.string :version_comment
      vt.integer :created_by_id
      vt.integer :updated_by_id
      vt.timestamps unless column_exists?(table_name_versioned, :created_at)
    end
  end

end

#drop_content_table(table_name) ⇒ Object



63
64
65
66
# File 'lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements.rb', line 63

def drop_content_table(table_name)
  drop_table versioned_(table_name)
  drop_table table_name
end

#remove_content_column(table_name, column_name) ⇒ Object



81
82
83
84
# File 'lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements.rb', line 81

def remove_content_column(table_name, column_name)
  remove_column table_name, column_name
  remove_column versioned_(table_name), column_name
end

#rename_content_column(table_name, old_name, new_name) ⇒ Object

Rename a column for both its



69
70
71
72
# File 'lib/cms/extensions/active_record/connection_adapters/abstract/schema_statements.rb', line 69

def rename_content_column(table_name, old_name, new_name)
  rename_column table_name, old_name, new_name
  rename_column versioned_(table_name), old_name, new_name
end