smtp_mock 1.0.1 → 1.2.1

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: 33e54a07175e2b3e8245c8934d9839082a28e02f51d958127135342187e87326
4
- data.tar.gz: cf9ff702f31049e1bc849bcde4f3cee662a5e76d77adf7f2404e634c35e9a53a
3
+ metadata.gz: 70712db1d51d5327492ecb730f29e5019b68c33529c81bdacc96422917dcae1d
4
+ data.tar.gz: e70d2ea9e434ee4242e5ad9317894cec1ff89afa2e49e549554c68dae1ed6828
5
5
  SHA512:
6
- metadata.gz: 4e13797075610d3a5d99917a8d4584014ef320bc8a522a2785061b24d1fe842dda34d9cee834af07918ae9b826de3566244bdd0b693ac632363bebe6302874dc
7
- data.tar.gz: 490d7e3e2688ef984bd2de0a90a90ee9946120ae0eb2b532eb561e4e8b102b0ef6e8e6d4cfe80df6edd111e4e15e03c84e58b7c1e0bd35186c19c89835e41a04
6
+ metadata.gz: 38dd0ed89c25be25121fcfc4ddeb3261ba3cc3e75517510830b828ea895a662e273d11b2450bf1fe116f865f815ba19e59969a07cc2e44255bb8818a213adad4
7
+ data.tar.gz: 4755aa41982aacac8bf45935e69928d7379185b38e8049fe377d3be2ea8769b1d3e6a019d08f5e6d7daa31e6e0b9c89b7b9139b47b24d57c8e80aa8025b6a82f
data/.circleci/config.yml CHANGED
@@ -6,7 +6,7 @@ defaults: &defaults
6
6
  - image: cimg/ruby:<< parameters.ruby-version >>
7
7
 
8
8
  orbs:
9
- ruby: circleci/ruby@1.4.0
9
+ ruby: circleci/ruby@1.8.0
10
10
 
11
11
  references:
12
12
  restore_bundle_cache: &restore_bundle_cache
@@ -122,7 +122,7 @@ jobs:
122
122
  - checkout
123
123
  - <<: *use_compatible_gemspec
124
124
  - ruby/install-deps:
125
- bundler-version: "2.3.9"
125
+ bundler-version: "2.3.18"
126
126
  with-cache: false
127
127
  path: './vendor/custom_bundle'
128
128
  - <<: *system_dependencies
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
30
30
 
31
31
  spec.add_runtime_dependency 'dry-struct', '~> 1.4'
32
32
 
33
- spec.add_development_dependency 'ffaker', '~> 2.20'
33
+ spec.add_development_dependency 'ffaker', '~> 2.21'
34
34
  spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.6'
35
35
  spec.add_development_dependency 'rspec', '~> 3.11'
36
36
  end
@@ -31,17 +31,17 @@ Gem::Specification.new do |spec|
31
31
 
32
32
  spec.add_runtime_dependency 'dry-struct', '~> 1.4'
33
33
 
34
- spec.add_development_dependency 'bundler-audit', '~> 0.9.0.1'
35
- spec.add_development_dependency 'fasterer', '~> 0.9.0'
36
- spec.add_development_dependency 'ffaker', '~> 2.20'
34
+ spec.add_development_dependency 'bundler-audit', '~> 0.9.1'
35
+ spec.add_development_dependency 'fasterer', '~> 0.10.0'
36
+ spec.add_development_dependency 'ffaker', '~> 2.21'
37
37
  spec.add_development_dependency 'net-smtp', '~> 0.3.1'
38
- spec.add_development_dependency 'overcommit', '~> 0.58.0'
38
+ spec.add_development_dependency 'overcommit', '~> 0.59.1'
39
39
  spec.add_development_dependency 'pry-byebug', '~> 3.9'
40
40
  spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.6'
41
- spec.add_development_dependency 'reek', '~> 6.1'
41
+ spec.add_development_dependency 'reek', '~> 6.1', '>= 6.1.1'
42
42
  spec.add_development_dependency 'rspec', '~> 3.11'
