lazylead 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +7 -0
  2. data/ .dockerignore +12 -0
  3. data/.0pdd.yml +5 -0
  4. data/.circleci/config.yml +50 -0
  5. data/.circleci/release_image.sh +13 -0
  6. data/.circleci/validate.sh +10 -0
  7. data/.docker/Dockerfile +31 -0
  8. data/.docker/build.sh +6 -0
  9. data/.docker/docker-compose.yml +23 -0
  10. data/.docker/readme.md +21 -0
  11. data/.gitattributes +9 -0
  12. data/.github/CODE_OF_CONDUCT.md +76 -0
  13. data/.github/CONTRIBUTING.md +9 -0
  14. data/.github/ISSUE_TEMPLATE.md +14 -0
  15. data/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
  16. data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  17. data/.github/PULL_REQUEST_TEMPLATE.md +11 -0
  18. data/.github/tasks.yml +24 -0
  19. data/.github/trello.md +18 -0
  20. data/.gitignore +12 -0
  21. data/.pdd +5 -0
  22. data/.rubocop.yml +87 -0
  23. data/.ruby-version +1 -0
  24. data/.rultor.yml +31 -0
  25. data/.simplecov +16 -0
  26. data/.travis.yml +16 -0
  27. data/Gemfile +27 -0
  28. data/Guardfile +33 -0
  29. data/Rakefile +93 -0
  30. data/appveyor.yml +50 -0
  31. data/bin/.ruby-version +1 -0
  32. data/bin/lazylead +99 -0
  33. data/build.sh +6 -0
  34. data/deploy.sh +16 -0
  35. data/lazylead.gemspec +106 -0
  36. data/lib/lazylead.rb +52 -0
  37. data/lib/lazylead/allocated.rb +56 -0
  38. data/lib/lazylead/cli/app.rb +87 -0
  39. data/lib/lazylead/confluence.rb +157 -0
  40. data/lib/lazylead/email.rb +74 -0
  41. data/lib/lazylead/exchange.rb +83 -0
  42. data/lib/lazylead/log.rb +71 -0
  43. data/lib/lazylead/model.rb +140 -0
  44. data/lib/lazylead/postman.rb +78 -0
  45. data/lib/lazylead/salt.rb +91 -0
  46. data/lib/lazylead/schedule.rb +88 -0
  47. data/lib/lazylead/smtp.rb +82 -0
  48. data/lib/lazylead/system/empty.rb +36 -0
  49. data/lib/lazylead/system/fake.rb +41 -0
  50. data/lib/lazylead/system/jira.rb +249 -0
  51. data/lib/lazylead/system/synced.rb +41 -0
  52. data/lib/lazylead/task/alert.rb +105 -0
  53. data/lib/lazylead/task/confluence_ref.rb +59 -0
  54. data/lib/lazylead/task/echo.rb +38 -0
  55. data/lib/lazylead/task/fix_version.rb +79 -0
  56. data/lib/lazylead/task/missing_comment.rb +53 -0
  57. data/lib/lazylead/version.rb +27 -0
  58. data/lib/messages/due_date_expired.erb +96 -0
  59. data/lib/messages/illegal_fixversion_change.erb +120 -0
  60. data/lib/messages/missing_comment.erb +128 -0
  61. data/license.txt +21 -0
  62. data/readme.md +160 -0
  63. data/test/lazylead/allocated_test.rb +51 -0
  64. data/test/lazylead/cli/app_test.rb +74 -0
  65. data/test/lazylead/confluence_test.rb +55 -0
  66. data/test/lazylead/exchange_test.rb +68 -0
  67. data/test/lazylead/model_test.rb +65 -0
  68. data/test/lazylead/salt_test.rb +42 -0
  69. data/test/lazylead/smoke_test.rb +38 -0
  70. data/test/lazylead/smtp_test.rb +65 -0
  71. data/test/lazylead/system/jira_test.rb +110 -0
  72. data/test/lazylead/task/confluence_ref_test.rb +66 -0
  73. data/test/lazylead/task/duedate_test.rb +126 -0
  74. data/test/lazylead/task/echo_test.rb +34 -0
  75. data/test/lazylead/task/fix_version_test.rb +52 -0
  76. data/test/lazylead/task/missing_comment_test.rb +56 -0
  77. data/test/lazylead/version_test.rb +36 -0
  78. data/test/sqlite_test.rb +80 -0
  79. data/test/test.rb +103 -0
  80. data/todo.yml +16 -0
  81. data/upgrades/sqlite/001-install-main-lazylead-tables.sql +63 -0
  82. data/upgrades/sqlite/999.testdata.sql +39 -0
  83. metadata +815 -0
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ # The MIT License
4
+ #
5
+ # Copyright (c) 2019-2020 Yurii Dubinka
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ # of this software and associated documentation files (the "Software"),
9
+ # to deal in the Software without restriction, including without limitation
10
+ # the rights to use, copy, modify, merge, publish, distribute, sublicense,
11
+ # and/or sell copies of the Software, and to permit persons to whom
12
+ # the Software is furnished to do so, subject to the following conditions:
13
+ #
14
+ # The above copyright notice and this permission notice shall be included
15
+ # in all copies or substantial portions of the Software.
16
+ #
17
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ # FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
20
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22
+ # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
23
+ # OR OTHER DEALINGS IN THE SOFTWARE.
24
+
25
+ $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
26
+
27
+ require "simplecov"
28
+ SimpleCov.start
29
+ if ENV["CI"] == "true"
30
+ require "codecov"
31
+ SimpleCov.formatter = SimpleCov::Formatter::Codecov
32
+ end
33
+
34
+ require "minitest/autorun"
35
+ require "minitest/hooks/test"
36
+ require "minitest/reporters"
37
+ require "concurrent"
38
+ require "timeout"
39
+ require "active_support"
40
+
41
+ STDOUT.sync = true
42
+ Minitest::Reporters.use! [Minitest::Reporters::SpecReporter.new]
43
+
44
+ module Lazylead
45
+ # A basic lazylead test based on Minitest.
46
+ # By default it defines
47
+ # - the timeout for each test
48
+ # - additional generic asserts
49
+ class Test < ActiveSupport::TestCase
50
+ include Minitest::Hooks
51
+
52
+ make_my_diffs_pretty!
53
+
54
+ def around
55
+ Timeout.timeout(
56
+ ENV["TEST_TIMEOUT"].nil? ? 10 : ENV["TEST_TIMEOUT"].to_i
57
+ ) do
58
+ Thread.current.name = "test"
59
+ super
60
+ end
61
+ end
62
+
63
+ def greater_then(fst, sec)
64
+ assert fst > sec, "'#{fst}' is expected to be greater than '#{sec}'"
65
+ end
66
+
67
+ def greater_or_eq(fst, sec)
68
+ assert fst >= sec,
69
+ "'#{fst}' is expected to be greater or equal to '#{sec}'"
70
+ end
71
+
72
+ def assert_entries(exp, act)
73
+ raise "Primary hash for comparing is empty" if exp.nil? || exp.empty?
74
+ exp.each do |k, v|
75
+ assert exp.key?(k), "The key '#{k}' is absent in #{act}"
76
+ assert_equal v, act[k]
77
+ end
78
+ end
79
+
80
+ # Assert that text contains expected words
81
+ def assert_words(words, text)
82
+ words = [words] unless words.respond_to? :each
83
+ words.each do |w|
84
+ assert_includes text, w
85
+ end
86
+ end
87
+
88
+ # Gives file name without extension (.rb)
89
+ def no_ext(path)
90
+ File.basename(path, ".rb")
91
+ end
92
+
93
+ # Gives true if key(s) have non-blank values in ENV.
94
+ # :key :: The key(s) from ENV
95
+ def env?(*keys)
96
+ if keys.respond_to?(:all?)
97
+ !keys.all? { |k| ENV[k].blank? }
98
+ else
99
+ !ENV[keys].blank?
100
+ end
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,16 @@
1
+ # @todo #/DEV Enable Travis CI as second CI server once the project
2
+ # became a public. This might be alternative for Circle CI (just in case)
3
+
4
+ # @todo #/DEV There a lot of badges in readme which aren't enabled for now.
5
+ # Let's enable them. Examples you may find here:
6
+ # - https://github.com/dgroup/lazylead/blob/0.0.0-alpha-java/readme.md
7
+ # - https://github.com/dgroup/docker-unittests/blob/master/readme.md
8
+
9
+ # @todo #/DEV Enable DepShield badge for inspection. Example you may find
10
+ # [![DepShield Badge](https://depshield.sonatype.org/badges/dgroup/lazylead/depshield.svg)](https://depshield.github.io)
11
+
12
+ # @todo #/DEV Add Github integration for lazylead with the same methods as in Jira.
13
+
14
+ # @todo #/DEV Add Trello integration for lazylead with the same methods as in Jira.
15
+
16
+
@@ -0,0 +1,63 @@
1
+ /*
2
+ * The MIT License
3
+ *
4
+ * Copyright (c) 2019-2020 Yurii Dubinka
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ * of this software and associated documentation files (the "Software"),
8
+ * to deal in the Software without restriction, including without limitation
9
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10
+ * and/or sell copies of the Software, and to permit persons to whom
11
+ * the Software is furnished to do so, subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice shall be included
14
+ * in all copies or substantial portions of the Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
19
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
22
+ * OR OTHER DEALINGS IN THE SOFTWARE.
23
+ */
24
+ -- @todo #/DEV Add indexes to all columns which have foreign keys in order to
25
+ -- avoid full table scans.
26
+
27
+ -- @todo #/DEV Add description to each column using ANSI column command.
28
+ -- Potentially switch to h2 is required.
29
+
30
+ -- @todo #/DEV Add index by name to table persons in order to avoid full table
31
+ -- scans during access by name.
32
+ PRAGMA foreign_keys = ON;
33
+ create table if not exists teams
34
+ (
35
+ id integer primary key autoincrement,
36
+ name text not null,
37
+ properties text
38
+ );
39
+ create table if not exists systems
40
+ (
41
+ id integer primary key autoincrement,
42
+ properties text not null
43
+ );
44
+ -- @todo #/DEV task.cron - add regexp verification of cron expression.
45
+ create table if not exists tasks
46
+ (
47
+ id integer primary key autoincrement,
48
+ name text not null,
49
+ cron text not null,
50
+ -- @todo #/DEV task.cron - add support for non-cron based schedule like at, once, every.
51
+ -- More details:
52
+ -- https://github.com/jmettraux/rufus-scheduler
53
+ -- https://stackoverflow.com/questions/46691666/using-constantize-to-invoke-both-a-class-and-method-from-separate-strings
54
+ system integer not null,
55
+ action text not null,
56
+ team_id integer not null,
57
+ description text,
58
+ enabled text,
59
+ properties text not null,
60
+ -- @todo #/DEV tasks.enabled - add index for future search. Research is required.
61
+ foreign key (system) references systems (id) on delete cascade,
62
+ foreign key (team_id) references teams (id) on delete cascade
63
+ );
@@ -0,0 +1,39 @@
1
+ /*
2
+ * The MIT License
3
+ *
4
+ * Copyright (c) 2019-2020 Yurii Dubinka
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ * of this software and associated documentation files (the "Software"),
8
+ * to deal in the Software without restriction, including without limitation
9
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10
+ * and/or sell copies of the Software, and to permit persons to whom
11
+ * the Software is furnished to do so, subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice shall be included
14
+ * in all copies or substantial portions of the Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
19
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
22
+ * OR OTHER DEALINGS IN THE SOFTWARE.
23
+ */
24
+ insert into systems(id, properties)
25
+ values (1,
26
+ '{"type":"Lazylead::Jira", "username":"", "password":"", "site":"https://jira.spring.io", "context_path":""}'),
27
+ (2,
28
+ '{"type":"Lazylead::Jira", "username":"${jsi_usr}", "password":"${jsi_psw}", "site":"https://jira.spring.io", "context_path":""}');
29
+ insert into teams(id, name, properties)
30
+ values (1, 'BA squad', '{"from":"basquad@fake.com", "usr":"${usr}"}');
31
+ insert into tasks(name, cron, enabled, id, system, team_id, action, properties)
32
+ values ('echo', '* * * * *', 'false', 1, 1, 1, 'Lazylead::Task::Echo', '{}'),
33
+ ('expired due date', '* * * * *', 'false', 2, 1, 1,
34
+ 'Lazylead::Task::Notification',
35
+ '{"sql":"filter=100500","subject":"[DD] PDTN!","template":"lib/messages/due_date_expired.erb"}'),
36
+ ('task with cc', '* * * * *', 'false', 3, 1, 1, 'Lazylead::Task::Echo',
37
+ '{"cc":"leelakenny@mail.com,maciecrane@mail.com"}'),
38
+ ('task', '* * * * *', 'false', 4, 2, 1, 'Lazylead::Task::Echo', '{}'),
39
+ ('pman', '', '', 5, 2, 1, '', '{"postman":"Lazylead::Postman"}');
metadata ADDED
@@ -0,0 +1,815 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lazylead
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Yurii Dubinka
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-06-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activerecord
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 6.0.3
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 6.0.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: backtrace
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: '0.3'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: '0.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: concurrent-ruby
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 1.1.5
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 1.1.5
55
+ - !ruby/object:Gem::Dependency
56
+ name: diffy
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 3.3.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 3.3.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: faraday
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 1.0.1
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 1.0.1
83
+ - !ruby/object:Gem::Dependency
84
+ name: futex
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 0.8.5
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 0.8.5
97
+ - !ruby/object:Gem::Dependency
98
+ name: get_process_mem
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 0.2.5
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 0.2.5
111
+ - !ruby/object:Gem::Dependency
112
+ name: haml
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 5.0.4
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '='
123
+ - !ruby/object:Gem::Version
124
+ version: 5.0.4
125
+ - !ruby/object:Gem::Dependency
126
+ name: jira-ruby
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '='
130
+ - !ruby/object:Gem::Version
131
+ version: 1.7.1
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '='
137
+ - !ruby/object:Gem::Version
138
+ version: 1.7.1
139
+ - !ruby/object:Gem::Dependency
140
+ name: json
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '='
144
+ - !ruby/object:Gem::Version
145
+ version: 2.2.0
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '='
151
+ - !ruby/object:Gem::Version
152
+ version: 2.2.0
153
+ - !ruby/object:Gem::Dependency
154
+ name: logging
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '='
158
+ - !ruby/object:Gem::Version
159
+ version: 2.2.2
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '='
165
+ - !ruby/object:Gem::Version
166
+ version: 2.2.2
167
+ - !ruby/object:Gem::Dependency
168
+ name: mail
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '='
172
+ - !ruby/object:Gem::Version
173
+ version: 2.7.1
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '='
179
+ - !ruby/object:Gem::Version
180
+ version: 2.7.1
181
+ - !ruby/object:Gem::Dependency
182
+ name: memory_profiler
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - '='
186
+ - !ruby/object:Gem::Version
187
+ version: 0.9.13
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - '='
193
+ - !ruby/object:Gem::Version
194
+ version: 0.9.13
195
+ - !ruby/object:Gem::Dependency
196
+ name: openssl
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - '='
200
+ - !ruby/object:Gem::Version
201
+ version: 2.1.2
202
+ type: :runtime
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - '='
207
+ - !ruby/object:Gem::Version
208
+ version: 2.1.2
209
+ - !ruby/object:Gem::Dependency
210
+ name: rainbow
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - '='
214
+ - !ruby/object:Gem::Version
215
+ version: 3.0.0
216
+ type: :runtime
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - '='
221
+ - !ruby/object:Gem::Version
222
+ version: 3.0.0
223
+ - !ruby/object:Gem::Dependency
224
+ name: require_all
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - '='
228
+ - !ruby/object:Gem::Version
229
+ version: 3.0.0
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - '='
235
+ - !ruby/object:Gem::Version
236
+ version: 3.0.0
237
+ - !ruby/object:Gem::Dependency
238
+ name: rufus-scheduler
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - '='
242
+ - !ruby/object:Gem::Version
243
+ version: 3.6.0
244
+ type: :runtime
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - '='
249
+ - !ruby/object:Gem::Version
250
+ version: 3.6.0
251
+ - !ruby/object:Gem::Dependency
252
+ name: semantic
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - '='
256
+ - !ruby/object:Gem::Version
257
+ version: 1.6.1
258
+ type: :runtime
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - '='
263
+ - !ruby/object:Gem::Version
264
+ version: 1.6.1
265
+ - !ruby/object:Gem::Dependency
266
+ name: sinatra
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - '='
270
+ - !ruby/object:Gem::Version
271
+ version: 2.0.5
272
+ type: :runtime
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - '='
277
+ - !ruby/object:Gem::Version
278
+ version: 2.0.5
279
+ - !ruby/object:Gem::Dependency
280
+ name: slop
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - '='
284
+ - !ruby/object:Gem::Version
285
+ version: '4.4'
286
+ type: :runtime
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - '='
291
+ - !ruby/object:Gem::Version
292
+ version: '4.4'
293
+ - !ruby/object:Gem::Dependency
294
+ name: sqlite3
295
+ requirement: !ruby/object:Gem::Requirement
296
+ requirements:
297
+ - - '='
298
+ - !ruby/object:Gem::Version
299
+ version: 1.4.2
300
+ type: :runtime
301
+ prerelease: false
302
+ version_requirements: !ruby/object:Gem::Requirement
303
+ requirements:
304
+ - - '='
305
+ - !ruby/object:Gem::Version
306
+ version: 1.4.2
307
+ - !ruby/object:Gem::Dependency
308
+ name: sys-proctable
309
+ requirement: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - '='
312
+ - !ruby/object:Gem::Version
313
+ version: 1.2.1
314
+ type: :runtime
315
+ prerelease: false
316
+ version_requirements: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - '='
319
+ - !ruby/object:Gem::Version
320
+ version: 1.2.1
321
+ - !ruby/object:Gem::Dependency
322
+ name: threads
323
+ requirement: !ruby/object:Gem::Requirement
324
+ requirements:
325
+ - - '='
326
+ - !ruby/object:Gem::Version
327
+ version: '0.3'
328
+ type: :runtime
329
+ prerelease: false
330
+ version_requirements: !ruby/object:Gem::Requirement
331
+ requirements:
332
+ - - '='
333
+ - !ruby/object:Gem::Version
334
+ version: '0.3'
335
+ - !ruby/object:Gem::Dependency
336
+ name: tilt
337
+ requirement: !ruby/object:Gem::Requirement
338
+ requirements:
339
+ - - '='
340
+ - !ruby/object:Gem::Version
341
+ version: 2.0.10
342
+ type: :runtime
343
+ prerelease: false
344
+ version_requirements: !ruby/object:Gem::Requirement
345
+ requirements:
346
+ - - '='
347
+ - !ruby/object:Gem::Version
348
+ version: 2.0.10
349
+ - !ruby/object:Gem::Dependency
350
+ name: total
351
+ requirement: !ruby/object:Gem::Requirement
352
+ requirements:
353
+ - - '='
354
+ - !ruby/object:Gem::Version
355
+ version: '0.3'
356
+ type: :runtime
357
+ prerelease: false
358
+ version_requirements: !ruby/object:Gem::Requirement
359
+ requirements:
360
+ - - '='
361
+ - !ruby/object:Gem::Version
362
+ version: '0.3'
363
+ - !ruby/object:Gem::Dependency
364
+ name: typhoeus
365
+ requirement: !ruby/object:Gem::Requirement
366
+ requirements:
367
+ - - '='
368
+ - !ruby/object:Gem::Version
369
+ version: 1.3.1
370
+ type: :runtime
371
+ prerelease: false
372
+ version_requirements: !ruby/object:Gem::Requirement
373
+ requirements:
374
+ - - '='
375
+ - !ruby/object:Gem::Version
376
+ version: 1.3.1
377
+ - !ruby/object:Gem::Dependency
378
+ name: tzinfo
379
+ requirement: !ruby/object:Gem::Requirement
380
+ requirements:
381
+ - - '='
382
+ - !ruby/object:Gem::Version
383
+ version: '1.1'
384
+ type: :runtime
385
+ prerelease: false
386
+ version_requirements: !ruby/object:Gem::Requirement
387
+ requirements:
388
+ - - '='
389
+ - !ruby/object:Gem::Version
390
+ version: '1.1'
391
+ - !ruby/object:Gem::Dependency
392
+ name: tzinfo-data
393
+ requirement: !ruby/object:Gem::Requirement
394
+ requirements:
395
+ - - '='
396
+ - !ruby/object:Gem::Version
397
+ version: 1.2019.3
398
+ type: :runtime
399
+ prerelease: false
400
+ version_requirements: !ruby/object:Gem::Requirement
401
+ requirements:
402
+ - - '='
403
+ - !ruby/object:Gem::Version
404
+ version: 1.2019.3
405
+ - !ruby/object:Gem::Dependency
406
+ name: usagewatch_ext
407
+ requirement: !ruby/object:Gem::Requirement
408
+ requirements:
409
+ - - '='
410
+ - !ruby/object:Gem::Version
411
+ version: 0.2.1
412
+ type: :runtime
413
+ prerelease: false
414
+ version_requirements: !ruby/object:Gem::Requirement
415
+ requirements:
416
+ - - '='
417
+ - !ruby/object:Gem::Version
418
+ version: 0.2.1
419
+ - !ruby/object:Gem::Dependency
420
+ name: vcs4sql
421
+ requirement: !ruby/object:Gem::Requirement
422
+ requirements:
423
+ - - '='
424
+ - !ruby/object:Gem::Version
425
+ version: 0.1.0
426
+ type: :runtime
427
+ prerelease: false
428
+ version_requirements: !ruby/object:Gem::Requirement
429
+ requirements:
430
+ - - '='
431
+ - !ruby/object:Gem::Version
432
+ version: 0.1.0
433
+ - !ruby/object:Gem::Dependency
434
+ name: viewpoint
435
+ requirement: !ruby/object:Gem::Requirement
436
+ requirements:
437
+ - - '='
438
+ - !ruby/object:Gem::Version
439
+ version: 1.1.0
440
+ type: :runtime
441
+ prerelease: false
442
+ version_requirements: !ruby/object:Gem::Requirement
443
+ requirements:
444
+ - - '='
445
+ - !ruby/object:Gem::Version
446
+ version: 1.1.0
447
+ - !ruby/object:Gem::Dependency
448
+ name: zache
449
+ requirement: !ruby/object:Gem::Requirement
450
+ requirements:
451
+ - - '='
452
+ - !ruby/object:Gem::Version
453
+ version: '0.12'
454
+ type: :runtime
455
+ prerelease: false
456
+ version_requirements: !ruby/object:Gem::Requirement
457
+ requirements:
458
+ - - '='
459
+ - !ruby/object:Gem::Version
460
+ version: '0.12'
461
+ - !ruby/object:Gem::Dependency
462
+ name: codecov
463
+ requirement: !ruby/object:Gem::Requirement
464
+ requirements:
465
+ - - '='
466
+ - !ruby/object:Gem::Version
467
+ version: 0.1.14
468
+ type: :development
469
+ prerelease: false
470
+ version_requirements: !ruby/object:Gem::Requirement
471
+ requirements:
472
+ - - '='
473
+ - !ruby/object:Gem::Version
474
+ version: 0.1.14
475
+ - !ruby/object:Gem::Dependency
476
+ name: guard
477
+ requirement: !ruby/object:Gem::Requirement
478
+ requirements:
479
+ - - '='
480
+ - !ruby/object:Gem::Version
481
+ version: 2.15.0
482
+ type: :development
483
+ prerelease: false
484
+ version_requirements: !ruby/object:Gem::Requirement
485
+ requirements:
486
+ - - '='
487
+ - !ruby/object:Gem::Version
488
+ version: 2.15.0
489
+ - !ruby/object:Gem::Dependency
490
+ name: guard-minitest
491
+ requirement: !ruby/object:Gem::Requirement
492
+ requirements:
493
+ - - '='
494
+ - !ruby/object:Gem::Version
495
+ version: 2.4.6
496
+ type: :development
497
+ prerelease: false
498
+ version_requirements: !ruby/object:Gem::Requirement
499
+ requirements:
500
+ - - '='
501
+ - !ruby/object:Gem::Version
502
+ version: 2.4.6
503
+ - !ruby/object:Gem::Dependency
504
+ name: minitest
505
+ requirement: !ruby/object:Gem::Requirement
506
+ requirements:
507
+ - - '='
508
+ - !ruby/object:Gem::Version
509
+ version: 5.11.3
510
+ type: :development
511
+ prerelease: false
512
+ version_requirements: !ruby/object:Gem::Requirement
513
+ requirements:
514
+ - - '='
515
+ - !ruby/object:Gem::Version
516
+ version: 5.11.3
517
+ - !ruby/object:Gem::Dependency
518
+ name: minitest-fail-fast
519
+ requirement: !ruby/object:Gem::Requirement
520
+ requirements:
521
+ - - '='
522
+ - !ruby/object:Gem::Version
523
+ version: 0.1.0
524
+ type: :development
525
+ prerelease: false
526
+ version_requirements: !ruby/object:Gem::Requirement
527
+ requirements:
528
+ - - '='
529
+ - !ruby/object:Gem::Version
530
+ version: 0.1.0
531
+ - !ruby/object:Gem::Dependency
532
+ name: minitest-hooks
533
+ requirement: !ruby/object:Gem::Requirement
534
+ requirements:
535
+ - - '='
536
+ - !ruby/object:Gem::Version
537
+ version: 1.5.0
538
+ type: :development
539
+ prerelease: false
540
+ version_requirements: !ruby/object:Gem::Requirement
541
+ requirements:
542
+ - - '='
543
+ - !ruby/object:Gem::Version
544
+ version: 1.5.0
545
+ - !ruby/object:Gem::Dependency
546
+ name: minitest-reporters
547
+ requirement: !ruby/object:Gem::Requirement
548
+ requirements:
549
+ - - '='
550
+ - !ruby/object:Gem::Version
551
+ version: 1.3.6
552
+ type: :development
553
+ prerelease: false
554
+ version_requirements: !ruby/object:Gem::Requirement
555
+ requirements:
556
+ - - '='
557
+ - !ruby/object:Gem::Version
558
+ version: 1.3.6
559
+ - !ruby/object:Gem::Dependency
560
+ name: rake
561
+ requirement: !ruby/object:Gem::Requirement
562
+ requirements:
563
+ - - '='
564
+ - !ruby/object:Gem::Version
565
+ version: 12.3.2
566
+ type: :development
567
+ prerelease: false
568
+ version_requirements: !ruby/object:Gem::Requirement
569
+ requirements:
570
+ - - '='
571
+ - !ruby/object:Gem::Version
572
+ version: 12.3.2
573
+ - !ruby/object:Gem::Dependency
574
+ name: random-port
575
+ requirement: !ruby/object:Gem::Requirement
576
+ requirements:
577
+ - - '='
578
+ - !ruby/object:Gem::Version
579
+ version: 0.3.1
580
+ type: :development
581
+ prerelease: false
582
+ version_requirements: !ruby/object:Gem::Requirement
583
+ requirements:
584
+ - - '='
585
+ - !ruby/object:Gem::Version
586
+ version: 0.3.1
587
+ - !ruby/object:Gem::Dependency
588
+ name: rdoc
589
+ requirement: !ruby/object:Gem::Requirement
590
+ requirements:
591
+ - - '='
592
+ - !ruby/object:Gem::Version
593
+ version: 6.1.1
594
+ type: :development
595
+ prerelease: false
596
+ version_requirements: !ruby/object:Gem::Requirement
597
+ requirements:
598
+ - - '='
599
+ - !ruby/object:Gem::Version
600
+ version: 6.1.1
601
+ - !ruby/object:Gem::Dependency
602
+ name: rubocop
603
+ requirement: !ruby/object:Gem::Requirement
604
+ requirements:
605
+ - - '='
606
+ - !ruby/object:Gem::Version
607
+ version: '0.82'
608
+ type: :development
609
+ prerelease: false
610
+ version_requirements: !ruby/object:Gem::Requirement
611
+ requirements:
612
+ - - '='
613
+ - !ruby/object:Gem::Version
614
+ version: '0.82'
615
+ - !ruby/object:Gem::Dependency
616
+ name: rubocop-minitest
617
+ requirement: !ruby/object:Gem::Requirement
618
+ requirements:
619
+ - - '='
620
+ - !ruby/object:Gem::Version
621
+ version: 0.5.1
622
+ type: :development
623
+ prerelease: false
624
+ version_requirements: !ruby/object:Gem::Requirement
625
+ requirements:
626
+ - - '='
627
+ - !ruby/object:Gem::Version
628
+ version: 0.5.1
629
+ - !ruby/object:Gem::Dependency
630
+ name: rubocop-performance
631
+ requirement: !ruby/object:Gem::Requirement
632
+ requirements:
633
+ - - '='
634
+ - !ruby/object:Gem::Version
635
+ version: 1.5.2
636
+ type: :development
637
+ prerelease: false
638
+ version_requirements: !ruby/object:Gem::Requirement
639
+ requirements:
640
+ - - '='
641
+ - !ruby/object:Gem::Version
642
+ version: 1.5.2
643
+ - !ruby/object:Gem::Dependency
644
+ name: rubocop-rspec
645
+ requirement: !ruby/object:Gem::Requirement
646
+ requirements:
647
+ - - '='
648
+ - !ruby/object:Gem::Version
649
+ version: 1.33.0
650
+ type: :development
651
+ prerelease: false
652
+ version_requirements: !ruby/object:Gem::Requirement
653
+ requirements:
654
+ - - '='
655
+ - !ruby/object:Gem::Version
656
+ version: 1.33.0
657
+ - !ruby/object:Gem::Dependency
658
+ name: xcop
659
+ requirement: !ruby/object:Gem::Requirement
660
+ requirements:
661
+ - - '='
662
+ - !ruby/object:Gem::Version
663
+ version: '0.6'
664
+ type: :development
665
+ prerelease: false
666
+ version_requirements: !ruby/object:Gem::Requirement
667
+ requirements:
668
+ - - '='
669
+ - !ruby/object:Gem::Version
670
+ version: '0.6'
671
+ description: |-
672
+ Ticketing systems (Github, Jira, etc.) are strongly
673
+ integrated into our processes and everyone understands their necessity. As soon
674
+ as a developer becomes a lead/technical manager, he or she faces a set of
675
+ routine tasks that are related to ticketing work. On large projects this becomes
676
+ a problem, more and more you spend time running around on dashboards and
677
+ tickets, looking for incorrect deviations in tickets and performing routine
678
+ tasks instead of solving technical problems.
679
+ email: yurii.dubinka@gmail.com
680
+ executables:
681
+ - ".ruby-version"
682
+ - lazylead
683
+ extensions: []
684
+ extra_rdoc_files:
685
+ - readme.md
686
+ - license.txt
687
+ files:
688
+ - " .dockerignore"
689
+ - ".0pdd.yml"
690
+ - ".circleci/config.yml"
691
+ - ".circleci/release_image.sh"
692
+ - ".circleci/validate.sh"
693
+ - ".docker/Dockerfile"
694
+ - ".docker/build.sh"
695
+ - ".docker/docker-compose.yml"
696
+ - ".docker/readme.md"
697
+ - ".gitattributes"
698
+ - ".github/CODE_OF_CONDUCT.md"
699
+ - ".github/CONTRIBUTING.md"
700
+ - ".github/ISSUE_TEMPLATE.md"
701
+ - ".github/ISSUE_TEMPLATE/bug_report.md"
702
+ - ".github/ISSUE_TEMPLATE/feature_request.md"
703
+ - ".github/PULL_REQUEST_TEMPLATE.md"
704
+ - ".github/tasks.yml"
705
+ - ".github/trello.md"
706
+ - ".gitignore"
707
+ - ".pdd"
708
+ - ".rubocop.yml"
709
+ - ".ruby-version"
710
+ - ".rultor.yml"
711
+ - ".simplecov"
712
+ - ".travis.yml"
713
+ - Gemfile
714
+ - Guardfile
715
+ - Rakefile
716
+ - appveyor.yml
717
+ - bin/.ruby-version
718
+ - bin/lazylead
719
+ - build.sh
720
+ - deploy.sh
721
+ - lazylead.gemspec
722
+ - lib/lazylead.rb
723
+ - lib/lazylead/allocated.rb
724
+ - lib/lazylead/cli/app.rb
725
+ - lib/lazylead/confluence.rb
726
+ - lib/lazylead/email.rb
727
+ - lib/lazylead/exchange.rb
728
+ - lib/lazylead/log.rb
729
+ - lib/lazylead/model.rb
730
+ - lib/lazylead/postman.rb
731
+ - lib/lazylead/salt.rb
732
+ - lib/lazylead/schedule.rb
733
+ - lib/lazylead/smtp.rb
734
+ - lib/lazylead/system/empty.rb
735
+ - lib/lazylead/system/fake.rb
736
+ - lib/lazylead/system/jira.rb
737
+ - lib/lazylead/system/synced.rb
738
+ - lib/lazylead/task/alert.rb
739
+ - lib/lazylead/task/confluence_ref.rb
740
+ - lib/lazylead/task/echo.rb
741
+ - lib/lazylead/task/fix_version.rb
742
+ - lib/lazylead/task/missing_comment.rb
743
+ - lib/lazylead/version.rb
744
+ - lib/messages/due_date_expired.erb
745
+ - lib/messages/illegal_fixversion_change.erb
746
+ - lib/messages/missing_comment.erb
747
+ - license.txt
748
+ - readme.md
749
+ - test/lazylead/allocated_test.rb
750
+ - test/lazylead/cli/app_test.rb
751
+ - test/lazylead/confluence_test.rb
752
+ - test/lazylead/exchange_test.rb
753
+ - test/lazylead/model_test.rb
754
+ - test/lazylead/salt_test.rb
755
+ - test/lazylead/smoke_test.rb
756
+ - test/lazylead/smtp_test.rb
757
+ - test/lazylead/system/jira_test.rb
758
+ - test/lazylead/task/confluence_ref_test.rb
759
+ - test/lazylead/task/duedate_test.rb
760
+ - test/lazylead/task/echo_test.rb
761
+ - test/lazylead/task/fix_version_test.rb
762
+ - test/lazylead/task/missing_comment_test.rb
763
+ - test/lazylead/version_test.rb
764
+ - test/sqlite_test.rb
765
+ - test/test.rb
766
+ - todo.yml
767
+ - upgrades/sqlite/001-install-main-lazylead-tables.sql
768
+ - upgrades/sqlite/999.testdata.sql
769
+ homepage: http://github.com/dgroup/lazylead
770
+ licenses:
771
+ - MIT
772
+ metadata: {}
773
+ post_install_message: |-
774
+ Thanks for installing Lazylead v0.0.0!
775
+ Read our blog posts: https://lazylead.org
776
+ Stay in touch with the community in Telegram: https://t.me/lazylead
777
+ Follow us on Twitter: https://twitter.com/lazylead
778
+ If you have any issues, report to our GitHub repo: https://github.com/dgroup/lazylead
779
+ rdoc_options:
780
+ - "--charset=UTF-8"
781
+ require_paths:
782
+ - lib
783
+ required_ruby_version: !ruby/object:Gem::Requirement
784
+ requirements:
785
+ - - ">="
786
+ - !ruby/object:Gem::Version
787
+ version: 2.6.5
788
+ required_rubygems_version: !ruby/object:Gem::Requirement
789
+ requirements:
790
+ - - ">="
791
+ - !ruby/object:Gem::Version
792
+ version: '0'
793
+ requirements: []
794
+ rubygems_version: 3.0.3
795
+ signing_key:
796
+ specification_version: 2
797
+ summary: Eliminate the annoying work within bug-trackers.
798
+ test_files:
799
+ - test/lazylead/allocated_test.rb
800
+ - test/lazylead/cli/app_test.rb
801
+ - test/lazylead/confluence_test.rb
802
+ - test/lazylead/exchange_test.rb
803
+ - test/lazylead/model_test.rb
804
+ - test/lazylead/salt_test.rb
805
+ - test/lazylead/smoke_test.rb
806
+ - test/lazylead/smtp_test.rb
807
+ - test/lazylead/system/jira_test.rb
808
+ - test/lazylead/task/confluence_ref_test.rb
809
+ - test/lazylead/task/duedate_test.rb
810
+ - test/lazylead/task/echo_test.rb
811
+ - test/lazylead/task/fix_version_test.rb
812
+ - test/lazylead/task/missing_comment_test.rb
813
+ - test/lazylead/version_test.rb
814
+ - test/sqlite_test.rb
815
+ - test/test.rb