rumble 0.7.0 → 0.9.0

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.
data/Gemfile.lock ADDED
@@ -0,0 +1,314 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ rumble (0.0.0)
5
+ liquid (= 5.5.0)
6
+ mail (= 2.8.1)
7
+ net-smtp (= 0.5.0)
8
+ net-smtp-proxy (= 2.0.0)
9
+ openssl (~> 3.0)
10
+ rainbow (= 3.1.1)
11
+ redcarpet (= 3.6.0)
12
+ slop (= 4.10.1)
13
+ uuidtools (= 2.2.0)
14
+
15
+ GEM
16
+ remote: https://rubygems.org/
17
+ specs:
18
+ actionpack (8.0.1)
19
+ actionview (= 8.0.1)
20
+ activesupport (= 8.0.1)
21
+ nokogiri (>= 1.8.5)
22
+ rack (>= 2.2.4)
23
+ rack-session (>= 1.0.1)
24
+ rack-test (>= 0.6.3)
25
+ rails-dom-testing (~> 2.2)
26
+ rails-html-sanitizer (~> 1.6)
27
+ useragent (~> 0.16)
28
+ actionview (8.0.1)
29
+ activesupport (= 8.0.1)
30
+ builder (~> 3.1)
31
+ erubi (~> 1.11)
32
+ rails-dom-testing (~> 2.2)
33
+ rails-html-sanitizer (~> 1.6)
34
+ activesupport (8.0.1)
35
+ base64
36
+ benchmark (>= 0.3)
37
+ bigdecimal
38
+ concurrent-ruby (~> 1.0, >= 1.3.1)
39
+ connection_pool (>= 2.2.5)
40
+ drb
41
+ i18n (>= 1.6, < 2)
42
+ logger (>= 1.4.2)
43
+ minitest (>= 5.1)
44
+ securerandom (>= 0.3)
45
+ tzinfo (~> 2.0, >= 2.0.5)
46
+ uri (>= 0.13.1)
47
+ ast (2.4.2)
48
+ backtrace (0.4.0)
49
+ base64 (0.2.0)
50
+ benchmark (0.4.0)
51
+ bigdecimal (3.1.9)
52
+ builder (3.3.0)
53
+ concurrent-ruby (1.3.5)
54
+ connection_pool (2.5.0)
55
+ crass (1.0.6)
56
+ cucumber (9.2.1)
57
+ builder (~> 3.2)
58
+ cucumber-ci-environment (> 9, < 11)
59
+ cucumber-core (> 13, < 14)
60
+ cucumber-cucumber-expressions (~> 17.0)
61
+ cucumber-gherkin (> 24, < 28)
62
+ cucumber-html-formatter (> 20.3, < 22)
63
+ cucumber-messages (> 19, < 25)
64
+ diff-lcs (~> 1.5)
65
+ mini_mime (~> 1.1)
66
+ multi_test (~> 1.1)
67
+ sys-uname (~> 1.2)
68
+ cucumber-ci-environment (10.0.1)
69
+ cucumber-core (13.0.3)
70
+ cucumber-gherkin (>= 27, < 28)
71
+ cucumber-messages (>= 20, < 23)
72
+ cucumber-tag-expressions (> 5, < 7)
73
+ cucumber-cucumber-expressions (17.1.0)
74
+ bigdecimal
75
+ cucumber-gherkin (27.0.0)
76
+ cucumber-messages (>= 19.1.4, < 23)
77
+ cucumber-html-formatter (21.9.0)
78
+ cucumber-messages (> 19, < 28)
79
+ cucumber-messages (22.0.0)
80
+ cucumber-tag-expressions (6.1.2)
81
+ date (3.4.1)
82
+ diff-lcs (1.5.1)
83
+ docile (1.4.1)
84
+ drb (2.2.1)
85
+ elapsed (0.0.1)
86
+ loog (> 0)
87
+ tago (> 0)
88
+ erubi (1.13.1)
89
+ ffi (1.17.1-aarch64-linux-gnu)
90
+ ffi (1.17.1-aarch64-linux-musl)
91
+ ffi (1.17.1-arm-linux-gnu)
92
+ ffi (1.17.1-arm-linux-musl)
93
+ ffi (1.17.1-arm64-darwin)
94
+ ffi (1.17.1-x64-mingw-ucrt)
95
+ ffi (1.17.1-x86-linux-gnu)
96
+ ffi (1.17.1-x86-linux-musl)
97
+ ffi (1.17.1-x86_64-darwin)
98
+ ffi (1.17.1-x86_64-linux-gnu)
99
+ ffi (1.17.1-x86_64-linux-musl)
100
+ i18n (1.14.7)
101
+ concurrent-ruby (~> 1.0)
102
+ io-console (0.8.0)
103
+ irb (1.15.1)
104
+ pp (>= 0.6.0)
105
+ rdoc (>= 4.0.0)
106
+ reline (>= 0.4.2)
107
+ json (2.9.1)
108
+ language_server-protocol (3.17.0.4)
109
+ liquid (5.5.0)
110
+ logger (1.6.5)
111
+ loofah (2.24.0)
112
+ crass (~> 1.0.2)
113
+ nokogiri (>= 1.12.0)
114
+ loog (0.6.0)
115
+ mail (2.8.1)
116
+ mini_mime (>= 0.1.1)
117
+ net-imap
118
+ net-pop
119
+ net-smtp
120
+ mini_mime (1.1.5)
121
+ mini_portile2 (2.8.8)
122
+ minitest (5.25.4)
123
+ multi_test (1.1.0)
124
+ net-imap (0.5.5)
125
+ date
126
+ net-protocol
127
+ net-pop (0.1.2)
128
+ net-protocol
129
+ net-protocol (0.2.2)
130
+ timeout
131
+ net-smtp (0.5.0)
132
+ net-protocol
133
+ net-smtp-proxy (2.0.0)
134
+ proxifier (~> 1.0)
135
+ nokogiri (1.18.2)
136
+ mini_portile2 (~> 2.8.2)
137
+ racc (~> 1.4)
138
+ nokogiri (1.18.2-aarch64-linux-gnu)
139
+ racc (~> 1.4)
140
+ nokogiri (1.18.2-aarch64-linux-musl)
141
+ racc (~> 1.4)
142
+ nokogiri (1.18.2-arm-linux-gnu)
143
+ racc (~> 1.4)
144
+ nokogiri (1.18.2-arm-linux-musl)
145
+ racc (~> 1.4)
146
+ nokogiri (1.18.2-arm64-darwin)
147
+ racc (~> 1.4)
148
+ nokogiri (1.18.2-x64-mingw-ucrt)
149
+ racc (~> 1.4)
150
+ nokogiri (1.18.2-x86_64-darwin)
151
+ racc (~> 1.4)
152
+ nokogiri (1.18.2-x86_64-linux-gnu)
153
+ racc (~> 1.4)
154
+ nokogiri (1.18.2-x86_64-linux-musl)
155
+ racc (~> 1.4)
156
+ openssl (3.3.0)
157
+ os (1.1.4)
158
+ parallel (1.26.3)
159
+ parser (3.3.7.0)
160
+ ast (~> 2.4.1)
161
+ racc
162
+ pp (0.6.2)
163
+ prettyprint
164
+ prettyprint (0.2.0)
165
+ proxifier (1.0.3)
166
+ psych (5.2.3)
167
+ date
168
+ stringio
169
+ qbash (0.3.2)
170
+ backtrace (> 0)
171
+ elapsed (> 0)
172
+ loog (> 0)
173
+ tago (> 0)
174
+ racc (1.8.1)
175
+ rack (3.1.9)
176
+ rack-session (2.1.0)
177
+ base64 (>= 0.1.0)
178
+ rack (>= 3.0.0)
179
+ rack-test (2.2.0)
180
+ rack (>= 1.3)
181
+ rackup (2.2.1)
182
+ rack (>= 3)
183
+ rails-dom-testing (2.2.0)
184
+ activesupport (>= 5.0.0)
185
+ minitest
186
+ nokogiri (>= 1.6)
187
+ rails-html-sanitizer (1.6.2)
188
+ loofah (~> 2.21)
189
+ nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
190
+ railties (8.0.1)
191
+ actionpack (= 8.0.1)
192
+ activesupport (= 8.0.1)
193
+ irb (~> 1.13)
194
+ rackup (>= 1.0.0)
195
+ rake (>= 12.2)
196
+ thor (~> 1.0, >= 1.2.2)
197
+ zeitwerk (~> 2.6)
198
+ rainbow (3.1.1)
199
+ rake (13.2.1)
200
+ random-port (0.7.5)
201
+ tago (> 0)
202
+ rdoc (6.11.0)
203
+ psych (>= 4.0.0)
204
+ redcarpet (3.6.0)
205
+ regexp_parser (2.10.0)
206
+ reline (0.6.0)
207
+ io-console (~> 0.5)
208
+ rexml (3.4.0)
209
+ rspec-core (3.13.2)
210
+ rspec-support (~> 3.13.0)
211
+ rspec-expectations (3.13.3)
212
+ diff-lcs (>= 1.2.0, < 2.0)
213
+ rspec-support (~> 3.13.0)
214
+ rspec-mocks (3.13.2)
215
+ diff-lcs (>= 1.2.0, < 2.0)
216
+ rspec-support (~> 3.13.0)
217
+ rspec-rails (7.1.0)
218
+ actionpack (>= 7.0)
219
+ activesupport (>= 7.0)
220
+ railties (>= 7.0)
221
+ rspec-core (~> 3.13)
222
+ rspec-expectations (~> 3.13)
223
+ rspec-mocks (~> 3.13)
224
+ rspec-support (~> 3.13)
225
+ rspec-support (3.13.2)
226
+ rubocop (1.71.2)
227
+ json (~> 2.3)
228
+ language_server-protocol (>= 3.17.0)
229
+ parallel (~> 1.10)
230
+ parser (>= 3.3.0.2)
231
+ rainbow (>= 2.2.2, < 4.0)
232
+ regexp_parser (>= 2.9.3, < 3.0)
233
+ rubocop-ast (>= 1.38.0, < 2.0)
234
+ ruby-progressbar (~> 1.7)
235
+ unicode-display_width (>= 2.4.0, < 4.0)
236
+ rubocop-ast (1.38.0)
237
+ parser (>= 3.3.1.0)
238
+ rubocop-minitest (0.36.0)
239
+ rubocop (>= 1.61, < 2.0)
240
+ rubocop-ast (>= 1.31.1, < 2.0)
241
+ rubocop-performance (1.23.1)
242
+ rubocop (>= 1.48.1, < 2.0)
243
+ rubocop-ast (>= 1.31.1, < 2.0)
244
+ rubocop-rake (0.6.0)
245
+ rubocop (~> 1.0)
246
+ rubocop-rspec (3.4.0)
247
+ rubocop (~> 1.61)
248
+ ruby-progressbar (1.13.0)
249
+ securerandom (0.4.1)
250
+ simplecov (0.22.0)
251
+ docile (~> 1.1)
252
+ simplecov-html (~> 0.11)
253
+ simplecov_json_formatter (~> 0.1)
254
+ simplecov-cobertura (2.1.0)
255
+ rexml
256
+ simplecov (~> 0.19)
257
+ simplecov-html (0.13.1)
258
+ simplecov_json_formatter (0.1.4)
259
+ slop (4.10.1)
260
+ stringio (3.1.2)
261
+ sys-uname (1.3.1)
262
+ ffi (~> 1.1)
263
+ tago (0.0.2)
264
+ thor (1.3.2)
265
+ timeout (0.4.3)
266
+ tzinfo (2.0.6)
267
+ concurrent-ruby (~> 1.0)
268
+ unicode-display_width (3.1.4)
269
+ unicode-emoji (~> 4.0, >= 4.0.4)
270
+ unicode-emoji (4.0.4)
271
+ uri (1.0.2)
272
+ useragent (0.16.11)
273
+ uuidtools (2.2.0)
274
+ yard (0.9.37)
275
+ zeitwerk (2.7.1)
276
+
277
+ PLATFORMS
278
+ aarch64-linux
279
+ aarch64-linux-gnu
280
+ aarch64-linux-musl
281
+ arm-linux
282
+ arm-linux-gnu
283
+ arm-linux-musl
284
+ arm64-darwin
285
+ arm64-darwin-23
286
+ x64-mingw-ucrt
287
+ x86-linux
288
+ x86-linux-gnu
289
+ x86-linux-musl
290
+ x86_64-darwin
291
+ x86_64-linux
292
+ x86_64-linux-gnu
293
+ x86_64-linux-musl
294
+
295
+ DEPENDENCIES
296
+ cucumber (= 9.2.1)
297
+ minitest (= 5.25.4)
298
+ os (= 1.1.4)
299
+ qbash (>= 0.3.1)
300
+ rake (= 13.2.1)
301
+ random-port (>= 0.7.5)
302
+ rspec-rails (= 7.1.0)
303
+ rubocop (= 1.71.2)
304
+ rubocop-minitest (= 0.36.0)
305
+ rubocop-performance (= 1.23.1)
306
+ rubocop-rake (= 0.6.0)
307
+ rubocop-rspec (= 3.4.0)
308
+ rumble!
309
+ simplecov (= 0.22.0)
310
+ simplecov-cobertura (= 2.1.0)
311
+ yard (= 0.9.37)
312
+
313
+ BUNDLED WITH
314
+ 2.5.16
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  (The MIT License)
2
2
 
