teelogger 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 269cc8e131a866bd9a63206c5e20f33c02c3c3a9
4
- data.tar.gz: 4aa61d289eebf2f4696ca5629be0a147c318f788
3
+ metadata.gz: e3fd651818a8e11a6ad874d35362838ed39da690
4
+ data.tar.gz: d627b5c6b302d20bd190cbfa6165f39e1aa72940
5
5
  SHA512:
6
- metadata.gz: 5182be9dadb8218c3cefd5507ade52d58a431507ef8f179bc743dff1486fc7f71d62284610f09505315e63f1693a32d7152ed03ce3275558baf63ea47906b8ac
7
- data.tar.gz: 9401f09297f125f6aecc8bfa07eeb657e22a269af817a6afa32fe2bee3e6dab7a801f0f3cfde02ab00b9dcacca0bd05ad43b9c50dec284f2ce5426fd0fbc4eed
6
+ metadata.gz: 49cf31f0ff41a5ba0317eeb82315326c6c84d7c8bf0936fc7932da728d421427afbba4d51ec0975134932d25532c8f65936c2156fdcbca54c4ba3112d76af9cb
7
+ data.tar.gz: c9052b12275d86b7d4b831c9cfba8163b0c94fe05d50fcf82ae4ae55be3e976c79f75e6a1ea37873b4b2148ca9485d05db2c521441bdc8390e5e59eed6c2016f
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ install:
2
+ - "bundle install"
3
+ script:
4
+ - "bundle exec cucumber"
5
+ os:
6
+ - linux
7
+ - osx
8
+ rvm:
9
+ - 1.9.3
10
+ - 2.0.0
data/README.md CHANGED
@@ -1,6 +1,9 @@
1
1
  # Teelogger
2
2
 