43
- spec.add_development_dependency 'rubocop', '~> 1.26'
44
- spec.add_development_dependency 'rubocop-performance', '~> 1.13', '>= 1.13.3'
45
- spec.add_development_dependency 'rubocop-rspec', '~> 2.9'
43
+ spec.add_development_dependency 'rubocop', '~> 1.32'
44
+ spec.add_development_dependency 'rubocop-performance', '~> 1.14', '>= 1.14.3'
45
+ spec.add_development_dependency 'rubocop-rspec', '~> 2.12', '>= 2.12.1'
46
46
  spec.add_development_dependency 'simplecov', '~> 0.21.2'
47
47
  end
data/.codeclimate.yml CHANGED
@@ -7,7 +7,7 @@ checks:
7
7
  plugins:
8
8
  rubocop:
9
9
  enabled: true
10
- channel: rubocop-1-26
10
+ channel: rubocop-1-32
11
11
 
12
12
  reek:
13
13
  enabled: true
@@ -12,7 +12,7 @@ cd ruby-smtp-mock
12
12
  Configure latest Ruby environment:
13
13
 
14
14
  ```bash
15
- echo 'ruby-3.1.1' > .ruby-version
15
+ echo 'ruby-3.1.2' > .ruby-version
16
16
  cp .circleci/gemspec_latest smtp_mock.gemspec
17
17
  ```
18
18
 
@@ -0,0 +1 @@
1
+ github: [bestwebua]
data/.reek.yml CHANGED
@@ -14,13 +14,13 @@ detectors:
14
14
  NestedIterators:
15
15
  exclude:
16
16
  - SmtpMock::CommandLineArgsBuilder#define_attribute
17
- - SmtpMock::Cli::Resolver#resolve
18
17
 
19
18
  TooManyStatements:
20
19
  exclude:
21
- - SmtpMock::Cli::Resolver#resolve
22
20
  - SmtpMock::Server#run
23
21
  - SmtpMock::ServerHelper#create_fake_servers
22
+ - SmtpMock::Cli::Resolver#install
23
+ - SmtpMock::Cli::Resolver#resolve
24
24
 
25
25
  TooManyInstanceVariables:
26
26
  exclude:
data/.rubocop.yml CHANGED
@@ -6,6 +6,9 @@ AllCops:
6
6
  DisplayCopNames: true
7
7
  DisplayStyleGuide: true
8
8
  TargetRubyVersion: 2.5
9
+ NewCops: enable
10
+
11
+ # Metrics ---------------------------------------------------------------------
9
12
 
10
13
  Metrics/ClassLength:
11
14
  Max: 150
@@ -22,6 +25,8 @@ Metrics/CyclomaticComplexity:
22
25
  Metrics/PerceivedComplexity:
23
26
  Enabled: false
24
27
 
28
+ # Naming ----------------------------------------------------------------------
29
+
25
30
  Naming/VariableNumber:
26
31
  Enabled: false
27
32
 
@@ -31,8 +36,7 @@ Naming/RescuedExceptionsVariableName:
31
36
  Naming/InclusiveLanguage:
32
37
  Enabled: false
33
38
 
34
- Naming/BlockForwarding:
35
- Enabled: true
39
+ # Style -----------------------------------------------------------------------
36
40
 
37
41
  Style/Documentation:
38
42
  Enabled: false
@@ -49,135 +53,11 @@ Style/ParallelAssignment:
49
53
  Style/RescueStandardError:
50
54
  Enabled: false
51
55
 
