class Terjira::Client::Issue

Public Class Methods

all(options = {}) click to toggle source
# File lib/terjira/client/issue.rb, line 9
def all(options = {})
  return resource.all if options.blank?
  max_results = options.delete(:max_results) || 500
  jql(build_jql(options), max_results: max_results)
end
all_epic_issues(epic) click to toggle source
# File lib/terjira/client/issue.rb, line 15
def all_epic_issues(epic)
  resp = agile_api_get("epic/#{epic.key}/issue")
  resp["issues"].map { |issue| build(issue) }
end
assign(issue, assignee) click to toggle source
# File lib/terjira/client/issue.rb, line 33
def assign(issue, assignee)
  body = { name: assignee.key_value }.to_json
  api_put("issue/#{issue.key_value}/assignee", body)
end
attach_file(issue, file) click to toggle source
# File lib/terjira/client/issue.rb, line 38
def attach_file(issue, file)
  attachment = JIRA::Resource::Attachment.new(client, issue: find(issue))
  attachment.save!('file' => file)
  find(issue)
end
create(options = {}) click to toggle source
# File lib/terjira/client/issue.rb, line 54
def create(options = {})
  params = extract_to_fields_params(options)
  resp = api_post 'issue', params.to_json
  find(resp['id'])
end
delete(issue) click to toggle source
# File lib/terjira/client/issue.rb, line 29
def delete(issue)
  api_delete("issue/#{issue.key_value}")
end
edit_comment(issue, comment_id, message) click to toggle source
# File lib/terjira/client/issue.rb, line 49
def edit_comment(issue, comment_id, message)
  api_put("issue/#{issue.key_value}/comment/#{comment_id}", { body: message }.to_json)
  find(issue)
end
find(issue, options = {}) click to toggle source
# File lib/terjira/client/issue.rb, line 20
def find(issue, options = {})
  resp = agile_api_get("issue/#{issue.key_value}", options)
  build(resp)
end
trans(issue, options = {}) click to toggle source
# File lib/terjira/client/issue.rb, line 67
def trans(issue, options = {})
  params = extract_to_transition_param(options)
  params.merge!(extract_to_update_params(options))
  params.merge!(extract_to_fields_params(options))
  api_post "issue/#{issue.key_value}/transitions", params.to_json
  find(issue)
end
update(issue, options = {}) click to toggle source
# File lib/terjira/client/issue.rb, line 60
def update(issue, options = {})
  params = extract_to_update_params(options)
  params.merge!(extract_to_fields_params(options))
  api_put "issue/#{issue.key_value}", params.to_json
  find(issue)
end
write_comment(issue, message) click to toggle source
# File lib/terjira/client/issue.rb, line 44
def write_comment(issue, message)
  api_post("issue/#{issue.key_value}/comment", { body: message }.to_json)
  find(issue)
end

Private Class Methods

convert_param_key_value_hash(resource) click to toggle source
# File lib/terjira/client/issue.rb, line 111
def convert_param_key_value_hash(resource)
  if resource.respond_to? :key_with_key_value
    okey, ovalue = resource.key_with_key_value
    { okey => ovalue }
  elsif resource =~ /^\d+$/
    { id: resource.key_value }
  else
    { name: resource.key_value }
  end
end
extract_to_fields_params(options = {}) click to toggle source
# File lib/terjira/client/issue.rb, line 92
def extract_to_fields_params(options = {})
  opts = options.dup
  params = {}

  custom_fields = options.keys.select { |k| k.to_s =~ /^customfield/ }

  (custom_fields + [:summary, :description]).each_entry do |k, _v|
    params[k] = opts.delete(k) if opts.key?(k)
  end

  [:project, :parent].each do |resource|
    params[resource] = { key: opts.delete(resource).key_value } if opts.key?(resource)
  end

  opts.each { |k, v| params[k] = convert_param_key_value_hash(v) }

  { fields: params }
end
extract_to_transition_param(options = {}) click to toggle source
# File lib/terjira/client/issue.rb, line 85
def extract_to_transition_param(options = {})
  transition = options.delete(:status)
  transition ||= options.delete(:transition)
  return unless transition
  { transition: convert_param_key_value_hash(transition) }
end
extract_to_update_params(options = {}) click to toggle source
# File lib/terjira/client/issue.rb, line 77
def extract_to_update_params(options = {})
  params = {}
  if comment = options.delete(:comment)
    params[:comment] = [{ add: { body: comment } }]
  end
  { update: params }
end