Module: Globalize::ActiveRecord::Migration

Defined in:
lib/globalize/active_record/migration.rb

Instance Method Summary collapse

Instance Method Details

#create_translation_table!(fields) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/globalize/active_record/migration.rb', line 4

def create_translation_table!(fields)
  translated_attribute_names.each do |f|
    raise MigrationMissingTranslatedField, "Missing translated field #{f}" unless fields[f]
  end

  fields.each do |name, type|
    if translated_attribute_names.include?(name) && ![:string, :text].include?(type)
      raise BadMigrationFieldType, "Bad field type for #{name}, should be :string or :text"
    end
  end

  self.connection.create_table(translations_table_name) do |t|
    t.references table_name.sub(/^#{table_name_prefix}/, "").singularize
    t.string :locale
    fields.each do |name, type|
      t.column name, type
    end
    t.timestamps
  end

  self.connection.add_index(
    translations_table_name, 
    "#{table_name.sub(/^#{table_name_prefix}/, "").singularize}_id",
    :name => translation_index_name
  )
end

#drop_translation_table!Object



38
39
40
41
# File 'lib/globalize/active_record/migration.rb', line 38

def drop_translation_table!
  self.connection.remove_index(translations_table_name, :name => translation_index_name) rescue nil
  self.connection.drop_table(translations_table_name)
end

#translation_index_nameObject



31
32
33
34
35
36
# File 'lib/globalize/active_record/migration.rb', line 31

def translation_index_name
  require 'digest/sha1'
  # FIXME what's the max size of an index name?
  index_name = "index_#{translations_table_name}_on_#{self.table_name.singularize}_id"
  index_name.size < 50 ? index_name : "index_#{Digest::SHA1.hexdigest(index_name)}"
end