smtp_mock 1.0.0 → 1.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6e7b1afecc17c4c1905acc7008dece2c87908a622adf0d3e7fa4093b3385584d
4
- data.tar.gz: a8e006258b42098c2b35cbadd10b7004b7099942d18cdd6baec533fc7abc62c7
3
+ metadata.gz: 61d44a5dae5f6ba3f2a8b9dfea9ef79f66d87cc229d0f2b67351e93898e81c99
4
+ data.tar.gz: 211930e92b9075fb4d0afbb70729814344752ceb5a8839408f4d0e24449cae0e
5
5
  SHA512:
6
- metadata.gz: 9713d4cd810845321ce7b7bce79717382da3652b3475836342e5a68433d7ee92246ff456285cc905d862030801a7c545b89780100bd5e867ab433f6bf82ae29a
7
- data.tar.gz: cd51a1f5a1bd7f70b9babe5b4cf2cbfd8ab17333bd1b739a941f598960b1b6e1de8baddceda89aad0e0276ddf64a1ba17074fed4989a2d09e62b0aa0638ccb0f
6
+ metadata.gz: 8d3615059b8c883c0cb3fb71be0bcabb7bdd1c31489d2e2c2585aaa81823f83f6386dfaff15b17854bc22ffd7224514e15765a52556c8e5a08cc6d55d969da3c
7
+ data.tar.gz: 4a58ac1a1e53a7b04f204dae54ee57d572189d02f2a09b0c73cd3d3e76ccddd86bd7dda95dc1e00a10b7411cbb704c8801c7e8285507bda915a0f8538dd0761e
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
@@ -40,9 +40,15 @@ references:
40
40
  curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
41
41
  chmod +x ./cc-test-reporter
42
42
 
43
+ use_latest_gemspec: &use_latest_gemspec
44
+ run:
45
+ name: Using latest gemspec
46
+ command: |
47
+ cp .circleci/gemspec_latest smtp_mock.gemspec
48
+
43
49
  use_compatible_gemspec: &use_compatible_gemspec
44
50
  run:
45
- name: Use compatible gemspec
51
+ name: Using compatible gemspec
46
52
  command: |
47
53
  cp .circleci/gemspec_compatible smtp_mock.gemspec
48
54
 
@@ -57,6 +63,7 @@ jobs:
57
63
  steps:
58
64
  - checkout
59
65
 
66
+ - <<: *use_latest_gemspec
60
67
  - <<: *restore_bundle_cache
61
68
  - <<: *bundle_install
62
69
  - <<: *save_bundle_cache
@@ -77,6 +84,7 @@ jobs:
77
84
  steps:
78
85
  - checkout
79
86
 
87
+ - <<: *use_latest_gemspec
80
88
  - <<: *restore_bundle_cache
81
89
  - <<: *bundle_install
82
90
  - <<: *save_bundle_cache
@@ -114,7 +122,7 @@ jobs:
114
122
  - checkout
115
123
  - <<: *use_compatible_gemspec
116
124
  - ruby/install-deps:
117
- bundler-version: "2.3.5"
125
+ bundler-version: "2.3.18"
118
126
  with-cache: false
119
127
  path: './vendor/custom_bundle'
120
128
  - <<: *system_dependencies
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- lib = ::File.expand_path('lib', __dir__)
4
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require 'smtp_mock/version'
3
+ require_relative 'lib/smtp_mock/version'
6
4
 
7
5
  Gem::Specification.new do |spec|
8
6
  spec.name = 'smtp_mock'
@@ -32,8 +30,7 @@ Gem::Specification.new do |spec|
32
30
 
33
31
  spec.add_runtime_dependency 'dry-struct', '~> 1.4'
34
32
 
35
- spec.add_development_dependency 'ffaker', '~> 2.20'
36
- spec.add_development_dependency 'pry-byebug', '~> 3.9'
33
+ spec.add_development_dependency 'ffaker', '~> 2.21'
37
34
  spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.6'
