# frozen_string_literal: true require 'lolcommits/plugin/base' require 'lolcommits/cli/launcher' require 'lolcommits/flowdock/client' require 'readline' module Lolcommits module Plugin class Flowdock < Base ## # Prompts the user to configure plugin options. Options are enabled # (true/false), a Flowdock Personal API token, and the Flowdock # organization and flow names. # # @return [Hash] a hash of configured plugin options # def configure_options! options = super if options[:enabled] puts "\nCopy (or create) your Flowdock personal API token (paste it below)" open_url("https://flowdock.com/account/tokens") print "API token: " access_token = gets.strip flowdock.access_token = access_token organization = configure_organization flow = configure_flow raise Interrupt unless flow && organization options.merge!( access_token: access_token, flow: flow, organization: organization ) end options end ## # Post-capture hook, runs after lolcommits captures a snapshot. Posts the # lolcommit image (as a file message) to the configured Flowdock flow. # # @return [Hash] JSON response object (newly created message hash) # @return [Nil] if an error occurs # def run_capture_ready print "Posting to Flowdock ... " message = flowdock.create_message( organization: configuration[:organization], flow: configuration[:flow], params: { event: 'file', content: File.new(runner.main_image), tags: %w(lolcommits) } ) print "done!\n" message rescue Lolcommits::Flowdock::RequestFailed => e print "failed :( (try again with --debug)\n" log_error(e, "ERROR: POST to Flowdock FAILED - #{e.message}") nil end private def configure_organization orgs = flowdock.organizations if orgs.empty? puts "\nNo Flowdock organizations found, please check your account at flowdock.com" nil else puts "\nEnter your Flowdock organization name (tab to autocomplete, Ctrl+c cancels)" prompt_autocomplete_hash("Organization: ", orgs, value: "parameterized_name") end end def configure_flow flows = flowdock.flows if flows.empty? puts "\nNo Flowdock flows found, please check your account at flowdock.com" nil else puts "\nEnter your Flowdock flow name (tab to autocomplete, Ctrl+c cancels)" prompt_autocomplete_hash("Flow: ", flows, value: "parameterized_name") end end def open_url(url) Lolcommits::CLI::Launcher.open_url(url) end def flowdock @flowdock ||= Lolcommits::Flowdock::Client.new( configuration[:access_token] ) end end end end