52
- Style/HashEachMethods:
53
- Enabled: true
54
-
55
- Style/HashTransformKeys:
56
- Enabled: true
57
-
58
- Style/HashTransformValues:
59
- Enabled: true
60
-
61
- Style/AccessorGrouping:
62
- Enabled: true
63
-
64
- Style/ArrayCoercion:
65
- Enabled: true
66
-
67
- Style/BisectedAttrAccessor:
68
- Enabled: true
69
-
70
- Style/CaseLikeIf:
71
- Enabled: true
72
-
73
- Style/ExponentialNotation:
74
- Enabled: true
75
-
76
- Style/HashAsLastArrayItem:
77
- Enabled: true
78
-
79
- Style/HashLikeCase:
80
- Enabled: true
81
-
82
- Style/RedundantAssignment:
83
- Enabled: true
84
-
85
- Style/RedundantFetchBlock:
86
- Enabled: true
87
-
88
- Style/RedundantFileExtensionInRequire:
89
- Enabled: true
90
-
91
- Style/RedundantRegexpCharacterClass:
92
- Enabled: true
93
-
94
- Style/RedundantRegexpEscape:
95
- Enabled: true
96
-
97
- Style/SlicingWithRange:
98
- Enabled: true
99
-
100
- Style/ArgumentsForwarding:
101
- Enabled: true
102
-
103
- Style/CollectionCompact:
104
- Enabled: true
105
-
106
- Style/DocumentDynamicEvalDefinition:
107
- Enabled: true
108
-
109
- Style/NegatedIfElseCondition:
110
- Enabled: true
111
-
112
- Style/NilLambda:
113
- Enabled: true
114
-
115
- Style/RedundantArgument:
116
- Enabled: true
117
-
118
- Style/SwapValues:
119
- Enabled: true
120
-
121
- Style/EndlessMethod:
122
- Enabled: true
123
-
124
- Style/HashExcept:
125
- Enabled: true
126
-
127
- Style/IfWithBooleanLiteralBranches:
128
- Enabled: true
129
-
130
- Style/HashConversion:
131
- Enabled: true
132
-
133
- Style/StringChars:
134
- Enabled: true
135
-
136
- Style/InPatternThen:
137
- Enabled: true
138
-
139
- Style/MultilineInPatternThen:
140
- Enabled: true
141
-
142
- Style/QuotedSymbols:
143
- Enabled: true
144
-
145
- Style/RedundantSelfAssignmentBranch:
146
- Enabled: true
147
-
148
- Style/NumberedParameters:
149
- Enabled: true
150
-
151
- Style/NumberedParametersLimit:
152
- Enabled: true
153
-
154
- Style/SelectByRegexp:
155
- Enabled: true
156
-
157
- Style/FileRead:
158
- Enabled: true
159
-
160
- Style/FileWrite:
161
- Enabled: true
162
-
163
- Style/MapToHash:
164
- Enabled: true
165
-
166
- Style/OpenStructUse:
167
- Enabled: true
168
-
169
- Style/NestedFileDirname:
170
- Enabled: true
56
+ # Layout ----------------------------------------------------------------------
171
57
 
172
58
  Layout/LineLength:
173
59
  Max: 150
174
60
 
175
- Layout/EmptyLinesAroundAttributeAccessor:
176
- Enabled: true
177
-
178
- Layout/SpaceAroundMethodCallOperator:
179
- Enabled: true
180
-
181
61
  Layout/ClassStructure:
182
62
  Enabled: true
183
63
  Categories:
@@ -197,158 +77,17 @@ Layout/ClassStructure:
197
77
  Layout/EmptyLineAfterGuardClause:
198
78
  Enabled: false
199
79
 
200
- Layout/SpaceBeforeBrackets:
201
- Enabled: true
202
-
203
- Layout/LineEndStringConcatenationIndentation:
204
- Enabled: true
205
-
206
- Lint/NonDeterministicRequireOrder:
207
- Enabled: true
208
-
209
- Lint/DeprecatedOpenSSLConstant:
210
- Enabled: true
211
-
212
- Lint/DuplicateElsifCondition:
213
- Enabled: true
214
-
215
- Lint/MixedRegexpCaptureTypes:
216
- Enabled: true
217
-
218
- Lint/RaiseException:
219
- Enabled: true
220
-
221
- Lint/StructNewOverride:
222
- Enabled: true
223
-
224
- Lint/DuplicateBranch:
225
- Enabled: true
226
-
227
- Lint/DuplicateRegexpCharacterClassElement:
228
- Enabled: true
229
-
230
- Lint/EmptyBlock:
231
- Enabled: true
232
-
233
- Lint/EmptyClass:
234
- Enabled: true
235
-
236
- Lint/NoReturnInBeginEndBlocks:
237
- Enabled: true
238
-
239
- Lint/ToEnumArguments:
240
- Enabled: true
241
-
242
- Lint/UnexpectedBlockArity:
243
- Enabled: true
244
-
245
- Lint/AmbiguousAssignment:
246
- Enabled: true
247
-
248
- Lint/DeprecatedConstants:
249
- Enabled: true
250
-
251
- Lint/LambdaWithoutLiteralBlock:
252
- Enabled: true
253
-
254
- Lint/RedundantDirGlobSort:
255
- Enabled: true
256
-
257
- Lint/UnmodifiedReduceAccumulator:
258
- Enabled: true
259
-
260
- Lint/NumberedParameterAssignment:
261
- Enabled: true
262
-
263
- Lint/OrAssignmentToConstant:
264
- Enabled: true
265
-
266
- Lint/SymbolConversion:
267
- Enabled: true
268
-
269
- Lint/TripleQuotes:
270
- Enabled: true
271
-
272
- Lint/EmptyInPattern:
273
- Enabled: true
274
-
275
- Lint/AmbiguousRange:
276
- Enabled: true
277
-
278
- Lint/AmbiguousOperatorPrecedence:
279
- Enabled: true
280
-
281
- Lint/IncompatibleIoSelectWithFiberScheduler:
282
- Enabled: true
283
-
284
- Lint/RequireRelativeSelfPath:
285
- Enabled: true
286
-
287
- Lint/UselessRuby2Keywords:
288
- Enabled: true
289
-
290
- Gemspec/DateAssignment:
291
- Enabled: true
80
+ # Gemspec ---------------------------------------------------------------------
292
81
 