38
- spec.add_development_dependency 'rspec', '~> 3.10'
35
+ spec.add_development_dependency 'rspec', '~> 3.11'
39
36
  end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/smtp_mock/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'smtp_mock'
7
+ spec.version = SmtpMock::VERSION
8
+ spec.authors = ['Vladislav Trotsenko']
9
+ spec.email = ['admin@bestweb.com.ua']
10
+
11
+ spec.summary = %(smtp_mock)
12
+ spec.description = %(💎 Ruby SMTP mock. Mimic any SMTP server behaviour for your test environment.)
13
+
14
+ spec.homepage = 'https://github.com/mocktools/ruby-smtp-mock'
15
+ spec.license = 'MIT'
16
+
17
+ spec.metadata = {
18
+ 'homepage_uri' => 'https://github.com/mocktools/ruby-smtp-mock',
19
+ 'changelog_uri' => 'https://github.com/mocktools/ruby-smtp-mock/blob/master/CHANGELOG.md',
20
+ 'source_code_uri' => 'https://github.com/mocktools/ruby-smtp-mock',
21
+ 'documentation_uri' => 'https://github.com/mocktools/ruby-smtp-mock/blob/master/README.md',
22
+ 'bug_tracker_uri' => 'https://github.com/mocktools/ruby-smtp-mock/issues'
23
+ }
24
+
25
+ spec.required_ruby_version = '>= 2.5.0'
26
+
27
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
28
+ spec.executables = %w[smtp_mock]
29
+ spec.require_paths = %w[lib]
30
+ spec.post_install_message = 'smtpmock is required system dependency. For more details run: `bundle exec smtp_mock -h`'
31
+
32
+ spec.add_runtime_dependency 'dry-struct', '~> 1.4'
33
+
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
+ spec.add_development_dependency 'net-smtp', '~> 0.3.1'
38
+ spec.add_development_dependency 'overcommit', '~> 0.59.1'
39
+ spec.add_development_dependency 'pry-byebug', '~> 3.9'
40
+ spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.6'
41
+ spec.add_development_dependency 'reek', '~> 6.1', '>= 6.1.1'
42
+ spec.add_development_dependency 'rspec', '~> 3.11'
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
+ spec.add_development_dependency 'simplecov', '~> 0.21.2'
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-25
10
+ channel: rubocop-1-32
11
11
 
12
12
  reek:
13
13
  enabled: true
@@ -0,0 +1,26 @@
1
+ # Development environment guide
2
+
3
+ ## Preparing
4
+
5
+ Clone `smtp_mock` repository:
6
+
7
+ ```bash
8
+ git clone https://github.com/mocktools/ruby-smtp-mock.git
9
+ cd ruby-smtp-mock
10
+ ```
11
+
12
+ Configure latest Ruby environment:
13
+
14
+ ```bash
15
+ echo 'ruby-3.1.2' > .ruby-version
16
+ cp .circleci/gemspec_latest smtp_mock.gemspec
17
+ ```
18
+
19
+ ## Commiting
20
+
21
+ Commit your changes excluding `.ruby-version`, `smtp_mock.gemspec`
22
+
23
+ ```bash
24
+ git add . ':!.ruby-version' ':!smtp_mock.gemspec'
25
+ git commit -m 'Your new awesome smtp_mock feature'
26
+ ```
@@ -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,132 +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
56
+ # Layout ----------------------------------------------------------------------
168
57
 
169
58
  Layout/LineLength:
170
59
  Max: 150
171
60
 
172
- Layout/EmptyLinesAroundAttributeAccessor:
173
- Enabled: true
174
-
175
- Layout/SpaceAroundMethodCallOperator:
176
- Enabled: true
177
-
178
61
  Layout/ClassStructure:
179
62
  Enabled: true
180
63
  Categories:
