rumble 0.8.0 → 0.9.0

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: 8e041e9a4e4a28a7a5d1785af0ca019c8f5200b695818e3152eafba7b7423ecd
4
- data.tar.gz: 5a67e3e764e69a175a25b60745d9cdb85ede848097ccd92349370f0ce4dc7e8d
3
+ metadata.gz: 8c20964e58895fdeea22718df431e8d62641ca63a9cdeea5392c56de5ec83d1f
4
+ data.tar.gz: 98b2eb4b246660e42970eddf45d57baf9bf9a8548464520414eaabff0e7e4bfe
5
5
  SHA512:
6
- metadata.gz: '078546d82d6ec2ead16d5e22a19864816eea7534db7ac6f28782b2487644b3c3270e57c2fbd6329da077644422717e69c52c2cc83aef6f1a3ff5ccf40e9e6d1a'
7
- data.tar.gz: f185066166adc0c1a50090bc67ea2e99622fce2cdbaf9ec6ee39385f8cc6353d521a49b258dd5506102ce21f407d3eda9eb5537bb09c0130e52b915bee2695d7
6
+ metadata.gz: 84b5a137fd6033a1ae42f629f4008e4f895889be84311e445625f5e5d7c0f0f9431ef4113c36b3ee8ce400dbd69d9ec1cdf0c368eb93e26446da4133b6853e7e
7
+ data.tar.gz: '0687de7a94ad1b70df386bad7a83382e06f9b9dcd0efcc412f408f292e163e7d4bc4fd090ef19cf3da78a33b985f6530271a043492854c632db80e35c6bcfe60'
data/.0pdd.yml CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2018-2024 Yegor Bugayenko
1
+ # Copyright (c) 2018-2025 Yegor Bugayenko
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  # of this software and associated documentation files (the 'Software'), to deal
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2018-2024 Yegor Bugayenko
1
+ # Copyright (c) 2018-2025 Yegor Bugayenko
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  # of this software and associated documentation files (the 'Software'), to deal
@@ -28,7 +28,8 @@ name: actionlint
28
28
  - master
29
29
  jobs:
30
30
  actionlint:
31
- runs-on: ubuntu-22.04
31
+ timeout-minutes: 15
32
+ runs-on: ubuntu-24.04
32
33
  steps:
33
34
  - uses: actions/checkout@v4
34
35
  - name: Download actionlint
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2018-2024 Yegor Bugayenko
1
+ # Copyright (c) 2018-2025 Yegor Bugayenko
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  # of this software and associated documentation files (the 'Software'), to deal
@@ -25,15 +25,17 @@ name: codecov
25
25
  - master
26
26
  jobs:
27
27
  codecov:
28
- runs-on: ubuntu-22.04
28
+ timeout-minutes: 15
29
+ runs-on: ubuntu-24.04
29
30
  steps:
30
31
  - uses: actions/checkout@v4
31
32
  - uses: ruby/setup-ruby@v1
32
33
  with:
33
- ruby-version: 3.2
34
+ ruby-version: 3.3
34
35
  bundler-cache: true
36
+ - run: bundle config set --global path "$(pwd)/vendor/bundle"
35
37
  - run: bundle install
36
38
  - run: bundle exec rake
37
- - uses: codecov/codecov-action@v4.0.0-beta.3
39
+ - uses: codecov/codecov-action@v5
38
40
  with:
39
41
  token: ${{ secrets.CODECOV_TOKEN }}
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2018-2024 Yegor Bugayenko
1
+ # Copyright (c) 2018-2025 Yegor Bugayenko
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  # of this software and associated documentation files (the 'Software'), to deal
@@ -24,7 +24,8 @@ name: copyrights
24
24
  pull_request:
25
25
  jobs:
26
26
  copyrights:
27
- runs-on: ubuntu-22.04
27
+ timeout-minutes: 15
28
+ runs-on: ubuntu-24.04
28
29
  steps:
29
30
  - uses: actions/checkout@v4
30
- - uses: yegor256/copyrights-action@0.0.4
31
+ - uses: yegor256/copyrights-action@0.0.8
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2018-2024 Yegor Bugayenko
1
+ # Copyright (c) 2018-2025 Yegor Bugayenko
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  # of this software and associated documentation files (the 'Software'), to deal
@@ -32,7 +32,8 @@ concurrency:
32
32
  cancel-in-progress: true
33
33
  jobs:
34
34
  markdown-lint:
35
- runs-on: ubuntu-22.04
35
+ timeout-minutes: 15
36
+ runs-on: ubuntu-24.04
36
37
  steps:
37
38
  - uses: actions/checkout@v4
38
39
  - uses: articulate/actions-markdownlint@v1
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2018-2024 Yegor Bugayenko
1
+ # Copyright (c) 2018-2025 Yegor Bugayenko
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  # of this software and associated documentation files (the 'Software'), to deal
@@ -28,7 +28,8 @@ name: pdd
28
28
  - master
29
29
  jobs:
30
30
  pdd:
