lazylead 0.9.1 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2cbd092ef55bfdcf7887c4e0fcf5e5838a70b91eac82011893dc9423b22a0b74
4
- data.tar.gz: 5d71b27626fbf5e9d60ea38cce1e06ab6637aa874daa057ff9b9f8451b095dbf
3
+ metadata.gz: a2bb060ea62241a94384885e9d05b876f451e60051a89bc4ee7d8e3f84680d4a
4
+ data.tar.gz: 9c5906d631101d1bff071934fe0c52a0b9e1d1c9f655fdb8c3f958ba168639f0
5
5
  SHA512:
6
- metadata.gz: 748f97ab75655642143bd13d562aab38693df3f6496429d794e75f4c6bb9f0315537ad656027f639a9481ed0399345b3cef0f9ebcd83af680c69f5cf3be6380d
7
- data.tar.gz: ea40e803198075657c05df31b251599aac4dbb55bf628a01e1d68bcffeedd09c713ca9d0858d153301ab88f518e5ab50a1486fbc58be3801e5a57264611d915c
6
+ metadata.gz: 3a09897c26cffbce936e449973c6ddd115374a37fde1d5d8892832615b03410cdff4b6bc642923d373b15402ad29283719b90f34899b91a769d07994df20f7cb
7
+ data.tar.gz: 782c925452d6664542d3951bbf7ddde8e278211386c39b9593c94d2e54087789fc972db5f38ee8aaa0e6c4545732e6f36739b821ccaef20fe3b2f396a475c96f
data/lazylead.gemspec CHANGED
@@ -32,7 +32,7 @@ Gem::Specification.new do |s|
32
32
  s.rubygems_version = "2.2"
33
33
  s.required_ruby_version = ">=2.6.5"
34
34
  s.name = "lazylead"
35
- s.version = "0.9.1"
35
+ s.version = "0.9.2"
36
36
  s.license = "MIT"
37
37
  s.summary = "Eliminate the annoying work within bug-trackers."
38
38
  s.description = "Ticketing systems (Github, Jira, etc.) are strongly
@@ -45,7 +45,7 @@ tasks instead of solving technical problems."
45
45
  s.authors = ["Yurii Dubinka"]
46
46
  s.email = "yurii.dubinka@gmail.com"
47
47
  s.homepage = "http://github.com/dgroup/lazylead"
48
- s.post_install_message = "Thanks for installing Lazylead v0.9.1!
48
+ s.post_install_message = "Thanks for installing Lazylead v0.9.2!
49
49
  Read our blog posts: https://lazylead.org
50
50
  Stay in touch with the community in Telegram: https://t.me/lazylead
51
51
  Follow us on Twitter: https://twitter.com/lazylead
@@ -89,10 +89,10 @@ tasks instead of solving technical problems."
89
89
  s.add_development_dependency "net-ping", "2.0.8"
90
90
  s.add_development_dependency "rake", "13.0.3"
91
91
  s.add_development_dependency "random-port", "0.5.1"
92
- s.add_development_dependency "rdoc", "6.3.0"
92
+ s.add_development_dependency "rdoc", "6.3.1"
93
93
  s.add_development_dependency "rubocop", "1.13.0"
94
94
  s.add_development_dependency "rubocop-minitest", "0.12.1"
95
- s.add_development_dependency "rubocop-performance", "1.11.0"
95
+ s.add_development_dependency "rubocop-performance", "1.11.1"
96
96
  s.add_development_dependency "rubocop-rake", "0.5.1"
97
97
  s.add_development_dependency "rubocop-rspec", "2.3.0"
98
98
  s.add_development_dependency "sqlint", "0.2.0"
@@ -65,20 +65,20 @@ module Lazylead
65
65
  # Detect index of line with test case
66
66
  def detect_tc(line, index)
67
67
  return unless @tc.negative?
68
- @tc = index if eql? line,
69
- %w[testcase: tc: teststeps: teststeps steps: tcsteps: tc testcases steps]
68
+ @tc = index if eql? line, %w[testcase: tc: teststeps: teststeps steps: tcsteps: tc testcases
69
+ steps usecase]
70
70
  end
71
71
 
72
72
  # Detect index of line with actual result
73
73
  def detect_ar(line, index)
