lib/fourchette/pgbackups.rb in fourchette-0.1.2 vs lib/fourchette/pgbackups.rb in fourchette-0.1.3

- old
+ new

@@ -1,39 +1,48 @@ -require "heroku/client/pgbackups" +require 'heroku/client/pgbackups' class Fourchette::Pgbackups include Fourchette::Logger def initialize @heroku = Fourchette::Heroku.new end - def copy from, to + 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 = Heroku::Client::Pgbackups.new pgbackup_url(from) + '/api' @client.create_transfer(from_url, from_name, to_url, to_name) end private - def ensure_pgbackups_is_present heroku_app_name - unless @heroku.client.addon.list(heroku_app_name).select { |addon| addon['name'] == 'pgbackups' }.any? + + def ensure_pgbackups_is_present(heroku_app_name) + unless existing_backups? logger.info "Adding pgbackups to #{heroku_app_name}" @heroku.client.addon.create(heroku_app_name, { plan: 'pgbackups' }) end end - def pg_details_for app_name + def existing_backups? + @heroku.client.addon.list(heroku_app_name).select do |addon| + addon['name'] == 'pgbackups' + end.any? + end + + def pg_details_for(app_name) @heroku.config_vars(app_name).each do |key, value| - return [value, key] if key.start_with?('HEROKU_POSTGRESQL_') && key.end_with?('_URL') + if key.start_with?('HEROKU_POSTGRESQL_') && key.end_with?('_URL') + return [value, key] + end end end - def pgbackup_url app_name + def pgbackup_url(app_name) @heroku.config_vars(app_name).each do |k, v| return v if k == 'PGBACKUPS_URL' end end -end \ No newline at end of file +end