class SnowmanIO::Migration

Helpfull class to seed data and update DB

Public Class Methods

new() click to toggle source
# File lib/snowman-io/migration.rb, line 4
def initialize
  @db = Mongoid::Sessions.default
  @done_versions = @db[:snowman_io_schema].find.map { |c| c["version"] }
  @migration_versions = []
end

Public Instance Methods

migrate() click to toggle source
# File lib/snowman-io/migration.rb, line 10
def migrate
  SnowmanIO.logger.info "Migration start"

  migration "Set boundary template for all checks" do
    @db[:snowman_io_checks].find().update_all("$set" => {"template" => "boundary"})
  end

  migration "boundary => last_value_limit" do
    @db[:snowman_io_checks].find({template: "boundary"}).update_all("$set" => {"template" => "last_value_limit"})
  end

  migration "daily_datapoints => prev_day_datapoints_limit" do
    @db[:snowman_io_checks].find({template: "daily_datapoints"}).update_all("$set" => {"template" => "prev_day_datapoints_limit"})
  end

  migration "set owner to each check" do
    if user = @db[:snowman_io_users].find.first
      @db[:snowman_io_checks].find.update_all("$set" => {"user_id" => user["_id"]})
    end
  end

  migration "users timestamps" do
    @db[:snowman_io_users].find.update_all("$set" => {"created_at" => Time.now})
    @db[:snowman_io_users].find.update_all("$set" => {"updated_at" => Time.now})
  end

  migration "users daily_report" do
    @db[:snowman_io_users].find.update_all("$set" => {"daily_report" => true})
  end

  migration "users invite_token" do
    @db[:snowman_io_users].find.update_all("$set" => {"invite_token" => ""})
  end

  migration "users invite_send_count" do
    @db[:snowman_io_users].find.update_all("$set" => {"invite_send_count" => 0})
  end

  migration "users status" do
    @db[:snowman_io_users].find.update_all("$set" => {"status" => "wait_invite"})
    @db[:snowman_io_users].where(invite_token: "").update_all("$set" => {"status" => "active"})
  end

  migration "users name" do
    @db[:snowman_io_users].where(status: "active").each do |record|
      @db[:snowman_io_users].where(_id: record["_id"]).update_all("$set" => {"name" => record["email"]})
    end
  end

  migration "remove next_report_date setting" do
    @db[:snowman_io_settings].where(name: "next_report_date").remove_all
  end

  migration "user daily_report" do
    @db[:snowman_io_users].find.update_all("$unset" => {"daily_report" => 1})
  end

  migration "add sys app" do
    @db[:snowman_io_apps].find.update_all("$set" => {"system" => false})
    @db[:snowman_io_apps].insert(name: "Snowman", system: true)
  end

  SnowmanIO.logger.info "Migration done"
end

Private Instance Methods

migration(version) { || ... } click to toggle source
# File lib/snowman-io/migration.rb, line 77
def migration(version, &block)
  if @migration_versions.include?(version)
    raise "Duplicate migration version '#{version}'"
  end
  @migration_versions.push version

  return if @done_versions.include?(version)

  SnowmanIO.logger.info "Apply: #{version} ..."
  yield
  @db[:snowman_io_schema].insert(version: version)
  SnowmanIO.logger.info "Apply: #{version} ... OK"
end