truemail 3.2.0 → 3.3.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: eaf56f1be4d147276a83807c713461d7bc2d4bedb009a0323fa3a38b7fd82829
4
- data.tar.gz: cb914e607e6a0182d7550a0fa0d8de7783c79763809019d4e706a6207daabc39
3
+ metadata.gz: a285b1759ed0334ca5f0b1e26bf3975bad782629236b7ef8c347d49e3540f63b
4
+ data.tar.gz: 20f84b22c347aaae67bfda81cadb67406bb0d4f215cee6976269cdc15cdbc9a9
5
5
  SHA512:
6
- metadata.gz: c2fdf6d58ca54b4c2a25eea14e6769277b16cfc24b32709d0195ef0fa29ac13d71c19717f0f8d4f5626e7c9348815307f7fa7d0238f0feeb5076fd6314fd00e6
7
- data.tar.gz: 0a3b9b4ec3fa36fd3a73353d651d5e9af664d5ebd030ab72a3942a24b9e7d1590dddaf569a3b3b83c36a3c83926fef1fb0c3c1fbdab19f7e7de7d1e5827d5ba4
6
+ metadata.gz: 9c1e73140bbc0304ddcbb6cd68b84f1f3e75bf14237a87a6bd89054253f022e630877c2b478418ee23c7214702eea0fdf1505ead39d84b1b75f9350c4c19cf1c
7
+ data.tar.gz: 7d99710ab7c9bdc72c37172f7fae87bc6a350d7a2e1befcd31681e2d3bf14ecf150bdbff01b07249904288bd57ea9bbebc007915b7ba5652659d90b99e466c74
@@ -2,15 +2,12 @@
2
2
 
3
3
  module Truemail
4
4
  class Configuration
5
- require 'logger'
6
-
7
5
  DEFAULT_CONNECTION_TIMEOUT = 2
8
6
  DEFAULT_RESPONSE_TIMEOUT = 2
9
7
  DEFAULT_CONNECTION_ATTEMPTS = 2
10
8
  DEFAULT_VALIDATION_TYPE = :smtp
11
9
  DEFAULT_SMTP_PORT = 25