31
- runs-on: ubuntu-22.04
31
+ timeout-minutes: 15
32
+ runs-on: ubuntu-24.04
32
33
  steps:
33
34
  - uses: actions/checkout@v4
34
35
  - uses: volodya-lombrozo/pdd-action@master
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2018-2024 Yegor Bugayenko
1
+ # Copyright (c) 2018-2025 Yegor Bugayenko
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  # of this software and associated documentation files (the 'Software'), to deal
@@ -28,11 +28,10 @@ name: rake
28
28
  - master
29
29
  jobs:
30
30
  rake:
31
- name: test
32
31
  strategy:
33
32
  matrix:
34
- os: [ubuntu-20.04, macos-12, windows-2022]
35
- ruby: [3.2]
33
+ os: [ubuntu-24.04, macos-15, windows-2022]
34
+ ruby: [3.3]
36
35
  runs-on: ${{ matrix.os }}
37
36
  steps:
38
37
  - uses: actions/checkout@v4
@@ -40,5 +39,6 @@ jobs:
40
39
  with:
41
40
  ruby-version: ${{ matrix.ruby }}
42
41
  bundler-cache: true
42
+ - run: bundle config set --global path "$(pwd)/vendor/bundle"
43
43
  - run: bundle install
44
44
  - run: bundle exec rake
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2018-2024 Yegor Bugayenko
1
+ # Copyright (c) 2018-2025 Yegor Bugayenko
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  # of this software and associated documentation files (the 'Software'), to deal
@@ -24,7 +24,8 @@ name: xcop
24
24
  pull_request:
25
25
  jobs:
26
26
  xcop:
27
- runs-on: ubuntu-22.04
27
+ timeout-minutes: 15
28
+ runs-on: ubuntu-24.04
28
29
  steps:
29
30
  - uses: actions/checkout@v4
30
31
  - uses: g4s8/xcop-action@master
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2018-2024 Yegor Bugayenko
1
+ # Copyright (c) 2018-2025 Yegor Bugayenko
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  # of this software and associated documentation files (the 'Software'), to deal
@@ -28,7 +28,8 @@ name: yamllint
28
28
  - master
29
29
  jobs:
30
30
  yamllint:
31
- runs-on: ubuntu-22.04
31
+ timeout-minutes: 15
32
+ runs-on: ubuntu-24.04
32
33
  steps:
33
34
  - uses: actions/checkout@v4
34
35
  - uses: ibiqlik/action-yamllint@v3
data/.gitignore CHANGED
@@ -5,4 +5,4 @@ coverage/
5
5
  .DS_Store
6
6
  rdoc/
7
7
  doc/
8
- .yardoc/
8
+ .yardoc/
data/.rubocop.yml CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2018-2024 Yegor Bugayenko
1
+ # Copyright (c) 2018-2025 Yegor Bugayenko
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  # of this software and associated documentation files (the 'Software'), to deal
@@ -24,14 +24,20 @@ AllCops:
24
24
  - 'assets/**/*'
25
25
  - 'vendor/**/**'
26
26
  DisplayCopNames: true
27
- TargetRubyVersion: 2.3
27
+ TargetRubyVersion: 3.0
28
28
  NewCops: enable
29
29
  SuggestExtensions: false
30
+ require:
31
+ - rubocop-minitest
32
+ - rubocop-performance
33
+ - rubocop-rake
30
34
 
31
35
  Layout/EndOfLine:
32
36
  EnforcedStyle: lf
33
37
  Metrics/CyclomaticComplexity:
34
38
  Max: 22
39
+ Metrics/ClassLength:
40
+ Max: 200
35
41
  Metrics/MethodLength:
36
42
  Enabled: false
37
43
  Layout/MultilineMethodCallIndentation:
data/.rultor.yml CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2018-2024 Yegor Bugayenko
1
+ # Copyright (c) 2018-2025 Yegor Bugayenko
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  # of this software and associated documentation files (the 'Software'), to deal
@@ -19,7 +19,7 @@
19
19
  # SOFTWARE.
20
20
  ---
21
21
  docker:
22
- image: yegor256/rultor-image:1.23.1
22
+ image: yegor256/rultor-ruby
23
23
  assets:
24
24
  rubygems.yml: yegor256/home#assets/rubygems.yml
25
25
  install: |
@@ -29,7 +29,7 @@ release:
29
29
  pre: false
30
30
  script: |-
