yell 0.3.3 → 0.4.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/.gitignore CHANGED
@@ -5,3 +5,7 @@ pkg/*
5
5
 
6
6
  # bundler
7
7
  Gemfile.lock
8
+
9
+ # vim
10
+ *.swp
11
+ **/*.swp
data/lib/yell/adapters.rb CHANGED
@@ -1,10 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'yell/adapters/base'
4
- require 'yell/adapters/io'
5
- require 'yell/adapters/file'
6
- require 'yell/adapters/datefile'
7
-
8
3
  module Yell #:nodoc:
9
4
 
10
5
  # NoSuchAdapter is raised whenever you want to instantiate an
@@ -15,44 +10,46 @@ module Yell #:nodoc:
15
10
  # the logger. You should not have to call the corresponding classes
16
11
  # directly.
17
12
  module Adapters
13
+ @@adapters = {}
18
14
 
19
15
  class << self
16
+
17
+ # Register your own adapter here
18
+ #
19
+ # @example
20
+ # Yell::Adapters.register( :myadapter, MyAdapter )
21
+ def register( name, klass )
22
+ @@adapters[name] = klass
23
+ end
24
+
20
25
  # Returns an instance of the given processor type.
21
26
  #
22
27
  # @example A simple file adapter
23
28
  # Yell::Adapters.new( :file )
24
- def new( type, options = {}, &block )
25
- # return type if type.instance_of?(Yell::Adapters::)
26
-
27
- if type.instance_of?( ::IO )
28
- # should apply to STDOUT, STDERR, File, etc
29
- Yell::Adapters::Io.new( type, options, &block )
30
- else
31
- # any other type
32
- adapter = case type
33
- when String, Symbol then self.const_get( camelize(type.to_s) )
34
- else type
35
- end
36
-
37
- adapter.new( options, &block )
38
- end
39
- end
29
+ def new( name, options = {}, &block )
30
+ return name if name.is_a?( Yell::Adapters::Base )
40
31
 
32
+ adapter = case name
33
+ when STDOUT then @@adapters[:stdout]
34
+ when STDERR then @@adapters[:stderr]
35
+ else @@adapters[name]
36
+ end
41
37
 
42
- private
38
+ raise NoSuchAdapter.new( name ) unless adapter
43
39
 
44
- # Simple camelcase converter.
45
- #
46
- # @example
47
- # camelize("file")
48
- # #=> "File"
49
- #
50
- # camelize("date_file")
51
- # #=> "DateFile"
52
- def camelize( str )
53
- str.capitalize.gsub( /(_\w)/ ) { |match| match.reverse.chop.upcase }
40
+ adapter.new( options, &block )
54
41
  end
42
+
55
43
  end
56
44
 
57
45
  end
58
46
  end
47
+
48
+ require 'yell/adapters/base'
49
+
50
+ # IO based adapters
51
+ require 'yell/adapters/io'
52
+ require 'yell/adapters/streams'
53
+ require 'yell/adapters/file'
54
+ require 'yell/adapters/datefile'
55
+
@@ -6,9 +6,15 @@ module Yell #:nodoc:
6
6
  # This class provides the basic interface for all allowed
7
7
  # operations on any adapter implementation.
8
8
  #
9
- # Other adapters should include it for the base methods used
9
+ # Other adapters should inherit from it for the methods used
10
10
  # by the {Yell::Logger}.
11
- module Base
11
+ class Base
12
+
13
+ def initialize( options = {}, &block )
14
+ level options[:level]
15
+
16
+ instance_eval( &block ) if block
17
+ end
12
18
 
13
19
  # The main method for calling the adapter.
14
20
  #
@@ -36,6 +42,7 @@ module Yell #:nodoc:
36
42
  @level = Yell::Level.new( severity )
37
43
  end
38
44
 
45
+
39
46
  private
40
47
 
41
48
  # The perform the actual write.
@@ -49,9 +56,9 @@ module Yell #:nodoc:
49
56
  # Determine whether to write at the given severity.
50
57
  #
51
58
  # @example
52
- # write? :error
59
+ # write? Yell::Event.new( 'INFO', 'Hwllo Wold!' )
53
60
  #
54
- # @param [String,Symbol,Integer] severity The severity to ask if to write or not.
61
+ # @param [Yell::Event] event The log event
55
62
  #
56
63
  # @return [Boolean] true or false
57
64
  def write?( event )
@@ -18,7 +18,7 @@ module Yell #:nodoc:
18
18
 
19
19
  @date = nil # default; do not override --R
20
20
 