293
82
  Gemspec/RequireMFA:
294
83
  Enabled: false
295
84
 
296
- Security/IoMethods:
297
- Enabled: true
298
-
299
- Performance/AncestorsInclude:
300
- Enabled: true
301
-
302
- Performance/BigDecimalWithNumericArgument:
303
- Enabled: true
304
-
305
- Performance/RedundantSortBlock:
306
- Enabled: true
307
-
308
- Performance/RedundantStringChars:
309
- Enabled: true
310
-
311
- Performance/ReverseFirst:
312
- Enabled: true
313
-
314
- Performance/SortReverse:
315
- Enabled: true
316
-
317
- Performance/Squeeze:
318
- Enabled: true
319
-
320
- Performance/StringInclude:
321
- Enabled: true
322
-
323
- Performance/BlockGivenWithExplicitBlock:
324
- Enabled: true
325
-
326
- Performance/CollectionLiteralInLoop:
327
- Enabled: true
328
-
329
- Performance/ConstantRegexp:
330
- Enabled: true
85
+ # Performance -----------------------------------------------------------------
331
86
 
332
87
  Performance/MethodObjectAsBlock:
333
88
  Enabled: false
334
89
 
335
- Performance/Sum:
336
- Enabled: true
337
-
338
- Performance/RedundantEqualityComparisonBlock:
339
- Enabled: true
340
-
341
- Performance/RedundantSplitRegexpArgument:
342
- Enabled: true
343
-
344
- Performance/MapCompact:
345
- Enabled: true
346
-
347
- Performance/ConcurrentMonotonicTime:
348
- Enabled: true
349
-
350
- Performance/StringIdentifierArgument:
351
- Enabled: true
90
+ # RSpec -----------------------------------------------------------------------
352
91
 
353
92
  RSpec/ExampleLength:
354
93
  Enabled: false
@@ -380,23 +119,5 @@ RSpec/MultipleMemoizedHelpers:
380
119
  RSpec/StubbedMock:
381
120
  Enabled: false
382
121
 
383
- RSpec/IdenticalEqualityAssertion:
384
- Enabled: true
385
-
386
- RSpec/Rails/AvoidSetupHook:
387
- Enabled: true
388
-
389
- RSpec/ExcessiveDocstringSpacing:
390
- Enabled: true
391
-
392
- RSpec/SubjectDeclaration:
393
- Enabled: true
394
-
395
- RSpec/FactoryBot/SyntaxMethods:
396
- Enabled: true
397
-
398
- RSpec/BeEq:
399
- Enabled: true
400
-
401
- RSpec/BeNil:
402
- Enabled: true
122
+ RSpec/VerifiedDoubleReference:
123
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -2,6 +2,44 @@
2
2
 
3
3
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
4
4
 
5
+ ## [1.2.1] - 2022-07-27
6
+
7
+ ### Fixed
8
+
9
+ - Fixed documentation
10
+
11
+ ### Updated
12
+
13
+ - Updated gem documentation, version
14
+
15
+ ## [1.2.0] - 2022-07-27
16
+
17
+ ### Added
18
+
19
+ - Added ability to use `RSET` SMTP command
20
+ - Added ability to configure multiple message receiving flow during one session
21
+ - Added ability to configure SMTP command delay responses
22
+
23
+ ### Updated
24
+
25
+ - Updated gemspecs
26
+ - Updated tests
27
+ - Updated rubocop/codeclimate/circleci configs
28
+ - Updated gem development dependencies
29
+ - Updated gem documentation, version
30
+
31
+ ## [1.1.0] - 2022-05-17
32
+
33
+ ### Added
34
+
35
+ - Ability to check `smtpmock` version from cli
36
+
37
+ ### Updated
38
+
39
+ - Updated gemspecs
40
+ - Updated codeclimate/circleci configs
41
+ - Updated gem development dependencies
42
+ - Updated gem version
5
43
 