31
31
  [[ "${tag}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || exit -1
32
- bundle exec rake
32
+ DOCKER_SUDO=true bundle exec rake
33
33
  rm -rf *.gem
34
34
  sed -i "s/0\.0\.0/${tag}/g" lib/rumble/version.rb
35
35
  git add lib/rumble/version.rb
data/.simplecov CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2024 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/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2024 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
@@ -23,14 +23,18 @@
23
23
  source 'https://rubygems.org'
24
24
  gemspec
25
25
 
26
- gem 'cucumber', '9.2.0', require: false
27
- gem 'minitest', '5.24.0', require: false
26
+ gem 'cucumber', '9.2.1', require: false
27
+ gem 'minitest', '5.25.4', require: false
28
+ gem 'os', '1.1.4', require: false
29
+ gem 'qbash', '>=0.3.1', require: false
28
30
  gem 'rake', '13.2.1', require: false
29
- gem 'rspec-rails', '6.1.3', require: false
30
- gem 'rubocop', '1.64.1', require: false
31
- gem 'rubocop-performance', '1.21.1', require: false
31
+ gem 'random-port', '>=0.7.5', require: false
32
+ gem 'rspec-rails', '7.1.0', require: false
33
+ gem 'rubocop', '1.71.2', require: false
34
+ gem 'rubocop-minitest', '0.36.0', require: false
35
+ gem 'rubocop-performance', '1.23.1', require: false
32
36
  gem 'rubocop-rake', '0.6.0', require: false
33
- gem 'rubocop-rspec', '3.0.1', require: false
37
+ gem 'rubocop-rspec', '3.4.0', require: false
34
38
  gem 'simplecov', '0.22.0', require: false
35
39
  gem 'simplecov-cobertura', '2.1.0', require: false
36
- gem 'yard', '0.9.36', require: false
40
+ gem 'yard', '0.9.37', require: false
data/Gemfile.lock CHANGED
@@ -6,6 +6,7 @@ PATH
6
6
  mail (= 2.8.1)
7
7
  net-smtp (= 0.5.0)
8
8
  net-smtp-proxy (= 2.0.0)
9
+ openssl (~> 3.0)
9
10
  rainbow (= 3.1.1)
10
11
  redcarpet (= 3.6.0)
11
12
  slop (= 4.10.1)
@@ -14,40 +15,45 @@ PATH
14
15
  GEM
15
16
  remote: https://rubygems.org/
16
17
  specs:
17
- actionpack (7.1.3.4)
18
- actionview (= 7.1.3.4)
19
- activesupport (= 7.1.3.4)
18
+ actionpack (8.0.1)
19
+ actionview (= 8.0.1)
20
+ activesupport (= 8.0.1)
20
21
  nokogiri (>= 1.8.5)
21
- racc
22
22
  rack (>= 2.2.4)
23
23
  rack-session (>= 1.0.1)
24
24
  rack-test (>= 0.6.3)
25
25
  rails-dom-testing (~> 2.2)
26
26
  rails-html-sanitizer (~> 1.6)
27
- actionview (7.1.3.4)
28
- activesupport (= 7.1.3.4)
27
+ useragent (~> 0.16)
28
+ actionview (8.0.1)
29
+ activesupport (= 8.0.1)
29
30
  builder (~> 3.1)
30
31
  erubi (~> 1.11)
31
32
  rails-dom-testing (~> 2.2)
32
33
  rails-html-sanitizer (~> 1.6)
33
- activesupport (7.1.3.4)
34
+ activesupport (8.0.1)
34
35
  base64
36
+ benchmark (>= 0.3)
35
37
  bigdecimal
36
- concurrent-ruby (~> 1.0, >= 1.0.2)
38
+ concurrent-ruby (~> 1.0, >= 1.3.1)
37
39
  connection_pool (>= 2.2.5)
38
40
  drb
39
41
  i18n (>= 1.6, < 2)
42
+ logger (>= 1.4.2)
40
43
  minitest (>= 5.1)
41
- mutex_m
42
- tzinfo (~> 2.0)
44
+ securerandom (>= 0.3)
45
+ tzinfo (~> 2.0, >= 2.0.5)
46
+ uri (>= 0.13.1)
43
47
  ast (2.4.2)
48
+ backtrace (0.4.0)
44
49
  base64 (0.2.0)
45
- bigdecimal (3.1.8)
50
+ benchmark (0.4.0)
51
+ bigdecimal (3.1.9)
46
52
  builder (3.3.0)
47
- concurrent-ruby (1.3.3)
48
- connection_pool (2.4.1)
53
+ concurrent-ruby (1.3.5)
54
+ connection_pool (2.5.0)
49
55
  crass (1.0.6)
50
- cucumber (9.2.0)
56
+ cucumber (9.2.1)
51
57
  builder (~> 3.2)
52
58
  cucumber-ci-environment (> 9, < 11)
53
59
  cucumber-core (> 13, < 14)
@@ -60,7 +66,7 @@ GEM
60
66
  multi_test (~> 1.1)
61
67
  sys-uname (~> 1.2)
62
68
  cucumber-ci-environment (10.0.1)
63
- cucumber-core (13.0.2)
69
+ cucumber-core (13.0.3)
64
70
  cucumber-gherkin (>= 27, < 28)
65
71
  cucumber-messages (>= 20, < 23)
66
72
  cucumber-tag-expressions (> 5, < 7)
@@ -68,48 +74,54 @@ GEM
68
74
  bigdecimal
69
75
  cucumber-gherkin (27.0.0)
70
76
  cucumber-messages (>= 19.1.4, < 23)
71
- cucumber-html-formatter (21.4.0)
72
- cucumber-messages (> 19, < 25)
77
+ cucumber-html-formatter (21.9.0)
78
+ cucumber-messages (> 19, < 28)
73
79
  cucumber-messages (22.0.0)
74
- cucumber-tag-expressions (6.1.0)
75
- date (3.3.4)
80
+ cucumber-tag-expressions (6.1.2)
81
+ date (3.4.1)
76
82
  diff-lcs (1.5.1)
77
- docile (1.4.0)
83
+ docile (1.4.1)
78
84
  drb (2.2.1)
79
- erubi (1.13.0)
80
- ffi (1.17.0-aarch64-linux-gnu)
81
- ffi (1.17.0-aarch64-linux-musl)
82
- ffi (1.17.0-arm-linux-gnu)
83
- ffi (1.17.0-arm-linux-musl)
84
- ffi (1.17.0-arm64-darwin)
85
- ffi (1.17.0-x64-mingw-ucrt)
86
- ffi (1.17.0-x86-linux-gnu)
87
- ffi (1.17.0-x86-linux-musl)
88
- ffi (1.17.0-x86_64-darwin)
89
- ffi (1.17.0-x86_64-linux-gnu)
90
- ffi (1.17.0-x86_64-linux-musl)
91
- i18n (1.14.5)
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)
92
101
  concurrent-ruby (~> 1.0)
93
- io-console (0.7.2)
94
- irb (1.13.2)
102
+ io-console (0.8.0)
103
+ irb (1.15.1)
104
+ pp (>= 0.6.0)
95
105
  rdoc (>= 4.0.0)
96
106
  reline (>= 0.4.2)
97
- json (2.7.2)
98
- language_server-protocol (3.17.0.3)
107
+ json (2.9.1)
108
+ language_server-protocol (3.17.0.4)
99
109
  liquid (5.5.0)
100
- loofah (2.22.0)
110
+ logger (1.6.5)
111
+ loofah (2.24.0)
101
112
  crass (~> 1.0.2)
102
113
  nokogiri (>= 1.12.0)
114
+ loog (0.6.0)
103
115
  mail (2.8.1)
104
116
  mini_mime (>= 0.1.1)
105
117
  net-imap
106
118
  net-pop
107
119
  net-smtp
108
120
  mini_mime (1.1.5)
109
- minitest (5.24.0)
121
+ mini_portile2 (2.8.8)
122
+ minitest (5.25.4)
110
123
  multi_test (1.1.0)
111
- mutex_m (0.2.0)
112
- net-imap (0.4.14)
124
+ net-imap (0.5.5)
113
125
  date
114
126
  net-protocol
115
127
  net-pop (0.1.2)
@@ -120,99 +132,121 @@ GEM
120
132
  net-protocol
121
133
  net-smtp-proxy (2.0.0)
122
134
  proxifier (~> 1.0)
123
- nokogiri (1.16.6-aarch64-linux)
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)
124
141
  racc (~> 1.4)