21
- super( options, &block )
21
+ super
22
22
  end
23
23
 
24
24
  # @overload Reset the file handle
@@ -61,5 +61,7 @@ module Yell #:nodoc:
61
61
 
62
62
  end
63
63
 
64
+ register( :datefile, Yell::Adapters::Datefile )
65
+
64
66
  end
65
67
  end
@@ -8,7 +8,7 @@ module Yell #:nodoc:
8
8
  class File < Yell::Adapters::Io
9
9
 
10
10
  def initialize( options = {}, &block )
11
- super( nil, options, &block )
11
+ super
12
12
 
13
13
  @filename = options.fetch(:filename, default_filename)
14
14
  end
@@ -27,6 +27,8 @@ module Yell #:nodoc:
27
27
 
28
28
  end
29
29
 
30
+ register( :file, Yell::Adapters::File )
31
+
30
32
  end
31
33
  end
32
34
 
@@ -1,8 +1,7 @@
1
1
  module Yell
2
2
  module Adapters
3
3
 
4
- class Io
5
- include Yell::Adapters::Base
4
+ class Io < Yell::Adapters::Base
6
5
 
7
6
  # The possible unix log colors
8
7
  Colors = {
@@ -15,19 +14,27 @@ module Yell
15
14
  'DEFAULT' => "\e[0m" # NONE
16
15
  }
17
16
 
18
- # Accessor to the io stream
19
- attr_reader :stream
20
17
 
18
+ def initialize( options = {}, &block )
19
+ format options[:format]
20
+ colorize options.fetch(:colorize, false)
21
21
 
22
- def initialize( stream, options = {}, &block )
23
- @stream = stream
24
- @options = options
22
+ super
23
+ end
25
24
 
26
- level options.fetch(:level, nil)
27
- format options.fetch(:format, nil)
28
- colorize options.fetch(:colorize, false)
25
+ # The IO stream
26
+ #
27
+ # Adapter classes should provide their own implementation
28
+ # of this method.
29
+ def stream
30
+ raise 'Not implemented'
31
+ end
32
+
33
+ # Close the io stream
34
+ def close
35
+ @stream.close if @stream.respond_to? :close
29
36
 
30
- instance_eval( &block ) if block
37
+ @stream = nil
31
38
  end
32
39
 
33
40
  # Set the format for your message.
@@ -44,11 +51,6 @@ module Yell
44
51
  @colorize = color
45
52
  end
46
53
 
47
- def close
48
- @stream.close if @stream.respond_to? :close
49
-
50
- @stream = nil
51
- end
52
54
 
53
55
  private
54
56
 
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+
3
+ module Yell #:nodoc:
4
+ module Adapters #:nodoc:
5
+
6
+ class Stdout < Yell::Adapters::Io
7
+
8
+ # @overload Lazily open the STDOUT stream
9
+ def stream
10
+ @stream ||= $stdout.clone
11
+ end
12
+ end
13
+
14
+ class Stderr < Yell::Adapters::Io
15
+
16
+ # @overload Lazily open the STDERR stream
17
+ def stream
18
+ @stream ||= $stderr.clone
19
+ end
20
+ end
21
+
22
+ register( :stdout, Yell::Adapters::Stdout )
23
+ register( :stderr, Yell::Adapters::Stderr )
24
+
25
+ end
26
+ end
27
+
data/lib/yell/event.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module Yell #:nodoc:
2
2
 
3
3
  class Event
