class NdrDevSupport::RakeCI::Redmine::TicketResolver
This class encapsulates Redmine
ticket logic
Constants
- CLOSE_REGEX
- MEGA_REGEX
Public Class Methods
new(api_key, hostname)
click to toggle source
# File lib/ndr_dev_support/rake_ci/redmine/ticket_resolver.rb, line 31 def initialize(api_key, hostname) @headers = { 'X-Redmine-API-Key' => api_key, 'Content-Type' => 'application/json' } @hostname = hostname end
Public Instance Methods
each_ticket_from(message) { |ticket, resolved| ... }
click to toggle source
# File lib/ndr_dev_support/rake_ci/redmine/ticket_resolver.rb, line 51 def each_ticket_from(message, &block) return enum_for(:each_ticket_from, message) unless block key_words = message.scan(MEGA_REGEX).flatten.compact action_groups = key_words.slice_when { |_l, r| r.to_i.to_s != r }.to_a action_groups.each do |group| resolved = group.any? { |word| word =~ CLOSE_REGEX } tickets = group.select { |word| word.to_i.to_s == word }.uniq tickets.each { |ticket| yield(ticket, resolved) } end end
process_commit(user, revision, message, tests_passed)
click to toggle source
# File lib/ndr_dev_support/rake_ci/redmine/ticket_resolver.rb, line 39 def process_commit(user, revision, message, tests_passed) resolved_tickets = [] each_ticket_from(message) do |ticket, resolved| update_ticket(message, user, revision, ticket, resolved, tests_passed) resolved_tickets << ticket if resolved && tests_passed end resolved_tickets end
update_payload(message, user, revision, ticket_closed, resolved, tests_passed)
click to toggle source
# File lib/ndr_dev_support/rake_ci/redmine/ticket_resolver.rb, line 65 def update_payload(message, user, revision, ticket_closed, resolved, tests_passed) if resolved && !ticket_closed && !tests_passed message += "\n\n*Automated tests did not pass successfully, so ticket status left unchanged.*" end payload = { notes: "_#{resolved ? 'Resolved' : 'Referenced'} by #{user} in #{revision}_:" \ "#{resolved ? message.gsub(CLOSE_REGEX, '+\1+') : message}" } payload[:status_id] = 3 if resolved && !ticket_closed && tests_passed payload end
Private Instance Methods
http()
click to toggle source
Connect lazily
# File lib/ndr_dev_support/rake_ci/redmine/ticket_resolver.rb, line 82 def http return @http if @http @http = Net::HTTP.new(@hostname, 443) @http.use_ssl = true @http end
ticket_closed?(ticket)
click to toggle source
# File lib/ndr_dev_support/rake_ci/redmine/ticket_resolver.rb, line 98 def ticket_closed?(ticket) response = http.send_request('GET', "/issues/#{ticket.to_i}.json", nil, @headers) JSON.parse(response.body)['issue']['status']['id'] == 5 end
update_ticket(message, user, revision, ticket, resolved, tests_passed)
click to toggle source
# File lib/ndr_dev_support/rake_ci/redmine/ticket_resolver.rb, line 89 def update_ticket(message, user, revision, ticket, resolved, tests_passed) payload = update_payload(message, user, revision, ticket_closed?(ticket), resolved, tests_passed) http.send_request('PUT', "/issues/#{ticket.to_i}.json", JSON.dump(issue: payload), @headers) end