jekyll_plugin_logger 2.0.1 → 2.1.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: 9f82bc258b242f26c4358799b244b20d7b0763a86f5618af7f01b20fd1002d59
4
- data.tar.gz: 3ffb12d7e491701a2eaefde02f29cda28bf9ddf5c039a5146a175aa9163f0381
3
+ metadata.gz: 26418179467ef67c9e606c45bd565fff0fe4f8c450da9efa243d29d99b581821
4
+ data.tar.gz: 6f7b529c26a6df0b236acb15c2a6c9314b2679cba64d152c41b3f581ab188a8e
5
5
  SHA512:
6
- metadata.gz: 32fa2599a8864cb7418b6b4b85d9e4d7d1a42c5ad93b7763b19c2f62bb470df37d6d439c6a396ba616a9e4e8d5c33696f23adfb5926d508d981be3e09a474f80
7
- data.tar.gz: 295194a15f1937caec9d78185891091e5c47a3f271343f84fb35bbef4be62768c089a80e724c6310c130fc342d16bfd5095fd37b994609b41a957f5c15524b77
6
+ metadata.gz: 61308925aaf08121c323b650a7918c549a33c5eb4a2b0c50985210be2edd11bcadf5d31d4773c9a09c96194822efb95b83767ea10f98864752ec7a36cb5ee118
7
+ data.tar.gz: e4f70c43f66bffe16ccb045ed645d6ac0167de28e9146661325d69c155a444f9b717bfd9d9972e43e17217445c11247a58de13325cd1e04ef9f32a07d78bd650
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 2.1.0 / 2022-04-05
2
+ * Changed how config info is made available
3
+
1
4
  ## 2.0.1 / 2022-04-05
2
5
  * Changed to registration hook to `:site`, `:after_reset` because that is the first hook that gets called.
3
6
  * Improved the detection of various types of `progname`
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
32
32
  spec.required_ruby_version = ">= 2.6.0"
33
33
  spec.summary = "Generates Jekyll logger with colored output."
34
34
  spec.test_files = spec.files.grep(%r!^(test|spec|features)/!)
35
- spec.version = JekyllPluginLogger::VERSION
35
+ spec.version = JekyllPluginLoggerVersion::VERSION
36
36
 
37
37
  spec.add_dependency "jekyll", ">= 3.5.0"
38
38
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module JekyllPluginLogger
4
- VERSION = "2.0.1"
3
+ module JekyllPluginLoggerVersion
4
+ VERSION = "2.1.0"
5
5
  end
@@ -10,13 +10,14 @@ module JekyllPluginLoggerName
10
10
  PLUGIN_NAME = "jekyll_plugin_logger"
11
11
  end
12
12
 
13
- # Once the meta-logger is made (see `PluginMetaLogger``, below) new instances of `PluginLogger` can be created with log levels set by `config` entries.
13
+ # Once the meta-logger is made (see `PluginMetaLogger`, below) new instances of `PluginLogger` can be created with log levels set
14
+ # by `config` entries.
14
15
  # @example Create new `PluginLogger`s like this:
15
- # @logger = PluginMetaLogger.instance.new_logger(self)
16
+ # @logger = PluginMetaLogger.instance.new_logger(self, PluginMetaLogger.instance.config)
16
17
  #
17
- # self can be a class, a string, or a symbol.
18
+ # self can be a module, a class, a string, or a symbol.
18
19
  #
19
- # Best practice is to invoke `info``, `warn, `debug`` and `error`` methods by passing blocks that contain the message.
20
+ # Best practice is to invoke `info`, `warn, `debug` and `error` methods by passing blocks that contain the message.
20
21
  # The blocks will only be evaluated if output for that level is enabled.
21
22
  # @example Use `PluginLogger`s like this:
22
23
  # @logger.info { "This is only evaluated if info level debugging is enabled" }
@@ -24,8 +25,6 @@ end
24
25
  # For more information about the logging feature in the Ruby standard library,
