bogo 0.2.12 → 0.2.14

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: e468cddb60b30f3171155a342bf27f2dcb3987c07d482969a61da5e38f304b9b
4
- data.tar.gz: ce539b480d5d9e49872e6cefb871e0885ca37fe319e33c509690a7adf99effde
3
+ metadata.gz: 730a00461fb1d2b71a79a959bec8085111781a1ac542443566f875f9c9560e45
4
+ data.tar.gz: 7225927bd86221c434caf7f9808f87c17c7b71a1e7839ec172157521876bf551
5
5
  SHA512:
6
- metadata.gz: 656136e804d93739ad3c63a250f87e31ffd76fbf2a3812a299ab6a75753ca9fc3710152cd35014876aa8182a22468992dec8ab8989aa65543cc01e8fec4fd22e
7
- data.tar.gz: '061880c66c34a33fd1f85308bcef8a59d38c58242d62f46c51a2ff4dea20a14a8459fa0d3173905176b7ac47e7f472afcbca7017b0d34f00d4c4f32d59a307d9'
6
+ metadata.gz: c3351892aae400d4035470522093bd231f6611d8e955338ac29af84d7ff594b498b863ee63fce80272b42cb3aa3bb4e13e32f3c95f67fe6c66c73ea8ac8cdfed
7
+ data.tar.gz: a9cac6cfbb9df030f965ca3e6d180343ba8445a1bbffd7ea029b02a45dc05f4846d81211e5ba3c8cbc2a99b83c4683715e3e62179c1e879c9a866502692ca49d
@@ -1,3 +1,6 @@
1
+ # v0.2.14
2
+ * [Logger] Add logging helpers
3
+
1
4
  # v0.2.12
2
5
  * [Lazy] Add #to_h helper
3
6
 
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2014 Chris Roberts
1
+ Copyright 2018 Chris Roberts
2
2
 
3
3
  Licensed under the Apache License, Version 2.0 (the "License");
4
4
  you may not use this file except in compliance with the License.
data/README.md CHANGED
@@ -376,5 +376,42 @@ between retries at an exponential rate before retry:
376
376
  * `:wait_interval` - Numeric (default: 5)
377
377
  * `:wait_exponent` - Numeric (default: 2)
378
378
 
379
+ ## `Bogo::Logger`
380
+
381
+ This is a wrapped stdlib Logger instance to provide thread-safe
382
+ access for logging. It includes a `Bogo::Logger#named` method for
383
+ creating sub-loggers.
384
+
385
+ ```ruby
386
+ require 'bogo'
387
+
388
+ base = Bogo::Logger.new
389
+ base.progname = 'base'
390
+ base.info 'test'
391
+
392
+ sub = base.named(:sub)
393
+ sub.info 'test'
394
+ ```
395
+
396
+ ### `Bogo::Logger::Helpers`
397
+
398
+ Adds a `#logger` method when included which provides access to the
399
+ global logger. Name can be customized using `.logger_name`.
400
+
401
+ ```ruby
402
+ require 'bogo'
403
+
404
+ class Fubar
405
+ class Thing
406
+ include Bogo::Logger::Helpers
407
+ logger_name(:thing)
408
+
409
+ def test
410
+ logger.info "test"
411
+ end
412
+ end
413
+ end
414
+ ```
415
+
379
416
  # Info
380
- * Repository: https://github.com/spox/bogo
417
+ * Repository: https://github.com/spox/bogo
@@ -1,19 +1,20 @@
1
- $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__)) + '/lib/'
2
- require 'bogo/version'
1
+ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__)) + "/lib/"
2
+ require "bogo/version"
3
3
  Gem::Specification.new do |s|
4
- s.name = 'bogo'
4
+ s.name = "bogo"
5
5
  s.version = Bogo::VERSION.version
6
- s.summary = 'Helper libraries'
7
- s.author = 'Chris Roberts'
8
- s.email = 'code@chrisroberts.org'
9
- s.homepage = 'https://github.com/spox/bogo'
10
- s.description = 'Helper libraries'
11
- s.require_path = 'lib'
12
- s.license = 'Apache 2.0'
13
- s.add_runtime_dependency 'hashie'
14
- s.add_runtime_dependency 'multi_json'
15
- s.add_development_dependency 'pry'
16
- s.add_development_dependency 'minitest'
17
- s.add_development_dependency 'rake', '~> 10'
18
- s.files = Dir['lib/**/*'] + %w(bogo.gemspec README.md CHANGELOG.md CONTRIBUTING.md LICENSE)
6
+ s.summary = "Helper libraries"
7
+ s.author = "Chris Roberts"
8
+ s.email = "code@chrisroberts.org"
9
+ s.homepage = "https://github.com/spox/bogo"
10
+ s.description = "Helper libraries"
11
+ s.require_path = "lib"
12
+ s.license = "Apache 2.0"
13
+ s.add_runtime_dependency "hashie"
14
+ s.add_runtime_dependency "multi_json"
15
+ s.add_runtime_dependency "concurrent-ruby", "~> 1.1.3"
16
+ s.add_development_dependency "pry"
17
+ s.add_development_dependency "minitest"
18
+ s.add_development_dependency "rake", "~> 10"
19
+ s.files = Dir["lib/**/*"] + %w(bogo.gemspec README.md CHANGELOG.md CONTRIBUTING.md LICENSE)
19
20
  end