125
- nokogiri (1.16.6-arm-linux)
142
+ nokogiri (1.18.2-arm-linux-gnu)
126
143
  racc (~> 1.4)
127
- nokogiri (1.16.6-arm64-darwin)
144
+ nokogiri (1.18.2-arm-linux-musl)
128
145
  racc (~> 1.4)
129
- nokogiri (1.16.6-x64-mingw-ucrt)
146
+ nokogiri (1.18.2-arm64-darwin)
130
147
  racc (~> 1.4)
131
- nokogiri (1.16.6-x86-linux)
148
+ nokogiri (1.18.2-x64-mingw-ucrt)
132
149
  racc (~> 1.4)
133
- nokogiri (1.16.6-x86_64-darwin)
150
+ nokogiri (1.18.2-x86_64-darwin)
134
151
  racc (~> 1.4)
135
- nokogiri (1.16.6-x86_64-linux)
152
+ nokogiri (1.18.2-x86_64-linux-gnu)
136
153
  racc (~> 1.4)
137
- parallel (1.25.1)
138
- parser (3.3.3.0)
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)
139
160
  ast (~> 2.4.1)
140
161
  racc
162
+ pp (0.6.2)
163
+ prettyprint
164
+ prettyprint (0.2.0)
141
165
  proxifier (1.0.3)
142
- psych (5.1.2)
166
+ psych (5.2.3)
167
+ date
143
168
  stringio
144
- racc (1.8.0)
145
- rack (3.1.4)
146
- rack-session (2.0.0)
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)
147
178
  rack (>= 3.0.0)
148
- rack-test (2.1.0)
179
+ rack-test (2.2.0)
149
180
  rack (>= 1.3)
150
- rackup (2.1.0)
181
+ rackup (2.2.1)
151
182
  rack (>= 3)
152
- webrick (~> 1.8)
153
183
  rails-dom-testing (2.2.0)
154
184
  activesupport (>= 5.0.0)
155
185
  minitest
156
186
  nokogiri (>= 1.6)
