Class: Ticket::Replicator::TicketStatusTransitioner
- Inherits:
-
Object
- Object
- Ticket::Replicator::TicketStatusTransitioner
- Defined in:
- lib/ticket/replicator/ticket_status_transitioner.rb
Overview
Assumption: The ticket workflow allows for transitioning to any other status.
Constant Summary collapse
- StatusTransitionerError =
Class.new(StandardError)
Instance Attribute Summary collapse
-
#ticket ⇒ Object
readonly
Returns the value of attribute ticket.
Instance Method Summary collapse
- #available_transitions ⇒ Object
- #build_error_message(message) ⇒ Object
- #http_headers ⇒ Object
-
#initialize(ticket) ⇒ TicketStatusTransitioner
constructor
A new instance of TicketStatusTransitioner.
- #tool ⇒ Object
- #transition_payload_for(status) ⇒ Object
- #transition_to(status) ⇒ Object
- #transition_to_not_done ⇒ Object
Constructor Details
#initialize(ticket) ⇒ TicketStatusTransitioner
Returns a new instance of TicketStatusTransitioner.
11 12 13 |
# File 'lib/ticket/replicator/ticket_status_transitioner.rb', line 11 def initialize(ticket) @ticket = ticket end |
Instance Attribute Details
#ticket ⇒ Object (readonly)
Returns the value of attribute ticket.
9 10 11 |
# File 'lib/ticket/replicator/ticket_status_transitioner.rb', line 9 def ticket @ticket end |
Instance Method Details
#available_transitions ⇒ Object
48 49 50 51 52 |
# File 'lib/ticket/replicator/ticket_status_transitioner.rb', line 48 def available_transitions response = tool.jira_client.get(tool.jira_url("/rest/api/2/issue/#{ticket.key}?expand=transitions")) JSON.parse(response.body).fetch("transitions") end |
#build_error_message(message) ⇒ Object
44 45 46 |
# File 'lib/ticket/replicator/ticket_status_transitioner.rb', line 44 def () + " in #{available_transitions.collect { |t| "#{t["name"]} => #{t["to"]["name"]}" }.inspect}." end |
#http_headers ⇒ Object
54 55 56 57 58 |
# File 'lib/ticket/replicator/ticket_status_transitioner.rb', line 54 def http_headers { "Content-Type" => "application/json" } end |
#tool ⇒ Object
15 16 17 |
# File 'lib/ticket/replicator/ticket_status_transitioner.rb', line 15 def tool @tool ||= ticket.jira_auto_tool end |
#transition_payload_for(status) ⇒ Object
37 38 39 40 41 42 |
# File 'lib/ticket/replicator/ticket_status_transitioner.rb', line 37 def transition_payload_for(status) transition = available_transitions.find { |transition| transition.fetch("to").fetch("name") == status } or raise StatusTransitionerError, ("No transition found for #{status.inspect}") { transition: { id: transition["id"] } }.to_json end |
#transition_to(status) ⇒ Object
19 20 21 22 23 24 25 |
# File 'lib/ticket/replicator/ticket_status_transitioner.rb', line 19 def transition_to(status) return if status == ticket.status ticket.jira_client.post(ticket.jira_auto_tool.jira_url("/rest/api/2/issue/#{ticket.key}/transitions"), transition_payload_for(status), http_headers) end |
#transition_to_not_done ⇒ Object
27 28 29 30 31 32 33 34 35 |
# File 'lib/ticket/replicator/ticket_status_transitioner.rb', line 27 def transition_to_not_done not_done_status = available_transitions.find do |transition| transition.fetch("to").fetch("statusCategory").fetch("key") != "done" end or raise StatusTransitionerError, ("No non-done transition found") transition_to(not_done_status.fetch("to").fetch("name")) end |