lazylead 0.6.1 → 0.6.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: 847a338ce12f9cd01529f1e6a66d810e68cde504e2a0873ecb41b869adcda7cc
4
- data.tar.gz: 8ca65bb46faced2b89f07f1b65002b2890ecf2c78d4d53e74d017a712133d0f4
3
+ metadata.gz: 669da4d2f993894e78fcd42508429667cb29afe9082012c8dadee88e77dc0518
4
+ data.tar.gz: '0976452e6d5aaf5e282f468f05620915e73ee5cb2566ff9e4441d094d4f3dc3f'
5
5
  SHA512:
6
- metadata.gz: f527721696b9f7215efc7628ea39c6cbf18c3145908d715ef5e698de57fcb5b6b28af8d0fe167b54b5418c9f15915071d0ff7ff2c7df3315f107f0d49c4c95d9
7
- data.tar.gz: 1a71de8819ce9aa81fd0e11c4d0248e8b44d846d17f71adb0be18c6a74c9fe58d2ad257fd639f263c29546898cea0725dd6850dbdb417de6e03f541009fbebe0
6
+ metadata.gz: ec9719d37253c81db0d59d6d3f216e8d677a8d3a4543776409782236c01428fe97a07e3c58e95150c031506d894a8188b2ce551a2ffa79c4b364edf60774ad8a
7
+ data.tar.gz: 57662e5ba79d877e4b7310f0ff20fa767e6b4246ba46f7ffd30afeee86215f311dffeb2e947a86c867b3554ac20b1711b1d69edbd493e971c01d170fccd85aed
@@ -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.6.1"
35
+ s.version = "0.6.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.6.1!
48
+ s.post_install_message = "Thanks for installing Lazylead v0.6.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
@@ -25,26 +25,6 @@
25
25
  require "tilt"
26
26
 
27
27
  module Lazylead
28
- # Email notifications utilities.
29
- module Emailing
30
- # Construct html document from template and binds.
31
- def make_body(opts)
32
- Email.new(
33
- opts["template"],
34
- opts.merge(version: Lazylead::VERSION)
35
- ).render
36
- end
37
-
38
- # Split text with email addresses by ',' and trim all elements if needed.
39
- def split(type, opts)
40
- if opts[type].include? ","
41
- opts[type].split(",").map(&:strip).reject(&:empty?)
42
- else
43
- [opts[type]]
44
- end
45
- end
46
- end
47
-
48
28
  # An email regarding tickets based on file with markup.
49
29
  #
50
30
  # The 'tilt' gem was used as a template engine.
@@ -39,8 +39,6 @@ module Lazylead
39
39
  # Copyright:: Copyright (c) 2019-2020 Yurii Dubinka
40
40
  # License:: MIT
41
41
  class Exchange
42
- include Emailing
43
-
44
42
  def initialize(
45
43
  log = Log.new, salt = Salt.new("exchange_salt"), opts = ENV.to_h
46
44
  )
@@ -52,38 +50,28 @@ module Lazylead
52
50
  # Send an email.
53
51
  # :opts :: the mail configuration like from, cc, subject, template.
54
52
  def send(opts)
55
- to = opts["to"] || opts[:to]
56
- to = [to] unless to.is_a? Array
57
- if to.reject { |e| e.nil? || e.blank? }.empty?
58
- @log.warn "Email can't be sent to '#{to}, more: '#{opts}'"
59
- return
53
+ if opts.msg_to.empty?
54
+ @log.warn "ll-012: Email can't be sent to '#{opts.msg_to}," \
55
+ " more: '#{opts}'"
56
+ else
57
+ msg = make_msg opts
58
+ cli.send_message msg
59
+ msg[:file_attachments].each(&:close) unless opts.msg_attachments.empty?
60
+ @log.debug "#{__FILE__} sent '#{opts['subject']}' to '#{opts.msg_to}'."
60
61
  end
61
- msg = make_msg(to, opts)
62
- msg.update(cc_recipients: opts["cc"]) if opts.key? "cc"
63
- add_attachments(msg, opts)
64
- cli.send_message msg
65
- close_attachments msg
66
- @log.debug "#{__FILE__} sent '#{opts['subject']}' to '#{to}'."
67
62
  end
68
63
 
