yell 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/yell.rb CHANGED
@@ -52,6 +52,10 @@ module Yell #:nodoc:
52
52
  ENV['YELL_ENV'] || ENV['RACK_ENV'] || 'development'
53
53
  end
54
54
 
55
+ def load!( file )
56
+ Yell.new Yell::Configuration.load!( file )
57
+ end
58
+
55
59
  def _deprecate( version, message, options = {} )
56
60
  warning = ["Deprecation Warning (since v#{version}): #{message}" ]
57
61
  warning << " before: #{options[:before]}" if options[:before]
@@ -70,3 +74,5 @@ require File.dirname(__FILE__) + '/yell/formatter'
70
74
  require File.dirname(__FILE__) + '/yell/adapters'
71
75
  require File.dirname(__FILE__) + '/yell/logger'
72
76
 
77
+ require File.dirname(__FILE__) + '/yell/configuration'
78
+
data/lib/yell/adapters.rb CHANGED
@@ -4,7 +4,7 @@ module Yell #:nodoc:
4
4
 
5
5
  # NoSuchAdapter is raised whenever you want to instantiate an
6
6
  # adapter that does not exist.
7
- class NoSuchAdapter < StandardError; end
7
+ class UnregisteredAdapter < StandardError; end
8
8
 
9
9
  # This module provides the interface to attaching adapters to
10
10
  # the logger. You should not have to call the corresponding classes
@@ -35,7 +35,7 @@ module Yell #:nodoc:
35
35
  else @@adapters[name]
36
36
  end
37
37
 
38
- raise NoSuchAdapter.new( name ) unless adapter
38
+ raise UnregisteredAdapter.new( name ) unless adapter
39
39
 
40
40
  adapter.new( options, &block )
41
41
  end
@@ -1,7 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'monitor'
4
-
5
3
  module Yell #:nodoc:
6
4
  module Adapters #:nodoc:
