truemail 3.2.0 → 3.3.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: 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