diff options
Diffstat (limited to 'lib/flowdock/git.rb')
-rw-r--r-- | lib/flowdock/git.rb | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/lib/flowdock/git.rb b/lib/flowdock/git.rb new file mode 100644 index 00000000000..f165ecfc1fa --- /dev/null +++ b/lib/flowdock/git.rb @@ -0,0 +1,67 @@ +# frozen_string_literal: true +require 'flowdock' +require 'flowdock/git/builder' + +module Flowdock + class Git + TokenError = Class.new(StandardError) + + DEFAULT_PERMANENT_REFS = [ + Regexp.new('refs/heads/master') + ].freeze + + class << self + def post(ref, from, to, options = {}) + Git.new(ref, from, to, options).post + end + end + + def initialize(ref, from, to, options = {}) + raise TokenError.new("Flowdock API token not found") unless options[:token] + + @ref = ref + @from = from + @to = to + @options = options + @token = options[:token] + @commit_url = options[:commit_url] + @diff_url = options[:diff_url] + @repo_url = options[:repo_url] + @repo_name = options[:repo_name] + @permanent_refs = options.fetch(:permanent_refs, DEFAULT_PERMANENT_REFS) + end + + # Send git push notification to Flowdock + def post + messages.each do |message| + Flowdock::Client.new(flow_token: @token).post_to_thread(message) + end + end + + def repo + @options[:repo] + end + + private + + def messages + Git::Builder.new(repo: repo, + ref: @ref, + before: @from, + after: @to, + commit_url: @commit_url, + branch_url: @branch_url, + diff_url: @diff_url, + repo_url: @repo_url, + repo_name: @repo_name, + permanent_refs: @permanent_refs, + tags: tags + ).to_hashes + end + + # Flowdock tags attached to the push notification + def tags + Array(@options[:tags]).map { |tag| CGI.escape(tag) } + end + end +end |