157
- rails-html-sanitizer (1.6.0)
187
+ rails-html-sanitizer (1.6.2)
158
188
  loofah (~> 2.21)
159
- nokogiri (~> 1.14)
160
- railties (7.1.3.4)
161
- actionpack (= 7.1.3.4)
162
- activesupport (= 7.1.3.4)
163
- irb
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)
164
194
  rackup (>= 1.0.0)
165
195
  rake (>= 12.2)
166
196
  thor (~> 1.0, >= 1.2.2)
167
197
  zeitwerk (~> 2.6)
168
198
  rainbow (3.1.1)
169
199
  rake (13.2.1)
170
- rdoc (6.7.0)
200
+ random-port (0.7.5)
201
+ tago (> 0)
202
+ rdoc (6.11.0)
171
203
  psych (>= 4.0.0)
172
204
  redcarpet (3.6.0)
173
- regexp_parser (2.9.2)
174
- reline (0.5.9)
205
+ regexp_parser (2.10.0)
206
+ reline (0.6.0)
175
207
  io-console (~> 0.5)
176
- rexml (3.3.0)
177
- strscan
178
- rspec-core (3.13.0)
208
+ rexml (3.4.0)
209
+ rspec-core (3.13.2)
179
210
  rspec-support (~> 3.13.0)
180
- rspec-expectations (3.13.1)
211
+ rspec-expectations (3.13.3)
181
212
  diff-lcs (>= 1.2.0, < 2.0)
182
213
  rspec-support (~> 3.13.0)
183
- rspec-mocks (3.13.1)
214
+ rspec-mocks (3.13.2)
184
215
  diff-lcs (>= 1.2.0, < 2.0)
185
216
  rspec-support (~> 3.13.0)
186
- rspec-rails (6.1.3)
187
- actionpack (>= 6.1)
188
- activesupport (>= 6.1)
189
- railties (>= 6.1)
217
+ rspec-rails (7.1.0)
218
+ actionpack (>= 7.0)
219
+ activesupport (>= 7.0)
220
+ railties (>= 7.0)
190
221
  rspec-core (~> 3.13)
191
222
  rspec-expectations (~> 3.13)
192
223
  rspec-mocks (~> 3.13)
193
224
  rspec-support (~> 3.13)
194
- rspec-support (3.13.1)
195
- rubocop (1.64.1)
225
+ rspec-support (3.13.2)
226
+ rubocop (1.71.2)
196
227
  json (~> 2.3)
197
228
  language_server-protocol (>= 3.17.0)
198
229
  parallel (~> 1.10)
199
230
  parser (>= 3.3.0.2)
200
231
  rainbow (>= 2.2.2, < 4.0)
201
- regexp_parser (>= 1.8, < 3.0)
202
- rexml (>= 3.2.5, < 4.0)
203
- rubocop-ast (>= 1.31.1, < 2.0)
232
+ regexp_parser (>= 2.9.3, < 3.0)
233
+ rubocop-ast (>= 1.38.0, < 2.0)
204
234
  ruby-progressbar (~> 1.7)
205
- unicode-display_width (>= 2.4.0, < 3.0)
206
- rubocop-ast (1.31.3)
235
+ unicode-display_width (>= 2.4.0, < 4.0)
236
+ rubocop-ast (1.38.0)
207
237
  parser (>= 3.3.1.0)
208
- rubocop-performance (1.21.1)
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)
209
242
  rubocop (>= 1.48.1, < 2.0)
210
243
  rubocop-ast (>= 1.31.1, < 2.0)
211
244
  rubocop-rake (0.6.0)
212
245
  rubocop (~> 1.0)
213
- rubocop-rspec (3.0.1)
246
+ rubocop-rspec (3.4.0)
214
247
  rubocop (~> 1.61)
215
248
  ruby-progressbar (1.13.0)
249
+ securerandom (0.4.1)
216
250
  simplecov (0.22.0)
217
251
  docile (~> 1.1)
218
252
  simplecov-html (~> 0.11)
@@ -220,22 +254,25 @@ GEM
220
254
  simplecov-cobertura (2.1.0)
221
255
  rexml
222
256
  simplecov (~> 0.19)
223
- simplecov-html (0.12.3)
257
+ simplecov-html (0.13.1)
224
258
  simplecov_json_formatter (0.1.4)
225
259
  slop (4.10.1)
226
- stringio (3.1.1)
227
- strscan (3.1.0)
228
- sys-uname (1.3.0)
260
+ stringio (3.1.2)
261
+ sys-uname (1.3.1)
229
262
  ffi (~> 1.1)
230
- thor (1.3.1)
231
- timeout (0.4.1)
263
+ tago (0.0.2)
264
+ thor (1.3.2)
265
+ timeout (0.4.3)
232
266
  tzinfo (2.0.6)
233
267
  concurrent-ruby (~> 1.0)
234
- unicode-display_width (2.5.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)
235
273
  uuidtools (2.2.0)
236
- webrick (1.8.1)
237
- yard (0.9.36)
238
- zeitwerk (2.6.16)
274
+ yard (0.9.37)
275
+ zeitwerk (2.7.1)
239
276
 
