Class: I18n::Migrations::MigrationFactory

Inherits:
Object
  • Object
show all
Defined in:
lib/i18n/migrations/migration_factory.rb

Defined Under Namespace

Classes: Translations

Instance Method Summary collapse

Constructor Details

#initialize(migration_dir) ⇒ MigrationFactory

Returns a new instance of MigrationFactory.



7
8
9
# File 'lib/i18n/migrations/migration_factory.rb', line 7

def initialize(migration_dir)
  @migration_dir = migration_dir
end

Instance Method Details

#all_versionsObject



11
12
13
# File 'lib/i18n/migrations/migration_factory.rb', line 11

def all_versions
  Dir[@migration_dir + '/*.rb'].map { |name| File.basename(name).gsub('.rb', '') }
end

#get_migration(version:) ⇒ Object



15
16
17
# File 'lib/i18n/migrations/migration_factory.rb', line 15

def get_migration(version:)
  File.read(migration_file(version: version))
end

#migration_file(version:) ⇒ Object



19
20
21
# File 'lib/i18n/migrations/migration_factory.rb', line 19

def migration_file(version:)
  File.join(@migration_dir, "#{version}.rb")
end

#play_migration(version:, locale:, data:, notes:, dictionary:, direction:) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/i18n/migrations/migration_factory.rb', line 23

def play_migration(version:, locale:, data:, notes:, dictionary:, direction:)
  filename = File.join(@migration_dir, "#{version}.rb")
  require filename

  raise("Can't parse version: #{version}") unless version =~ /^(\d{12})_(.*)/
  migration_class_name = "#{$2.camelcase}#{$1}"

  translations = Translations.new(data: data, notes: notes)
  migration = begin
    migration_class_name.constantize.new(locale_code: locale,
                                         translations: translations,
                                         dictionary: dictionary,
                                         direction: direction)
  rescue
    raise "Couldn't load migration #{migration_class_name} in #{filename}"
  end

  migration.change
end