class Fourchette::Pgbackups

Public Class Methods

new() click to toggle source
# File lib/fourchette/pgbackups.rb, line 5
def initialize
  @heroku = Fourchette::Heroku.new
end

Public Instance Methods

copy(from, to) click to toggle source
# File lib/fourchette/pgbackups.rb, line 9
def copy(from, to)
  ensure_pgbackups_is_present(from)
  ensure_pgbackups_is_present(to)

  from_url, from_name = pg_details_for(from)
  to_url, to_name = pg_details_for(to)

  @client =  Heroku::Client::Pgbackups.new pgbackup_url(from) + '/api'
  @client.create_transfer(from_url, from_name, to_url, to_name)
end

Private Instance Methods

ensure_pgbackups_is_present(heroku_app_name) click to toggle source
# File lib/fourchette/pgbackups.rb, line 22
def ensure_pgbackups_is_present(heroku_app_name)
  unless existing_backups?(heroku_app_name)
    logger.info "Adding pgbackups to #{heroku_app_name}"
    @heroku.client.addon.create(heroku_app_name, { plan: 'pgbackups' })
  end
end
existing_backups?(heroku_app_name) click to toggle source
# File lib/fourchette/pgbackups.rb, line 29
def existing_backups?(heroku_app_name)
  @heroku.client.addon.list(heroku_app_name).any? do |addon|
    addon['name'] == 'pgbackups'
  end
end
pg_details_for(app_name) click to toggle source
# File lib/fourchette/pgbackups.rb, line 35
def pg_details_for(app_name)
  @heroku.config_vars(app_name).each do |key, value|
    if key.start_with?('HEROKU_POSTGRESQL_') && key.end_with?('_URL')
      return [value, key]
    end
  end
end
pgbackup_url(app_name) click to toggle source
# File lib/fourchette/pgbackups.rb, line 43
def pgbackup_url(app_name)
  @heroku.config_vars(app_name).each do |k, v|
    return v if k == 'PGBACKUPS_URL'
  end
end