3
- TODO: Write a gem description
3
+ Mini wrapper around Ruby Logger for logging to multiple destinations.
4
+
5
+ [![Gem Version](https://badge.fury.io/rb/teelogger.svg)](http://badge.fury.io/rb/teelogger)
6
+ [![Build Status](https://travis-ci.org/spriteCloud/teelogger.svg?branch=master)](https://travis-ci.org/spriteCloud/teelogger)
4
7
 
5
8
  ## Installation
6
9
 
@@ -18,7 +21,33 @@ Or install it yourself as:
18
21
 
19
22
  ## Usage
20
23
 
21
- TODO: Write usage instructions here
24
+ Behaves just like Ruby's Logger, and like a hash of String => Logger.
25
+
26
+ A typical use might be to log to STDOUT, but also to a file:
27
+
28
+ ```ruby
29
+ require 'teelogger'
30
+
31
+ log = TeeLogger::TeeLogger.new(STDOUT, "filename.log")
32
+ log.level = Logger::WARN # applies to all outputs
33
+ log.level = "INFO" # convenience shortcut
34
+ ```
35
+
36
+ By using the instance as a hash, you can also set individual log levels
37
+ for individual loggers:
38
+
39
+ ```ruby
40
+ require 'teelogger'
41
+
42
+ log = TeeLogger::TeeLogger.new(STDOUT, "filename.log")
43
+ log.each do |name, logger|
44
+ if name.include?("filename.log")
45
+ logger.level = "WARN"
46
+ else
47
+ logger.level = "DEBUG"
48
+ end
49
+ end
50
+ ```
22
51
 
23
52
  ## Contributing
24
53
 
@@ -1,4 +1,8 @@
1
- require 'test/unit/assertions'
1
+ begin
2
+ require 'test/unit/assertions'
3
+ rescue LoadError
4
+ require 'minitest/assertions'
5
+ end
2
6
 
3
7
  message = "test message"
4
8
  io = nil
@@ -6,5 +6,5 @@
6
6
  # All rights reserved.
7
7
  #
8
8
  module TeeLogger
9
- VERSION = "0.1.0"
9
+ VERSION = "0.2.0"
10
10
  end
data/lib/teelogger.rb CHANGED
@@ -33,6 +33,37 @@ module TeeLogger
33
33
  @default_level = Logger::Severity::INFO
34
34
  @loggers
35
35
 
36
+ ##
37
+ # Convert a log level to its string name
38
+ def self.string_level(level)
39
+ if level.is_a? String
40
+ return level
41
+ end
42
+
43
+ Logger::Severity.constants.each do |const|
44
+ if level == Logger.const_get(const)
45
+ return const
46
+ end
47
+ end
48
+
49
+ return nil
50
+ end
51
+
52
+ ##
53
+ # Convert a string log level to its constant value
54
+ def self.convert_level(val)
55
+ if val.is_a? String
56
+ begin
57
+ val = Logger.const_get(val)
58
+ rescue NameError
59
+ val = Logger::Severity::WARN
60
+ end
61
+ end
62
+
63
+ return val
64
+ end
65
+
66
+
36
67
 
37
68
  ##
38
69
  # Add a logger to the current loggers.
@@ -48,8 +79,8 @@ module TeeLogger
48
79
  logger = Logger.new(file)
49
80
 
50
81
  # Initialize logger
51
- logger.unknown "Logging to '#{arg}' initialized with level #{string_level(@default_level)}."
52
- logger.level = convert_level(@default_level)
82
+ logger.unknown "Logging to '#{arg}' initialized with level #{TeeLogger.string_level(@default_level)}."
83
+ logger.level = TeeLogger.convert_level(@default_level)
53
84
  else
54
85
  # We have some other object - let's hope it's an IO object
55
86
  key = arg.to_s
@@ -58,8 +89,8 @@ module TeeLogger
58
89
  logger = Logger.new(arg)
59
90
 
60
91
  # Initialize logger
61
- logger.unknown "Logging to #{key} initialized with level #{string_level(@default_level)}."
62
- logger.level = convert_level(@default_level)
92
+ logger.unknown "Logging to #{key} initialized with level #{TeeLogger.string_level(@default_level)}."
93
+ logger.level = TeeLogger.convert_level(@default_level)
63
94
  end
64
95
 
65
96
  if not key.nil? and not logger.nil?
@@ -85,42 +116,11 @@ module TeeLogger
85
116
  end
86
117
  end
87
118
 
88
- ##
89
- # Convert a log level to its string name
90
- def string_level(level)
91
- if level.is_a? String
92
- return level
93
- end
94
-
95
- Logger::Severity.constants.each do |const|
96
- if level == Logger.const_get(const)
97
- return const
98
- end
99
- end
100
-
101
- return nil
102
- end
103
-
104
- ##
105
- # Convert a string log level to its constant value
106
- def convert_level(val)
107
- if val.is_a? String
108
- begin
109
- val = Logger.const_get(val)
110
- rescue NameError
111
- val = Logger::Severity::WARN
112
- end
113
- end
114
-
115
- return val
116
- end
117
-
118
-
119
119
  ##
120
120
  # Set log level; override this to also accept strings
121
121
  def level=(val)
122
122
  # Convert strings to the constant value
123
- val = convert_level(val)
123
+ val = TeeLogger.convert_level(val)
124
124
 
125
125
  # Update the default log level
126
126
  @default_level = val
@@ -139,10 +139,26 @@ module TeeLogger
139
139
  end
140
140
 
141
141
 
142
+ ##
143
+ # For each log level, define an appropriate logging function
144
+ Logger::Severity.constants.each do |const|
145
+ meth = TeeLogger.string_level(const.to_s).downcase
146
+
147
+ define_method(meth) { |*args, &block|
148
+ dispatch(meth, *args, &block)
149
+ }
150
+ if "unknown" != meth
151
+ define_method("#{meth}?") { |*args, &block|
152
+ dispatch(meth, *args, &block)
153
+ }
154
+ end
155
+ end
156
+
157
+
142
158
  ##
143
159
  # Every function this class doesn't have should be mapped to the original
144
160
  # logger
145
- def respond_to?(meth)
161
+ def respond_to_missing?(meth, include_private = false)
146
162
  if @loggers.nil? or @loggers.empty?
147
163
  raise "No loggers created, can't do anything."
148
164
  end
@@ -151,17 +167,24 @@ module TeeLogger
151
167
 
152
168
  # All loggers are the same, so we need to check only one of them.
153
169
  @loggers.each do |key, logger|
154
- if logger.respond_to? meth_name
170
+ if logger.respond_to?(meth_name, include_private)
155
171
  return true
156
172
  end
157
173
  break
158
174
  end
159
175
 
160
176
  # If this didn't work, we're also emulating a hash
161
- return @loggers.respond_to? meth_name
177
+ return @loggers.respond_to?(meth_name, include_private)
162
178
  end
163
179
 
164
180
  def method_missing(meth, *args, &block)
181
+ dispatch(meth, *args, &block)
182
+ end
183
+
184
+ private
185
+
186
+
187
+ def dispatch(meth, *args, &block)
165
188
  meth_name = meth.to_s
166
189
 
167
190
  if @loggers.nil? or @loggers.empty?
@@ -195,5 +218,6 @@ module TeeLogger
195
218
  # hash.
196
219
  return @loggers.send(meth_name, *args, &block)
197
220
  end
221
+
198
222
  end
199
223
  end
data/teelogger.gemspec CHANGED
@@ -21,4 +21,5 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.6"
22
22
  spec.add_development_dependency "rake"
23
23
  spec.add_development_dependency "cucumber"
24
+ spec.add_development_dependency "minitest"
24
25
  end
metadata CHANGED
@@ -1,55 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: teelogger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jens Finkhaeuser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-19 00:00:00.000000000 Z
11
+ date: 2015-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.6'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: cucumber
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
55
69
  description: Mini wrapper around Ruby Logger for logging to multiple destinations.
@@ -59,7 +73,8 @@ executables: []
59
73
  extensions: []
60
74
  extra_rdoc_files: []
61
75
  files:
62
- - ".gitignore"
76
+ - .gitignore
77
+ - .travis.yml
63
78
  - Gemfile
64
79
  - LICENSE
65
80
  - README.md
@@ -80,17 +95,17 @@ require_paths:
80
95
  - lib
81
96
  required_ruby_version: !ruby/object:Gem::Requirement
82
97
  requirements:
83
- - - ">="
98
+ - - '>='
84
99
  - !ruby/object:Gem::Version
85
100
  version: '0'
86
101
  required_rubygems_version: !ruby/object:Gem::Requirement
87
102
  requirements:
88
- - - ">="
103
+ - - '>='
89
104
  - !ruby/object:Gem::Version
90
105
  version: '0'
91
106
  requirements: []
92
107
  rubyforge_project:
93
- rubygems_version: 2.0.3
108
+ rubygems_version: 2.4.3
94
109
  signing_key:
95
110
  specification_version: 4
96
111
  summary: Mini wrapper around Ruby Logger for logging to multiple destinations.