6
44
  ## [1.0.1] - 2022-03-10
7
45
 
data/README.md CHANGED
@@ -80,6 +80,7 @@ This gem includes easy system dependency manager. Run `bundle exec smtp_mock` wi
80
80
  | `-i`, `--install=PATH` | Install `smtpmock` to the existing path | `bundle exec smtp_mock -i ~/existent_dir` |
81
81
  | `-u`, `--uninstall` | Uninstall `smtpmock` | `bundle exec smtp_mock -u` |
82
82
  | `-g`, `--upgrade` | Upgrade to latest version of `smtpmock` | `bundle exec smtp_mock -g` |
83
+ | `-v`, `--version` | Prints current version of `smtpmock` | `bundle exec smtp_mock -v` |
83
84
  | `-h`, `--help` | Prints help | `bundle exec smtp_mock -h` |
84
85
 
85
86
  ### DSL
@@ -94,10 +95,18 @@ This gem includes easy system dependency manager. Run `bundle exec smtp_mock` wi
94
95
  | `session_timeout: 60` | Session timeout in seconds. It's equal to 30 seconds by default |
95
96
  | `shutdown_timeout: 5` | Graceful shutdown timeout in seconds. It's equal to 1 second by default |
96
97
  | `fail_fast: true` | Enables fail fast scenario. Disabled by default |
98
+ | `multiple_message_receiving: true` | Enables multiple message receiving scenario. Disabled by default |
97
99
  | `blacklisted_helo_domains: %w[a.com b.com]` | Blacklisted `HELO` domains |
98
100
  | `blacklisted_mailfrom_emails: %w[a@a.com b@b.com]` | Blacklisted `MAIL FROM` emails |
99
101
  | `blacklisted_rcptto_emails: %w[c@c.com d@d.com]` | blacklisted `RCPT TO` emails |
100
102
  | `not_registered_emails: %w[e@e.com f@f.com]` | Not registered (non-existent) `RCPT TO` emails |
103
+ | `response_delay_helo: 2` | `HELO` response delay in seconds. It's equal to 0 seconds by default |
104
+ | `response_delay_mailfrom: 2` | `MAIL FROM` response delay in seconds. It's equal to 0 seconds by default |
105
+ | `response_delay_rcptto: 2` | `RCPT TO` response delay in seconds. It's equal to 0 seconds by default |
106
+ | `response_delay_data: 2` | `DATA` response delay in seconds. It's equal to 0 seconds by default |
107
+ | `response_delay_message: 2` | Message response delay in seconds. It's equal to 0 seconds by default |
108
+ | `response_delay_rset: 2` | `RSET` response delay in seconds. It's equal to 0 seconds by default |
109
+ | `response_delay_quit: 2` | `QUIT` response delay in seconds. It's equal to 0 seconds by default |
101
110
  | `msg_size_limit: 42` | Message body size limit in bytes. It's equal to 10485760 bytes by default |
102
111
  | `msg_greeting: 'Greeting message'` | Custom server greeting message |
103
112
  | `msg_invalid_cmd: 'Invalid command message'` | Custom invalid command message |
@@ -117,7 +126,9 @@ This gem includes easy system dependency manager. Run `bundle exec smtp_mock` wi
117
126
  | `msg_invalid_cmd_data_sequence: 'Invalid command DATA sequence message'` | Custom invalid command `DATA` sequence message |
118
127
  | `msg_data_received: 'DATA received message'` | Custom `DATA` received message |
119
128
  | `msg_msg_size_is_too_big: 'Message size is too big'` | Custom size is too big message |
120
- | `msg_msg_received: 'Message has been received'` | Custom received message body message |
129
+ | `msg_invalid_cmd_rset_sequence: 'Invalid command RSET sequence message'` | Custom invalid command `RSET` sequence message |
130
+ | `msg_invalid_cmd_rset_arg: 'Invalid command RSET argument message'` | Custom invalid command `RSET` argument message |
131
+ | `msg_rset_received: 'RSET received message'` | Custom `RSET` received message |
121
132
  | `msg_quit_cmd: 'Quit command message'` | Custom quit command message |
