Module: SimpleDataMigrations

Defined in:
lib/simple_data_migrations.rb,
lib/simple_data_migrations/entry.rb,
lib/simple_data_migrations/utils.rb,
lib/simple_data_migrations/railtie.rb,
lib/simple_data_migrations/version.rb,
lib/simple_data_migrations/concurrent_run.rb,
lib/generators/simple_data_migrations/install_generator.rb,
lib/generators/simple_data_migrations/template_generator.rb

Defined Under Namespace

Modules: ConcurrentRun, Utils Classes: Entry, InstallGenerator, Railtie, TemplateGenerator

Constant Summary collapse

VERSION =
"0.3.0"

Class Method Summary collapse

Class Method Details

.bootstrapObject



53
54
55
56
# File 'lib/simple_data_migrations.rb', line 53

def self.bootstrap
  attributes = Utils.script_files.map { |filename| {version: Utils.version(filename)} }
  Entry.insert_all!(attributes)
end

.runObject



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/simple_data_migrations.rb', line 27

def self.run
  ran_versions = Utils.ran_versions
  non_run_scripts = Utils.script_files.select do |filename|
    !ran_versions.include?(Utils.version(filename))
  end

  if ENV["VERSION"]
    non_run_scripts.select! { |filename| Utils.version(filename) == ENV["VERSION"] }
  end

  non_run_scripts.each do |filename|
    Thor::Shell::Basic.new.say("Running data migration: #{filename}")

    started_at = Process.clock_gettime(Process::CLOCK_MONOTONIC)
    load Utils.root.join(filename)
    duration = Process.clock_gettime(Process::CLOCK_MONOTONIC) - started_at

    measure = "%.4fs" % duration
    Thor::Shell::Basic.new.say("Finished in #{measure}")
  end
end

.run_with_lockObject



49
50
51
# File 'lib/simple_data_migrations.rb', line 49

def self.run_with_lock
  ConcurrentRun.with_advisory_lock { run }
end

.statusObject



12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/simple_data_migrations.rb', line 12

def self.status
  ran_versions = Utils.ran_versions
  files = Utils.script_files
  all_versions = ran_versions | files.map { |filename| Utils.version(filename) }

  result = all_versions.sort.map do |version|
    filename = files.find { |file| file.start_with?(version) }

    [ran_versions.include?(version) ? "up" : "down", version, Utils.humanize_filename(filename)]
  end

  result.prepend(["Status", "Version", "Name"])
  Thor::Shell::Basic.new.print_table(result)
end