@@ -194,158 +77,17 @@ Layout/ClassStructure:
194
77
  Layout/EmptyLineAfterGuardClause:
195
78
  Enabled: false
196
79
 
197
- Layout/SpaceBeforeBrackets:
198
- Enabled: true
199
-
200
- Layout/LineEndStringConcatenationIndentation:
201
- Enabled: true
202
-
203
- Lint/NonDeterministicRequireOrder:
204
- Enabled: true
205
-
206
- Lint/DeprecatedOpenSSLConstant:
207
- Enabled: true
208
-
209
- Lint/DuplicateElsifCondition:
210
- Enabled: true
211
-
212
- Lint/MixedRegexpCaptureTypes:
213
- Enabled: true
214
-
215
- Lint/RaiseException:
216
- Enabled: true
217
-
218
- Lint/StructNewOverride:
219
- Enabled: true
220
-
221
- Lint/DuplicateBranch:
222
- Enabled: true
223
-
224
- Lint/DuplicateRegexpCharacterClassElement:
225
- Enabled: true
226
-
227
- Lint/EmptyBlock:
228
- Enabled: true
229
-
230
- Lint/EmptyClass:
231
- Enabled: true
232
-
233
- Lint/NoReturnInBeginEndBlocks:
234
- Enabled: true
235
-
236
- Lint/ToEnumArguments:
237
- Enabled: true
238
-
239
- Lint/UnexpectedBlockArity:
240
- Enabled: true
241
-
242
- Lint/AmbiguousAssignment:
243
- Enabled: true
244
-
245
- Lint/DeprecatedConstants:
246
- Enabled: true
247
-
248
- Lint/LambdaWithoutLiteralBlock:
249
- Enabled: true
250
-
251
- Lint/RedundantDirGlobSort:
252
- Enabled: true
253
-
254
- Lint/UnmodifiedReduceAccumulator:
255
- Enabled: true
256
-
257
- Lint/NumberedParameterAssignment:
258
- Enabled: true
259
-
260
- Lint/OrAssignmentToConstant:
261
- Enabled: true
262
-
263
- Lint/SymbolConversion:
264
- Enabled: true
265
-
266
- Lint/TripleQuotes:
267
- Enabled: true
268
-
269
- Lint/EmptyInPattern:
270
- Enabled: true
271
-
272
- Lint/AmbiguousRange:
273
- Enabled: true
274
-
275
- Lint/AmbiguousOperatorPrecedence:
276
- Enabled: true
277
-
278
- Lint/IncompatibleIoSelectWithFiberScheduler:
279
- Enabled: true
280
-
281
- Lint/RequireRelativeSelfPath:
282
- Enabled: true
283
-
284
- Lint/UselessRuby2Keywords:
285
- Enabled: true
286
-
287
- Gemspec/DateAssignment:
288
- Enabled: true
80
+ # Gemspec ---------------------------------------------------------------------
289
81
 
290
82
  Gemspec/RequireMFA:
291
83
  Enabled: false
292
84
 
293
- Security/IoMethods:
294
- Enabled: true
295
-
296
- Performance/AncestorsInclude:
297
- Enabled: true
298
-
299
- Performance/BigDecimalWithNumericArgument:
300
- Enabled: true
301
-
302
- Performance/RedundantSortBlock:
303
- Enabled: true
304
-
305
- Performance/RedundantStringChars:
306
- Enabled: true
307
-
308
- Performance/ReverseFirst:
309
- Enabled: true
310
-
311
- Performance/SortReverse:
312
- Enabled: true
313
-
314
- Performance/Squeeze:
315
- Enabled: true
316
-
317
- Performance/StringInclude:
318
- Enabled: true
319
-
320
- Performance/BlockGivenWithExplicitBlock:
321
- Enabled: true
322
-
323
- Performance/CollectionLiteralInLoop:
324
- Enabled: true
325
-
326
- Performance/ConstantRegexp:
327
- Enabled: true
85
+ # Performance -----------------------------------------------------------------
328
86
 
