class Toolshed::TicketTracking::Jira

Constants

USE_PROJECT_NAME

Attributes

client[RW]
default_pull_request_title_format[RW]
owner[RW]
project[RW]
ticket[RW]

Public Class Methods

create_instance(options={}) click to toggle source
# File lib/toolshed/ticket_tracking/jira.rb, line 93
def create_instance(options={})
  raise 'Unable to use Jira as project name was not supplied' unless (options.has_key?(:project))
  raise 'Unable to use Jira as ticket id was not supplied' unless (options.has_key?(:ticket_id))

  jira = Toolshed::TicketTracking::Jira.new({
    project:    options[:project],
    username:   Toolshed::TicketTracking::Jira.username,
    password:   Toolshed::TicketTracking::Jira.password,
    ticket_id:  options[:ticket_id]
  })
end
new(options={}) click to toggle source
# File lib/toolshed/ticket_tracking/jira.rb, line 12
def initialize(options={})
  username = (options[:username].nil?) ? Toolshed::Client.instance.ticket_tracker_username : options[:username]
  password = (options[:password].nil?) ? Toolshed::Client.instance.ticket_tracker_password : options[:password]

  self.owner      = Toolshed::Client.instance.ticket_tracker_owner
  self.default_pull_request_title_format = Toolshed::Client.instance.default_pull_request_title_format ||= "[summary]"

  self.client = JIRA::Client.new({
    username:     username,
    password:     password,
    site:         "https://#{self.owner}.atlassian.net",
    context_path: '',
    auth_type:    :basic,
    use_ssl:      true,
  })

  self.project = self.client.Project.find(options[:project])
  self.ticket = self.client.Issue.find(options[:ticket_id])
end
password() click to toggle source
# File lib/toolshed/ticket_tracking/jira.rb, line 83
def password
  return Toolshed::Client.instance.ticket_tracker_password unless Toolshed::Client.instance.ticket_tracker_password.nil?

  # prompt to ask for password
  system "stty -echo"
  puts "Jira password? "
  password = $stdin.gets.chomp.strip
  system "stty echo"
end
username() click to toggle source
# File lib/toolshed/ticket_tracking/jira.rb, line 75
def username
  return Toolshed::Client.instance.ticket_tracker_username unless Toolshed::Client.instance.ticket_tracker_username.nil?

  # prompt to ask for username
  puts "Jira username? "
  username = $stdin.gets.chomp.strip
end

Public Instance Methods

add_note(note_text) click to toggle source
# File lib/toolshed/ticket_tracking/jira.rb, line 32
def add_note(note_text)
  issue = self.ticket.comments.build
  issue.save({ 'body' => note_text })
end
attribute_value(attribute) click to toggle source
# File lib/toolshed/ticket_tracking/jira.rb, line 66
def attribute_value(attribute)
  self.ticket.send(attribute)
end
available_statuses() click to toggle source
# File lib/toolshed/ticket_tracking/jira.rb, line 44
def available_statuses
  self.client.Transition.all(issue: self.ticket)
end
default_title() click to toggle source
# File lib/toolshed/ticket_tracking/jira.rb, line 58
def default_title
  default_title_text = self.default_pull_request_title_format
  self.default_pull_request_title_format.scan(/(\[\w*\])/).each do |replacement_element|
    default_title_text = default_title_text.gsub(replacement_element.first.to_s, self.send(replacement_element.first.to_s.gsub("[", "").gsub("]", "")))
  end
  default_title_text
end
transition_status_id_by_status(status) click to toggle source
# File lib/toolshed/ticket_tracking/jira.rb, line 48
def transition_status_id_by_status(status)
  self.available_statuses.each do |transition_status|
    if (status == transition_status.name)
      return transition_status.id
    end
  end

  raise "Unable to find available status"
end
update_ticket_status(status, options={}) click to toggle source
# File lib/toolshed/ticket_tracking/jira.rb, line 37
def update_ticket_status(status, options={})
  available_statuses

  transition = self.ticket.transitions.build
  transition.save({ 'transition' => { "id" => transition_status_id_by_status(status) } })
end
url() click to toggle source
# File lib/toolshed/ticket_tracking/jira.rb, line 70
def url
  "https://#{self.owner}.atlassian.net/browse/#{self.ticket.key}"
end