69
- def make_msg(to, opts)
70
- {
64
+ def make_msg(opts)
65
+ msg = {
71
66
  subject: opts["subject"],
72
- body: make_body(opts),
67
+ body: opts.msg_body,
73
68
  body_type: "HTML",
74
- to_recipients: to
69
+ to_recipients: opts.msg_to
75
70
  }
76
- end
77
-
78
- def add_attachments(msg, opts)
79
- return unless opts.key? "attachments"
80
- files = split("attachments", opts).map { |f| File.open(f, "r") }
81
- msg[:file_attachments] = files
82
- end
83
-
84
- def close_attachments(msg)
85
- return if msg[:file_attachments].nil? || msg[:file_attachments].empty?
86
- msg[:file_attachments].each(&:close)
71
+ files = opts.msg_attachments.map { |f| File.open(f, "r") }
72
+ msg[:file_attachments] = files unless files.empty?
73
+ msg[:cc_recipients] = opts["cc"] if opts.key? "cc"
74
+ msg
87
75
  end
88
76
 
89
77
  private
@@ -34,7 +34,8 @@ module Lazylead
34
34
  # License:: MIT
35
35
  class Opts
36
36
  extend Forwardable
37
- def_delegators :@origin, :[], :[]=, :to_s, :key?, :fetch, :merge, :except
37
+ def_delegators :@origin, :[], :[]=, :to_s, :key?, :fetch, :except, :each,
38
+ :each_pair, :sort_by
38
39
 
39
40
  def initialize(origin = {})
40
41
  @origin = origin
@@ -77,5 +78,51 @@ module Lazylead
77
78
  return Salt.new(sid).decrypt(text) if ENV.key? sid
78
79
  text
79
80
  end
81
+
82
+ def merge(args)
83
+ return self unless args.is_a? Hash
84
+ Opts.new @origin.merge(args)
85
+ end
86
+
87
+ # Construct html document from template and binds.
88
+ def msg_body(template = "template")
89
+ Email.new(
90
+ to_h[template],
91
+ to_h.merge(version: Lazylead::VERSION)
92
+ ).render
93
+ end
94
+
95
+ def msg_to(delim = ",")
96
+ sliced delim, :to, "to"
97
+ end
98
+
99
+ def msg_cc(delim = ",")
100
+ sliced delim, :cc, "cc"
101
+ end
102
+
103
+ def msg_from(delim = ",")
104
+ sliced delim, :from, "from"
105
+ end
106
+
107
+ def msg_attachments(delim = ",")
108
+ sliced(delim, :attachments, "attachments").select { |f| File.file? f }
109
+ end
110
+
111
+ #
112
+ # Find the option by key and split by delimiter
113
+ # Opts.new("key" => "a,b").sliced(",", "key") => [a, b]
114
+ # Opts.new(key: "a,b").sliced(",", :key) => [a, b]
115
+ # Opts.new(key: "a,b").sliced(",", "key", :key) => [a, b]
116
+ # Opts.new(key: "").sliced ",", :key) => []
117
+ #
118
+ def sliced(delim, *keys)
119
+ return [] if keys.empty?
120
+ key = keys.detect { |k| key? k }
121
+ val = to_h[key]
122
+ return [] if val.nil? || val.blank?
123
+ return val if val.is_a? Array
124
+ return [val] unless val.include? delim
125
+ slice key, delim
126
+ end
80
127
  end
81
128
  end
@@ -44,8 +44,6 @@ module Lazylead
44
44
  # Copyright:: Copyright (c) 2019-2020 Yurii Dubinka
45
45
  # License:: MIT
46
46
  class Postman
47
- include Emailing
48
-
49
47
  def initialize(log = Log.new)
50
48
  @log = log
51
49
  end
@@ -53,32 +51,29 @@ module Lazylead
53
51
  # Send an email.
54
52
  # :opts :: the mail configuration like to, from, cc, subject, template.
55
53
  def send(opts)
56
- mail = make_email(opts)
57
- mail.deliver
58
- @log.debug "#{__FILE__} sent '#{mail.subject}' to '#{mail.to}'."
54
+ if opts.msg_to.empty?
55
+ @log.warn "ll-013: Email can't be sent to '#{opts.msg_to}," \
56
+ " more: '#{opts}'"
57
+ else
58
+ mail = make_email(opts)
59
+ mail.deliver
60
+ @log.debug "#{__FILE__} sent '#{mail.subject}' to '#{mail.to}'."
61
+ end
59
62
  end
60
63
 
61
64
  # Construct an email based on input arguments
62
65
  def make_email(opts)
63
66
  mail = Mail.new
64
- mail.to opts[:to] || opts["to"]
65
- mail.from opts["from"]
66
- mail.cc opts["cc"] if opts.key? "cc"
67
+ mail.to opts.msg_to
68
+ mail.from opts.msg_from
69
+ mail.cc opts.msg_cc if opts.key? "cc"
67
70
  mail.subject opts["subject"]
68
- html = make_body(opts)
69
71
  mail.html_part do
70
72
  content_type "text/html; charset=UTF-8"
71
- body html
73
+ body opts.msg_body
72
74
  end
73
- add_attachments mail, opts
75
+ opts.msg_attachments.each { |f| mail.add_file f }
74
76
  mail
75
77
  end
76
-
77
- def add_attachments(mail, opts)
78
- return unless opts.key?("attachments") || opts.key?(:attachments)
79
- attach = opts["attachments"] || opts[:attachments]
80
- return if attach.nil?
81
- attach.select { |a| File.file? a }.each { |a| mail.add_file a }
82
- end
83
78
  end
84
79
  end
@@ -36,7 +36,9 @@ module Lazylead
36
36
  name = attachment.attrs["filename"].downcase
37
37
  return false unless attachment.attrs["size"].to_i > 5120
38
38
  return true if File.extname(name).start_with?(".log", ".txt")
39
- %w[.log.zip .log.gz .log.tar.gz].any? { |l| name.end_with? l }
39
+ %w[.log.zip .log.gz .log.tar.gz logs.7z log.7z].any? do |l|
40
+ name.end_with? l
41
+ end
40
42
  end
41
43
  end
42
44
  end
@@ -86,8 +86,10 @@ module Lazylead
86
86
  @issue.add_label("LL.IllegalChangeOfFixVersion") unless @silent
87
87
  end
88
88
 
89
- def current
90
- @issue.fields["fixVersions"].first["name"]
89
+ def to
90
+ versions = @issue.fields["fixVersions"]
91
+ return "" if versions.nil? || versions.empty?
92
+ versions.map { |x| x["name"] }.join(",")
91
93
  end
92
94
  end
93
95
  end
@@ -49,36 +49,28 @@ module Lazylead
49
49
  "-r#{opts['since_rev']}:HEAD #{opts['svn_url']}"
50
50
  ]
