class Jira

Constants

AddMyWatch
BASE_PATH
Mine
NotWatching
ServerInfo
WatchCategory

Public Instance Methods

add_my_watch() { || ... } click to toggle source
# File lib/rct_jira.rb, line 274
def add_my_watch
  user = sget('username')
  password = sget('password')
  project = sget('project')
  key = sget('key')

  ssettmp(SERVER_PROTOCOL, 'https')
  ssettmp(REQ_METHOD, 'POST')
  ssettmp(REQ_AUTH_TYPE, REQ_AUTH_TYPE_BASIC)
  ssettmp(REQ_AUTH_NAME, user)
  ssettmp(REQ_AUTH_PWD, password)
  ssettmp(REQ_PATH, "#{BASE_PATH}/issue/#{key}/watchers")
  ssettmp(REQ_BODY, "\"#{user}\"")

  headers = Hash.new()
  headers['Content-type'] = 'application/json'
  ssettmp(REQ_HEADERS, headers)

  result = yield

  if (result.status == 204)
    if (is_cli)
      sset(CLI_OUTPUT, "Added #{user} as a watcher to #{key}")
    end
  else
    result.add_error("Unable to add #{user} to #{key}")
  end

  return result
end
cli() click to toggle source
# File lib/rct_jira.rb, line 57
def cli
  return {
    'server_info' => ServerInfo,
    'not_watching' => NotWatching,
    'add_my_watch' => AddMyWatch,
    'watch_category' => WatchCategory,
    'mine' => Mine
  }
end
description() click to toggle source
# File lib/rct_jira.rb, line 41
def description
  "The RCT Jira class implements access to some of the common Jira\n" +
  "(http://en.wikipedia.org/wiki/JIRA) APIs."
end
mine() { || ... } click to toggle source
# File lib/rct_jira.rb, line 197
def mine
  user = sget('username')
  password = sget('password')
  project = sget('project')

  limit = sget('limit')
  limit = '100' if (limit == nil)

  ssettmp(SERVER_PROTOCOL, 'https')
  ssettmp(REQ_METHOD, 'GET')
  ssettmp(REQ_AUTH_TYPE, REQ_AUTH_TYPE_BASIC)
  ssettmp(REQ_AUTH_NAME, user)
  ssettmp(REQ_AUTH_PWD, password)
  ssettmp(REQ_PATH, "#{BASE_PATH}/search")

  params = add_param(nil, 'maxResults', limit)
  params = add_param(params, 'fields', 'summary')

  jql = ""
  if (project != nil)
    jql = "project=#{project} AND "
  end
  jql = "#{jql}assignee = currentUser() AND (status=\"Open\" OR status=\"In Progress\")"

  params = add_param(params, 'jql', jql)
  ssettmp(REQ_PARAMS, params)

  result = yield

  if (result.ok)
    # On success, create a simple key->description hash with the results
    if (is_cli) then cli_output = "\n" end
    list = Hash.new()
    json = JSON.parse(result.body)
    issues = json['issues']
    issues.each { |h|
      key = h['key']
      summary = h['fields']['summary']
      list[key] = summary
      if (is_cli) then cli_output += "#{key} : #{summary}\n" end
    }
    sset('my_bugs', list)
    if (is_cli)
      sset(CLI_OUTPUT, cli_output)
    end
  end

  return result
end
not_watching() { || ... } click to toggle source
# File lib/rct_jira.rb, line 120
def not_watching
  user = sget('username')
  password = sget('password')
  project = sget('project')

  limit = sget('limit')
  limit = '100' if (limit == nil)

  ssettmp(SERVER_PROTOCOL, 'https')
  ssettmp(REQ_METHOD, 'GET')
  ssettmp(REQ_AUTH_TYPE, REQ_AUTH_TYPE_BASIC)
  ssettmp(REQ_AUTH_NAME, user)
  ssettmp(REQ_AUTH_PWD, password)
  ssettmp(REQ_PATH, "#{BASE_PATH}/search")

  params = add_param(nil, 'maxResults', limit)
  params = add_param(params, 'fields', 'summary')
  params = add_param(params, 'jql',
                     "project=#{project} and watcher != currentUser()")
  ssettmp(REQ_PARAMS, params)

  result = yield

  if (result.ok)
    # On success, create a simple key->description hash with the results
    if (is_cli) then cli_output = "\n" end
    unwatched = Hash.new()
    json = JSON.parse(result.body)

    issues = json['issues']
    if (issues != nil)
      issues.each { |h|
        key = h['key']
        summary = h['fields']['summary']
        unwatched[key] = summary
        if (is_cli) then cli_output += "#{key} : #{summary}\n" end
      }
    end

    sset('not_watching_result', unwatched)
    if (is_cli)
      sset(CLI_OUTPUT, cli_output)
    end
  end

  return result
end
server_info() { || ... } click to toggle source
# File lib/rct_jira.rb, line 84
def server_info
  ssettmp(SERVER_PROTOCOL, 'https')
  ssettmp(REQ_METHOD, 'GET')
  ssettmp(REQ_PATH, "#{BASE_PATH}/serverInfo")
  yield
end
watch_category() click to toggle source
# File lib/rct_jira.rb, line 335
def watch_category

  project = sget('project')

  # Pretend we're not in CLI mode even if we are to avoid duplicate output
  # from the functions we're wrapping.

  mode = RCT.sget(RCT_MODE)
  RCT.sdelete(RCT_MODE)

  result = not_watching { $HTTP.handle_request() }
  if (!result.ok)
    result.add_error("Unable to get list of unwatched issues")
    RCT.sset(RCT_MODE, mode)
    return result
  end

  issues = RCT.sget('not_watching_result')
  count = 0

  issues.each { |key, desc|
    RCT.log(RESULT, "#{key}: #{desc}")
    RCT.sset('key', key)
    result = add_my_watch { $HTTP.handle_request() }
    if (!result.ok)
      result.add_error("Unable to add watcher to #{key}")
      RCT.sset(RCT_MODE, mode)
      return result
    end
    count = count + 1
  }

  RCT.sset(RCT_MODE, mode)
  if (is_cli)
    sset(CLI_OUTPUT, "Added #{count} bugs to watch in #{project}")
  end

  return result
end