lib/lita/handlers/digitalocean.rb in lita-digitalocean-0.0.1 vs lib/lita/handlers/digitalocean.rb in lita-digitalocean-1.0.0

- old
+ new

@@ -1,157 +1,10 @@ -require "digital_ocean" - module Lita module Handlers class Digitalocean < Handler def self.default_config(config) config.client_id = nil config.api_key = nil - end - - private - - def self.do_route(regexp, route_name, help) - route(regexp, route_name, command: true, restrict_to: :digitalocean_admins, help: help) - end - - public - - do_route /^do\s+ssh\s+keys?\s+add\s+.+$/i, :ssh_keys_add, { - t("help.ssh_keys.add_key") => t("help.ssh_keys.add_value") - } - - do_route /^do\s+ssh\s+keys?\s+delete\s+(\d+)$/i, :ssh_keys_delete, { - t("help.ssh_keys.delete_key") => t("help.ssh_keys.delete_value") - } - - do_route /^do\s+ssh\s+keys?\s+edit\s+(\d+)\s+.+$/i, :ssh_keys_edit, { - t("help.ssh_keys.edit_key") => t("help.ssh_keys.edit_value") - } - - do_route /^do\s+ssh\s+keys?\s+list$/i, :ssh_keys_list, { - t("help.ssh_keys.list_key") => t("help.ssh_keys.list_value") - } - - do_route /^do\s+ssh\s+keys?\s+show\s+(\d+)$/i, :ssh_keys_show, { - t("help.ssh_keys.show_key") => t("help.ssh_keys.show_value"), - } - - def ssh_keys_add(response) - name, public_key = response.args[3..4] - - unless name && public_key - return response.reply("#{t('format')}: #{t('help.ssh_keys.add_key')}") - end - - do_response = do_call(response) do |client| - client.ssh_keys.add(name: name, ssh_pub_key: public_key) - end or return - - key = do_response.ssh_key - response.reply( - t("ssh_keys.add.created", message: "#{key.id} (#{key.name}): #{key.ssh_pub_key}") - ) - end - - def ssh_keys_delete(response) - key_id = response.matches[0][0] - - do_call(response) do |client| - client.ssh_keys.delete(key_id) - end or return - - response.reply(t("ssh_keys.delete.deleted", key_id: key_id)) - end - - def ssh_keys_edit(response) - args = extract_named_args(response.args, :name, :public_key) - - if args[:public_key] - args[:ssh_pub_key] = args.delete(:public_key) - end - - do_response = do_call(response) do |client| - client.ssh_keys.edit(response.matches[0][0], args) - end or return - - key = do_response.ssh_key - response.reply( - t("ssh_keys.edit.updated", message: "#{key.id} (#{key.name}): #{key.ssh_pub_key}") - ) - end - - def ssh_keys_list(response) - do_response = do_call(response) do |client| - client.ssh_keys.list - end or return - - if do_response.ssh_keys.empty? - response.reply(t("ssh_keys.list.empty")) - else - do_response.ssh_keys.each do |key| - response.reply("#{key.id} (#{key.name})") - end - end - end - - def ssh_keys_show(response) - do_response = do_call(response) do |client| - client.ssh_keys.show(response.matches[0][0]) - end or return - - key = do_response.ssh_key - response.reply("#{key.id} (#{key.name}): #{key.ssh_pub_key}") - end - - private - - def api_key - config.api_key - end - - def client - @client ||= ::DigitalOcean::API.new(client_id: client_id, api_key: api_key) - end - - def client_id - config.client_id - end - - def config - Lita.config.handlers.digitalocean - end - - def do_call(response) - unless api_key && client_id - response.reply(t("credentials_missing")) - return - end - - do_response = yield client - - if do_response.status != "OK" - response.reply(t("error", message: do_response.message)) - return - end - - do_response - end - - def extract_named_args(args, *keys) - args.inject({}) do |hash, arg| - key, value = arg.split("=", 2) - - if value - normalized_key = key.downcase.to_sym - - if keys.include?(normalized_key) - hash[normalized_key] = value.gsub(/\A["']|["']\Z/, "") - end - end - - hash - end end end Lita.register_handler(Digitalocean) end