122
133
 
123
134
  #### Example of usage
@@ -8,45 +8,61 @@ module SmtpMock
8
8
  USE_CASE = 'Usage: smtp_mock [options], example: `bundle exec smtp_mock -s -i ~/existent_dir`'
9
9
  DOWNLOAD_SCRIPT = 'https://raw.githubusercontent.com/mocktools/go-smtp-mock/master/script/download.sh'
10
10
 
11
- def resolve(command_line_args) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
11
+ def resolve(command_line_args) # rubocop:disable Metrics/AbcSize
12
12
  opt_parser = ::OptionParser.new do |parser|
13
13
  parser.banner = SmtpMock::Cli::Resolver::USE_CASE
14
-
15
14
  parser.on('-s', '--sudo', 'Run command as sudo') { self.sudo = true }
15
+ parser.on('-iPATH', '--install=PATH', 'Install smtpmock to the existing path', &install)
16
+ parser.on('-u', '--uninstall', 'Uninstall smtpmock', &uninstall)
17
+ parser.on('-g', '--upgrade', 'Upgrade to latest version of smtpmock', &upgrade)
18
+ parser.on('-v', '--version', 'Prints current smtpmock version', &version)
19
+ parser.on('-h', '--help', 'Prints help') { self.message = parser.to_s }
16
20
 
17
- parser.on('-iPATH', '--install=PATH', 'Install smtpmock to the existing path') do |argument|
18
- self.install_path = argument
19
- return self.message = 'smtpmock is already installed' if ::File.exist?(binary_path)
20
-
21
- install_to(install_path)
22
- ::Kernel.system("#{as_sudo}ln -s #{binary_path} #{SmtpMock::Dependency::SYMLINK}")
23
- self.message = 'smtpmock was installed successfully'
24
- end
21
+ self.success = true
22
+ end
25
23
 
26
- parser.on('-u', '--uninstall', 'Uninstall smtpmock') do
27
- return if not_installed? # rubocop:disable Lint/NonLocalExitFromIterator
24
+ opt_parser.parse(command_line_args) # TODO: add error handler
25
+ end
28
26
 
29
- ::Kernel.system("#{as_sudo}unlink #{SmtpMock::Dependency::SYMLINK}")
30
- ::Kernel.system("rm #{current_smtpmock_path}")
31
- self.message = 'smtpmock was uninstalled successfully'
32
- end
27
+ private
33
28
 
34
- parser.on('-g', '--upgrade', 'Upgrade to latest version of smtpmock') do
35
- return if not_installed? # rubocop:disable Lint/NonLocalExitFromIterator
29
+ def install
30
+ lambda do |argument|
31
+ self.install_path = argument
32
+ return self.message = 'smtpmock is already installed' if ::File.exist?(binary_path)
36
33
 
37
- install_to(current_smtpmock_path[%r{(.+)/.+}, 1])
38
- self.message = 'smtpmock was upgraded successfully'
39
- end
34
+ install_to(install_path)
35
+ ::Kernel.system("#{as_sudo}ln -s #{binary_path} #{SmtpMock::Dependency::SYMLINK}")
36
+ self.message = 'smtpmock was installed successfully'
37
+ end
38
+ end
40
39
 
41
- parser.on('-h', '--help', 'Prints help') { self.message = parser.to_s }
40
+ def uninstall
41
+ lambda do |_|
42
+ return if not_installed?
42
43
 
43
- self.success = true
44
+ ::Kernel.system("#{as_sudo}unlink #{SmtpMock::Dependency::SYMLINK}")
45
+ ::Kernel.system("rm #{current_smtpmock_path}")
46
+ self.message = 'smtpmock was uninstalled successfully'
44
47
  end
48
+ end
45
49
 
46
- opt_parser.parse(command_line_args) # TODO: add error handler
50
+ def upgrade
51
+ lambda do |_|
52
+ return if not_installed?
53
+
54
+ install_to(current_smtpmock_path[%r{(.+)/.+}, 1])
55
+ self.message = 'smtpmock was upgraded successfully'
56
+ end
47
57
  end
48
58
 