7
5
 
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ require 'yaml'
4
+
5
+ module Yell #:nodoc:
6
+
7
+ # The Configuration can be used to setup Yell before
8
+ # initializing an instance.
9
+ class Configuration
10
+
11
+ def self.load!( file )
12
+ YAML.load( ::File.read(file) )
13
+ end
14
+
15
+ end
16
+ end
17
+
data/lib/yell/level.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Yell #:nodoc:
4
+ InterpretRegexp = /(at|gt|gte|lt|lte)?\.?(#{Yell::Severities.join('|')}})/i
4
5
 
5
6
  # The +Level+ class handles the severities for you in order to determine
6
7
  # if an adapter should log or not.
@@ -63,8 +64,9 @@ module Yell #:nodoc:
63
64
 
64
65
  case severity
65
66
  when Array then at( *severity )
66
- when Range then gte(severity.first).lte(severity.last)
67
- when Integer, String, Symbol then gte(severity)
67
+ when Range then gte( severity.first ).lte( severity.last )
68
+ when Integer, Symbol then gte( severity )
69
+ when String then interpret!( severity )
68
70
  end
69
71
  end
70
72
 
@@ -117,6 +119,14 @@ module Yell #:nodoc:
117
119
 
118
120
  private
119
121
 
122
+ def interpret!( severities )
123
+ severities.split( ' ' ).each do |severity|
124
+ if m = InterpretRegexp.match(severity)
125
+ m[1].nil? ? __send__( :gte, m[2] ) : __send__( m[1], m[2] )
126
+ end
127
+ end
128
+ end
129
+
120
130
  def calculate!( modifier, severity ) #:nodoc:
121
131
  index = index_from( severity )
122
132
  return if index.nil?
data/lib/yell/logger.rb CHANGED
@@ -37,6 +37,9 @@ module Yell #:nodoc:
37
37
  # extract options
38
38
  @options = args.last.is_a?(Hash) ? args.pop : {}
39
39
 
40
+ # adapters may be passed in the options
41
+ _extract_adapters!( @options )
42
+
40
43
  # check if filename was given as argument and put it into the @options
41
44
  if args.last.is_a?( String )
42
45
  @options[:filename] = args.pop unless @options[:filename]
@@ -46,10 +49,9 @@ module Yell #:nodoc:
46
49
  self.level = @options[:level]
47
50
 
48
51
  # extract adapter
49
- self.adapter args.pop if args.any?
52
+ adapter args.pop if args.any?
50
53
 
51
54
  # eval the given block
52
- # block.call(self) if block
53
55
  _call( &block ) if block
54
56
 
55
57
  # default adapter when none defined
@@ -79,7 +81,7 @@ module Yell #:nodoc:
79
81
  #
80
82
  # @raise [Yell::NoSuchAdapter] Will be thrown when the adapter is not defined
81
83
  def adapter( type = :file, *args, &block )
82
- options = [@options, *args].inject( Hash.new ) do |h,c|
84
+ options = [@options, *args].inject( Hash.new ) do |h, c|
83
85
  h.merge( c.is_a?(String) ? {:filename => c} : c )
84
86
  end
85
87
 
@@ -147,6 +149,23 @@ module Yell #:nodoc:
147
149
  end
148
150
  end
149
151
 
152
+ # The :adapters key may be passed to the options hash. It may appear in
153
+ # multiple variations:
154
+ #
155
+ # @example
156
+ # options = { :adapters => [:stdout, :stderr] }
157
+ #
158
+ # @example
159
+ # options = { :adapters => [:stdout => {:level => :info}, :stderr => {:level => :error}]
160
+ def _extract_adapters!( opts )
161
+ ( opts.delete( :adapters ) || [] ).each do |a|
162
+ case a
163
+ when String, Symbol then adapter( a )
164
+ else a.each { |n, o| adapter( n, o || {} ) }
165
+ end
166
+ end
167
+ end
168
+
150
169
  # Cycles all the adapters and writes the message
151
170
  def write( event )
152
171
  @adapters.each { |a| a.write(event) }
data/lib/yell/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module Yell #:nodoc:
4
- VERSION = "0.8.0"
4
+ VERSION = "0.9.0"
5
5
 
6
6
  end
7
7
 
@@ -0,0 +1,7 @@
1
+ :level: info
2
+
3
+ :adapters:
4
+ - :stdout:
5
+ :level: "lt.error"
6
+ - :stderr:
7
+ :level: "gte.error"
@@ -28,8 +28,8 @@ describe Yell::Adapters do
28
28
  end
29
29
 
30
30
  context "given an unregistered adapter" do
31
- it "should raise NoSuchAdapter" do
32
- lambda { Yell::Adapters.new :unknown }.should raise_error Yell::NoSuchAdapter
31
+ it "should raise UnregisteredAdapter" do
32
+ lambda { Yell::Adapters.new :unknown }.should raise_error Yell::UnregisteredAdapter
33
33
  end
34
34
  end
35
35
  end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe Yell::Configuration do
4
+
5
+ describe ":load!" do
6
+ let( :file ) { File.expand_path File.dirname(__FILE__) + '/../fixtures/yell.yml' }
7
+ let( :configuration ) { Yell::Configuration.load!( file ) }
8
+
9
+ it "should return the hash from the given file" do
10
+ YAML.load( File.read(file) ).should == configuration
11
+ end
12
+ end
13
+
14
+ end
15
+
@@ -66,6 +66,50 @@ describe Yell::Level do
66
66
  end
67
67
  end
68
68
 
69
+ context "given a String" do
70
+ let( :level ) { Yell::Level.new(subject) }
71
+
72
+ context "basic string" do
73
+ subject { 'error' }
74
+
75
+ it { level.at?(:debug).should be_false }
76
+ it { level.at?(:info).should be_false }
77
+ it { level.at?(:warn).should be_false }
78
+ it { level.at?(:error).should be_true }
79
+ it { level.at?(:fatal).should be_true }
80
+ end
81
+
82
+ context "complex string with outer boundaries" do
83
+ subject { 'gte.info lte.error' }
84
+
85
+ it { level.at?(:debug).should be_false }
86
+ it { level.at?(:info).should be_true }
87
+ it { level.at?(:warn).should be_true }
88
+ it { level.at?(:error).should be_true }
89
+ it { level.at?(:fatal).should be_false }
90
+ end
91
+
92
+ context "complex string with inner boundaries" do
93
+ subject { 'gt.info lt.error' }
94
+
95
+ it { level.at?(:debug).should be_false }
96
+ it { level.at?(:info).should be_false }
97
+ it { level.at?(:warn).should be_true }
98
+ it { level.at?(:error).should be_false }
99
+ it { level.at?(:fatal).should be_false }
100
+ end
101
+
102
+ context "complex string with precise boundaries" do
103
+ subject { 'at.info at.error' }
104
+
105
+ it { level.at?(:debug).should be_false }
106
+ it { level.at?(:info).should be_true }
107
+ it { level.at?(:warn).should be_false }
108
+ it { level.at?(:error).should be_true }
109
+ it { level.at?(:fatal).should be_false }
110
+ end
111
+ end
112
+
69
113
  context "given an Array" do
70
114
  let( :level ) { Yell::Level.new( [:debug, :warn, :fatal] ) }
71
115
 
@@ -106,6 +106,29 @@ describe Yell::Logger do
106
106
  end
107
107
  end
108
108
 
109
+ context "initialize with :adapters option" do
110
+ let( :logger ) do
111
+ Yell::Logger.new :adapters => [ :stdout, { :stderr => {:level => :error} } ]
112
+ end
113
+
114
+ let( :adapters ) { logger.instance_variable_get :@adapters }
115
+ let( :stdout ) { adapters.first }
116
+ let( :stderr ) { adapters.last }
117
+
118
+ it "should define those adapters" do
119
+ adapters.size.should == 2
120
+
121
+ stdout.should be_kind_of Yell::Adapters::Stdout
122
+ stderr.should be_kind_of Yell::Adapters::Stderr
123
+ end
124
+
125
+ it "should pass :level to :stderr adapter" do
126
+ stderr.level.at?(:warn).should be_false
127
+ stderr.level.at?(:error).should be_true
128
+ stderr.level.at?(:fatal).should be_true
129
+ end
130
+ end
131
+
109
132
  context "caller's :file, :line and :method" do
110
133
  let( :adapter ) { Yell::Adapters::Stdout.new :format => "%F, %n: %M" }
111
134
  let( :logger ) { Yell::Logger.new { |l| l.adapter adapter } }
data/spec/yell_spec.rb CHANGED
@@ -5,8 +5,8 @@ describe Yell do
5
5
 
6
6
  it { should be_kind_of Yell::Logger }
7
7
 
8
- it "should raise NoSuchAdapter when adapter cant be loaded" do
9
- lambda { Yell.new :unknownadapter }.should raise_error( Yell::NoSuchAdapter )
8
+ it "should raise UnregisteredAdapter when adapter cant be loaded" do
9
+ lambda { Yell.new :unknownadapter }.should raise_error( Yell::UnregisteredAdapter )
10
10
  end
11
11
 
12
12
  context :level do
@@ -21,4 +21,17 @@ describe Yell do
21
21
  it { should be_kind_of Yell::Formatter }
22
22
  end
23
23
 
24
+ context :load! do
25
+ subject { Yell.load!( File.dirname(__FILE__) + '/fixtures/yell.yml' ) }
26
+
27
+ let( :adapters ) { subject.instance_variable_get :@adapters }
28
+
29
+ it { should be_kind_of Yell::Logger }
30
+
31
+ it "should return a Yell instacne with the configuration for a file" do
32
+ adapters.first.should be_kind_of Yell::Adapters::Stdout
33
+ adapters.last.should be_kind_of Yell::Adapters::Stderr
34
+ end
35
+ end
36
+
24
37
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 8
7
+ - 9
8
8
  - 0
9
- version: 0.8.0
9
+ version: 0.9.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Rudolf Schmidt
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2012-04-24 00:00:00 +02:00
17
+ date: 2012-05-11 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -84,11 +84,13 @@ files:
84
84
  - lib/yell/adapters/file.rb
85
85
  - lib/yell/adapters/io.rb
86
86
  - lib/yell/adapters/streams.rb
87
+ - lib/yell/configuration.rb
87
88
  - lib/yell/event.rb
88
89
  - lib/yell/formatter.rb
89
90
  - lib/yell/level.rb
90
91
  - lib/yell/logger.rb
91
92
  - lib/yell/version.rb
93
+ - spec/fixtures/yell.yml
92
94
  - spec/spec_helper.rb
93
95
  - spec/yell/adapters/base_spec.rb
94
96
  - spec/yell/adapters/datefile_spec.rb
@@ -96,6 +98,7 @@ files:
96
98
  - spec/yell/adapters/io_spec.rb
97
99
  - spec/yell/adapters/streams_spec.rb
98
100
  - spec/yell/adapters_spec.rb
101
+ - spec/yell/configuration_spec.rb
99
102
  - spec/yell/event_spec.rb
100
103
  - spec/yell/formatter_spec.rb
101
104
  - spec/yell/level_spec.rb
@@ -133,6 +136,7 @@ signing_key:
133
136
  specification_version: 3
134
137
  summary: Yell - Your Extensible Logging Library
135
138
  test_files:
139
+ - spec/fixtures/yell.yml
136
140
  - spec/spec_helper.rb
137
141
  - spec/yell/adapters/base_spec.rb
138
142
  - spec/yell/adapters/datefile_spec.rb
@@ -140,6 +144,7 @@ test_files:
140
144
  - spec/yell/adapters/io_spec.rb
141
145
  - spec/yell/adapters/streams_spec.rb
142
146
  - spec/yell/adapters_spec.rb
147
+ - spec/yell/configuration_spec.rb
143
148
  - spec/yell/event_spec.rb
144
149
  - spec/yell/formatter_spec.rb
145
150
  - spec/yell/level_spec.rb