3
- Copyright (c) 2018-2022 Yegor Bugayenko
3
+ Copyright (c) 2018-2025 Yegor Bugayenko
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the 'Software'), to deal
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- <img src="/logo.svg" width="64px" height="64px"/>
1
+ # Command Line Mass-Email Sender
2
2
 
3
3
  [![EO principles respected here](https://www.elegantobjects.org/badge.svg)](https://www.elegantobjects.org)
4
4
  [![DevOps By Rultor.com](http://www.rultor.com/b/yegor256/rumble)](http://www.rultor.com/p/yegor256/rumble)
@@ -9,8 +9,6 @@
9
9
  [![Gem Version](https://badge.fury.io/rb/rumble.svg)](http://badge.fury.io/rb/rumble)
10
10
  [![Maintainability](https://api.codeclimate.com/v1/badges/a3fee65d42a9cf6397ea/maintainability)](https://codeclimate.com/github/yegor256/rumble/maintainability)
11
11
  [![Test Coverage](https://img.shields.io/codecov/c/github/yegor256/rumble.svg)](https://codecov.io/github/yegor256/rumble?branch=master)
12
-
13
- ![Lines of code](https://img.shields.io/tokei/lines/github/yegor256/rumble)
14
12
  [![Hits-of-Code](https://hitsofcode.com/github/yegor256/0rsk)](https://hitsofcode.com/view/github/yegor256/0rsk)
15
13
 
16
14
  This command line tool helps you send newsletters.
@@ -18,18 +16,18 @@ This command line tool helps you send newsletters.
18
16
  Install it first:
19
17
 
20
18
  ```bash
21
- $ gem install rumble
19
+ gem install rumble
22
20
  ```
23
21
 
24
22
  Run it locally and read its output:
25
23
 
26
24
  ```bash
27
- $ rumble --help
25
+ rumble --help
28
26
  ```
29
27
 
30
28
  Simple liquid letter looks like this:
31
29
 
32
- ```
30
+ ```liquid
33
31
  {{ first }},
34
32
 
35
33
  How are you?
@@ -41,18 +39,21 @@ Yegor
41
39
  The list of emails must contain three columns separated by a comma: first
42
40
  name, last name, and email.
43
41
 
44
- If you want to send via HTTP/SMTP proxy, use `--proxy=socks:<host>:<port>`.
42
+ You can't send via HTTP/SMTP proxy, unfortunately (you are welcome
43
+ to submit a pull request).
45
44
 
46
45
  ## How to contribute
47
46
 
48
- Read [these guidelines](https://www.yegor256.com/2014/04/15/github-guidelines.html).
47
+ Read
48
+ [these guidelines](https://www.yegor256.com/2014/04/15/github-guidelines.html).
49
49
  Make sure you build is green before you contribute
50
- your pull request. You will need to have [Ruby](https://www.ruby-lang.org/en/) 2.3+ and
50
+ your pull request. You will need to have
51
+ [Ruby](https://www.ruby-lang.org/en/) 2.3+ and
51
52
  [Bundler](https://bundler.io/) installed. Then:
52
53
 
53
- ```
54
- $ bundle update
55
- $ bundle exec rake
54
+ ```bash
55
+ bundle update
56
+ bundle exec rake
56
57
  ```
57
58
 
58
59
  If it's clean and you don't see any error messages, submit your pull request.
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2022 Yegor Bugayenko
3
+ # Copyright (c) 2018-2025 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -33,7 +33,7 @@ def version
33
33
  Gem::Specification.load(Dir['*.gemspec'].first).version
34
34
  end
35
35
 
36
- task default: %i[clean test features rubocop copyright]
36
+ task default: %i[clean test features rubocop yard]
37
37
 
38
38
  require 'rake/testtask'
39
39
  desc 'Run all unit tests'
@@ -44,13 +44,10 @@ Rake::TestTask.new(:test) do |test|
44
44
  test.verbose = false
45
45
  end
46
46
 
47
- require 'rdoc/task'
48
- desc 'Build RDoc documentation'
49
- Rake::RDocTask.new do |rdoc|
50
- rdoc.rdoc_dir = 'rdoc'
51
- rdoc.title = "#{name} #{version}"
52
- rdoc.rdoc_files.include('README*')
53
- rdoc.rdoc_files.include('lib/**/*.rb')
47
+ require 'yard'
48
+ desc 'Build Yard documentation'
49
+ YARD::Rake::YardocTask.new do |t|
50
+ t.files = ['lib/**/*.rb']
54
51
  end
55
52
 
56
53
  require 'rubocop/rake_task'
@@ -67,11 +64,3 @@ end
67
64
  Cucumber::Rake::Task.new(:'features:html') do |t|
68
65
  t.profile = 'html_report'
69
66
  end
70
-
71
- task :copyright do
72
- sh "grep -q -r '#{Date.today.strftime('%Y')}' \
73
- --include '*.rb' \
74
- --include '*.txt' \
75
- --include 'Rakefile' \
76
- ."
77
- end
data/bin/rumble CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- # Copyright (c) 2018-2022 Yegor Bugayenko
2
+ # Copyright (c) 2018-2025 Yegor Bugayenko
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  # of this software and associated documentation files (the 'Software'), to deal
@@ -21,19 +21,21 @@
21
21
 
22
22
  STDOUT.sync = true
23
23
 
24
- require 'slop'
25
24
  require 'mail'
26
- require 'net/smtp/proxy'
25
+ require 'openssl'
26
+ require 'slop'
27
27
  require_relative '../lib/rumble'
28
- require_relative '../lib/rumble/version'
29
28
  require_relative '../lib/rumble/cli'
29
+ require_relative '../lib/rumble/version'
30
30
 
31
31
  begin
32
32
  args = []
33
33
  config = File.expand_path('~/.rumble')
34
34
  if File.exist?(config)
35
35
  body = File.read(config)
36
- extra = body.split(/[\r\n]+/).map(&:strip)
36
+ extra = body.split(/[\r\n]+/).map(&:strip).map do |ln|
37
+ ln.gsub(/^(--(?:user|password)=).+$/, '\1***skipped***')
38
+ end
37
39
  args += extra
38
40
  puts "Found #{body.split(/\n/).length} lines in #{config}:
39
41
  #{extra.join("\n ")}"
@@ -60,8 +62,11 @@ begin
60
62
  o.string '--method',
61
63
  'How to deliver them: "smtp" or "sendmail" (default: sendmail)',
62
64
  default: 'sendmail'
65
+ o.bool '--tls',
66
+ 'Whether TLS must be used or not (default: true)',
67
+ default: false
63
68
  o.string '--host', 'SMTP host name'
64
- o.integer '--port', 'SMTP port number (25 by default)', default: 25
69
+ o.integer '--port', 'SMTP port number (default: 25)', default: 25
65
70
  o.string '--user', 'SMTP user name'
66
71
  o.string '--password', 'SMTP password'
67
72
  o.string '--proxy', 'HTTP/SOCKS proxy, e.g. "socks:192.168.0.1:8080"'
@@ -71,9 +76,9 @@ begin
71
76
  o.string '--resume', 'Email address from which we should resume'
72
77
  o.string '--skip', 'File name with emails that opted-out (black list)'
73
78
  o.string '--test', 'Email address to use instead of the real user list'
74
- o.string '--col-first', 'First name columm (0 by default)', default: 0
75
- o.string '--col-last', 'Last name columm (1 by default)', default: 1
76
- o.string '--col-email', 'Email columm (2 by default)', default: 2
79
+ o.string '--col-first', 'First name columm (default: 0)', default: 0
80
+ o.string '--col-last', 'Last name columm (default: 1)', default: 1
81
+ o.string '--col-email', 'Email columm (default: 2)', default: 2
77
82
  o.string '--attach', 'The script to run on each email'
78
83
  end
79
84
  rescue Slop::Error => ex
@@ -99,32 +104,17 @@ begin
99
104
  raise '--user is required' unless opts[:user]
100
105
  raise '--password is required' unless opts[:password]
101
106
  from = Mail::Address.new(opts[:from])
102
- if opts[:proxy]
103
- scheme, host, port = opts[:proxy].strip.split(':')
104
- delivery_method Net::SMTP::Proxy::DeliveryMethod, {
105
- domain: from.domain,
106
- address: opts[:host],
107
- port: opts[:port],
108
- proxy_address: "#{scheme}://#{host}",
109
- proxy_port: port.to_i,
110
- authentication: 'plain',
111
- openssl_verify_mode: OpenSSL::SSL::VERIFY_NONE,
112
- enable_starttls_auto: true,
113
- enable_starttls: true,
114
- user_name: opts[:user],
115
- password: opts[:password]
116
- }
117
- else
118
- delivery_method :smtp, {
119
- domain: from.domain,
120
- address: opts[:host],
121
- port: opts[:port],
122
- user_name: opts[:user],
123
- password: opts[:password],
124
- enable_starttls: true,
125
- enable_starttls_auto: true
126
- }
127
- end
107
+ raise 'The --proxy option is not supported' if opts[:proxy]
108
+ puts "Sending to #{opts[:host]}:#{opts[:port]} from #{opts[:from]}"
109
+ delivery_method :smtp, {
110
+ domain: from.domain,
111
+ address: opts[:host],
112
+ port: opts[:port],
113
+ user_name: opts[:user],
114
+ password: opts[:password],
115
+ authentication: 'plain',
116
+ enable_starttls_auto: opts[:tls]
117
+ }
128
118
  else
129
119
  raise "Delivery method #{opts[:method]} is not supported"
130
120
  end
data/cucumber.yml CHANGED
@@ -1,3 +1,23 @@
1
+ # Copyright (c) 2018-2025 Yegor Bugayenko
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the 'Software'), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in all
11
+ # copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ # SOFTWARE.
20
+ ---
1
21
  default: --format pretty
2
22
  travis: --format progress
3
23
  html_report: --format progress --format html --out=features_report.html
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2022 Yegor Bugayenko
3
+ # Copyright (c) 2018-2025 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -44,7 +44,7 @@ end
44
44
 
45
45
  Given(/^I have a "([^"]*)" file with content:$/) do |file, text|
46
46
  FileUtils.mkdir_p(File.dirname(file)) unless File.exist?(file)
47
- File.write(file, text.gsub(/\\xFF/, 0xFF.chr))
47
+ File.write(file, text.gsub('\\xFF', 0xFF.chr))
48
48
  end
49
49
 
50
50
  When(%r{^I run bin/rumble with "([^"]*)"$}) do |arg|
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2022 Yegor Bugayenko
3
+ # Copyright (c) 2018-2025 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
data/lib/rumble/cli.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2022 Yegor Bugayenko
3
+ # Copyright (c) 2018-2025 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -20,20 +20,20 @@
20
20
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  # SOFTWARE.
22
22
 
23
+ require 'csv'
23
24
  require 'English'
24
- require 'mail'
25
- require 'uuidtools'
26
25
  require 'liquid'
27
- require 'csv'
28
- require 'tmpdir'
26
+ require 'mail'
27
+ require 'rainbow'
29
28
  require 'redcarpet'
30
29
  require 'redcarpet/render_strip'
31
- require 'rainbow'
30
+ require 'tmpdir'
31
+ require 'uuidtools'
32
32
  require_relative 'version'
33
33
 
34
34
  # Rumble main script.
35
35
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
36
- # Copyright:: Copyright (c) 2018-2022 Yegor Bugayenko
36
+ # Copyright:: Copyright (c) 2018-2025 Yegor Bugayenko
37
37
  # License:: MIT
38
38
  class Rumble::CLI
39
39
  # Make an instance.
@@ -66,8 +66,9 @@ class Rumble::CLI
66
66
  emails.each do |array|
67
67
  email = array[@opts['col-email'].to_i]
68
68
  unless email
69
- puts "Email is #{Rainbow('absent').red} \
70
- at the column ##{@opts['col-email'].to_i}: #{array}"
69
+ puts \
70
+ "Email is #{Rainbow('absent').red} " \
71
+ "at the column ##{@opts['col-email'].to_i}: #{array}"
71
72
  next
72
73
  end
73
74
  email = email.strip.downcase
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2022 Yegor Bugayenko
3
+ # Copyright (c) 2018-2025 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -22,8 +22,8 @@
22
22
 
23
23
  # Rumble main module.
24
24
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
25
- # Copyright:: Copyright (c) 2018-2022 Yegor Bugayenko
25
+ # Copyright:: Copyright (c) 2018-2025 Yegor Bugayenko
26
26
  # License:: MIT
27
27
  module Rumble
28
- VERSION = '0.7.0'
28
+ VERSION = '0.9.0'
29
29
  end
data/lib/rumble.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2022 Yegor Bugayenko
3
+ # Copyright (c) 2018-2025 Yegor Bugayenko
4
4
  #
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  # of this software and associated documentation files (the 'Software'), to deal
@@ -22,7 +22,7 @@
22
22
 
23
23
  # Rumble module.
24
24
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
25
- # Copyright:: Copyright (c) 2018-2022 Yegor Bugayenko
25
+ # Copyright:: Copyright (c) 2018-2025 Yegor Bugayenko
26
26
  # License:: MIT
27
27
  module Rumble
28
28
  # Nothing
data/logo.svg CHANGED
@@ -16,4 +16,4 @@
16
16
  </g>
17
17
  </g>
18
18
  </g>
19
- </svg>
19
+ </svg>
data/renovate.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3
+ "extends": [
4
+ "config:base"
5
+ ]
6
+ }