Class: Lita::Handlers::JiraIssues

Inherits:
Handler
  • Object
show all
Defined in:
lib/lita/handlers/jira_issues.rb

Constant Summary collapse

FORMAT =
<<-FORMATTER
[%{KEY}] %{summary}
Status: %{status}, #(%{assignee}?assigned to %{assignee}|unassigned), rep. by %{reporter}, fixVersion: #(%{version}?%{version}|NONE)#(%{priority}?, priority: %{priority}|)
%{link}
FORMATTER

Instance Method Summary collapse

Instance Method Details

#assignee(data) ⇒ Object



80
81
82
83
84
85
# File 'lib/lita/handlers/jira_issues.rb', line 80

def assignee(data)
  if assigned_to = data[:assignee]
    return assigned_to[:displayName]
  end
  ''
end

#fix_version(data) ⇒ Object



91
92
93
94
95
96
97
98
# File 'lib/lita/handlers/jira_issues.rb', line 91

def fix_version(data)
  fix_versions = data[:fixVersions]
  if fix_versions and fix_versions.first
    fix_versions.first[:name]
  else
    ''
  end
end

#handle_key(response, key) ⇒ Object



34
35
36
37
38
39
40
# File 'lib/lita/handlers/jira_issues.rb', line 34

def handle_key(response, key)
  data = @jira.data_for_issue(key)
  return if data.empty?
  return if silenced?(key)
  issue = issue_details(data)
  response.reply issue
end

#issue_details(data) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/lita/handlers/jira_issues.rb', line 42

def issue_details(data)
  key = data[:key]
  data = data[:fields]
  
  # build out the response from the configured format
  text = config.format % {
    KEY: key.upcase, Key: key.capitalize, key: key,
    SUMMARY: summary(data).upcase, Summary: summary(data).capitalize, summary: summary(data),
    ASSIGNEE: assignee(data).upcase, Assignee: assignee(data).capitalize, assignee: assignee(data),
    REPORTER: reporter(data).upcase, Reporter: reporter(data).capitalize, reporter: reporter(data),
    STATUS: status(data).upcase, Status: status(data).capitalize, status: status(data),
    PRIORITY: priority(data).upcase, Priority: priority(data).capitalize, priority: priority(data),
    VERSION: fix_version(data).upcase, Version: fix_version(data).capitalize, version: fix_version(data),
    LINK: issue_link(key), link: issue_link(key),
    URL: issue_link(key), url: issue_link(key)
  }
  
  # evaluate conditional syntax
  text.gsub!(/#\(.*?\?.*?\|.*?\)/) do |cond_stmt|
    vals = cond_stmt.match(/#\((?<value>.*?)\?(?<true_text>.*?)\|(?<false_text>.*?)\)/)
    if vals[:value].empty?
      vals[:false_text].gsub("\|", "|").gsub("\?", "?")
    else
      vals[:true_text].gsub("\|", "|").gsub("\?", "?")
    end
  end
  
  return text
end


108
109
110
# File 'lib/lita/handlers/jira_issues.rb', line 108

def issue_link(key)
  "#{config.url}/browse/#{key}"
end

#jira_message(response) ⇒ Object



26
27
28
29
30
31
32
# File 'lib/lita/handlers/jira_issues.rb', line 26

def jira_message(response)
  return if config.ignore.include?(response.user.name)
  @jira ||= JiraGateway.new(http, config)
  Set.new(response.matches).each do | key |
    handle_key(response, key)
  end
end

#priority(data) ⇒ Object



100
101
102
103
104
105
106
# File 'lib/lita/handlers/jira_issues.rb', line 100

def priority(data)
  if data[:priority]
    data[:priority][:name]
  else
    ''
  end
end

#reporter(data) ⇒ Object



87
88
89
# File 'lib/lita/handlers/jira_issues.rb', line 87

def reporter(data)
  data[:reporter][:displayName]
end

#silenced?(key) ⇒ Boolean

Returns:

  • (Boolean)


112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/lita/handlers/jira_issues.rb', line 112

def silenced?(key)

  if config.issue_ttl == 0
    log.debug("JiraIssues: issue_ttl is set to 0, will post every matched issue to chat")
    return false
  end

  current_ttl = redis.ttl(key).to_i

  if current_ttl > 0
    log.debug("JiraIssues: Key expiration not met for #{key}, will not reprompt for #{current_ttl} seconds")
    true
  else
    redis.setex(key, config.issue_ttl, key)
    log.debug("JiraIssues: Setting expiring key in redis for JIRA issue: #{key}. Key is configured to expire in #{config.issue_ttl} seconds")
    false
  end
end

#status(data) ⇒ Object



72
73
74
# File 'lib/lita/handlers/jira_issues.rb', line 72

def status(data)
  data[:status][:name]
end

#summary(data) ⇒ Object



76
77
78
# File 'lib/lita/handlers/jira_issues.rb', line 76

def summary(data)
  data[:summary]
end