240
277
  PLATFORMS
241
278
  aarch64-linux
@@ -245,6 +282,7 @@ PLATFORMS
245
282
  arm-linux-gnu
246
283
  arm-linux-musl
247
284
  arm64-darwin
285
+ arm64-darwin-23
248
286
  x64-mingw-ucrt
249
287
  x86-linux
250
288
  x86-linux-gnu
@@ -255,18 +293,22 @@ PLATFORMS
255
293
  x86_64-linux-musl
256
294
 
257
295
  DEPENDENCIES
258
- cucumber (= 9.2.0)
259
- minitest (= 5.24.0)
296
+ cucumber (= 9.2.1)
297
+ minitest (= 5.25.4)
298
+ os (= 1.1.4)
299
+ qbash (>= 0.3.1)
260
300
  rake (= 13.2.1)
261
- rspec-rails (= 6.1.3)
262
- rubocop (= 1.64.1)
263
- rubocop-performance (= 1.21.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)
264
306
  rubocop-rake (= 0.6.0)
265
- rubocop-rspec (= 3.0.1)
307
+ rubocop-rspec (= 3.4.0)
266
308
  rumble!
267
309
  simplecov (= 0.22.0)
268
310
  simplecov-cobertura (= 2.1.0)
269
- yard (= 0.9.36)
311
+ yard (= 0.9.37)
270
312
 
271
313
  BUNDLED WITH
272
- 2.5.6
314
+ 2.5.16
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  (The MIT License)
2
2
 
3
- Copyright (c) 2018-2024 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/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2024 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 yard copyright]
36
+ task default: %i[clean test features rubocop yard]
37
37
 
38
38
  require 'rake/testtask'
39
39
  desc 'Run all unit tests'
@@ -64,11 +64,3 @@ end
64
64
  Cucumber::Rake::Task.new(:'features:html') do |t|
65
65
  t.profile = 'html_report'
66
66
  end
67
-
68
- task :copyright do
69
- sh "grep -q -r '#{Date.today.strftime('%Y')}' \
70
- --include '*.rb' \
71
- --include '*.txt' \
72
- --include 'Rakefile' \
73
- ."
74
- end
data/bin/rumble CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- # Copyright (c) 2018-2024 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,18 +21,21 @@
21
21
 
22
22
  STDOUT.sync = true
23
23
 
24
- require 'slop'
25
24
  require 'mail'
25
+ require 'openssl'
26
+ require 'slop'
26
27
  require_relative '../lib/rumble'
27
- require_relative '../lib/rumble/version'
28
28
  require_relative '../lib/rumble/cli'
29
+ require_relative '../lib/rumble/version'
29
30
 
30
31
  begin
31
32
  args = []
32
33
  config = File.expand_path('~/.rumble')
33
34
  if File.exist?(config)
34
35
  body = File.read(config)
35
- 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
36
39
  args += extra
37
40
  puts "Found #{body.split(/\n/).length} lines in #{config}:
38
41
  #{extra.join("\n ")}"
@@ -59,8 +62,11 @@ begin
59
62
  o.string '--method',
60
63
  'How to deliver them: "smtp" or "sendmail" (default: sendmail)',
61
64
  default: 'sendmail'
65
+ o.bool '--tls',
66
+ 'Whether TLS must be used or not (default: true)',
67
+ default: false
62
68
  o.string '--host', 'SMTP host name'
63
- o.integer '--port', 'SMTP port number (25 by default)', default: 25
69
+ o.integer '--port', 'SMTP port number (default: 25)', default: 25
64
70
  o.string '--user', 'SMTP user name'
65
71
  o.string '--password', 'SMTP password'
66
72
  o.string '--proxy', 'HTTP/SOCKS proxy, e.g. "socks:192.168.0.1:8080"'
@@ -70,9 +76,9 @@ begin
70
76
  o.string '--resume', 'Email address from which we should resume'
71
77
  o.string '--skip', 'File name with emails that opted-out (black list)'
72
78
  o.string '--test', 'Email address to use instead of the real user list'
73
- o.string '--col-first', 'First name columm (0 by default)', default: 0
74
- o.string '--col-last', 'Last name columm (1 by default)', default: 1
75
- 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
76
82
  o.string '--attach', 'The script to run on each email'
77
83
  end
78
84
  rescue Slop::Error => ex
@@ -98,15 +104,16 @@ begin
98
104
  raise '--user is required' unless opts[:user]
99
105
  raise '--password is required' unless opts[:password]
100
106
  from = Mail::Address.new(opts[:from])
101
- raise 'The --proxy option is not supporte' if opts[:proxy]
107
+ raise 'The --proxy option is not supported' if opts[:proxy]
108
+ puts "Sending to #{opts[:host]}:#{opts[:port]} from #{opts[:from]}"
102
109
  delivery_method :smtp, {
103
110
  domain: from.domain,
104
111
  address: opts[:host],
105
112
  port: opts[:port],
106
113
  user_name: opts[:user],
107
114
  password: opts[:password],
108
- enable_starttls: true,
109
- enable_starttls_auto: true
115
+ authentication: 'plain',
116
+ enable_starttls_auto: opts[:tls]
110
117
  }
