Sha256: a96e36262e172fbb8ebd73fd4e36e5dc6d2a0e02823f9172bf59928581cae7fa

Contents?: true

Size: 1.13 KB

Versions: 2

Compression:

Stored size: 1.13 KB

Contents

module Capistrano
  module Jira
    class IssueTransiter
      attr_reader :issue

      def initialize(issue)
        @issue = issue
      end

      def transit
        validate_transition
        execute
      end

      private

      def transition
        @transition ||= issue.transitions.all.find do |t|
          t.attrs['name'].casecmp(fetch(:jira_transition_name)).zero?
        end
      end

      def validate_transition
        return if transition
        raise TransitionError,
              "Transition #{fetch(:jira_transition_name)} not available"
      end

      def execute
        issue.transitions.build.save!(transition_hash)
      rescue JIRA::HTTPError => e
        raise TransitionError, error_message(e)
      end

      def transition_hash
        hash = { transition: { id: transition.id } }
        hash.merge(comment_hash) if fetch(:jira_comment_on_transition)
        hash
      end

      def comment_hash
        { update:
          { comment: [
            { add:
               {
                 body: 'Issue transited automatically during deployment.'
               } }
          ] } }
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
capistrano-jira-0.3.1 lib/capistrano/jira/issue_transiter.rb
capistrano-jira-0.2.0 lib/capistrano/jira/issue_transiter.rb