12
10
  DEFAULT_LOGGER_OPTIONS = {
13
- logger_class: ::Logger,
14
11
  tracking_event: :error,
15
12
  stdout: false,
16
13
  log_absolute_path: nil
@@ -82,17 +79,9 @@ module Truemail
82
79
  end
83
80
  end
84
81
 
85
- def logger=(options) # rubocop:disable Metrics/AbcSize
82
+ def logger=(options)
86
83
  raise_unless(options, __method__, options.is_a?(::Hash))
87
- logger_class, tracking_event, stdout, log_absolute_path = logger_options(options)
88
- raise_unless(logger_class, __method__, logger_class.is_a?(::Class))
89
- valid_event = Truemail::Log::Event::TRACKING_EVENTS.key?(tracking_event)
90
- stdout_only = stdout && log_absolute_path.nil?
91
- file_only = log_absolute_path.is_a?(::String)
92
- both_types = stdout && file_only
93
- argument_info = valid_event ? log_absolute_path : tracking_event
94
- raise_unless(argument_info, __method__, valid_event && (stdout_only || file_only || both_types))
95
- @logger = Truemail::Logger.new(logger_class, tracking_event, stdout, log_absolute_path)
84
+ @logger = Truemail::Logger::Builder.call(Truemail::Configuration::DEFAULT_LOGGER_OPTIONS, **options)
96
85
  end
97
86
 
98
87
  def complete?
@@ -163,9 +152,5 @@ module Truemail
163
152
  check_validation_type(validation_type)
164
153
  end
165
154
  end
166
-
167
- def logger_options(current_options)
168
- Truemail::Configuration::DEFAULT_LOGGER_OPTIONS.merge(current_options).values
169
- end
170
155
  end
171
156
  end
@@ -2,13 +2,67 @@
2
2
 
3
3
  module Truemail
4
4
  class Logger
5
- attr_reader :logger_class, :event, :stdout, :file
5
+ require 'logger'
6
6
 
7
- def initialize(logger_class, event, error_stdout, log_absolute_path)
8
- @logger_class = logger_class
7
+ BUILDER_ATTRS = %i[tracking_event stdout log_absolute_path custom_logger].freeze
8
+
9
+ Builder = ::Struct.new(*BUILDER_ATTRS, keyword_init: true) do
10
+ private_class_method :new
11
+
12
+ def self.call(default_settings, **logger_attributes)
13
+ new(default_settings, **logger_attributes).validate_attributes.build_instance
14
+ end
15
+
16
+ def initialize(default_settings, **args)
17
+ super(**default_settings.merge(**args))
18
+ end
19
+
20
+ def validate_attributes
21
+ validate_logger_event
22
+ return validate_logger_instance if custom_logger
23
+ validate_logger_output
24
+ self
25
+ end
26
+
27
+ def build_instance
28
+ Truemail::Logger.new(tracking_event, stdout, log_absolute_path, custom_logger)
29
+ end
30
+
31
+ private
32
+
33
+ def raise_unless(argument_context, argument_name, condition)
34
+ raise Truemail::ArgumentError.new(argument_context, argument_name) unless condition
35
+ end
36
+
37
+ def validate_logger_instance
38
+ raise_unless(custom_logger, :custom_logger=, custom_logger && custom_logger.respond_to?(:add))
39
+ self
40
+ end
41
+
42
+ def validate_logger_event
43
+ raise_unless(tracking_event, :tracking_event=, Truemail::Log::Event::TRACKING_EVENTS.key?(tracking_event))
44
+ end
45
+
46
+ def validate_logger_output
47
+ stdout_only = stdout && log_absolute_path.nil?
48
+ file_only = log_absolute_path.is_a?(::String)
49
+ both_types = stdout && file_only
50
+ raise_unless(
51
+ { stdout: stdout, log_absolute_path: log_absolute_path },
52
+ 'stdout=, log_absolute_path=',
53
+ both_types || stdout_only || file_only
54
+ )
55
+ end
56
+ end
57
+
58
+ attr_reader :event, :stdout, :file, :custom_logger, :stdout_logger, :file_logger
59
+
60
+ def initialize(event, error_stdout, log_absolute_path, custom_logger)
9
61
  @event = event
10
62
  @stdout = error_stdout
11
63
  @file = log_absolute_path
64
+ @custom_logger = custom_logger
65
+ init_builtin_loggers
12
66
  end
13
67
 
14
68
  def push(validator_instance)
@@ -26,10 +80,22 @@ module Truemail
26
80
  output_file
27
81
  end
28
82
 
29
- def create_logs(log_level, serialized_object)
83
+ def init_builtin_loggers
84
+ return if custom_logger
30
85
  %i[stdout file].each do |output_type|
31
86
  next unless public_send(output_type)
32
- logger_class.new(output_type.eql?(:stdout) ? $stdout : init_log_file).add(log_level) { serialized_object }
87
+ instance_variable_set(
88
+ :"@#{output_type}_logger",
89
+ ::Logger.new(output_type.eql?(:stdout) ? $stdout : init_log_file)
90
+ )
91
+ end
92
+ end
93
+
94
+ def create_logs(log_level, serialized_object)
95
+ %i[custom_logger stdout_logger file_logger].each do |getter|
96
+ logger_instance = public_send(getter)
97
+ next unless logger_instance
98
+ logger_instance.add(log_level) { serialized_object }
33
99
  end
34
100
  end
35
101
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Truemail
4
- VERSION = '3.2.0'
4
+ VERSION = '3.3.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: truemail
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 3.3.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: 2024-02-24 00:00:00.000000000 Z
11
+ date: 2024-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simpleidn