bogo 0.2.12 → 0.2.14

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: 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