module Gumboot::Strap

Public Instance Methods

clean_logs() click to toggle source
# File lib/gumboot/strap.rb, line 73
def clean_logs
  message 'Removing old tempfiles'
  system 'rm -f log/*'
end
clean_tempfiles() click to toggle source
# File lib/gumboot/strap.rb, line 78
def clean_tempfiles
  message 'Removing old tempfiles'
  system 'rm -rf tmp/cache'
end
client() click to toggle source
# File lib/gumboot/strap.rb, line 8
def client
  file = File.expand_path('~/.my.cnf')
  @client ||= Mysql2::Client.new(default_file: file,
                                 default_group: 'client',
                                 host: '127.0.0.1')
end
create_and_grant_user(client, database, username, password) click to toggle source
# File lib/gumboot/strap.rb, line 48
def create_and_grant_user(client, database, username, password)
  client.query("CREATE USER IF NOT EXISTS '#{client.escape(username)}'" \
               "@'localhost' IDENTIFIED BY '#{client.escape(password)}';")
  client.query("GRANT ALL PRIVILEGES ON `#{database}`.* " \
               "TO '#{client.escape(username)}'@'localhost'")
end
ensure_activerecord_databases(environments) click to toggle source
# File lib/gumboot/strap.rb, line 15
def ensure_activerecord_databases(environments)
  environments.each do |env|
    message "Preparing #{env} database"

    db = ActiveRecord::Base.configurations[env]

    ensure_database(db)
    ensure_database_user(db)
  end
end
ensure_database(dbase) click to toggle source
# File lib/gumboot/strap.rb, line 26
def ensure_database(dbase)
  adapter, database = dbase.values_at('adapter', 'database')
  raise('Only supports mysql2 adapter') unless adapter == 'mysql2'

  Rails.logger.info "Ensuring database `#{database}` exists"
  client.query("CREATE DATABASE IF NOT EXISTS `#{database}` " \
               'CHARACTER SET utf8 COLLATE utf8_bin')
end
ensure_database_user(dbase) click to toggle source
# File lib/gumboot/strap.rb, line 35
def ensure_database_user(dbase)
  adapter, database, username, password =
    dbase.values_at('adapter', 'database', 'username', 'password')

  raise('Only supports mysql2 adapter') unless adapter == 'mysql2'

  Rails.logger.info(
    "Ensuring access to `#{database}` for #{username} user is granted"
  )

  create_and_grant_user(client, database, username, password)
end
install_dist_template(files) click to toggle source
# File lib/gumboot/strap.rb, line 105
def install_dist_template(files)
  files.each do |file|
    src = "config/#{file}.dist"
    dest = "config/#{file}"

    raise("Missing dist config file: #{src}") unless File.exist?(src)

    next if File.exist?(dest)

    FileUtils.copy(src, dest)
  end
end
load_seeds() click to toggle source
# File lib/gumboot/strap.rb, line 67
def load_seeds
  message 'Loading seeds'

  system 'rake db:seed'
end
maintain_activerecord_schema() click to toggle source
# File lib/gumboot/strap.rb, line 55
def maintain_activerecord_schema
  message 'Loading database schema'

  if ActiveRecord::Base.connection.execute('SHOW TABLES').count.zero?
    Rails.logger.info 'No tables exist yet, loading schema'
    system 'rake db:schema:load'
  end

  Rails.logger.info 'Running migrations'
  system 'rake db:migrate'
end
update_local_configuration(files) click to toggle source
# File lib/gumboot/strap.rb, line 95
def update_local_configuration(files)
  files.each do |file|
    src = "config/#{file}.dist"
    raise("Not a .yml file: #{file}") unless file.end_with?('.yml')
    raise("Missing dist config file: #{src}") unless File.exist?(src)

    merge_config(src, "config/#{file}")
  end
end

Private Instance Methods

merge_config(src, dest) click to toggle source
# File lib/gumboot/strap.rb, line 128
def merge_config(src, dest)
  new_config = safe_load(File.read(src))
  old_config = File.exist?(dest) ? safe_load(File.read(dest)) : {}

  File.open(dest, 'w') do |f|
    f.write(YAML.dump(new_config.deep_merge(old_config)))
  end
end
message(msg) click to toggle source
# File lib/gumboot/strap.rb, line 120
def message(msg)
  Rails.logger.info "\n== #{msg} =="
end
safe_load(yaml) click to toggle source
# File lib/gumboot/strap.rb, line 124
def safe_load(yaml)
  YAML.safe_load(yaml, [Symbol])
end