51
51
  stdout = `#{cmd.join(" ")}`
52
- send_email stdout, postman, opts unless stdout.blank?
52
+ send_email postman, opts.merge(stdout: stdout) unless stdout.blank?
53
53
  end
54
54
 
55
55
  # Send email with svn log as an attachment.
56
56
  # The attachment won't be stored locally and we'll be removed once
57
57
  # mail sent.
58
- def send_email(stdout, postman, opts)
58
+ def send_email(postman, opts)
59
59
  Dir.mktmpdir do |dir|
60
60
  name = "svn-log-#{Date.today.strftime('%d-%b-%Y')}.html"
61
61
  f = File.open(File.join(dir, name), "w")
62
62
  begin
63
- f.write make_attachment(stdout, opts)
63
+ f.write opts.msg_body("template-attachment")
64
64
  f.close
65
- postman.send opts.merge(stdout: stdout, attachments: [f.path])
65
+ postman.send opts.merge(attachments: [f.path])
66
66
  ensure
67
67
  File.delete(f)
68
68
  end
69
69
  rescue StandardError => e
70
70
  @log.error "ll-010: Can't send an email for #{opts} due to " \
71
- "#{Backtrace.new(e)}' based on #{stdout}'"
71
+ "#{Backtrace.new(e)}'"
72
72
  end
73
73
  end
74
-
75
- # Assemble HTML for attachment based on SVN output
76
- def make_attachment(stdout, opts)
77
- Email.new(
78
- opts["template-attachment"],
79
- opts.merge(stdout: stdout, version: Lazylead::VERSION)
80
- ).render
81
- end
82
74
  end
83
75
  end
84
76
  end
@@ -107,5 +107,26 @@ module Lazylead
107
107
  def header
108
108
  @header ||= lines.first.split(" | ").reject(&:blank?)
109
109
  end
110
+
111
+ # Detect SVN diff lines with particular text
112
+ def diff(text)
113
+ @diff ||= begin
114
+ files = affected(text).uniq
115
+ @commit.split("Index: ")
116
+ .select { |i| files.any? { |f| i.start_with? f } }
117
+ .map { |i| i.split "\n" }
118
+ .flatten
119
+ end
120
+ end
121
+
122
+ # Detect affected files with particular text
123
+ def affected(text)
124
+ occurrences = lines.each_index.select do |i|
125
+ lines[i].start_with?("+") && text.any? { |t| lines[i].include? t }
126
+ end
127
+ occurrences.map do |occ|
128
+ lines[2..occ].reverse.find { |l| l.start_with? "Index: " }[7..-1]
129
+ end
130
+ end
110
131
  end
