yell 0.8.0 → 0.9.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.
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