329
87
  Performance/MethodObjectAsBlock:
330
88
  Enabled: false
331
89
 
332
- Performance/Sum:
333
- Enabled: true
334
-
335
- Performance/RedundantEqualityComparisonBlock:
336
- Enabled: true
337
-
338
- Performance/RedundantSplitRegexpArgument:
339
- Enabled: true
340
-
341
- Performance/MapCompact:
342
- Enabled: true
343
-
344
- Performance/ConcurrentMonotonicTime:
345
- Enabled: true
346
-
347
- Performance/StringIdentifierArgument:
348
- Enabled: true
90
+ # RSpec -----------------------------------------------------------------------
349
91
 
350
92
  RSpec/ExampleLength:
351
93
  Enabled: false
@@ -377,17 +119,5 @@ RSpec/MultipleMemoizedHelpers:
377
119
  RSpec/StubbedMock:
378
120
  Enabled: false
379
121
 
380
- RSpec/IdenticalEqualityAssertion:
381
- Enabled: true
382
-
383
- RSpec/Rails/AvoidSetupHook:
384
- Enabled: true
385
-
386
- RSpec/ExcessiveDocstringSpacing:
387
- Enabled: true
388
-
389
- RSpec/SubjectDeclaration:
390
- Enabled: true
391
-
392
- RSpec/FactoryBot/SyntaxMethods:
393
- Enabled: true
122
+ RSpec/VerifiedDoubleReference:
123
+ Enabled: false
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-3.1.0
1
+ ruby-2.5.0
data/CHANGELOG.md CHANGED
@@ -2,6 +2,48 @@
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.0] - 2022-07-27
6
+
7
+ ### Added
8
+
9
+ - Ability to use `RSET` SMTP command
10
+ - Ability to configure multiple message receiving flow during one session
11
+ - Ability to configure SMTP command delay responses
12
+
13
+ ### Updated
14
+
15
+ - Updated gemspecs
16
+ - Updated tests
17
+ - Updated rubocop/codeclimate/circleci configs
18
+ - Updated gem development dependencies
19
+ - Updated gem documentation, version
20
+
21
+ ## [1.1.0] - 2022-05-17
22
+
23
+ ### Added
24
+
25
+ - Ability to check `smtpmock` version from cli
26
+
27
+ ### Updated
28
+
29
+ - Updated gemspecs
30
+ - Updated codeclimate/circleci configs
31
+ - Updated gem development dependencies
32
+ - Updated gem version
33
+
34
+ ## [1.0.1] - 2022-03-10
35
+
36
+ ### Added
37
+
38
+ - Development environment guide
39
+
40
+ ### Updated
41
+
42
+ - Updated gemspecs
43
+ - Updated codeclimate/circleci configs
44
+ - Updated gem development dependencies
45
+ - Updated gem version
46
+
5
47
  ## [1.0.0] - 2022-01-31
6
48
 
7
49
  ### Added
data/CONTRIBUTING.md CHANGED
@@ -42,5 +42,7 @@ Guidelines for pull requests:
42
42
  2. Fork the repo, checkout to `develop` branch
43
43
  3. Run the tests. This is to make sure your starting point works
44
44
  4. Read our [branch naming convention](.github/BRANCH_NAMING_CONVENTION.md)