111
132
  end
@@ -23,5 +23,5 @@
23
23
  # OR OTHER DEALINGS IN THE SOFTWARE.
24
24
 
25
25
  module Lazylead
26
- VERSION = "0.6.1"
26
+ VERSION = "0.6.2"
27
27
  end
@@ -92,7 +92,8 @@
92
92
  <tr>
93
93
  <th id="key">Key</th>
94
94
  <th id="priority">Priority</th>
95
- <th id="version">Fix Version</th>
95
+ <th id="from">From</th>
96
+ <th id="to">To</th>
96
97
  <th id="when">When</th>
97
98
  <th id="who">Who</th>
98
99
  <th id="reporter">Reporter</th>
@@ -102,7 +103,12 @@
102
103
  <tr>
103
104
  <td><a href='<%= v.issue.url %>'><%= v.issue.key %></a></td>
104
105
  <td><%= v.issue.priority %></td>
105
- <td><%= v.current %></td>
106
+ <td><%= v.last["items"]
107
+ .select { |h| h["field"] == "Fix Version" }
108
+ .map { |h| h["fromString"] }
109
+ .reject(&:blank?)
110
+ .join(",") %></td>
111
+ <td><%= v.to %></td>
106
112
  <td><%= DateTime.parse(v.last["created"])
107
113
  .strftime('%d-%b-%Y %I:%M:%S %p') %></td>
108
114
  <td><span style='color: red'><%= v.last["author"]["displayName"] %></span>
@@ -64,7 +64,7 @@
64
64
  padding: 36px
65
65
  }
66
66
 