111
118
  else
112
119
  raise "Delivery method #{opts[:method]} is not supported"
data/cucumber.yml CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2018-2024 Yegor Bugayenko
1
+ # Copyright (c) 2018-2025 Yegor Bugayenko
2
2
  #
3
3
  # Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  # of this software and associated documentation files (the 'Software'), to deal
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2024 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
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2024 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-2024 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-2024 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-2024 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-2024 Yegor Bugayenko
25
+ # Copyright:: Copyright (c) 2018-2025 Yegor Bugayenko
26
26
  # License:: MIT
27
27
  module Rumble
28
- VERSION = '0.8.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-2024 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-2024 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/rumble.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2024 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
@@ -27,7 +27,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
27
27
  require_relative 'lib/rumble/version'
28
28
  Gem::Specification.new do |s|
29
29
  s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
30
- s.required_ruby_version = '>= 2.3'
30
+ s.required_ruby_version = '>= 3.0'
31
31
  s.name = 'rumble'
32
32
  s.version = Rumble::VERSION
33
33
  s.license = 'MIT'
@@ -40,13 +40,14 @@ Gem::Specification.new do |s|
40
40
  s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
41
41
  s.rdoc_options = ['--charset=UTF-8']
42
42
  s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
43
- s.add_runtime_dependency 'liquid', '5.5.0'
44
- s.add_runtime_dependency 'mail', '2.8.1'
45
- s.add_runtime_dependency 'net-smtp', '0.5.0'
46
- s.add_runtime_dependency 'net-smtp-proxy', '2.0.0'
47
- s.add_runtime_dependency 'rainbow', '3.1.1'
48
- s.add_runtime_dependency 'redcarpet', '3.6.0'
49
- s.add_runtime_dependency 'slop', '4.10.1'
50
- s.add_runtime_dependency 'uuidtools', '2.2.0'
43
+ s.add_dependency 'liquid', '5.5.0'
44
+ s.add_dependency 'mail', '2.8.1'
45
+ s.add_dependency 'net-smtp', '0.5.0'
46
+ s.add_dependency 'net-smtp-proxy', '2.0.0'
47
+ s.add_dependency 'openssl', '~>3.0'
48
+ s.add_dependency 'rainbow', '3.1.1'
49
+ s.add_dependency 'redcarpet', '3.6.0'
50
+ s.add_dependency 'slop', '4.10.1'
51
+ s.add_dependency 'uuidtools', '2.2.0'
51
52
  s.metadata['rubygems_mfa_required'] = 'true'
52
53
  end
data/test/test__helper.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2024 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/test/test_rumble.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2018-2024 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
@@ -21,18 +21,22 @@
21
21
  # SOFTWARE.
22
22
 
23
23
  require 'minitest/autorun'
24
- require 'tmpdir'
24
+ require 'os'
25
+ require 'qbash'
26
+ require 'random-port'
27
+ require 'shellwords'
25
28
  require 'slop'
29
+ require 'tmpdir'
26
30
  require_relative '../lib/rumble'
27
31
  require_relative '../lib/rumble/cli'
28
32
 
29
33
  # Rumble main module test.
30
34
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
31
- # Copyright:: Copyright (c) 2018-2024 Yegor Bugayenko
35
+ # Copyright:: Copyright (c) 2018-2025 Yegor Bugayenko
32
36
  # License:: MIT
33
37
  class TestRumble < Minitest::Test
34
38
  def test_basic
35
- Dir.mktmpdir 'test' do |dir|
39
+ Dir.mktmpdir do |dir|
36
40
  letter = File.join(dir, 'letter.liquid')
37
41
  File.write(letter, 'Hi {{first}}, how are you?')
38
42
  Rumble::CLI.new(
@@ -44,4 +48,122 @@ class TestRumble < Minitest::Test
44
48
  ).send
45
49
  end
46
50
  end