45
- 5. Create a new branch and make your changes. This includes tests for features!
46
- 6. Push to your fork and submit a pull request to `develop` branch
45
+ 5. Create a new branch
46
+ 6. Read our [setup development environment guide](.github/DEVELOPMENT_ENVIRONMENT_GUIDE.md)
47
+ 7. Make your changes. Please note that your PR should include tests for the new codebase!
48
+ 9. Push to your fork and submit a pull request to `develop` branch
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
+ | `multipleMessageReceiving: 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.0'
4
+ VERSION = '1.2.0'
5
5
  end
data/smtp_mock.gemspec CHANGED
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- lib = ::File.expand_path('lib', __dir__)
4
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require 'smtp_mock/version'
3
+ require_relative 'lib/smtp_mock/version'
6
4
 
7
5
  Gem::Specification.new do |spec|
8
6
  spec.name = 'smtp_mock'
@@ -33,17 +31,8 @@ Gem::Specification.new do |spec|
33
31
 
34
32
  spec.add_runtime_dependency 'dry-struct', '~> 1.4'
35
33
 
36
- spec.add_development_dependency 'bundler-audit', '~> 0.9.0.1'
37
- spec.add_development_dependency 'fasterer', '~> 0.9.0'
38
- spec.add_development_dependency 'ffaker', '~> 2.20'
39
- spec.add_development_dependency 'net-smtp', '~> 0.3.1'
40
- spec.add_development_dependency 'overcommit', '~> 0.58.0'
41
- spec.add_development_dependency 'pry-byebug', '~> 3.9'
34
+ spec.add_development_dependency 'ffaker', '~> 2.21'
35
+ spec.add_development_dependency 'net-smtp', '~> 0.3.1' if ::RUBY_VERSION >= '3.1.0'
42
36
  spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.6'
43
- spec.add_development_dependency 'reek', '~> 6.1'
44
- spec.add_development_dependency 'rspec', '~> 3.10'
45
- spec.add_development_dependency 'rubocop', '~> 1.25'
46
- spec.add_development_dependency 'rubocop-performance', '~> 1.13', '>= 1.13.2'
47
- spec.add_development_dependency 'rubocop-rspec', '~> 2.8'
48
- spec.add_development_dependency 'simplecov', '~> 0.21.2'
37
+ spec.add_development_dependency 'rspec', '~> 3.11'
49
38
  end
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.0
4
+ version: 1.2.0
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-01-31 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
@@ -24,90 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.4'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler-audit
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: 0.9.0.1
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: 0.9.0.1
41
- - !ruby/object:Gem::Dependency
42
- name: fasterer
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: 0.9.0
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: 0.9.0
55
27
  - !ruby/object:Gem::Dependency
56
28
  name: ffaker
57
29
  requirement: !ruby/object:Gem::Requirement
58
30
  requirements:
59
31
  - - "~>"
60
32
  - !ruby/object:Gem::Version
61
- version: '2.20'
33
+ version: '2.21'
62
34
  type: :development
63
35
  prerelease: false
64
36
  version_requirements: !ruby/object:Gem::Requirement
65
37
  requirements:
66
38
  - - "~>"
67
39
  - !ruby/object:Gem::Version
68
- version: '2.20'
69
- - !ruby/object:Gem::Dependency
70
- name: net-smtp
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: 0.3.1
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: 0.3.1
83
- - !ruby/object:Gem::Dependency
84
- name: overcommit
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: 0.58.0
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: 0.58.0
97
- - !ruby/object:Gem::Dependency
98
- name: pry-byebug
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '3.9'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '3.9'
40
+ version: '2.21'
111
41
  - !ruby/object:Gem::Dependency
112
42
  name: rake
113
43
  requirement: !ruby/object:Gem::Requirement
@@ -128,96 +58,20 @@ dependencies:
128
58
  - - ">="
129
59
  - !ruby/object:Gem::Version
130
60
  version: 13.0.6
131
- - !ruby/object:Gem::Dependency
132
- name: reek
133
- requirement: !ruby/object:Gem::Requirement
134
- requirements:
135
- - - "~>"
136
- - !ruby/object:Gem::Version
137
- version: '6.1'
138
- type: :development
139
- prerelease: false
140
- version_requirements: !ruby/object:Gem::Requirement
141
- requirements:
142
- - - "~>"
143
- - !ruby/object:Gem::Version
144
- version: '6.1'
145
61
  - !ruby/object:Gem::Dependency
146
62
  name: rspec
147
63
  requirement: !ruby/object:Gem::Requirement
148
64
  requirements:
149
65
  - - "~>"
150
66
  - !ruby/object:Gem::Version
151
- version: '3.10'
152
- type: :development
153
- prerelease: false
154
- version_requirements: !ruby/object:Gem::Requirement
155
- requirements:
156
- - - "~>"
157
- - !ruby/object:Gem::Version
158
- version: '3.10'
159
- - !ruby/object:Gem::Dependency
160
- name: rubocop
161
- requirement: !ruby/object:Gem::Requirement
162
- requirements:
163
- - - "~>"
164
- - !ruby/object:Gem::Version
165
- version: '1.25'
166
- type: :development
167
- prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- requirements:
170
- - - "~>"
171
- - !ruby/object:Gem::Version
172
- version: '1.25'
173
- - !ruby/object:Gem::Dependency
174
- name: rubocop-performance
175
- requirement: !ruby/object:Gem::Requirement
176
- requirements:
177
- - - "~>"
178
- - !ruby/object:Gem::Version
179
- version: '1.13'
180
- - - ">="
181
- - !ruby/object:Gem::Version
182
- version: 1.13.2
183
- type: :development
184
- prerelease: false
185
- version_requirements: !ruby/object:Gem::Requirement
186
- requirements:
187
- - - "~>"
188
- - !ruby/object:Gem::Version
189
- version: '1.13'
190
- - - ">="
191
- - !ruby/object:Gem::Version
192
- version: 1.13.2
193
- - !ruby/object:Gem::Dependency
194
- name: rubocop-rspec
195
- requirement: !ruby/object:Gem::Requirement
196
- requirements:
197
- - - "~>"
198
- - !ruby/object:Gem::Version
199
- version: '2.8'
200
- type: :development
201
- prerelease: false
202
- version_requirements: !ruby/object:Gem::Requirement
203
- requirements:
204
- - - "~>"
205
- - !ruby/object:Gem::Version
206
- version: '2.8'
207
- - !ruby/object:Gem::Dependency
208
- name: simplecov
209
- requirement: !ruby/object:Gem::Requirement
210
- requirements:
211
- - - "~>"
212
- - !ruby/object:Gem::Version
213
- version: 0.21.2
67
+ version: '3.11'
214
68
  type: :development
215
69
  prerelease: false
216
70
  version_requirements: !ruby/object:Gem::Requirement
217
71
  requirements:
218
72
  - - "~>"
219
73
  - !ruby/object:Gem::Version
220
- version: 0.21.2
74
+ version: '3.11'
221
75
  description: "\U0001F48E Ruby SMTP mock. Mimic any SMTP server behaviour for your
222
76
  test environment."
223
77
  email:
@@ -229,8 +83,11 @@ extra_rdoc_files: []
229
83
  files:
230
84
  - ".circleci/config.yml"
231
85
  - ".circleci/gemspec_compatible"
86
+ - ".circleci/gemspec_latest"
232
87
  - ".codeclimate.yml"
233
88
  - ".github/BRANCH_NAMING_CONVENTION.md"
89
+ - ".github/DEVELOPMENT_ENVIRONMENT_GUIDE.md"
90
+ - ".github/FUNDING.yml"
234
91
  - ".github/ISSUE_TEMPLATE/bug_report.md"
235
92
  - ".github/ISSUE_TEMPLATE/feature_request.md"
236
93
  - ".github/ISSUE_TEMPLATE/issue_report.md"
@@ -296,7 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
296
153
  - !ruby/object:Gem::Version
297
154
  version: '0'
298
155
  requirements: []
299
- rubygems_version: 3.3.3
156
+ rubygems_version: 3.2.20
300
157
  signing_key:
301
158
  specification_version: 4
302
159
  summary: smtp_mock