@@ -1,16 +1,17 @@
1
- require 'bogo/version'
1
+ require "bogo/version"
2
2
 
3
3
  module Bogo
4
- autoload :AnimalStrings, 'bogo/animal_strings'
5
- autoload :Constants, 'bogo/constants'
6
- autoload :EphemeralFile, 'bogo/ephemeral_file'
7
- autoload :Lazy, 'bogo/lazy'
8
- autoload :Memoization, 'bogo/memoization'
9
- autoload :PriorityQueue, 'bogo/priority_queue'
10
- autoload :Retry, 'bogo/retry'
11
- autoload :Smash, 'bogo/smash'
12
- autoload :Utility, 'bogo/utility'
4
+ autoload :AnimalStrings, "bogo/animal_strings"
5
+ autoload :Constants, "bogo/constants"
6
+ autoload :EphemeralFile, "bogo/ephemeral_file"
7
+ autoload :Lazy, "bogo/lazy"
8
+ autoload :Logger, "bogo/logger"
9
+ autoload :Memoization, "bogo/memoization"
10
+ autoload :PriorityQueue, "bogo/priority_queue"
11
+ autoload :Retry, "bogo/retry"
12
+ autoload :Smash, "bogo/smash"
13
+ autoload :Utility, "bogo/utility"
13
14
  end
14
15
 
15
16
  # Always load smash
16
- require 'bogo/smash'
17
+ require "bogo/smash"
@@ -0,0 +1,85 @@
1
+ require "concurrent"
2
+ require "logger"
3
+
4
+ module Bogo
5
+ class Logger
6
+ module Helpers
7
+ module InstanceMethods
8
+ def logger
9
+ self.class.logger
10
+ end
11
+ end
12
+
13
+ module ClassMethods
14
+ def logger_name(name)
15
+ @_logger = logger.named(name.to_s)
16
+ end
17
+
18
+ def logger
19
+ if !@_logger
20
+ base = Utility.snake(self.name.
21
+ split("::").first.downcase)
22
+ @_logger = Bogo::Logger.logger.named(base)
23
+ end
24
+ @_logger
25
+ end
26
+ end
27
+
28
+ def self.included(klass)
29
+ klass.include(InstanceMethods)
30
+ klass.extend(ClassMethods)
31
+ end
32
+ end
33
+
34
+ # @return [Logger] default logger
35
+ def self.logger
36
+ if !@_logger
37
+ @_logger = new
38
+ end
39
+ @_logger
40
+ end
41
+
42
+ # Create a new ::Logger instance wrapped
43
+ # to allow threaded interactions
44
+ def initialize(*logger_args)
45
+ if logger_args.empty?
46
+ logger_args = [$stderr]
47
+ end
48
+ @base_args = logger_args
49
+ logger = ::Logger.new(*@base_args)
50
+ logger.level = :fatal
51
+ @wrapped_logger = Concurrent::MVar.new(logger)
52
+ end
53
+
54
+ # Create a new logger with the sub-name provided
55
+ #
56
+ # @param name [String] sub-name for logger
57
+ # @return [Logger]
58
+ def named(name)
59
+ new_name = self.progname.to_s
60
+ new_name << "." unless new_name.empty?
61
+ new_name << name
62
+ new_logger = Logger.new(*@base_args)
63
+ [:level, :formatter, :datetime_format].each do |m|
64
+ new_logger.send("#{m}=", self.send(m))
65
+ end
66
+ new_logger.progname = new_name
67
+ new_logger
68
+ end
69
+
70
+ ::Logger.instance_methods.each do |l_m|
71
+ next if l_m.to_s.start_with?("_") || l_m.to_s == "object_id"
72
+ class_eval <<-EOC
73
+ def #{l_m}(*ma, &mb)
74
+ wrapped_logger.borrow { |l| l.send(:#{l_m}, *ma, &mb) }
75
+ end
76
+ EOC
77
+ end
78
+
79
+ protected
80
+
81
+ def wrapped_logger
82
+ @wrapped_logger
83
+ end
84
+ end
85
+ end
@@ -1,4 +1,4 @@
1
1
  module Bogo
2
2
  # Current library version
3
- VERSION = Gem::Version.new('0.2.12')
3
+ VERSION = Gem::Version.new("0.2.14")
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bogo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.12
4
+ version: 0.2.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Roberts
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-28 00:00:00.000000000 Z
11
+ date: 2018-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashie
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: concurrent-ruby
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.1.3
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.1.3
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: pry
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -97,6 +111,7 @@ files:
97
111
  - lib/bogo/ephemeral_file.rb
98
112
  - lib/bogo/http_proxy.rb
99
113
  - lib/bogo/lazy.rb
114
+ - lib/bogo/logger.rb
100
115
  - lib/bogo/memoization.rb
101
116
  - lib/bogo/priority_queue.rb
102
117
  - lib/bogo/retry.rb