lazylead 0.6.1 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
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