51
+
52
+ def test_with_mailhog
53
+ skip('Works only on Ubuntu') if OS.mac? || OS.windows?
54
+ Dir.mktmpdir do |home|
55
+ flag = File.join(home, 'sent.txt')
56
+ letter = File.join(home, 'letter.liquid')
57
+ File.write(letter, 'Hi!')
58
+ host = 'localhost'
59
+ RandomPort::Pool::SINGLETON.acquire(2) do |smtp, http|
60
+ daemon("#{docker} run --rm -p #{smtp}:1025 -p #{http}:8025 mailhog/mailhog", flag)
61
+ wait_for(host, http)
62
+ qbash(
63
+ [
64
+ Shellwords.escape(File.join(__dir__, '../bin/rumble')),
65
+ '--method=smtp',
66
+ '--port', smtp,
67
+ '--host', host,
68
+ '--user=foo', '--password=foo',
69
+ '--subject', 'testing',
70
+ '--test', 'to@example.com',
71
+ '--from', Shellwords.escape('tester <from@example.com>'),
72
+ '--letter', Shellwords.escape(letter)
73
+ ]
74
+ )
75
+ FileUtils.touch(flag)
76
+ end
77
+ end
78
+ end
79
+
80
+ def test_with_mailhog_with_tls
81
+ skip('Works only on Ubuntu') if OS.mac? || OS.windows?
82
+ Dir.mktmpdir do |home|
83
+ flag = File.join(home, 'sent.txt')
84
+ letter = File.join(home, 'letter.liquid')
85
+ File.write(letter, 'Hi!')
86
+ host = 'localhost'
87
+ certs = File.join(home, 'certs')
88
+ FileUtils.mkdir_p(certs)
89
+ qbash("openssl genrsa -out #{Shellwords.escape(File.join(certs, 'key.pem'))} 2048", log: $stdout)
90
+ qbash(
91
+ [
92
+ 'openssl req -x509 -new -nodes',
93
+ "-key #{Shellwords.escape(File.join(certs, 'key.pem'))}",
94
+ '-sha256 -days 1024',
95
+ "-out #{Shellwords.escape(File.join(certs, 'cert.pem'))}",
96
+ '-subj "/C=US/ST=State/L=City/O=Organization/CN=localhost"'
97
+ ],
98
+ log: $stdout
99
+ )
100
+ RandomPort::Pool::SINGLETON.acquire(2) do |smtp, http|
101
+ daemon(
102
+ [
103
+ "#{docker} run --rm",
104
+ "-p #{smtp}:1025",
105
+ "-p #{http}:8025",
106
+ "-v #{Shellwords.escape(certs)}:/etc/certs",
107
+ '-e MH_TLS_BIND_ADDR=:1025',
108
+ '-e MH_STORAGE=maildir',
109
+ '-e MH_MAILDIR_PATH=/tmp/mailhog',
110
+ '-e MH_TLS_CERT_FILE=/etc/certs/cert.pem',
111
+ '-e MH_TLS_PRIV_KEY=/etc/certs/key.pem',
112
+ 'mailhog/mailhog'
113
+ ],
114
+ flag
115
+ )
116
+ wait_for(host, http)
117
+ qbash(
118
+ [
119
+ Shellwords.escape(File.join(__dir__, '../bin/rumble')),
120
+ '--method=smtp',
121
+ '--port', smtp,
122
+ '--host', host,
123
+ '--tls',
124
+ '--user=foo', '--password=foo',
125
+ '--subject', 'testing',
126
+ '--test', 'to@example.com',
127
+ '--from', Shellwords.escape('tester <from@example.com>'),
128
+ '--letter', Shellwords.escape(letter)
129
+ ]
130
+ )
131
+ FileUtils.touch(flag)
132
+ end
133
+ end
134
+ end
135
+
136
+ private
137
+
138
+ def docker
139
+ if ENV['DOCKER_SUDO'] == 'true'
140
+ 'sudo docker'
141
+ else
142
+ 'docker'
143
+ end
144
+ end
145
+
146
+ def wait_for(host, port)
147
+ start = Time.now
148
+ loop do
149
+ TCPSocket.new(host, port).close
150
+ break
151
+ rescue Errno::ECONNREFUSED => e
152
+ sleep(1)
153
+ puts "Waiting for mailhog at #{host}:#{port}: #{e.message}"
154
+ raise e if Time.now - start > 120
155
+ retry
156
+ end
157
+ end
158
+
159
+ def daemon(cmd, flag)
160
+ Thread.new do
161
+ qbash(cmd, log: $stdout) do |pid|
162
+ loop do
163
+ break if File.exist?(flag)
164
+ end
165
+ Process.kill('KILL', pid)
166
+ end
167
+ end
168
+ end
47
169
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rumble
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-23 00:00:00.000000000 Z
11
+ date: 2025-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: liquid
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - '='
67
67
  - !ruby/object:Gem::Version
68
68
  version: 2.0.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: openssl
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rainbow
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -170,7 +184,7 @@ licenses:
170
184
  - MIT
171
185
  metadata:
172
186
  rubygems_mfa_required: 'true'
173
- post_install_message:
187
+ post_install_message:
174
188
  rdoc_options:
175
189
  - "--charset=UTF-8"
176
190
  require_paths:
@@ -179,7 +193,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
179
193
  requirements:
180
194
  - - ">="
181
195
  - !ruby/object:Gem::Version
182
- version: '2.3'
196
+ version: '3.0'
183
197
  required_rubygems_version: !ruby/object:Gem::Requirement
184
198
  requirements:
185
199
  - - ">="
@@ -187,7 +201,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
187
201
  version: '0'
188
202
  requirements: []
189
203
  rubygems_version: 3.4.10
190
- signing_key:
204
+ signing_key:
191
205
  specification_version: 4
192
206
  summary: Command Line Newsletter Sending Tool
193
207
  test_files: []