4
- CallerRegexp = /^(.+?):(\d+)(?::in `(.*)')?/
4
+ CallerRegexp = /^(.+?):(\d+)(?::in `(.+)')?/
5
5
 
6
6
  # Accessor to the log level
7
7
  attr_reader :level
data/lib/yell/level.rb CHANGED
@@ -47,7 +47,7 @@ module Yell #:nodoc:
47
47
  @severities = Yell::Severities.map { true } # all levels allowed by default
48
48
 
49
49
  case severity
50
- when Array then severity.each { |s| at(s) }
50
+ when Array then at( *severity )
51
51
  when Range then gte(severity.first).lte(severity.last)
52
52
  when Integer, String, Symbol then gte(severity)
53
53
  end
@@ -64,8 +64,8 @@ module Yell #:nodoc:
64
64
  index.nil? ? false : @severities[index]
65
65
  end
66
66
 
67
- def at( severity ) #:nodoc:
68
- calculate! :==, severity
67
+ def at( *severities ) #:nodoc:
68
+ severities.each { |severity| calculate! :==, severity }
69
69
  self
70
70
  end
71
71
 
data/lib/yell/logger.rb CHANGED
@@ -82,8 +82,6 @@ module Yell #:nodoc:
82
82
  end
83
83
 
84
84
  @adapters << Yell::Adapters.new( type, options, &block )
85
- rescue NameError
86
- raise Yell::NoSuchAdapter, type
87
85
  end
88
86
 
89
87
  # Set the minimum log level.
data/lib/yell/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Yell #:nodoc:
2
- VERSION = "0.3.3"
2
+ VERSION = "0.4.0"
3
3
 
4
4
  end
@@ -0,0 +1,93 @@
1
+ require 'spec_helper'
2
+
3
+ describe Yell::Level do
4
+
5
+ context "default" do
6
+ let( :level ) { Yell::Level.new }
7
+
8
+ it { level.at?(:debug).should be_true }
9
+ it { level.at?(:info).should be_true }
10
+ it { level.at?(:warn).should be_true }
11
+ it { level.at?(:error).should be_true }
12
+ it { level.at?(:fatal).should be_true }
13
+ end
14
+
15
+ context "given a Symbol" do
16
+ let( :level ) { Yell::Level.new(subject) }
17
+
18
+ context :debug do
19
+ subject { :debug }
20
+
21
+ it { level.at?(:debug).should be_true }
22
+ it { level.at?(:info).should be_true }
23
+ it { level.at?(:warn).should be_true }
24
+ it { level.at?(:error).should be_true }
25
+ it { level.at?(:fatal).should be_true }
26
+ end
27
+
28
+ context :info do
29
+ subject { :info }
30
+
31
+ it { level.at?(:debug).should be_false }
32
+ it { level.at?(:info).should be_true }
33
+ it { level.at?(:warn).should be_true }
34
+ it { level.at?(:error).should be_true }
35
+ it { level.at?(:fatal).should be_true }
36
+ end
37
+
38
+ context :warn do
39
+ subject { :warn }
40
+
41
+ it { level.at?(:debug).should be_false }
42
+ it { level.at?(:info).should be_false }
43
+ it { level.at?(:warn).should be_true }
44
+ it { level.at?(:error).should be_true }
45
+ it { level.at?(:fatal).should be_true }
46
+ end
47
+
48
+ context :error do
49
+ subject { :error }
50
+
51
+ it { level.at?(:debug).should be_false }
52
+ it { level.at?(:info).should be_false }
53
+ it { level.at?(:warn).should be_false }
54
+ it { level.at?(:error).should be_true }
55
+ it { level.at?(:fatal).should be_true }
56
+ end
57
+
58
+ context :fatal do
59
+ subject { :fatal }
60
+
61
+ it { level.at?(:debug).should be_false }
62
+ it { level.at?(:info).should be_false }
63
+ it { level.at?(:warn).should be_false }
64
+ it { level.at?(:error).should be_false }
65
+ it { level.at?(:fatal).should be_true }
66
+ end
67
+ end
68
+
69
+ context "given an Array" do
70
+ let( :level ) { Yell::Level.new(subject) }
71
+
72
+ subject { [:debug, :warn, :fatal] }
73
+
74
+ it { level.at?(:debug).should be_true }
75
+ it { level.at?(:info).should be_false }
76
+ it { level.at?(:warn).should be_true }
77
+ it { level.at?(:error).should be_false }
78
+ it { level.at?(:fatal).should be_true }
79
+ end
80
+
81
+ context "given a Range" do
82
+ let( :level ) { Yell::Level.new(subject) }
83
+
84
+ subject { (1..3) }
85
+
86
+ it { level.at?(:debug).should be_false }
87
+ it { level.at?(:info).should be_true }
88
+ it { level.at?(:warn).should be_true }
89
+ it { level.at?(:error).should be_true }
90
+ it { level.at?(:fatal).should be_false }
91
+ end
92
+
93
+ end
metadata CHANGED
@@ -1,34 +1,28 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yell
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 3
8
- - 3
9
- version: 0.3.3
4
+ prerelease:
5
+ version: 0.4.0
10
6
  platform: ruby
11
7
  authors:
12
- - Rudolf Schmidt
8
+ - Rudolf Schmidt
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2012-03-24 00:00:00 +01:00
18
- default_executable:
13
+ date: 2012-03-27 00:00:00 Z
19
14
  dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: rr
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
- version: "0"
30
- type: :development
31
- version_requirements: *id001
15
+ - !ruby/object:Gem::Dependency
16
+ name: rr
17
+ prerelease: false
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ type: :development
25
+ version_requirements: *id001
32
26
  description: An easy to use logging library to log into files and any other self-defined adapters
33
27
  email:
34
28
  executables: []
@@ -38,38 +32,38 @@ extensions: []
38
32
  extra_rdoc_files: []
39
33
 
40
34
  files:
41
- - .gitignore
42
- - .travis.yml
43
- - Gemfile
44
- - LICENSE.txt
45
- - README.md
46
- - Rakefile
47
- - examples/001-basic-usage.rb
48
- - examples/002.1-log-level-basics.rb
49
- - examples/002.2-log-level-on-certain-severities-only.rb
50
- - examples/002.3-log-level-within-range.rb
51
- - examples/003.1-formatting-DefaultFormat.rb
52
- - examples/003.2-formatting-BasicFormat.rb
53
- - examples/003.3-formatting-ExtendedFormat.rb
54
- - examples/003.4-formatting-on-your-own.rb
55
- - lib/yell.rb
56
- - lib/yell/adapters.rb
57
- - lib/yell/adapters/.file.rb.swp
58
- - lib/yell/adapters/base.rb
59
- - lib/yell/adapters/datefile.rb
60
- - lib/yell/adapters/file.rb
61
- - lib/yell/adapters/io.rb
62
- - lib/yell/event.rb
63
- - lib/yell/formatter.rb
64
- - lib/yell/level.rb
65
- - lib/yell/logger.rb
66
- - lib/yell/version.rb
67
- - spec/spec_helper.rb
68
- - spec/yell/event_spec.rb
69
- - spec/yell/formatter_spec.rb
70
- - spec/yell_spec.rb
71
- - yell.gemspec
72
- has_rdoc: true
35
+ - .gitignore
36
+ - .travis.yml
37
+ - Gemfile
38
+ - LICENSE.txt
39
+ - README.md
40
+ - Rakefile
41
+ - examples/001-basic-usage.rb
42
+ - examples/002.1-log-level-basics.rb
43
+ - examples/002.2-log-level-on-certain-severities-only.rb
44
+ - examples/002.3-log-level-within-range.rb
45
+ - examples/003.1-formatting-DefaultFormat.rb
46
+ - examples/003.2-formatting-BasicFormat.rb
47
+ - examples/003.3-formatting-ExtendedFormat.rb
48
+ - examples/003.4-formatting-on-your-own.rb
49
+ - lib/yell.rb
50
+ - lib/yell/adapters.rb
51
+ - lib/yell/adapters/base.rb
52
+ - lib/yell/adapters/datefile.rb
53
+ - lib/yell/adapters/file.rb
54
+ - lib/yell/adapters/io.rb
55
+ - lib/yell/adapters/streams.rb
56
+ - lib/yell/event.rb
57
+ - lib/yell/formatter.rb
58
+ - lib/yell/level.rb
59
+ - lib/yell/logger.rb
60
+ - lib/yell/version.rb
61
+ - spec/spec_helper.rb
62
+ - spec/yell/event_spec.rb
63
+ - spec/yell/formatter_spec.rb
64
+ - spec/yell/level_spec.rb
65
+ - spec/yell_spec.rb
66
+ - yell.gemspec
73
67
  homepage: http://rubygems.org/gems/yell
74
68
  licenses: []
75
69
 
@@ -77,30 +71,26 @@ post_install_message:
77
71
  rdoc_options: []
78
72
 
79
73
  require_paths:
80
- - lib
74
+ - lib
81
75
  required_ruby_version: !ruby/object:Gem::Requirement
76
+ none: false
82
77
  requirements:
83
- - - ">="
84
- - !ruby/object:Gem::Version
85
- segments:
86
- - 0
87
- version: "0"
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: "0"
88
81
  required_rubygems_version: !ruby/object:Gem::Requirement
82
+ none: false
89
83
  requirements:
90
- - - ">="
91
- - !ruby/object:Gem::Version
92
- segments:
93
- - 0
94
- version: "0"
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: "0"
95
87
  requirements: []
96
88
 
97
89
  rubyforge_project: yell
98
- rubygems_version: 1.3.6
90
+ rubygems_version: 1.8.9
99
91
  signing_key:
100
92
  specification_version: 3
101
93
  summary: Yell - Your Extensible Logging Library
102
- test_files:
103
- - spec/spec_helper.rb
104
- - spec/yell/event_spec.rb
105
- - spec/yell/formatter_spec.rb
106
- - spec/yell_spec.rb
94
+ test_files: []
95
+
96
+ has_rdoc:
Binary file