class Ruboty::Replica::Actions::Replica
Public Instance Methods
call()
click to toggle source
# File lib/ruboty/replica/actions/replica.rb, line 5 def call replica = replicate! message.reply("replica: replicated #{message.robot.name} to #{replica['name']}") message.reply("replica: #{replica['git_url']}") if message[:new_owner] transfer!(replica, message[:new_owner]) end rescue => e message.reply("replica: failed, #{e.message}") end
Private Instance Methods
addon_config_var_keys()
click to toggle source
# File lib/ruboty/replica/actions/replica.rb, line 83 def addon_config_var_keys addons.map {|addon| addon['config_vars'] }.flatten end
addons()
click to toggle source
# File lib/ruboty/replica/actions/replica.rb, line 79 def addons @addons ||= heroku.addon.list(heroku_app_name) end
app()
click to toggle source
# File lib/ruboty/replica/actions/replica.rb, line 59 def app @app ||= heroku.app.info(heroku_app_name) end
app_config_vars()
click to toggle source
# File lib/ruboty/replica/actions/replica.rb, line 63 def app_config_vars @app_config_vars ||= heroku.config_var.info(heroku_app_name) end
app_formations()
click to toggle source
# File lib/ruboty/replica/actions/replica.rb, line 67 def app_formations heroku.formation.list(app['name']) end
heroku()
click to toggle source
# File lib/ruboty/replica/actions/replica.rb, line 95 def heroku require 'platform-api' @heroku ||= PlatformAPI.connect(heroku_api_key) end
heroku_api_key()
click to toggle source
# File lib/ruboty/replica/actions/replica.rb, line 104 def heroku_api_key ENV['HEROKU_API_KEY'] end
heroku_app_name()
click to toggle source
# File lib/ruboty/replica/actions/replica.rb, line 100 def heroku_app_name ENV['HEROKU_APP_NAME'] end
latest_release()
click to toggle source
# File lib/ruboty/replica/actions/replica.rb, line 87 def latest_release releases.sort_by {|r| r['version'] }.last end
releases()
click to toggle source
# File lib/ruboty/replica/actions/replica.rb, line 91 def releases @releases ||= heroku.release.list(heroku_app_name) end
replica_formations()
click to toggle source
# File lib/ruboty/replica/actions/replica.rb, line 71 def replica_formations app_formations.map {|f| {process: f['type'], quantity: f['quantity'], size: f['size']} } end
replicable_config_vars()
click to toggle source
# File lib/ruboty/replica/actions/replica.rb, line 75 def replicable_config_vars app_config_vars.except(*addon_config_var_keys, 'ROBOT_NAME', 'HEROKU_APP_NAME') end
replicate!()
click to toggle source
# File lib/ruboty/replica/actions/replica.rb, line 27 def replicate! replica = heroku.app.create({}) message.reply("replica: my name is #{replica['name']}") heroku.config_var.update( replica['name'], replicable_config_vars.merge({ 'HEROKU_APP_NAME' => replica['name'], 'ROBOT_NAME' => replica['name'] }) ) message.reply("replica: replicated env #{replicable_config_vars.keys.join(', ')}") addons.each do |addon| heroku.addon.create(replica['name'], {plan: addon['plan']['name']}) message.reply("replica: addon created #{addon['plan']['name']}") end heroku.release.create(replica['name'], slug: latest_release['slug']['id']) message.reply("replica: slug copied") heroku.formation.batch_update(replica['name'], {"updates" => replica_formations}) formation_text = replica_formations.map {|f| "#{f[:process]} (#{f[:size]}): #{f[:quantity]}" }.join(', ') message.reply("replica: #{formation_text}") replica end
transfer!(replica, recipient)
click to toggle source
# File lib/ruboty/replica/actions/replica.rb, line 19 def transfer!(replica, recipient) heroku.collaborator.create(replica['name'], user: recipient) message.reply("replica: collaborator #{recipient} added") heroku.app_transfer.create(app: replica['name'], recipient: recipient) message.reply("replica: #{recipient} is now owner of #{replica['name']}") end