67
- .commit {
67
+ .commit, .table-of-contents {
68
68
  min-width: 100%;
69
69
  border-radius: 3.5px;
70
70
  overflow: hidden;
@@ -74,26 +74,36 @@
74
74
  border: 1px solid #BCC6CC;
75
75
  }
76
76
 
77
- .commit * {
77
+ .commit *, .table-of-contents * {
78
78
  padding-left: 4px;
79
79
  font-size: 8px;
80
80
  line-height: 15px;
81
81
  }
82
+
83
+ .table-of-contents {
84
+ border: none;
85
+ }
82
86
  </style>
83
87
  <title>SVN log</title>
84
88
  </head>
85
89
  <body>
86
90
  <p>Hi,</p>
87
- <p>The following file(s) changed since <code><%= since_rev %></code> rev in <a href="<%= svn_url %>"><%= svn_url %></a>:</p>
91
+ <p>Commit(s) since <code><%= since_rev %></code> revision in <a href="<%= svn_url %>"><%= svn_url %></a>:</p>
92
+ <div id="table-of-contents" class="table-of-contents">
93
+ <ul>
94
+ <% stdout.split("------------------------------------------------------------------------").reject(&:blank?).reverse.each do |commit| %>
95
+ <% details = commit.split("\n").reject(&:blank?).first.split("|").map(&:strip).reject(&:blank?) %>
96
+ <li><a href="#<%= details[0] %>"><%= details[0] %></a> by <%= details[1] %> at <%= details[2] %></li>
97
+ <% end %>
98
+ </ul>
99
+ </div>
88
100
  <% stdout.split("------------------------------------------------------------------------").reject(&:blank?).reverse.each do |commit| %>
89
101
  <div class="commit">
90
102
  <% commit.split("\n").reject(&:blank?).each_with_index do |line, index| %>
91
103
  <% if index.zero? %>
92
104
  <% details = line.split("|").map(&:strip).reject(&:blank?) %>
93
- <p style="background: gainsboro;">
94
- <a href="<%= commit_url %><%= details[0][1 .. -1] %>"><%= details[0] %></a>
95
- by <a href="<%= user %><%= details[1] %>"><%= details[1] %></a>
96
- at <span style="color: #275a90;"><%= details[2] %></span>
105
+ <p style="background: gainsboro;" id="<%= details[0] %>"><a href="<%= commit_url %><%= details[0][1..-1] %>"><%= details[0] %></a> by <a href="<%= user %><%= details[1] %>"><%= details[1] %></a> at <span style="color: #275a90;"><%= details[2] %></span>
106
+ <a href="#table-of-contents">&#8593;</a>
97
107
  </p>
98
108
  <% else %>
99
109
  <% if line.start_with?("+++") || line.start_with?("---") %>
@@ -103,7 +113,7 @@
103
113
  <% elsif line.start_with?("-") %>
104
114
  <p style="<%= "background: lightsalmon;" %>"><%= line.gsub(/[<>]/, '<' => '&lt;', '>' => '&gt;') %></p>
105
115
  <% else %>
106
- <p style="background: gainsboro;"><%= line.gsub(/[<>]/,'<' => '&lt;', '>' => '&gt;') %></p>
116
+ <p style="background: gainsboro;"><%= line.gsub(/[<>]/, '<' => '&lt;', '>' => '&gt;') %></p>
107
117
  <% end %>
108
118
  <% end %>
109
119
  <% end %>
@@ -93,7 +93,7 @@
93
93
  by <a href="<%= user %><%= commit.author %>"><%= commit.author %></a>
94
94
  at <span style="color: #275a90;"><%= commit.time %></span>
95
95
  </p>
96
- <% commit.lines[2..-1].each do |line| %>
96
+ <% commit.diff(text.split(",")).each do |line| %>
97
97
  <% if line.start_with?("+++") || line.start_with?("---") %>
98
98
  <p style="background: gainsboro;"><%= line.gsub(/[<>]/, '<' => '&lt;', '>' => '&gt;') %></p>
99
99
  <% elsif text.split(",").any? { |t| line.include? t } %>
@@ -66,5 +66,40 @@ module Lazylead
66
66
  test "except keys" do
67
67
  assert_equal 1, Opts.new("one" => "1", "two" => "2").except("one").size
68
68
  end
69
+
70
+ test "attachment is blank" do
71
+ assert_empty Opts.new("attachments" => "").msg_attachments
72
+ end
73
+
74
+ test "attachment is nil" do
75
+ assert_empty Opts.new("attachments" => nil).msg_attachments
76
+ end
77
+
78
+ test "attachment is absent" do
79
+ assert_empty Opts.new({}).msg_attachments
80
+ end
81
+
82
+ test "attachment is present" do
83
+ assert_equal %w[readme.md],
84
+ Opts.new("attachments" => "readme.md").msg_attachments
85
+ end
86
+
87
+ test "attachments are present" do
88
+ assert_equal %w[readme.md license.txt],
89
+ Opts.new("attachments" => "readme.md,license.txt")
90
+ .msg_attachments
91
+ end
92
+
93
+ test "attachments are present as symbol" do
94
+ assert_equal %w[readme.md license.txt],
95
+ Opts.new(attachments: " readme.md , license.txt ")
96
+ .msg_attachments
97
+ end
98
+
99
+ test "attachments is present as array" do
100
+ assert_equal %w[readme.md license.txt],
101
+ Opts.new(attachments: %w[readme.md license.txt])
102
+ .msg_attachments
103
+ end
69
104
  end
70
105
  end
@@ -24,6 +24,7 @@
24
24
 
25
25
  require_relative "../test"
26
26
  require_relative "../../lib/lazylead/log"
27
+ require_relative "../../lib/lazylead/opts"
27
28
  require_relative "../../lib/lazylead/salt"
28
29
  require_relative "../../lib/lazylead/smtp"
29
30
  require_relative "../../lib/lazylead/postman"
@@ -46,11 +47,13 @@ module Lazylead
46
47
  smtp_pass: ENV["LL_SMTP_PASS"]
47
48
  ).enable
48
49
  Postman.new.send(
49
- "to" => ENV["LL_SMTP_TO"],
50
- "from" => ENV["LL_SMTP_FROM"],
51
- "attachments" => ["readme.md"],
52
- "subject" => "[LL] Attachments",
53
- "template" => "lib/messages/savepoint.erb"
50
+ Opts.new(
51
+ "to" => ENV["LL_SMTP_TO"],
52
+ "from" => ENV["LL_SMTP_FROM"],
53
+ "attachments" => ["readme.md"],
54
+ "subject" => "[LL] Attachments",
55
+ "template" => "lib/messages/savepoint.erb"
56
+ )
54
57
  )
55
58
  end
56
59
  end
@@ -42,6 +42,7 @@ module Lazylead
42
42
  "from" => "ll@company.com",
43
43
  "jql" => "key in ('DATAJDBC-480') and fixVersion is not empty",
44
44
  "allowed" => "tom,mike,bob",
45
+ "fields" => "description,reporter,priority,summary,created,fixVersions",
45
46
  "subject" => "FixVersion: How dare you?",
46
47
  "template" => "lib/messages/illegal_fixversion_change.erb"
47
48
  )
