Class: Lazylead::Score
- Inherits:
-
Object
- Object
- Lazylead::Score
- Defined in:
- lib/lazylead/task/accuracy/accuracy.rb
Overview
The ticket score based on fields content.
Instance Attribute Summary collapse
-
#accuracy ⇒ Object
readonly
Returns the value of attribute accuracy.
-
#issue ⇒ Object
readonly
Returns the value of attribute issue.
-
#score ⇒ Object
readonly
Returns the value of attribute score.
Instance Method Summary collapse
- #color ⇒ Object
- #colors ⇒ Object
-
#comment ⇒ Object
The jira comment in markdown format.
-
#docs_link ⇒ Object
Link to ticket formatting rules.
-
#evaluate(digits = 2) ⇒ Object
Estimate the ticket score and accuracy.
-
#grade(value) ⇒ Object
Calculate grade for accuracy For example, grade(7.5) => 0 grade(12) => 10 grade(25.5) => 20.
-
#initialize(issue, opts) ⇒ Score
constructor
A new instance of Score.
-
#post ⇒ Object
Post the comment with score and accuracy to the ticket.
-
#reaction ⇒ Object
Add reaction meme to the ticket comment based on score.
-
#reporter ⇒ Object
Detect the ticket reporter.
Constructor Details
#initialize(issue, opts) ⇒ Score
Returns a new instance of Score.
76 77 78 79 |
# File 'lib/lazylead/task/accuracy/accuracy.rb', line 76 def initialize(issue, opts) @issue = issue @opts = opts end |
Instance Attribute Details
#accuracy ⇒ Object (readonly)
Returns the value of attribute accuracy.
74 75 76 |
# File 'lib/lazylead/task/accuracy/accuracy.rb', line 74 def accuracy @accuracy end |
#issue ⇒ Object (readonly)
Returns the value of attribute issue.
74 75 76 |
# File 'lib/lazylead/task/accuracy/accuracy.rb', line 74 def issue @issue end |
#score ⇒ Object (readonly)
Returns the value of attribute score.
74 75 76 |
# File 'lib/lazylead/task/accuracy/accuracy.rb', line 74 def score @score end |
Instance Method Details
#color ⇒ Object
124 125 126 127 128 129 130 |
# File 'lib/lazylead/task/accuracy/accuracy.rb', line 124 def color return "#061306" if colors.nil? || !defined?(@score) || !@score.is_a?(Numeric) colors.reverse_each do |color| return color.last if @accuracy >= color.first end "#061306" end |
#colors ⇒ Object
132 133 134 135 136 137 138 |
# File 'lib/lazylead/task/accuracy/accuracy.rb', line 132 def colors @colors ||= JSON.parse(@opts["colors"]) .to_h .to_a .each { |e| e[0] = e[0].to_i } .sort_by { |e| e[0] } end |
#comment ⇒ Object
The jira comment in markdown format
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/lazylead/task/accuracy/accuracy.rb', line 97 def comment comment = [ "Hi [~#{reporter}],", "", "The triage accuracy is '{color:#{color}}#{@score}{color}' " \ "(~{color:#{color}}#{@accuracy}%{color}), here are the reasons why:", "|| Ticket requirement || Status || Field ||" ] @opts[:rules].each do |r| comment << "|#{r.desc}|#{r.passed(@issue) ? '(/)' : '(-)'}|#{r.field}|" end comment << docs_link comment << reaction comment << "Posted by [lazylead v#{Lazylead::VERSION}|https://bit.ly/2NjdndS]." comment.join("\r\n") end |
#docs_link ⇒ Object
Link to ticket formatting rules
115 116 117 118 119 120 121 122 |
# File 'lib/lazylead/task/accuracy/accuracy.rb', line 115 def docs_link if @opts["docs"].nil? || @opts["docs"].blank? "" else "The requirements/examples of ticket formatting rules you may find " \ "[here|#{@opts['docs']}]." end end |
#evaluate(digits = 2) ⇒ Object
Estimate the ticket score and accuracy. Accuracy is a percentage between current score and maximum possible value.
83 84 85 86 87 |
# File 'lib/lazylead/task/accuracy/accuracy.rb', line 83 def evaluate(digits = 2) @score = @opts[:rules].select { |r| r.passed(@issue) }.sum(&:score) @accuracy = (@score.to_f / @opts[:total] * 100).round(digits) self end |
#grade(value) ⇒ Object
Calculate grade for accuracy For example,
grade(7.5) => 0
grade(12) => 10
grade(25.5) => 20
145 146 147 |
# File 'lib/lazylead/task/accuracy/accuracy.rb', line 145 def grade(value) (value / 10).floor * 10 end |
#post ⇒ Object
Post the comment with score and accuracy to the ticket.
90 91 92 93 94 |
# File 'lib/lazylead/task/accuracy/accuracy.rb', line 90 def post return if @opts.key? "silent" @issue.post comment @issue.add_label "LL.accuracy", "#{grade(@accuracy)}%", "#{@accuracy}%" end |
#reaction ⇒ Object
#339/DEV Seems jira doesn’t support the rendering of external images by url, thus so far we might have several options:
-
attach meme to ticket and make rendering using [^attach.jpg!thumbnail] option
-
have a link to meme (like it implemented now)
The 1st option with attachment might generate multiple events in jira and spam ticket watchers, thus, some research & UX testing needed how to make it better.
Add reaction meme to the ticket comment based on score. The meme details are represented as array, where each element is a separate line in future
comment in jira.
171 172 173 174 175 176 177 178 179 180 |
# File 'lib/lazylead/task/accuracy/accuracy.rb', line 171 def reaction return [] if @opts[:memes].nil? && !@opts[:memes].enabled? url = @opts[:memes].find(@accuracy) return [] if url.blank? [ "", "Our reaction when we got the ticket with triage accuracy #{@accuracy}% is [here|#{url}].", "" ] end |
#reporter ⇒ Object
Detect the ticket reporter.
If ticket created by some automatic/admin user account then reporter is the first non-system
user account who modified the ticket.
153 154 155 156 157 158 159 |
# File 'lib/lazylead/task/accuracy/accuracy.rb', line 153 def reporter sys = @opts.slice("system-users", ",") return @issue.reporter.id if sys.empty? || sys.none? { |susr| susr.eql? @issue.reporter.id } first = @issue.history.find { |h| sys.none? { |susr| susr.eql? h["author"]["key"] } } return @issue.reporter.id if first.nil? first["author"]["key"] end |