74
74
  return unless @ar.negative? && index > @tc
75
- @ar = index if starts? line, %w[ar: actualresult: ar= [ar]]
75
+ @ar = index if starts? line, %w[ar: actualresult: ar= [ar] actualresult]
76
76
  end
77
77
 
78
78
  # Detect index of line with expected result
79
79
  def detect_er(line, index)
80
80
  return unless @er.negative? && index > @tc
81
- @er = index if starts? line, %w[er: expectedresult: er= [er]]
81
+ @er = index if starts? line, %w[er: expectedresult: er= [er] expectedresult]
82
82
  end
83
83
 
84
84
  def starts?(line, text)
@@ -72,8 +72,9 @@ module Lazylead
72
72
  "#{id} has #{total} tasks"
73
73
  end
74
74
 
75
- def sprints
76
- @tasks.group_by(&:sprint).sort
75
+ def sprints(*label)
76
+ return @tasks.group_by(&:sprint).sort if label.empty? || label.nil?
77
+ @tasks.group_by { |t| t.sprint(label) }.sort
77
78
  end
78
79
  end
79
80
 
@@ -43,20 +43,39 @@ module Lazylead
43
43
  def run(sys, postman, opts)
44
44
  allowed = opts.slice "allowed", ","
45
45
  dues = sys.issues(opts["jql"], opts.jira_defaults.merge(expand: "changelog"))
46
- .map { |i| Due.new(i, allowed) }
46
+ .map { |i| Due.new(i, allowed, since(opts)) }
47
47
  .select(&:illegal?)
48
+ .reject(&:obsolete?)
48
49
  return if dues.empty?
49
50
  postman.send opts.merge(dues: dues)
50
51
  end
52
+
53
+ # Detect history period where search should start.
54
+ #
55
+ # opts["period"] The default period for past is 1 day (86400 seconds).
56
+ # So, if now 2017-04-06 15:50:58.674+0000
57
+ # it returns 2017-04-05 15:50:58 +0000
58
+ #
59
+ # opts["now"] The current time for unit tests.
60
+ # If absent the "Time.now" is used.
61
+ #
62
+ def since(opts)
63
+ @since ||= if opts.key? "now"
64
+ Time.parse(opts["now"])
65
+ else
66
+ Time.now - opts.fetch("period", "86400").to_i
67
+ end
68
+ end
51
69
  end
52
70
 
53
71
  # Instance of "Due" history item for the particular ticket.
54
72
  class Due
55
73
  attr_reader :issue, :when
56
74
 
57
- def initialize(issue, allowed)
75
+ def initialize(issue, allowed, since)
58
76
  @issue = issue
59
77
  @allowed = allowed
78
+ @since = since
60
79
  end
61
80
 
62
81
  # Gives true when last change of "Due Date" field was done
@@ -66,6 +85,11 @@ module Lazylead
66
85
  @allowed.none? { |a| a.eql? last.id }
67
86
  end
68
87
 
88
+ # Give true when "Due Date" changes happens in past and its alert already sent.
89
+ def obsolete?
90
+ @when < @since
91
+ end
92
+
69
93
  # Detect details about last change of "Due Date" to non-null value
70
94
  def last
71
95
  @last ||= begin
@@ -76,7 +100,7 @@ module Lazylead
76
100
  @when = @issue["created"]
77
101
  dd = @issue.reporter
78
102
  else
79
- @when = dd["created"].to_date
103
+ @when = dd["created"]
80
104
  dd = Lazylead::User.new(dd["author"])
81
105
  end
82
106
  dd
@@ -23,5 +23,5 @@
23
23
  # OR OTHER DEALINGS IN THE SOFTWARE.
24
24
 
25
25
  module Lazylead
26
- VERSION = "0.9.1"
26
+ VERSION = "0.9.2"
27
27
  end
@@ -95,18 +95,20 @@
95
95
  <th id="when">When</th>
96
96
  <th id="who">Who</th>
97
97
  <th id="to">To</th>
98
- <th id="summary">Summary</th>
98
+ <th id="assignee">Assignee</th>
99
99
  <th id="reporter">Reporter</th>
100
+ <th id="summary">Summary</th>
100
101
  </tr>
101
102
  <% dues.each do |d| %>
102
103
  <tr>
