Module: ActiveProject::Adapters::Jira::Transitions
- Included in:
- ActiveProject::Adapters::JiraAdapter
- Defined in:
- lib/active_project/adapters/jira/transitions.rb
Instance Method Summary collapse
-
#transition_issue(issue_id_or_key, target_status_name_or_id, options = {}) ⇒ Boolean
Transitions a Jira issue to a new status by finding and executing the appropriate workflow transition.
Instance Method Details
#transition_issue(issue_id_or_key, target_status_name_or_id, options = {}) ⇒ Boolean
Transitions a Jira issue to a new status by finding and executing the appropriate workflow transition.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/active_project/adapters/jira/transitions.rb', line 16 def transition_issue(issue_id_or_key, target_status_name_or_id, = {}) transitions_path = "/rest/api/3/issue/#{issue_id_or_key}/transitions" begin response_data = make_request(:get, transitions_path) rescue NotFoundError raise NotFoundError, "Jira issue '#{issue_id_or_key}' not found." end available_transitions = response_data["transitions"] || [] target_transition = available_transitions.find do |t| t["id"] == target_status_name_or_id.to_s || t.dig("to", "name")&.casecmp?(target_status_name_or_id.to_s) || t.dig("to", "id") == target_status_name_or_id.to_s end unless target_transition available_names = available_transitions.map { |t| t.dig("to", "name") }.compact.join(", ") raise NotFoundError, "Target transition '#{target_status_name_or_id}' not found for issue " \ "'#{issue_id_or_key}'. Available: [#{available_names}]" end payload = { transition: { id: target_transition["id"] } } if [:resolution] payload[:fields] ||= {} payload[:fields][:resolution] = [:resolution] end if [:comment] && ![:comment].empty? payload[:update] ||= {} payload[:update][:comment] ||= [] payload[:update][:comment] << { add: { body: { type: "doc", version: 1, content: [ { type: "paragraph", content: [ { type: "text", text: [:comment] } ] } ] } } } end make_request(:post, transitions_path, payload.to_json) true rescue Faraday::Error => e handle_faraday_error(e) raise ApiError.new("Failed to transition Jira issue '#{issue_id_or_key}'", original_error: e) end |