yell 2.0.0 → 2.0.1
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 +4 -4
- data/lib/yell.rb +12 -3
- data/lib/yell/adapters.rb +2 -2
- data/lib/yell/adapters/base.rb +12 -12
- data/lib/yell/adapters/datefile.rb +19 -15
- data/lib/yell/adapters/file.rb +3 -3
- data/lib/yell/adapters/io.rb +6 -6
- data/lib/yell/logger.rb +6 -6
- data/lib/yell/repository.rb +3 -3
- data/lib/yell/version.rb +1 -1
- data/spec/compatibility/activesupport_logger_spec.rb +6 -2
- data/spec/yell_spec.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa1069934b048c65d5dbabcf49945cd08defdf1c
|
4
|
+
data.tar.gz: ed6c2a345a27ebc070468601ba71542ed90c0fa8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6622eba193295d3150f98c3dc17cc378b0ef373870cb8c01b8644baa32a4871bba79a24e058e02961dde0bca37005970da490ed2f36f43d6f56b754a49b727f7
|
7
|
+
data.tar.gz: 76098942230da8a9997d0010259802ca4dfaa02ea9b6a15ba642026987136a05dfc5019704ccb27263a48e4c54ff6265a14929e470ae1f7d03add1308b853ee3
|
data/lib/yell.rb
CHANGED
@@ -90,20 +90,29 @@ module Yell #:nodoc:
|
|
90
90
|
end
|
91
91
|
|
92
92
|
# @private
|
93
|
-
def
|
93
|
+
def __deprecate__( version, message, options = {} ) #:nodoc:
|
94
94
|
messages = ["Deprecation Warning (since v#{version}): #{message}" ]
|
95
95
|
messages << " before: #{options[:before]}" if options[:before]
|
96
96
|
messages << " after: #{options[:after]}" if options[:after]
|
97
97
|
|
98
|
-
|
98
|
+
__warn__(*messages)
|
99
99
|
end
|
100
100
|
|
101
101
|
# @private
|
102
|
-
def
|
102
|
+
def __warn__( *messages ) #:nodoc:
|
103
103
|
$stderr.puts "[Yell] " + messages.join("\n")
|
104
104
|
rescue Exception => e
|
105
105
|
# do nothing
|
106
106
|
end
|
107
|
+
|
108
|
+
# @private
|
109
|
+
def __fetch__( hash, *args )
|
110
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
111
|
+
value = args.map { |key| hash.fetch(key.to_sym, hash[key.to_s]) }.compact.first
|
112
|
+
|
113
|
+
value.nil? ? options[:default] : value
|
114
|
+
end
|
115
|
+
|
107
116
|
end
|
108
117
|
|
109
118
|
end
|
data/lib/yell/adapters.rb
CHANGED
@@ -54,7 +54,7 @@ module Yell #:nodoc:
|
|
54
54
|
# @example
|
55
55
|
# Yell::Adapters.register( :myadapter, MyAdapter )
|
56
56
|
def self.register( name, klass )
|
57
|
-
@adapters[name] = klass
|
57
|
+
@adapters[name.to_sym] = klass
|
58
58
|
end
|
59
59
|
|
60
60
|
# Returns an instance of the given processor type.
|
@@ -67,7 +67,7 @@ module Yell #:nodoc:
|
|
67
67
|
adapter = case name
|
68
68
|
when STDOUT then @adapters[:stdout]
|
69
69
|
when STDERR then @adapters[:stderr]
|
70
|
-
else @adapters[name]
|
70
|
+
else @adapters[name.to_sym]
|
71
71
|
end
|
72
72
|
|
73
73
|
raise AdapterNotFound.new(name) if adapter.nil?
|
data/lib/yell/adapters/base.rb
CHANGED
@@ -52,7 +52,7 @@ module Yell #:nodoc:
|
|
52
52
|
# @file_handle = File.new( '/dev/null', 'w' )
|
53
53
|
# end
|
54
54
|
def setup( &block )
|
55
|
-
compile!(
|
55
|
+
compile!(:setup!, &block)
|
56
56
|
end
|
57
57
|
|
58
58
|
# Define your write method with this helper.
|
@@ -62,7 +62,7 @@ module Yell #:nodoc:
|
|
62
62
|
# @file_handle.puts event.message
|
63
63
|
# end
|
64
64
|
def write( &block )
|
65
|
-
compile!(
|
65
|
+
compile!(:write!, &block)
|
66
66
|
end
|
67
67
|
|
68
68
|
# Define your open method with this helper.
|
@@ -72,7 +72,7 @@ module Yell #:nodoc:
|
|
72
72
|
# @stream = ::File.open( 'test.log', ::File::WRONLY|::File::APPEND|::File::CREAT )
|
73
73
|
# end
|
74
74
|
def open( &block )
|
75
|
-
compile!(
|
75
|
+
compile!(:open!, &block)
|
76
76
|
end
|
77
77
|
|
78
78
|
# Define your close method with this helper.
|
@@ -82,7 +82,7 @@ module Yell #:nodoc:
|
|
82
82
|
# @stream.close
|
83
83
|
# end
|
84
84
|
def close( &block )
|
85
|
-
compile!(
|
85
|
+
compile!(:close!, &block)
|
86
86
|
end
|
87
87
|
|
88
88
|
|
@@ -106,24 +106,24 @@ module Yell #:nodoc:
|
|
106
106
|
m = instance_method( name )
|
107
107
|
|
108
108
|
# Create a new method with leading underscore
|
109
|
-
define_method(
|
110
|
-
_m = instance_method(
|
111
|
-
remove_method(
|
109
|
+
define_method("_#{name}", &block)
|
110
|
+
_m = instance_method("_#{name}")
|
111
|
+
remove_method("_#{name}")
|
112
112
|
|
113
113
|
# Define instance method
|
114
|
-
define!(
|
114
|
+
define!(name, _m, m, &block)
|
115
115
|
end
|
116
116
|
|
117
117
|
# Define instance method by given name and call the unbound
|
118
118
|
# methods in order with provided block.
|
119
119
|
def define!( name, _m, m, &block )
|
120
120
|
if block.arity == 0
|
121
|
-
define_method(
|
121
|
+
define_method(name) do
|
122
122
|
_m.bind(self).call
|
123
123
|
m.bind(self).call
|
124
124
|
end
|
125
125
|
else
|
126
|
-
define_method(
|
126
|
+
define_method(name) do |*args|
|
127
127
|
_m.bind(self).call(*args)
|
128
128
|
m.bind(self).call(*args)
|
129
129
|
end
|
@@ -180,7 +180,7 @@ module Yell #:nodoc:
|
|
180
180
|
# Adapter classes should provide their own implementation
|
181
181
|
# of this method (if applicable).
|
182
182
|
def setup!( options )
|
183
|
-
self.level = options
|
183
|
+
self.level = Yell.__fetch__(options,:level)
|
184
184
|
end
|
185
185
|
|
186
186
|
# Perform the actual write.
|
@@ -221,7 +221,7 @@ module Yell #:nodoc:
|
|
221
221
|
|
222
222
|
# Get an array of inspected attributes for the adapter.
|
223
223
|
def inspectables
|
224
|
-
[
|
224
|
+
[:level]
|
225
225
|
end
|
226
226
|
|
227
227
|
end
|
@@ -54,12 +54,12 @@ module Yell #:nodoc:
|
|
54
54
|
|
55
55
|
# @overload setup!( options )
|
56
56
|
def setup!( options )
|
57
|
-
self.header =
|
58
|
-
self.date_pattern =
|
59
|
-
self.keep =
|
60
|
-
self.symlink =
|
57
|
+
self.header = Yell.__fetch__(options, :header, :default => true)
|
58
|
+
self.date_pattern = Yell.__fetch__(options, :date_pattern, :default => DefaultDatePattern)
|
59
|
+
self.keep = Yell.__fetch__(options, :keep, :default => false)
|
60
|
+
self.symlink = Yell.__fetch__(options, :symlink, :default => true)
|
61
61
|
|
62
|
-
@original_filename = ::File.expand_path
|
62
|
+
@original_filename = ::File.expand_path(Yell.__fetch__(options, :filename, :default => default_filename))
|
63
63
|
options[:filename] = @original_filename
|
64
64
|
|
65
65
|
@date = Time.now
|
@@ -86,7 +86,7 @@ module Yell #:nodoc:
|
|
86
86
|
|
87
87
|
# @overload close!
|
88
88
|
def close!
|
89
|
-
@filename = filename_for(
|
89
|
+
@filename = filename_for(@date)
|
90
90
|
|
91
91
|
super
|
92
92
|
end
|
@@ -117,7 +117,7 @@ module Yell #:nodoc:
|
|
117
117
|
# it makes the best guess by checking the last access time (which may result
|
118
118
|
# in false cleanups).
|
119
119
|
def cleanup!
|
120
|
-
files = Dir[ @original_filename.sub(
|
120
|
+
files = Dir[ @original_filename.sub(/(\.\w+)?$/, ".*\\1") ].sort.select do |file|
|
121
121
|
_, pattern = header_from(file)
|
122
122
|
|
123
123
|
# Select if the date pattern is nil (no header info available within the file) or
|
@@ -140,14 +140,16 @@ module Yell #:nodoc:
|
|
140
140
|
# do nothing, because symlink is already correct
|
141
141
|
return if ::File.symlink?(@original_filename) && ::File.readlink(@original_filename) == @filename
|
142
142
|
|
143
|
-
::File.unlink(
|
144
|
-
::File.symlink(
|
143
|
+
::File.unlink(@original_filename) if ::File.exist?(@original_filename)
|
144
|
+
::File.symlink(@filename, @original_filename)
|
145
145
|
end
|
146
146
|
|
147
147
|
# Symlink the original filename?
|
148
148
|
#
|
149
149
|
# @return [Boolean] true or false
|
150
|
-
def symlink
|
150
|
+
def symlink?
|
151
|
+
!!symlink
|
152
|
+
end
|
151
153
|
|
152
154
|
# Write the header information into the file
|
153
155
|
def header!
|
@@ -157,24 +159,26 @@ module Yell #:nodoc:
|
|
157
159
|
# Write header into the file?
|
158
160
|
#
|
159
161
|
# @return [Boolean] true or false
|
160
|
-
def header
|
162
|
+
def header?
|
163
|
+
!!header
|
164
|
+
end
|
161
165
|
|
162
166
|
# Sets the filename with the `:date_pattern` appended to it.
|
163
167
|
def filename_for( date )
|
164
|
-
@original_filename.sub(
|
168
|
+
@original_filename.sub(/(\.\w+)?$/, ".#{date.strftime(date_pattern)}\\1")
|
165
169
|
end
|
166
170
|
|
167
171
|
# Fetch the header form the file
|
168
172
|
def header_from( file )
|
169
|
-
if m = ::File.open(
|
173
|
+
if m = ::File.open(file, &:readline).match(HeaderRegexp)
|
170
174
|
# in case there is a Header present, we can just read from it
|
171
|
-
[ Time.at(
|
175
|
+
[ Time.at(m[2].to_f), m[3] ]
|
172
176
|
else
|
173
177
|
# In case there is no header: we need to take a good guess
|
174
178
|
#
|
175
179
|
# Since the pattern can not be determined, we will just return the Posix ctime.
|
176
180
|
# That is NOT the creatint time, so the value will potentially be wrong!
|
177
|
-
[
|
181
|
+
[::File.ctime(file), nil]
|
178
182
|
end
|
179
183
|
end
|
180
184
|
|
data/lib/yell/adapters/file.rb
CHANGED
@@ -11,14 +11,14 @@ module Yell #:nodoc:
|
|
11
11
|
|
12
12
|
# @overload setup!( options )
|
13
13
|
def setup!( options )
|
14
|
-
@filename = ::File.expand_path
|
14
|
+
@filename = ::File.expand_path(Yell.__fetch__(options, :filename, :default => default_filename))
|
15
15
|
|
16
16
|
super
|
17
17
|
end
|
18
18
|
|
19
19
|
# @overload open!
|
20
20
|
def open!
|
21
|
-
@stream = ::File.open(
|
21
|
+
@stream = ::File.open(@filename, ::File::WRONLY|::File::APPEND|::File::CREAT)
|
22
22
|
|
23
23
|
super
|
24
24
|
end
|
@@ -26,7 +26,7 @@ module Yell #:nodoc:
|
|
26
26
|
def default_filename #:nodoc:
|
27
27
|
logdir = ::File.expand_path("log")
|
28
28
|
|
29
|
-
::File.expand_path
|
29
|
+
::File.expand_path(::File.directory?(logdir) ? "#{logdir}/#{Yell.env}.log" : "#{Yell.env}.log")
|
30
30
|
end
|
31
31
|
|
32
32
|
end
|
data/lib/yell/adapters/io.rb
CHANGED
@@ -45,9 +45,9 @@ module Yell #:nodoc:
|
|
45
45
|
def setup!( options )
|
46
46
|
@stream = nil
|
47
47
|
|
48
|
-
self.colors =
|
49
|
-
self.formatter =
|
50
|
-
self.sync =
|
48
|
+
self.colors = Yell.__fetch__(options, :colors, :default => false)
|
49
|
+
self.formatter = Yell.__fetch__(options, :format, :formatter)
|
50
|
+
self.sync = Yell.__fetch__(options, :sync, :default => true)
|
51
51
|
|
52
52
|
super
|
53
53
|
end
|
@@ -68,15 +68,15 @@ module Yell #:nodoc:
|
|
68
68
|
|
69
69
|
# @overload open!
|
70
70
|
def open!
|
71
|
-
@stream.sync = self.sync if @stream.respond_to?
|
72
|
-
@stream.flush
|
71
|
+
@stream.sync = self.sync if @stream.respond_to?(:sync)
|
72
|
+
@stream.flush if @stream.respond_to?(:flush)
|
73
73
|
|
74
74
|
super
|
75
75
|
end
|
76
76
|
|
77
77
|
# @overload close!
|
78
78
|
def close!
|
79
|
-
@stream.close if @stream.respond_to?
|
79
|
+
@stream.close if @stream.respond_to?(:close)
|
80
80
|
@stream = nil
|
81
81
|
|
82
82
|
super
|
data/lib/yell/logger.rb
CHANGED
@@ -53,16 +53,16 @@ module Yell #:nodoc:
|
|
53
53
|
reset!
|
54
54
|
|
55
55
|
# FIXME: :format is deprecated in future versions --R
|
56
|
-
self.formatter = @options
|
57
|
-
self.level = @options
|
58
|
-
self.name = @options
|
59
|
-
self.trace = @options
|
56
|
+
self.formatter = Yell.__fetch__(@options, :format, :formatter)
|
57
|
+
self.level = Yell.__fetch__(@options, :level, :default => 0)
|
58
|
+
self.name = Yell.__fetch__(@options, :name)
|
59
|
+
self.trace = Yell.__fetch__(@options, :trace, :default => :error)
|
60
60
|
|
61
61
|
# silencer
|
62
|
-
self.silence(
|
62
|
+
self.silence(*Yell.__fetch__(@options, :silence))
|
63
63
|
|
64
64
|
# adapters may be passed in the options
|
65
|
-
extract!(
|
65
|
+
extract!(*Yell.__fetch__(@options, :adapters))
|
66
66
|
|
67
67
|
# extract adapter
|
68
68
|
self.adapter(args.pop) if args.any?
|
data/lib/yell/repository.rb
CHANGED
@@ -35,7 +35,7 @@ module Yell #:nodoc:
|
|
35
35
|
# @raise [Yell::LoggerNotFound] Raised when repository does not have that key
|
36
36
|
# @return [Yell::Logger] The logger instance
|
37
37
|
def self.[]( name )
|
38
|
-
synchronize { instance.
|
38
|
+
synchronize { instance.__fetch__(name) or raise Yell::LoggerNotFound.new(name) }
|
39
39
|
end
|
40
40
|
|
41
41
|
# Get the list of all loggers in the repository
|
@@ -57,11 +57,11 @@ module Yell #:nodoc:
|
|
57
57
|
# If the logger could not be found and has a superclass, it
|
58
58
|
# will attempt to look there. This is important for the
|
59
59
|
# Yell::Loggable module.
|
60
|
-
def
|
60
|
+
def __fetch__( name )
|
61
61
|
logger = loggers[name] || loggers[name.to_s]
|
62
62
|
|
63
63
|
if logger.nil? && name.respond_to?(:superclass)
|
64
|
-
return
|
64
|
+
return __fetch__(name.superclass)
|
65
65
|
end
|
66
66
|
|
67
67
|
logger
|
data/lib/yell/version.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'spec_helper'
|
3
|
-
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'active_support'
|
6
|
+
rescue LoadError
|
7
|
+
end
|
4
8
|
|
5
9
|
# make a setup just like in railties ~> 4.0.0
|
6
10
|
#
|
7
11
|
# We simulate the case when Rails 4 starts up its server
|
8
12
|
# and wants to append the log output.
|
9
|
-
describe "Compatibility to ActiveSupport::Logger" do
|
13
|
+
describe "Compatibility to ActiveSupport::Logger", pending: (!defined?(ActiveSupport) || ActiveSupport::VERSION::MAJOR < 4) do
|
10
14
|
|
11
15
|
let!(:yell) { Yell.new($stdout, :format => "%m") }
|
12
16
|
|
data/spec/yell_spec.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yell
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rudolf Schmidt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-12-02 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Yell - Your Extensible Logging Library. Define multiple adapters, various
|
14
14
|
log level combinations or message formatting options like you've never done before
|