25
26
  # @see https://ruby-doc.org/stdlib-2.7.1/libdoc/logger/rdoc/Logger.html
26
27
  class PluginLogger
27
- include JekyllPluginLogger
28
-
29
28
  # This method should only be called by PluginMetaLogger
30
29
  # @param log_level [String, Symbol, Integer] can be specified as $stderr or $stdout,
31
30
  # or an integer from 0..3 (inclusive),
@@ -40,12 +39,13 @@ class PluginLogger
40
39
  # @example If `progname` has value `abc`, then the YAML to override the programmatically set log_level to `debug` is:
41
40
  # logger_factory:
42
41
  # abc: debug
43
- def initialize(klass, config, stream_name = $stdout)
42
+ def initialize(klass, config = nil, stream_name = $stdout)
43
+ @config = config
44
44
  @logger = Logger.new(stream_name)
45
45
  @logger.progname = derive_progname(klass)
46
46
  @logger.level = :info
47
- plugin_loggers = config["plugin_loggers"]
48
- @logger.level ||= plugin_loggers["PluginMetaLogger"] if plugin_loggers
47
+ plugin_loggers = config ? config["plugin_loggers"] : nil
48
+ @logger.level = plugin_loggers[@logger.progname] if plugin_loggers && plugin_loggers[@logger.progname]
49
49
  # puts "PluginLogger.initialize: @logger.progname=#{@logger.progname} set to #{@logger.level}".red