49
- private
59
+ def version
60
+ lambda do |_|
61
+ return if not_installed?
62
+
63
+ self.message = SmtpMock::Dependency.version
64
+ end
65
+ end
50
66
 
51
67
  def binary_path
52
68
  "#{install_path}/smtpmock"
data/lib/smtp_mock/cli.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  module SmtpMock
4
4
  module Cli
5
5
  Command = ::Struct.new(:install_path, :sudo, :success, :message) do
6
- include Resolver
6
+ include SmtpMock::Cli::Resolver
7
7
  end
8
8
 
9
9
  def self.call(command_line_args, command = SmtpMock::Cli::Command)
@@ -14,11 +14,18 @@ module SmtpMock
14
14
  blacklisted_rcptto_emails
15
15
  not_registered_emails
16
16
  ].freeze,
17
- SmtpMock::Types::Bool.constrained(eql: true) => %i[log fail_fast].freeze,
17
+ SmtpMock::Types::Bool.constrained(eql: true) => %i[log fail_fast multiple_message_receiving].freeze,
18
18
  SmtpMock::Types::Integer.constrained(gteq: 1) => %i[
19
19
  port
20
20
  session_timeout
21
21
  shutdown_timeout
22
+ response_delay_helo
23
+ response_delay_mailfrom
24
+ response_delay_rcptto
25
+ response_delay_data
26
+ response_delay_message
27
+ response_delay_rset
28
+ response_delay_quit
22
29
  msg_size_limit
23
30
  ].freeze,
24
31
  SmtpMock::Types::String => %i[
@@ -41,6 +48,9 @@ module SmtpMock
41
48
  msg_data_received
42
49
  msg_msg_size_is_too_big
43
50
  msg_msg_received
51
+ msg_invalid_cmd_rset_sequence
52
+ msg_invalid_cmd_rset_arg
53
+ msg_rset_received
44
54
  msg_quit_cmd
45
55
  ].freeze
46
56
  }.freeze
@@ -26,8 +26,6 @@ module SmtpMock
26
26
  "#{SmtpMock::Dependency::BINARY_SHORTCUT} #{command_line_args}".strip
27
27
  end
28
28
 
29
- private
30
-
31
29
  def version
32
30
  ::Kernel.public_send(
33
31
  :`,
@@ -35,6 +33,8 @@ module SmtpMock
35
33
  )[SmtpMock::Dependency::VERSION_REGEX_PATTERN, 1]
36
34
  end
37
35
 
36
+ private
37
+
38
38
  def minimal_version?(current_version)
39
39
  !!current_version && current_version >= SmtpMock::SMTPMOCK_MIN_VERSION
40
40
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SmtpMock
4
- VERSION = '1.0.1'
4
+ VERSION = '1.2.1'
5
5
  end
data/smtp_mock.gemspec CHANGED
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
31
31
 
32
32
  spec.add_runtime_dependency 'dry-struct', '~> 1.4'
33
33
 
34
- spec.add_development_dependency 'ffaker', '~> 2.20'
34
+ spec.add_development_dependency 'ffaker', '~> 2.21'
35
35
  spec.add_development_dependency 'net-smtp', '~> 0.3.1' if ::RUBY_VERSION >= '3.1.0'
36
36
  spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.6'
37
37
  spec.add_development_dependency 'rspec', '~> 3.11'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smtp_mock
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladislav Trotsenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-10 00:00:00.000000000 Z
11
+ date: 2022-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-struct
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '2.20'
33
+ version: '2.21'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '2.20'
40
+ version: '2.21'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -87,6 +87,7 @@ files:
87
87
  - ".codeclimate.yml"
88
88
  - ".github/BRANCH_NAMING_CONVENTION.md"
89
89
  - ".github/DEVELOPMENT_ENVIRONMENT_GUIDE.md"
90
+ - ".github/FUNDING.yml"
90
91
  - ".github/ISSUE_TEMPLATE/bug_report.md"
91
92
  - ".github/ISSUE_TEMPLATE/feature_request.md"
92
93
  - ".github/ISSUE_TEMPLATE/issue_report.md"
@@ -152,8 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
153
  - !ruby/object:Gem::Version
153
154
  version: '0'
154
155
  requirements: []
155
- rubyforge_project:
156
- rubygems_version: 2.7.3
156
+ rubygems_version: 3.2.20
157
157
  signing_key:
158
158
  specification_version: 4
159
159
  summary: smtp_mock