103
104
  <td><a href='<%= d.issue.url %>'><%= d.issue.key %></a></td>
104
105
  <td><%= d.issue.priority %></td>
105
- <td><%= d.when %></td>
106
+ <td><%= d.when.to_date %></td>
106
107
  <td><span style='color: red'><%= d.last.name %></span> (<%= d.last.id %>)</td>
107
108
  <td><span style='color: red'><%= d.issue.duedate %></span></td>
108
- <td><%= d.issue.summary %></td>
109
+ <td><%= d.issue.assignee.name %></td>
109
110
  <td><%= d.issue.reporter.name %></td>
111
+ <td><%= d.issue.summary %></td>
110
112
  </tr>
111
113
  <% end %>
112
114
  </table>
@@ -89,7 +89,7 @@
89
89
  <% if assignment.free? %>
90
90
  <span style="color: red">0</span>
91
91
  <% else %>
92
- <% assignment.sprints.each do |s| %>
92
+ <% assignment.sprints(defined?(sprint) ? sprint : "customfield_10480").each do |s| %>
93
93
  <a href="<%= search_link %><%= CGI.escape("#{jql} and assignee=#{teammate}") %>">
94
94
  <%= s.first.blank? ? "No sprint" : s.first %>: <%= s.last.size %>
95
95
  </a>