@@ -24,6 +24,7 @@
24
24
 
25
25
  require_relative "../../test"
26
26
  require_relative "../../../lib/lazylead/smtp"
27
+ require_relative "../../../lib/lazylead/opts"
27
28
  require_relative "../../../lib/lazylead/postman"
28
29
  require_relative "../../../lib/lazylead/task/savepoint"
29
30
 
@@ -36,10 +37,12 @@ module Lazylead
36
37
  Task::Savepoint.new.run(
37
38
  [],
38
39
  Postman.new,
39
- "from" => "fake@email.com",
40
- "subject" => "[LL] Configuration backup",
41
- "template" => "lib/messages/savepoint.erb",
42
- "to" => "big.boss@example.com"
40
+ Opts.new(
41
+ "from" => "fake@email.com",
42
+ "subject" => "[LL] Configuration backup",
43
+ "template" => "lib/messages/savepoint.erb",
44
+ "to" => "big.boss@example.com"
45
+ )
43
46
  )
44
47
  assert_equal 'text/markdown; filename="readme.md"',
45
48
  Mail::TestMailer.deliveries
@@ -41,7 +41,7 @@ module Lazylead
41
41
  Postman.new,
42
42
  Opts.new(
43
43
  "from" => "svnlog@test.com",
44
- "text" => "ping,https://github.com/dgroup/lazylead",
44
+ "text" => "ping",
45
45
  "svn_url" => "https://svn.riouxsvn.com/touch4ll",
46
46
  "svn_user" => ENV["svn_log_user"],
47
47
  "svn_password" => ENV["svn_log_password"],
@@ -57,5 +57,47 @@ module Lazylead
57
57
  assert_email_line "[SVN] Changes with text",
58
58
  %w[r2 by dgroup at 2020-08-16]
59
59
  end
60
+
61
+ test "test" do
62
+ diff = <<~MSG
63
+
64
+ r3 | dgroup | 2020-08-16 11:27:01 +0300 (Sun, 16 Aug 2020) | 1 line
65
+
66
+ Add description for 189 issue
67
+
68
+ Index: 189.md
69
+ ===================================================================
70
+ --- 189.md (nonexistent)
71
+ +++ 189.md (revision 3)
72
+ @@ -0,0 +1,9 @@
73
+ +*Issue 189*
74
+ +https://github.com/dgroup/lazylead/issues/189
75
+ +
76
+ +Find stable svn repo which can be used for stable test, for
77
+ +now only floating repo used for testing locally. Also, create a new
78
+ +method "ping" which can be used during tests like
79
+ +```ruby
80
+ +skip "No connection available to svn repo" unless ping("https://riouxsvn.com")
81
+ +```
82
+
83
+ Index: readme.md
84
+ ===================================================================
85
+ --- readme.md (revision 2)
86
+ +++ readme.md (revision 3)
87
+ @@ -3,4 +3,5 @@
88
+ More
89
+ - https://github.com/dgroup/lazylead
90
+ - https://github.com/dgroup/lazylead/blob/master/lib/lazylead/task/touch.rb
91
+ - - https://github.com/dgroup/lazylead/blob/master/test/lazylead/task/touch_test.rb
92
+
93
+ + - https://github.com/dgroup/lazylead/blob/master/test/lazylead/task/touch_test.rb
94
+ +
95
+
96
+
97
+
98
+ MSG
99
+ assert_equal 15, Entry.new(diff).diff(%w[ping]).size,
100
+ "There is one commit with 'ping' word where diff has 14 lines"
101
+ end
60
102
  end
61
103
  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.6.1
4
+ version: 0.6.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: 2020-11-25 00:00:00.000000000 Z
11
+ date: 2020-12-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -698,7 +698,7 @@ licenses:
698
698
  - MIT
699
699
  metadata: {}
700
700
  post_install_message: |-
701
- Thanks for installing Lazylead v0.6.1!
701
+ Thanks for installing Lazylead v0.6.2!
702
702
  Read our blog posts: https://lazylead.org
703
703
  Stay in touch with the community in Telegram: https://t.me/lazylead
704
704
  Follow us on Twitter: https://twitter.com/lazylead