Module: Skr::Core::DB::MigrationMethods

Defined in:
lib/skr/core/db/migration_helpers.rb

Instance Method Summary collapse

Instance Method Details

#create_skr_table(table_name, *args, &block) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/skr/core/db/migration_helpers.rb', line 64

def create_skr_table(table_name, *args, &block)
    definition = nil
    create_table( Skr::Core.config.table_prefix + table_name, *args ) do | td |
        # Thanks for the trick from the Foreigner gem!
        # in connection_adapters/abstract/schema_statements
        definition = td
        block.call(td) unless block.nil?
    end
    definition.skr_foreign_keys.each do |to_table, options |
        skr_add_foreign_key( table_name, to_table, options )
    end
    definition.skr_extra_indexes.each do | index_column, options |
        skr_add_index( table_name, index_column, options )
    end
end

#drop_skr_table(table_name, *args) ⇒ Object



115
116
117
# File 'lib/skr/core/db/migration_helpers.rb', line 115

def drop_skr_table( table_name, *args )
    drop_table( Skr::Core.config.table_prefix + table_name )
end

#remove_skr_index(table_name, column) ⇒ Object



119
120
121
# File 'lib/skr/core/db/migration_helpers.rb', line 119

def remove_skr_index( table_name, column )
    remove_index( Skr::Core.config.table_prefix + table_name, column )
end

#skr_add_foreign_key(table_name, to_table, options = {}) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/skr/core/db/migration_helpers.rb', line 91

def skr_add_foreign_key( table_name, to_table, options = {} )
    from_table = Skr::Core.config.table_prefix + table_name.to_s
    to_table   = Skr::Core.config.table_prefix + to_table.to_s
    # table_name #from_table = Skr::Core.config.table_prefix + table_name
    column  = options[:column] || "#{to_table.to_s.singularize}_id"
    foreign_key_name = options.key?(:name) ? options[:name].to_s : "#{from_table}_#{column}_fk"

    primary_key = options[:primary_key] || "id"
    dependency = case options[:dependent]
                 when :nullify then "ON DELETE SET NULL"
                 when :delete  then "ON DELETE CASCADE"
                 when :restrict then "ON DELETE RESTRICT"
                 else ""
                 end
    sql = "ALTER TABLE #{quote_table_name(from_table)} " +
          "ADD CONSTRAINT #{quote_column_name(foreign_key_name)} " +
          "FOREIGN KEY (#{quote_column_name(column)}) " +
          "REFERENCES #{quote_table_name( to_table )}(#{primary_key})"
    sql << " #{dependency}" if dependency.present?
    sql << " #{options[:options]}" if options[:options]

    execute(sql)
end

#skr_add_index(table_name, columns, options = {}) ⇒ Object



80
81
82
83
84
85
86
87
88
89
# File 'lib/skr/core/db/migration_helpers.rb', line 80

def skr_add_index( table_name, columns, options={} )
    table_name = Skr::Core.config.table_prefix + table_name.to_s
    if options[:function]
        unique = options[:unique] ? 'unique' : ''
        name   = table_name + 'indx_' + columns
        execute( "create #{unique} index #{name} on #{table_name}(#{options[:function]})" )
    else
        add_index( table_name, columns, options  )
    end
end