data/readme.md CHANGED
@@ -48,13 +48,15 @@ Join our telegram group [lazylead.org](https://t.me/lazyleads) for discussions.
48
48
  | Create a meeting(s) automatically in case some tickets appeared (group by assignee/reporters/component/ticket type/etc) | ⌛ | ⌛ | ⌛ | ❌ |
49
49
  | Propogate fields from parent tickets to sub-tasks | ✅ | ⌛ | ⌛ | ❌ |
50
50
  | Notify about tickets without comments with expected text | ✅ | ⌛ | ⌛ | ❌ |
51
- | Notify about team loading (no tasks on teammates) | ✅ | ⌛ | ⌛ | ❌ |
51
+ | [Notify about team loading (no tasks on teammates)](lib/lazylead/task/loading.rb) | ✅ | ⌛ | ⌛ | ❌ |
52
52
  | Notify about tickets matches predefined multiple conditions | ✅ | ⌛ | ⌛ | ❌ |
53
53
  | Link automatically the ticket and Confluence page if link found in ticket's comments/description | ✅ | ⌛ | ⌛ | ❌ |
54
54
  | Notify about tickets assigned to your team members not by effective managers| ✅ | ⌛ | ⌛ | ❌ |
55
55
  | Notify about modifications of important files in VCS | ❌ | ⌛ | ❌ | ✅ |
56
56
  | Notify about diff changes for past X period in VCS | ❌ | ⌛ | ❌ | ✅ |
57
57
  | Notify about changes with some text for past X period in VCS | ❌ | ⌛ | ❌ | ✅ |
58
+ | [Notify when someone outside of your team changed the due date on tickets for your team](lib/lazylead/task/micromanager.rb)| ✅ | ⌛ | ❌ | ❌ |
59
+ | [Notify when someone outside of your team assigned a ticket directly to the developer](lib/lazylead/task/assignment.rb)| ✅ | ⌛ | ❌ | ❌ |
58
60
 
59
61
  | Integration | Type | Status |
60
62
  | :---------------------------------------------------- | :-----------: | :----: |
@@ -65,7 +67,7 @@ Join our telegram group [lazylead.org](https://t.me/lazyleads) for discussions.
65
67
  | calendar.google.com | Calendar | ⌛ |
66
68
  | slack.com | Notifications | ⌛ |
67
69
 
68
- ✅ - implemented, ⌛ - planned, 🌵 - implemented, but not tested, ❌ - not supported by ticketing system.
70
+ ✅ - implemented, ⌛ - planned, 🌵 - implemented, but not tested, ❌ - not supported/planned.
69
71
 
70
72
  New ideas, bugs, suggestions or questions are welcome [via GitHub issues](https://github.com/dgroup/lazylead/issues/new)!
71
73
 
@@ -273,6 +273,24 @@ module Lazylead
273
273
  *{color:#DE10AA}[AR]{color}* = YYYY"
274
274
  end
275
275
 
276
+ test "TC named use case" do
277
+ assert testcase? "{color:#0747a6}+*Use case*+{color}
278
+ # Step 1
279
+ # Step ..
280
+ # Step N
281
+ *{color:#00673A}[ER]{color}* = XXXX
282
+ *{color:#DE10AA}[AR]{color}* = YYYY"
283
+ end
284
+
285
+ test "TC with full ar er words" do
286
+ assert testcase? "{color:#0747a6}+*Use case*+{color}
287
+ # Step 1
288
+ # Step ..
289
+ # Step N
290
+ *{color:#00673A}Expected result:{color}* = XXXX
291
+ *{color:#DE10AA}Actual Result:{color}* = YYYY"
292
+ end
293
+
276
294
  # ensure that issue description has a test case, AR and ER
277
295
  def testcase?(desc)
278
296
  Testcase.new.passed(OpenStruct.new(description: desc))
@@ -45,6 +45,7 @@ module Lazylead
45
45
  "user_link" => "https://user.com?id=",
46
46
  "search_link" => "https://jira.spring.io/issues/?jql=",
47
47
  "fields" => "assignee,duedate,customfield_10480",
48
+ "sprint" => "customfield_10480",
48
49
  "subject" => "[LL] Team loading",
49
50
  "template" => "lib/messages/loading.erb"
50
51
  )
@@ -43,6 +43,8 @@ module Lazylead
43
43
  "jql" => "key in ('STS-3599','SPR-6541') and duedate is not empty",
44
44
  "fields" => "assignee,duedate,priority,created,summary,reporter",
45
45
  "allowed" => "tom,mike,bob",
46
+ "period" => "86400",
47
+ "now" => "2009-12-10T00:04:00.000+0000",
46
48
  "subject" => "DD: How dare you?",
47
49
  "template" => "lib/messages/illegal_duedate_change.erb"
48
50
  )
@@ -50,5 +52,10 @@ module Lazylead
50
52
  assert_email "DD: How dare you?",
51
53
  %w[SPR-6541 Major (kdonald) 2009-12-10 Spring's\ Maven\ Central tom,mike,bob]
52
54
  end
55
+
56
+ test "since for past 1 min" do
57
+ greater_or_eq Task::Micromanager.new.since("period" => 60).to_i,
58
+ (Time.now - 60).to_i
59
+ end
53
60
  end
54
61
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lazylead
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yurii Dubinka
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-29 00:00:00.000000000 Z
11
+ date: 2021-05-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -492,14 +492,14 @@ dependencies:
492
492
  requirements:
493
493
  - - '='
494
494
  - !ruby/object:Gem::Version
495
- version: 6.3.0
495
+ version: 6.3.1
496
496
  type: :development
497
497
  prerelease: false
498
498
  version_requirements: !ruby/object:Gem::Requirement
499
499
  requirements:
500
500
  - - '='
501
501
  - !ruby/object:Gem::Version
502
- version: 6.3.0
502
+ version: 6.3.1
503
503
  - !ruby/object:Gem::Dependency
504
504
  name: rubocop
505
505
  requirement: !ruby/object:Gem::Requirement
@@ -534,14 +534,14 @@ dependencies:
534
534
  requirements:
535
535
  - - '='
536
536
  - !ruby/object:Gem::Version
537
- version: 1.11.0
537
+ version: 1.11.1
538
538
  type: :development
539
539
  prerelease: false
540
540
  version_requirements: !ruby/object:Gem::Requirement
541
541
  requirements:
542
542
  - - '='
543
543
  - !ruby/object:Gem::Version
544
- version: 1.11.0
544
+ version: 1.11.1
545
545
  - !ruby/object:Gem::Dependency
546
546
  name: rubocop-rake
547
547
  requirement: !ruby/object:Gem::Requirement
@@ -786,7 +786,7 @@ licenses:
786
786
  - MIT
787
787
  metadata: {}
788
788
  post_install_message: |-
789
- Thanks for installing Lazylead v0.9.1!
789
+ Thanks for installing Lazylead v0.9.2!
790
790
  Read our blog posts: https://lazylead.org
791
791
  Stay in touch with the community in Telegram: https://t.me/lazylead
792
792
  Follow us on Twitter: https://twitter.com/lazylead