50
50
  @logger.formatter = proc { |severity, _, prog_name, msg|
51
51
  "#{severity} #{prog_name}: #{msg}\n"
@@ -100,26 +100,26 @@ class PluginLogger
100
100
  end
101
101
  end
102
102
 
103
+ # Available colors are: :black, :red, :green, :yellow, :blue, :magenta, :cyan, :white, and the modifier :bold
104
+ def level_as_sym
105
+ return :unknown if @logger.level.negative? || level > 4
106
+
107
+ [:debug, :info, :warn, :error, :fatal, :unknown][@logger.level]
108
+ end
109
+
103
110
  private
104
111
 
105
112
  def derive_progname(klass)
106
113
  class_name = klass.class.to_s
107
114
  case class_name
108
115
  when "Class"
109
- klass.class.name.demodulize
116
+ klass.to_s.split("::").last # class_name.name.split("::").last
110
117
  when "Module", "Symbol", "String"
111
- klass.to_s
118
+ klass.to_s.split("::").last
112
119
  else
113
120
  class_name
114
121
  end
115
122
  end
116
-
117
- # Available colors are: :black, :red, :green, :yellow, :blue, :magenta, :cyan, :white, and the modifier :bold
118
- def level_as_sym
119
- return :unknown if @logger.level.negative? || level > 4
120
-
121
- [:debug, :info, :warn, :error, :fatal, :unknown][@logger.level]
122
- end
123
123
  end
124
124
 
125
125
  # Makes a meta-logger instance (a singleton) with level set by `site.config`.
@@ -133,7 +133,8 @@ end
133
133
  #
134
134
  # @example
135
135
  # # Create and initialize the meta-logger singleton in a high priority Jekyll `site` `:after_init` hook:
136
- # PluginMetaLogger.instance.setup(site.config).info { "Meta-logger has been created" }
136
+ # @meta_logger = PluginMetaLogger.instance.new_logger(site.config, self)
137
+ # @meta_logger.info { "Meta-logger has been created" }
137
138
  #
138
139
  # # In `config.yml`:
139
140
  # plugin_loggers:
@@ -143,15 +144,15 @@ end
143
144
  # ArchiveDisplayTag: debug
144
145
  #
145
146
  # # In a Jekyll plugin:
146
- # @logger = PluginMetaLogger.instance.new_logger(self)
147
+ # @logger = PluginMetaLogger.instance.setup(self)
147
148
  # @logger.info { "This is a log message from a Jekyll plugin" }
148
149
  # #
149
150
  # PluginMetaLogger.instance.info { "MyPlugin vX.Y.Z has been loaded" }
150
151
  class PluginMetaLogger
151
152
  include Singleton
152
- attr_reader :logger
153
+ attr_reader :config, :logger
153
154
 
154
- def initialize
155
+ def initialize()
155
156
  super
156
157
  @config = nil
157
158
  @logger = new_logger(self)
@@ -165,6 +166,10 @@ class PluginMetaLogger
165
166
  @logger.debug(self) { yield }
166
167
  end
167
168
 
169
+ def level_as_sym
170
+ @logger.level_as_sym
171
+ end
172
+
168
173
  def warn
169
174
  @logger.warn(self) { yield }
170
175
  end
@@ -173,25 +178,20 @@ class PluginMetaLogger
173
178
  @logger.error(self) { yield }
174
179
  end
175
180
 
176
- def new_logger(klass, stream_name = $stdout)
181
+ def new_logger(klass, config = nil, stream_name = $stdout)
182
+ @config ||= config
177
183
  if @config.nil?
178
- puts { "Error: PluginMetaLogger has not been initialized by calling setup yet.".red }
184
+ puts { "Error: PluginMetaLogger has not been initialized with site.config.".red }
179
185
  PluginLogger.new(klass, {}, stream_name)
180
186
  else
181
187
  PluginLogger.new(klass, @config, stream_name)
182
188
  end
183
189
  end
184
-
185
- def setup(config, stream_name = $stdout)
186
- @config = config
187
- @logger = new_logger(self, stream_name)
188
- @logger
189
- end
190
190
  end
191
191
 
192
192
  Jekyll::Hooks.register(:site, :after_reset, :priority => :high) do |site|
193
193
  instance = PluginMetaLogger.instance
194
- logger = instance.setup(site.config)
195
- logger.info { "Loaded #{JekyllPluginLoggerName::PLUGIN_NAME} v#{JekyllPluginLogger::VERSION} plugin." }
194
+ logger = instance.new_logger(PluginMetaLogger, site.config)
195
+ logger.info { "Loaded #{JekyllPluginLoggerName::PLUGIN_NAME} v#{JekyllPluginLoggerVersion::VERSION} plugin." }
196
196
  logger.debug { "Logger for #{instance.progname} created at level #{instance.level_as_sym}" }
197
197
  end
@@ -19,26 +19,17 @@ require_relative "../lib/jekyll_plugin_logger"
19
19
  class MyTestPlugin
20
20
  instance = PluginMetaLogger.instance
21
21
  logger = instance.new_logger(self) # Should generate a warning
22
- instance.setup({})
23
22
  PluginMetaLogger.instance.info { "How now, brown cow" }
24
23
  PluginMetaLogger.instance.debug { "How now, brown cow" }
25
24
  PluginMetaLogger.instance.warn { "How now, brown cow" }
26
25
  PluginMetaLogger.instance.error { "How now, brown cow" }
27
26
 
28
- logger = PluginMetaLogger.instance.new_logger(self)
27
+ logger = PluginMetaLogger.instance.new_logger(self, RSpec.configuration.site_config)
29
28
  logger.debug { "3 fleas fleeing freedom" }
30
29
  logger.info { "3 fleas fleeing freedom" }
31
30
  logger.warn { "3 fleas fleeing freedom" }
32
31
  logger.error { "3 fleas fleeing freedom" }
33
32
 
34
- _yaml = <<~END_YAML
35
- plugin_loggers:
36
- PluginMetaLogger: debug
37
- SiteInspector: warn
38
- MakeArchive: error
39
- ArchiveDisplayTag: debug
40
- END_YAML
41
-
42
33
  def self.exercise(logger)
43
34
  puts
44
35
  # puts "\ncalling_class_name=#{logger.send(:calling_class_name)}"
@@ -63,18 +54,33 @@ class MyTestPlugin
63
54
  logger.error { "Error message 4" }
64
55
  end
65
56
 
66
- RSpec.describe JekyllPluginLogger do
67
- it "outputs at debug level" do
68
- MyTestPlugin.exercise(PluginMetaLogger.instance.new_logger(self, $stdout))
57
+ RSpec.describe PluginLogger do
58
+ it "outputs at info level" do
59
+ MyTestPlugin.exercise(PluginMetaLogger.instance.new_logger(self, PluginMetaLogger.instance.config, $stdout))
60
+ expect(PluginMetaLogger.instance.level_as_sym).to eq(:info)
61
+ end
62
+
63
+ it "uses config debug" do
64
+ logger = PluginMetaLogger.instance.new_logger(:MyBlock, PluginMetaLogger.instance.config)
65
+ expect(logger.level_as_sym).to eq(:debug)
66
+ MyTestPlugin.exercise(logger)
67
+ end
68
+
69
+ it "uses config info" do
70
+ logger = PluginMetaLogger.instance.new_logger(:ArchiveDisplayTag, PluginMetaLogger.instance.config)
71
+ expect(logger.level_as_sym).to eq(:info)
72
+ MyTestPlugin.exercise(logger)
69
73
  end
70
74
 
71
75
  it "uses config warn" do
72
- logger = PluginMetaLogger.instance.new_logger("SiteInspector", $stdout)
76
+ logger = PluginMetaLogger.instance.new_logger("SiteInspector", PluginMetaLogger.instance.config, $stdout)
77
+ expect(logger.level_as_sym).to eq(:warn)
73
78
  MyTestPlugin.exercise(logger)
74
79
  end
75
80
 
76
81
  it "uses config error" do
77
- logger = PluginMetaLogger.instance.new_logger(:MakeArchive)
82
+ logger = PluginMetaLogger.instance.new_logger(:PreTagBlock, PluginMetaLogger.instance.config)
83
+ expect(logger.level_as_sym).to eq(:error)
78
84
  MyTestPlugin.exercise(logger)
79
85
  end
80
86
  end
data/spec/spec_helper.rb CHANGED
@@ -6,7 +6,25 @@ require_relative "../lib/jekyll_plugin_logger"
6
6
  Jekyll.logger.log_level = :info
7
7
 
8
8
  RSpec.configure do |config|
9
- config.run_all_when_everything_filtered = true
9
+ plugin_config = <<~END_CONFIG
10
+ plugin_loggers:
11
+ ArchiveDisplayTag: info
12
+ FlexibleInclude: info
13
+ MakeArchive: info
14
+ MyBlock: debug
15
+ PluginMetaLogger: info
16
+ PreTagBlock: error
17
+ SiteInspector: warn
18
+ UnselectableTag: info
19
+ END_CONFIG
20
+
21
+ config.add_setting :site_config
22
+ config.site_config = YAML.safe_load(plugin_config)
23
+
10
24
  config.filter_run :focus
11
25
  config.order = "random"
26
+ config.run_all_when_everything_filtered = true
27
+
28
+ # See https://relishapp.com/rspec/rspec-core/docs/command-line/only-failures
29
+ config.example_status_persistence_file_path = "spec/status_persistence.txt"
12
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll_plugin_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Slinn
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-04-05 00:00:00.000000000 Z
11
+ date: 2022-04-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -69,7 +69,7 @@ files:
69
69
  - jekyll_plugin_logger.gemspec
70
70
  - lib/jekyll_plugin_logger.rb
71
71
  - lib/jekyll_plugin_logger/version.rb
72
- - spec/jekyll_plugin_logger.rb
72
+ - spec/jekyll_plugin_logger_spec.rb
73
73
  - spec/spec_helper.rb
74
74
  homepage: https://www.mslinn.com/blog/2020/12/28/custom-logging-in-jekyll-plugins.html
75
75
  licenses:
@@ -103,5 +103,5 @@ signing_key:
103
103
  specification_version: 4
104
104
  summary: Generates Jekyll logger with colored output.
105
105
  test_files:
106
- - spec/jekyll_plugin_logger.rb
106
+ - spec/jekyll_plugin_logger_spec.rb
107
107
  - spec/spec_helper.rb