gem_logger 0.1.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 +15 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +17 -0
- data/.travis.yml +8 -0
- data/Gemfile +10 -0
- data/LICENSE.txt +22 -0
- data/README.md +23 -0
- data/Rakefile +18 -0
- data/gem_logger.gemspec +30 -0
- data/lib/gem_logger/basic_logger.rb +16 -0
- data/lib/gem_logger/logger_support.rb +51 -0
- data/lib/gem_logger/version.rb +3 -0
- data/lib/gem_logger.rb +52 -0
- data/test/test_helper.rb +72 -0
- data/test/unit/gem_logger/basic_logger_test.rb +18 -0
- data/test/unit/gem_logger/logger_support_test.rb +192 -0
- data/test/unit/gem_logger_test.rb +38 -0
- metadata +194 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZTIzNzQ0NzlhNDdlMjkzMDk5NDM1ZTBjZWU3NmYxN2ZmMzhmNWQ1OQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MmFkOTczODI3NGFjZTczNWEzOTk2OTU4N2Q4MWY2ZDdmYTgyYTBkMQ==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
YmU1OWJkMTFmMTg5MWExNDYwMzJjOWQ2OWM4N2ViZTI1ZDU3ZDQyM2MzOTc4
|
10
|
+
ZDBlZGVjODBhMGIwNTk3MmM0NzFkNGNjMTZlNTcxMGJmMTBkZWU4MTI0ZjYy
|
11
|
+
OTE1NDBlYzRiNjZhYmJiZWU2MDA0MmYxY2U2OGVjZjgwZjU1MzA=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MzYzZmMxYzAzYTZjOTRmNjUyOWI4YWY5NGRjYjZiNDhiNzM2OTdhMDAwNzdk
|
14
|
+
NzI4ZDhkZGY5OTBhZWY2MDI4ZjdlY2E2MzNiNzNlYzFhYzc0ZjljM2YxZGIx
|
15
|
+
NWEzODBlZDcxY2FkMTQ5MzQxNTlhNjdlYjc4Njc1NTI1ODMwMGY=
|
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
service_name: travis-ci
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in gem_logger.gemspec
|
4
|
+
gemspec
|
5
|
+
|
6
|
+
# so we can test GemLogger.logger_concern
|
7
|
+
gem "lumber", :require => false
|
8
|
+
|
9
|
+
# for code coverage during travis-ci test runs
|
10
|
+
gem 'coveralls', :require => false
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Matt Conway
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
[](http://travis-ci.org/wr0ngway/gem_logger)
|
2
|
+
[](https://coveralls.io/r/wr0ngway/gem_logger?branch=master)
|
3
|
+
|
4
|
+
# GemLogger
|
5
|
+
|
6
|
+
Allows classes/modules in gems to have logger class/instance methods with a pluggable Logger implementation
|
7
|
+
|
8
|
+
## Usage
|
9
|
+
|
10
|
+
Include the GemLogger::Logger concern into the classes that need to be able to log. By default, it will use the standard Ruby logger, if you need a different logger, then configure GemLogger like:
|
11
|
+
|
12
|
+
GemLogger.configure do |config|
|
13
|
+
|
14
|
+
# The default logger instance to use
|
15
|
+
# (optional, defaults to Logger.new)
|
16
|
+
config.default_logger = CustomLogger.new
|
17
|
+
|
18
|
+
# module to include when GemLogger::Logger is included
|
19
|
+
# (optional, defaults to GemLogger::BasicLogger)
|
20
|
+
config.logger_concern = SomeModule
|
21
|
+
|
22
|
+
end
|
23
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/testtask'
|
4
|
+
|
5
|
+
Rake::TestTask.new do |t|
|
6
|
+
t.pattern = 'test/**/*_test.rb'
|
7
|
+
t.libs.push 'test'
|
8
|
+
end
|
9
|
+
|
10
|
+
task :default => :test
|
11
|
+
|
12
|
+
task :console do
|
13
|
+
Bundler.require
|
14
|
+
require "gem_logger"
|
15
|
+
ARGV.clear
|
16
|
+
require "irb"
|
17
|
+
IRB.start
|
18
|
+
end
|
data/gem_logger.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'gem_logger/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "gem_logger"
|
8
|
+
spec.version = GemLogger::VERSION
|
9
|
+
spec.authors = ["Matt Conway"]
|
10
|
+
spec.email = ["matt@conwaysplace.com"]
|
11
|
+
spec.description = %q{Allows classes/modules in gems to have logger class/instance methods with a pluggable Logger implementation}
|
12
|
+
spec.summary = %q{Allows classes/modules in gems to have logger class/instance methods with a pluggable Logger implementation}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "minitest"
|
24
|
+
spec.add_development_dependency "minitest_should"
|
25
|
+
spec.add_development_dependency "minitest-reporters"
|
26
|
+
spec.add_development_dependency "factory_girl"
|
27
|
+
spec.add_development_dependency "faker"
|
28
|
+
|
29
|
+
spec.add_dependency "activesupport"
|
30
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module GemLogger
|
2
|
+
module LoggerSupport
|
3
|
+
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
# A guard to prevent misuse, may just want a log message instead of a hard fail
|
8
|
+
if self.class == Module && ! self.singleton_class.included_modules.include?(ActiveSupport::Concern)
|
9
|
+
raise ArgumentError, "module that includes #{self.name} must be an ActiveSupport::Concern"
|
10
|
+
end
|
11
|
+
|
12
|
+
include GemLogger.logger_concern
|
13
|
+
|
14
|
+
delegate :logger, :log_exception, :log_warning, :log_message, :to => "self.class"
|
15
|
+
end
|
16
|
+
|
17
|
+
module ClassMethods
|
18
|
+
|
19
|
+
def log_exception(exception, opts={})
|
20
|
+
logger.error("Exception #{generate_message(exception, opts)}")
|
21
|
+
end
|
22
|
+
|
23
|
+
def log_warning(exception, opts={})
|
24
|
+
logger.warn("Warning #{generate_message(exception, opts)}")
|
25
|
+
end
|
26
|
+
|
27
|
+
def log_message(group, message, opts={})
|
28
|
+
log_exception({:error_class => group,
|
29
|
+
:error_message => message },
|
30
|
+
opts)
|
31
|
+
end
|
32
|
+
|
33
|
+
def log_encode(str)
|
34
|
+
str.encode('UTF-8', :invalid => :replace, :undef => :replace, :replace => '')
|
35
|
+
end
|
36
|
+
|
37
|
+
def generate_message(exception, opts)
|
38
|
+
class_name = self.name
|
39
|
+
method_name = caller.first.gsub(/.*`(.*)'$/, '\1') rescue nil
|
40
|
+
opts = {:controller => class_name, :action => method_name}.merge(opts)
|
41
|
+
|
42
|
+
message_prefix = opts[:message_prefix] || ''
|
43
|
+
message_prefix += ' ' unless message_prefix.strip.size == 0
|
44
|
+
|
45
|
+
"#{log_encode(message_prefix)}#{log_encode(exception.inspect)}, #{log_encode(opts.inspect)}:\n#{exception.backtrace.collect {|x| log_encode(x)}.join("\n") rescue 'no backtrace'}"
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
data/lib/gem_logger.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require "gem_logger/version"
|
2
|
+
|
3
|
+
require 'logger'
|
4
|
+
require 'active_support/concern'
|
5
|
+
require 'active_support/core_ext/module/delegation'
|
6
|
+
|
7
|
+
require "gem_logger/basic_logger"
|
8
|
+
require "gem_logger/logger_support"
|
9
|
+
|
10
|
+
# To configure gem_logger, add something like the
|
11
|
+
# following to an initializer (defaults shown):
|
12
|
+
#
|
13
|
+
# GemLogger.configure do |config|
|
14
|
+
#
|
15
|
+
# # The default logger instance to use
|
16
|
+
# # (optional, defaults to Logger.new)
|
17
|
+
# config.default_logger = CustomLogger.new
|
18
|
+
#
|
19
|
+
# # module to include when GemLogger::LoggerSupport is included
|
20
|
+
# # (optional, defaults to GemLogger::BasicLogger)
|
21
|
+
# config.logger_concern = SomeModule
|
22
|
+
#
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
module GemLogger
|
26
|
+
|
27
|
+
# Allows configuring via class accessors
|
28
|
+
class << self
|
29
|
+
# The logger concern (ActiveSupport::Concern) to include when clients include GemLogger::Logger
|
30
|
+
# The module needs to cause a class level "logger" method (returning the logger instance) to be deSupportfined on the client
|
31
|
+
attr_accessor :logger_concern
|
32
|
+
end
|
33
|
+
|
34
|
+
# default values
|
35
|
+
self.logger_concern = GemLogger::BasicLogger
|
36
|
+
|
37
|
+
# The default_logger to use with GemLogger::BasicLogger
|
38
|
+
def self.default_logger
|
39
|
+
@default_logger ||= ::Logger.new(STDOUT)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Set the default_logger to use with GemLogger::BasicLogger
|
43
|
+
def self.default_logger=(default_logger)
|
44
|
+
@default_logger = default_logger
|
45
|
+
end
|
46
|
+
|
47
|
+
# Allows configuring via class accessors
|
48
|
+
def self.configure
|
49
|
+
yield self
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
if ENV['CI']
|
4
|
+
require 'coveralls'
|
5
|
+
Coveralls.wear!
|
6
|
+
end
|
7
|
+
|
8
|
+
require 'bundler'
|
9
|
+
begin
|
10
|
+
Bundler.setup(:default, :development)
|
11
|
+
rescue Bundler::BundlerError => e
|
12
|
+
$stderr.puts e.message
|
13
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
14
|
+
exit e.status_code
|
15
|
+
end
|
16
|
+
|
17
|
+
require 'minitest/autorun'
|
18
|
+
require 'minitest/should'
|
19
|
+
require "minitest/reporters"
|
20
|
+
|
21
|
+
reporter = ENV['REPORTER']
|
22
|
+
reporter = case reporter
|
23
|
+
when 'none' then nil
|
24
|
+
when 'spec' then MiniTest::Reporters::SpecReporter.new
|
25
|
+
when 'progress' then MiniTest::Reporters::ProgressReporter.new
|
26
|
+
else MiniTest::Reporters::DefaultReporter.new
|
27
|
+
end
|
28
|
+
MiniTest::Reporters.use!(reporter) if reporter
|
29
|
+
|
30
|
+
require 'gem_logger'
|
31
|
+
|
32
|
+
# Allow triggering single tests when running from rubymine
|
33
|
+
# reopen the installed runner so we don't step on runner customizations
|
34
|
+
class << MiniTest::Unit.runner
|
35
|
+
# Rubymine sends --name=/\Atest\: <context> should <should>\./
|
36
|
+
# Minitest runs each context as a suite
|
37
|
+
# Minitest filters methods by matching against: <suite>#test_0001_<should>
|
38
|
+
# Nested contexts are separted by spaces in rubymine, but ::s in minitest
|
39
|
+
|
40
|
+
def _run_suites(suites, type)
|
41
|
+
if options[:filter]
|
42
|
+
if options[:filter] =~ /\/\\Atest\\: (.*) should (.*)\\\.\//
|
43
|
+
context_filter = $1
|
44
|
+
should_filter = $2
|
45
|
+
should_filter.strip!
|
46
|
+
should_filter.gsub!(" ", "_")
|
47
|
+
should_filter.gsub!(/\W/, "")
|
48
|
+
context_filter = context_filter.gsub(" ", "((::)| )")
|
49
|
+
options[:filter] = "/\\A#{context_filter}(Test)?#test(_\\d+)?_should_#{should_filter}\\Z/"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
super
|
54
|
+
end
|
55
|
+
|
56
|
+
# Prevent "Empty test suite" verbosity when running in rubymine
|
57
|
+
def _run_suite(suite, type)
|
58
|
+
|
59
|
+
filter = options[:filter] || '/./'
|
60
|
+
filter = Regexp.new $1 if filter =~ /\/(.*)\//
|
61
|
+
all_test_methods = suite.send "#{type}_methods"
|
62
|
+
filtered_test_methods = all_test_methods.find_all { |m|
|
63
|
+
filter === m || filter === "#{suite}##{m}"
|
64
|
+
}
|
65
|
+
|
66
|
+
if filtered_test_methods.size > 0
|
67
|
+
super
|
68
|
+
else
|
69
|
+
[0, 0]
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
module GemLogger
|
4
|
+
class BasicLoggerTest < Minitest::Should::TestCase
|
5
|
+
|
6
|
+
context "BasicLogger" do
|
7
|
+
|
8
|
+
should "define a logger class method" do
|
9
|
+
class MyClass
|
10
|
+
include GemLogger::BasicLogger
|
11
|
+
end
|
12
|
+
assert MyClass.respond_to?(:logger)
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,192 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
module GemLogger
|
4
|
+
class LoggerSupportTest < Minitest::Should::TestCase
|
5
|
+
|
6
|
+
setup do
|
7
|
+
@uniq = SecureRandom.uuid.gsub("-", "")
|
8
|
+
end
|
9
|
+
|
10
|
+
teardown do
|
11
|
+
LoggerSupportTest.constants.grep(/^Foo/).each do |c|
|
12
|
+
LoggerSupportTest.send(:remove_const, c)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def new_module(module_name, &block)
|
17
|
+
mod = self.class.const_set module_name, Module.new
|
18
|
+
mod.class_eval(&block)
|
19
|
+
mod
|
20
|
+
end
|
21
|
+
|
22
|
+
# can't do this dynamically as the class name needs to be set at inheritance time for lumber to work
|
23
|
+
def new_class(class_name, super_class=nil, &block)
|
24
|
+
s = "class #{class_name}"
|
25
|
+
s << " < #{super_class}" if super_class
|
26
|
+
s << "; end"
|
27
|
+
|
28
|
+
eval(s)
|
29
|
+
clazz = self.class.const_get(class_name)
|
30
|
+
clazz.class_eval(&block)
|
31
|
+
clazz
|
32
|
+
end
|
33
|
+
|
34
|
+
context "BasicLogger" do
|
35
|
+
|
36
|
+
setup do
|
37
|
+
@old_default_logger = GemLogger.default_logger
|
38
|
+
GemLogger.default_logger = Minitest::Mock.new
|
39
|
+
end
|
40
|
+
|
41
|
+
teardown do
|
42
|
+
GemLogger.default_logger.verify
|
43
|
+
GemLogger.default_logger = @old_default_logger
|
44
|
+
end
|
45
|
+
|
46
|
+
should "have a logger instance accessible from an instance method" do
|
47
|
+
foo = new_class("Foo#{@uniq}") { include GemLogger::LoggerSupport; def member_method; logger.debug('hi'); end; }
|
48
|
+
assert foo.new.respond_to?(:logger)
|
49
|
+
foo.logger.expect(:debug, nil, ['hi'])
|
50
|
+
foo.new.member_method
|
51
|
+
end
|
52
|
+
|
53
|
+
should "have a logger instance accessible from a class method " do
|
54
|
+
foo = new_class("Foo#{@uniq}") { include GemLogger::LoggerSupport; def self.class_method; logger.debug('hi'); end; }
|
55
|
+
assert foo.respond_to?(:logger)
|
56
|
+
foo.logger.expect(:debug, nil, ['hi'])
|
57
|
+
foo.class_method
|
58
|
+
end
|
59
|
+
|
60
|
+
should "have a logger instance when in a nested module" do
|
61
|
+
foomod = new_module("FooMod#{@uniq}") { extend ActiveSupport::Concern; include GemLogger::LoggerSupport; }
|
62
|
+
foo = new_class("Foo#{@uniq}") { include foomod; def member_method; logger.debug('hi'); end; }
|
63
|
+
assert foo.new.respond_to?(:logger)
|
64
|
+
foo.logger.expect(:debug, nil, ['hi'])
|
65
|
+
foo.new.member_method
|
66
|
+
end
|
67
|
+
|
68
|
+
should "fail when included in a module that is not a Concern" do
|
69
|
+
assert_raises(ArgumentError) do
|
70
|
+
new_module("FooMod#{@uniq}") { include GemLogger::LoggerSupport; }
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
should "have a log_exception method accessible from an instance method" do
|
75
|
+
foo = new_class("Foo#{@uniq}") { include GemLogger::LoggerSupport; def member_method; log_exception(RuntimeError.new("hell")); end; }
|
76
|
+
assert foo.new.respond_to?(:log_exception)
|
77
|
+
foo.logger.expect(:error, nil, [/.*/])
|
78
|
+
foo.new.member_method
|
79
|
+
end
|
80
|
+
|
81
|
+
should "have a log_exception method accessible from a class method " do
|
82
|
+
foo = new_class("Foo#{@uniq}") { include GemLogger::LoggerSupport; def self.class_method; log_exception(RuntimeError.new("hell")); end; }
|
83
|
+
assert foo.respond_to?(:log_exception)
|
84
|
+
foo.logger.expect(:error, nil, [/.*/])
|
85
|
+
foo.class_method
|
86
|
+
end
|
87
|
+
|
88
|
+
should "log_exception should populate class name as controller and method name as action" do
|
89
|
+
foo = new_class("Foo#{@uniq}") { include GemLogger::LoggerSupport; def self.class_method; log_exception(RuntimeError.new("hell")); end; }
|
90
|
+
foo.logger.expect(:error, nil, [/.*/])
|
91
|
+
foo.class_method
|
92
|
+
end
|
93
|
+
|
94
|
+
should "not raise exception on bad encoding" do
|
95
|
+
foo = new_class("Foo#{@uniq}") { include GemLogger::LoggerSupport; def self.class_method; log_exception(RuntimeError.new("\xE2".force_encoding('ASCII-8BIT'))); end; }
|
96
|
+
foo.logger.expect(:error, nil, [/.*/])
|
97
|
+
foo.class_method
|
98
|
+
end
|
99
|
+
|
100
|
+
context 'Generate Message' do
|
101
|
+
should 'properly generate messages with a message prefix' do
|
102
|
+
foo = new_class("Foo#{@uniq}") { include GemLogger::LoggerSupport; }
|
103
|
+
assert_match /^prefix /, foo.generate_message(StandardError.new('Hello'), {:message_prefix => 'prefix'})
|
104
|
+
end
|
105
|
+
|
106
|
+
should 'properly generate messages with a blank message prefix' do
|
107
|
+
foo = new_class("Foo#{@uniq}") { include GemLogger::LoggerSupport; }
|
108
|
+
assert_match /^#<StandardError: Hello>/, foo.generate_message(StandardError.new('Hello'), {:message_prefix => ''})
|
109
|
+
end
|
110
|
+
|
111
|
+
should 'properly generate messages with no message prefix' do
|
112
|
+
foo = new_class("Foo#{@uniq}") { include GemLogger::LoggerSupport; }
|
113
|
+
assert_match /^#<StandardError: Hello>/, foo.generate_message(StandardError.new('Hello'), {})
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
context "lumber integration" do
|
120
|
+
|
121
|
+
setup do
|
122
|
+
require 'lumber'
|
123
|
+
|
124
|
+
yml = <<-EOF
|
125
|
+
log4r_config:
|
126
|
+
pre_config:
|
127
|
+
root:
|
128
|
+
level: 'DEBUG'
|
129
|
+
loggers:
|
130
|
+
- name: "rails"
|
131
|
+
level: DEBUG
|
132
|
+
outputters: []
|
133
|
+
EOF
|
134
|
+
|
135
|
+
cfg = Log4r::YamlConfigurator
|
136
|
+
cfg.load_yaml_string(yml)
|
137
|
+
logger = Log4r::Logger['rails']
|
138
|
+
sio = StringIO.new
|
139
|
+
logger.outputters = [Log4r::IOOutputter.new("sbout", sio)]
|
140
|
+
|
141
|
+
Log4r::YamlConfigurator.stub(:load_yaml_file, nil) do
|
142
|
+
root = File.expand_path("../../..", __FILE__)
|
143
|
+
Lumber.init(:root => root, :env => 'test', :config_file => __FILE__)
|
144
|
+
end
|
145
|
+
|
146
|
+
@old_logger_concern = GemLogger.logger_concern
|
147
|
+
GemLogger.logger_concern = Lumber::LoggerSupport
|
148
|
+
end
|
149
|
+
|
150
|
+
teardown do
|
151
|
+
GemLogger.logger_concern = @old_logger_concern
|
152
|
+
end
|
153
|
+
|
154
|
+
should "have a logger instance accessible from an instance method" do
|
155
|
+
foo = new_class("Foo#{@uniq}") { include GemLogger::LoggerSupport; }
|
156
|
+
assert_equal "rails::GemLogger::LoggerSupportTest::#{foo.name.split('::').last}", foo.new.logger.fullname
|
157
|
+
end
|
158
|
+
|
159
|
+
should "have a logger instance accessible from a class method " do
|
160
|
+
foo = new_class("Foo#{@uniq}") { include GemLogger::LoggerSupport; }
|
161
|
+
assert_equal "rails::GemLogger::LoggerSupportTest::#{foo.name.split('::').last}", foo.logger.fullname
|
162
|
+
end
|
163
|
+
|
164
|
+
should "have a logger instance when in a nested module" do
|
165
|
+
foomod = new_module("FooMod#{@uniq}") { extend ActiveSupport::Concern; include GemLogger::LoggerSupport; }
|
166
|
+
foo = new_class("Foo#{@uniq}") { include foomod; }
|
167
|
+
assert_equal "rails::GemLogger::LoggerSupportTest::#{foo.name.split('::').last}", foo.logger.fullname
|
168
|
+
end
|
169
|
+
|
170
|
+
should "have correct logger instance with multiple includes" do
|
171
|
+
foomod = new_module("FooMod#{@uniq}") { extend ActiveSupport::Concern; include GemLogger::LoggerSupport; }
|
172
|
+
foo = new_class("Foo#{@uniq}") { include GemLogger::LoggerSupport; include foomod; }
|
173
|
+
assert_equal "rails::GemLogger::LoggerSupportTest::#{foo.name.split('::').last}", foo.logger.fullname
|
174
|
+
end
|
175
|
+
|
176
|
+
should "have correct logger instance with includes and inheritance" do
|
177
|
+
foosuper = new_class("FooSuper#{@uniq}") { include GemLogger::LoggerSupport; }
|
178
|
+
foo = new_class("Foo#{@uniq}", foosuper) { }
|
179
|
+
assert_equal "rails::GemLogger::LoggerSupportTest::#{foosuper.name.split('::').last}::#{foo.name.split('::').last}", foo.logger.fullname
|
180
|
+
end
|
181
|
+
|
182
|
+
should "have correct logger instance with multiple includes and inheritance" do
|
183
|
+
foomod = new_module("FooMod#{@uniq}") { extend ActiveSupport::Concern; include GemLogger::LoggerSupport; }
|
184
|
+
foosuper = new_class("FooSuper#{@uniq}") { include foomod; }
|
185
|
+
foo = new_class("Foo#{@uniq}", foosuper) { include GemLogger::LoggerSupport; include foomod; }
|
186
|
+
assert_equal "rails::GemLogger::LoggerSupportTest::#{foosuper.name.split('::').last}::#{foo.name.split('::').last}", foo.logger.fullname
|
187
|
+
end
|
188
|
+
|
189
|
+
end
|
190
|
+
|
191
|
+
end
|
192
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
class GemLoggerTest < MiniTest::Should::TestCase
|
4
|
+
|
5
|
+
context "configure" do
|
6
|
+
|
7
|
+
should "provide a default value for default_logger" do
|
8
|
+
GemLogger.default_logger = nil
|
9
|
+
assert_instance_of Logger, GemLogger.default_logger
|
10
|
+
end
|
11
|
+
|
12
|
+
should "provide a default value for logger_concern" do
|
13
|
+
assert_equal GemLogger::BasicLogger, GemLogger.logger_concern
|
14
|
+
end
|
15
|
+
|
16
|
+
should "allow config through #configure" do
|
17
|
+
old_logger = GemLogger.default_logger
|
18
|
+
old_concern = GemLogger.logger_concern
|
19
|
+
|
20
|
+
begin
|
21
|
+
logger = Logger.new(STDOUT)
|
22
|
+
concern = Module.new { FOO = 'bar' }
|
23
|
+
GemLogger.configure do |config|
|
24
|
+
config.default_logger = logger
|
25
|
+
config.logger_concern = concern
|
26
|
+
end
|
27
|
+
|
28
|
+
assert_equal logger, GemLogger.default_logger
|
29
|
+
assert_equal concern, GemLogger.logger_concern
|
30
|
+
ensure
|
31
|
+
GemLogger.default_logger = old_logger
|
32
|
+
GemLogger.logger_concern = old_concern
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
metadata
ADDED
@@ -0,0 +1,194 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gem_logger
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Matt Conway
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-08-23 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
prerelease: false
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ~>
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '1.3'
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - ~>
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: '1.3'
|
26
|
+
type: :development
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
prerelease: false
|
29
|
+
name: rake
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ! '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: !binary |-
|
35
|
+
MA==
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: !binary |-
|
41
|
+
MA==
|
42
|
+
type: :development
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
prerelease: false
|
45
|
+
name: minitest
|
46
|
+
requirement: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - ! '>='
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: !binary |-
|
51
|
+
MA==
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ! '>='
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: !binary |-
|
57
|
+
MA==
|
58
|
+
type: :development
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
prerelease: false
|
61
|
+
name: minitest_should
|
62
|
+
requirement: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ! '>='
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: !binary |-
|
67
|
+
MA==
|
68
|
+
version_requirements: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ! '>='
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: !binary |-
|
73
|
+
MA==
|
74
|
+
type: :development
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
prerelease: false
|
77
|
+
name: minitest-reporters
|
78
|
+
requirement: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: !binary |-
|
83
|
+
MA==
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: !binary |-
|
89
|
+
MA==
|
90
|
+
type: :development
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
prerelease: false
|
93
|
+
name: factory_girl
|
94
|
+
requirement: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: !binary |-
|
99
|
+
MA==
|
100
|
+
version_requirements: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ! '>='
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: !binary |-
|
105
|
+
MA==
|
106
|
+
type: :development
|
107
|
+
- !ruby/object:Gem::Dependency
|
108
|
+
prerelease: false
|
109
|
+
name: faker
|
110
|
+
requirement: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ! '>='
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: !binary |-
|
115
|
+
MA==
|
116
|
+
version_requirements: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: !binary |-
|
121
|
+
MA==
|
122
|
+
type: :development
|
123
|
+
- !ruby/object:Gem::Dependency
|
124
|
+
prerelease: false
|
125
|
+
name: activesupport
|
126
|
+
requirement: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ! '>='
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: !binary |-
|
131
|
+
MA==
|
132
|
+
version_requirements: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - ! '>='
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: !binary |-
|
137
|
+
MA==
|
138
|
+
type: :runtime
|
139
|
+
description: Allows classes/modules in gems to have logger class/instance methods
|
140
|
+
with a pluggable Logger implementation
|
141
|
+
email:
|
142
|
+
- matt@conwaysplace.com
|
143
|
+
executables: []
|
144
|
+
extensions: []
|
145
|
+
extra_rdoc_files: []
|
146
|
+
files:
|
147
|
+
- .coveralls.yml
|
148
|
+
- .gitignore
|
149
|
+
- .travis.yml
|
150
|
+
- Gemfile
|
151
|
+
- LICENSE.txt
|
152
|
+
- README.md
|
153
|
+
- Rakefile
|
154
|
+
- gem_logger.gemspec
|
155
|
+
- lib/gem_logger.rb
|
156
|
+
- lib/gem_logger/basic_logger.rb
|
157
|
+
- lib/gem_logger/logger_support.rb
|
158
|
+
- lib/gem_logger/version.rb
|
159
|
+
- test/test_helper.rb
|
160
|
+
- test/unit/gem_logger/basic_logger_test.rb
|
161
|
+
- test/unit/gem_logger/logger_support_test.rb
|
162
|
+
- test/unit/gem_logger_test.rb
|
163
|
+
homepage: ''
|
164
|
+
licenses:
|
165
|
+
- MIT
|
166
|
+
metadata: {}
|
167
|
+
post_install_message:
|
168
|
+
rdoc_options: []
|
169
|
+
require_paths:
|
170
|
+
- lib
|
171
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
172
|
+
requirements:
|
173
|
+
- - ! '>='
|
174
|
+
- !ruby/object:Gem::Version
|
175
|
+
version: !binary |-
|
176
|
+
MA==
|
177
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
178
|
+
requirements:
|
179
|
+
- - ! '>='
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: !binary |-
|
182
|
+
MA==
|
183
|
+
requirements: []
|
184
|
+
rubyforge_project:
|
185
|
+
rubygems_version: 2.0.6
|
186
|
+
signing_key:
|
187
|
+
specification_version: 4
|
188
|
+
summary: Allows classes/modules in gems to have logger class/instance methods with
|
189
|
+
a pluggable Logger implementation
|
190
|
+
test_files:
|
191
|
+
- test/test_helper.rb
|
192
|
+
- test/unit/gem_logger/basic_logger_test.rb
|
193
|
+
- test/unit/gem_logger/logger_support_test.rb
|
194
|
+
- test/unit/gem_logger_test.rb
|