yell 1.4.0 → 2.2.2

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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +6 -2
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +16 -13
  5. data/Gemfile +15 -8
  6. data/LICENSE.txt +1 -1
  7. data/README.md +10 -3
  8. data/Rakefile +1 -3
  9. data/examples/002.1-log-level-basics.rb +2 -2
  10. data/examples/002.2-log-level-on-certain-severities-only.rb +5 -4
  11. data/examples/002.3-log-level-within-range.rb +7 -5
  12. data/examples/003.1-formatting-DefaultFormat.rb +3 -3
  13. data/examples/003.2-formatting-BasicFormat.rb +3 -3
  14. data/examples/003.3-formatting-ExtendedFormat.rb +3 -3
  15. data/examples/003.4-formatting-on-your-own.rb +3 -3
  16. data/examples/004.1-colorizing-the-log-output.rb +3 -3
  17. data/examples/005.1-repository.rb +3 -3
  18. data/examples/006.1-the-loggable-module.rb +2 -2
  19. data/examples/006.2-the-loggable-module-with-inheritance.rb +2 -2
  20. data/lib/core_ext/logger.rb +17 -0
  21. data/lib/yell/adapters/base.rb +17 -22
  22. data/lib/yell/adapters/datefile.rb +23 -22
  23. data/lib/yell/adapters/file.rb +3 -7
  24. data/lib/yell/adapters/io.rb +9 -15
  25. data/lib/yell/adapters/streams.rb +0 -5
  26. data/lib/yell/adapters.rb +41 -10
  27. data/lib/yell/configuration.rb +2 -4
  28. data/lib/yell/event.rb +46 -10
  29. data/lib/yell/formatter.rb +134 -54
  30. data/lib/yell/helpers/{adapters.rb → adapter.rb} +7 -17
  31. data/lib/yell/helpers/base.rb +0 -1
  32. data/lib/yell/helpers/formatter.rb +8 -8
  33. data/lib/yell/helpers/level.rb +7 -4
  34. data/lib/yell/helpers/silencer.rb +3 -5
  35. data/lib/yell/helpers/tracer.rb +6 -7
  36. data/lib/yell/level.rb +19 -16
  37. data/lib/yell/loggable.rb +11 -7
  38. data/lib/yell/logger.rb +47 -68
  39. data/lib/yell/repository.rb +3 -5
  40. data/lib/yell/silencer.rb +30 -14
  41. data/lib/yell/version.rb +1 -4
  42. data/lib/yell.rb +29 -11
  43. data/yell.gemspec +22 -15
  44. metadata +19 -50
  45. data/spec/fixtures/yell.yml +0 -7
  46. data/spec/spec_helper.rb +0 -50
  47. data/spec/threaded/yell_spec.rb +0 -100
  48. data/spec/yell/adapters/base_spec.rb +0 -43
  49. data/spec/yell/adapters/datefile_spec.rb +0 -168
  50. data/spec/yell/adapters/file_spec.rb +0 -75
  51. data/spec/yell/adapters/io_spec.rb +0 -72
  52. data/spec/yell/adapters/streams_spec.rb +0 -26
  53. data/spec/yell/adapters_spec.rb +0 -45
  54. data/spec/yell/configuration_spec.rb +0 -36
  55. data/spec/yell/event_spec.rb +0 -97
  56. data/spec/yell/formatter_spec.rb +0 -136
  57. data/spec/yell/level_spec.rb +0 -200
  58. data/spec/yell/loggable_spec.rb +0 -20
  59. data/spec/yell/logger_spec.rb +0 -263
  60. data/spec/yell/repository_spec.rb +0 -70
  61. data/spec/yell/silencer_spec.rb +0 -49
  62. data/spec/yell_spec.rb +0 -102
data/yell.gemspec CHANGED
@@ -1,21 +1,28 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path( '../lib/yell/version', __FILE__ )
1
+ # frozen_string_literal: true
3
2
 
4
- Gem::Specification.new do |s|
5
- s.name = "yell"
6
- s.version = Yell::VERSION
7
- s.authors = ["Rudolf Schmidt"]
3
+ lib = File.expand_path('lib', __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'yell/version'
8
6
 
9
- s.homepage = "http://rudionrails.github.com/yell"
10
- s.summary = %q{Yell - Your Extensible Logging Library}
11
- s.description = %q{Yell - Your Extensible Logging Library. Define multiple adapters, various log level combinations or message formatting options like you've never done before}
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'yell'
9
+ spec.version = Yell::VERSION
10
+ spec.authors = ['Rudolf Schmidt']
11
+ spec.license = 'MIT'
12
12
 
13
- s.rubyforge_project = "yell"
13
+ spec.summary = 'Yell - Your Extensible Logging Library'
14
+ spec.description = "Yell - Your Extensible Logging Library. Define multiple adapters, various log level combinations or message formatting options like you've never done before"
15
+ spec.homepage = 'https://github.com/rudionrails/yell'
14
16
 
15
- s.files = `git ls-files`.split($\)
16
- s.executables = s.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
- s.test_files = s.files.grep(%r{^(test|spec|features)/})
17
+ spec.metadata['homepage_uri'] = spec.homepage
18
+ spec.metadata['source_code_uri'] = 'https://github.com/rudionrails/yell'
18
19
 
19
- s.require_paths = ["lib"]
20
+ # Specify which files should be added to the gem when it is released.
21
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
22
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
23
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
24
+ end
25
+ spec.bindir = 'exe'
26
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
+ spec.require_paths = ['lib']
20
28
  end
21
-
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: 1.4.0
4
+ version: 2.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rudolf Schmidt
8
8
  autorequire:
9
- bindir: bin
9
+ bindir: exe
10
10
  cert_chain: []
11
- date: 2013-06-20 00:00:00.000000000 Z
11
+ date: 2020-02-16 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
@@ -17,8 +17,9 @@ executables: []
17
17
  extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
- - .gitignore
21
- - .travis.yml
20
+ - ".gitignore"
21
+ - ".ruby-version"
22
+ - ".travis.yml"
22
23
  - Gemfile
23
24
  - LICENSE.txt
24
25
  - README.md
@@ -35,6 +36,7 @@ files:
35
36
  - examples/005.1-repository.rb
36
37
  - examples/006.1-the-loggable-module.rb
37
38
  - examples/006.2-the-loggable-module-with-inheritance.rb
39
+ - lib/core_ext/logger.rb
38
40
  - lib/yell.rb
39
41
  - lib/yell/adapters.rb
40
42
  - lib/yell/adapters/base.rb
@@ -45,7 +47,7 @@ files:
45
47
  - lib/yell/configuration.rb
46
48
  - lib/yell/event.rb
47
49
  - lib/yell/formatter.rb
48
- - lib/yell/helpers/adapters.rb
50
+ - lib/yell/helpers/adapter.rb
49
51
  - lib/yell/helpers/base.rb
50
52
  - lib/yell/helpers/formatter.rb
51
53
  - lib/yell/helpers/level.rb
@@ -57,64 +59,31 @@ files:
57
59
  - lib/yell/repository.rb
58
60
  - lib/yell/silencer.rb
59
61
  - lib/yell/version.rb
60
- - spec/fixtures/yell.yml
61
- - spec/spec_helper.rb
62
- - spec/threaded/yell_spec.rb
63
- - spec/yell/adapters/base_spec.rb
64
- - spec/yell/adapters/datefile_spec.rb
65
- - spec/yell/adapters/file_spec.rb
66
- - spec/yell/adapters/io_spec.rb
67
- - spec/yell/adapters/streams_spec.rb
68
- - spec/yell/adapters_spec.rb
69
- - spec/yell/configuration_spec.rb
70
- - spec/yell/event_spec.rb
71
- - spec/yell/formatter_spec.rb
72
- - spec/yell/level_spec.rb
73
- - spec/yell/loggable_spec.rb
74
- - spec/yell/logger_spec.rb
75
- - spec/yell/repository_spec.rb
76
- - spec/yell/silencer_spec.rb
77
- - spec/yell_spec.rb
78
62
  - yell.gemspec
79
- homepage: http://rudionrails.github.com/yell
80
- licenses: []
81
- metadata: {}
63
+ homepage: https://github.com/rudionrails/yell
64
+ licenses:
65
+ - MIT
66
+ metadata:
67
+ homepage_uri: https://github.com/rudionrails/yell
68
+ source_code_uri: https://github.com/rudionrails/yell
82
69
  post_install_message:
83
70
  rdoc_options: []
84
71
  require_paths:
85
72
  - lib
86
73
  required_ruby_version: !ruby/object:Gem::Requirement
87
74
  requirements:
88
- - - '>='
75
+ - - ">="
89
76
  - !ruby/object:Gem::Version
90
77
  version: '0'
91
78
  required_rubygems_version: !ruby/object:Gem::Requirement
92
79
  requirements:
93
- - - '>='
80
+ - - ">="
94
81
  - !ruby/object:Gem::Version
95
82
  version: '0'
96
83
  requirements: []
97
- rubyforge_project: yell
98
- rubygems_version: 2.0.0
84
+ rubyforge_project:
85
+ rubygems_version: 2.6.11
99
86
  signing_key:
100
87
  specification_version: 4
101
88
  summary: Yell - Your Extensible Logging Library
102
- test_files:
103
- - spec/fixtures/yell.yml
104
- - spec/spec_helper.rb
105
- - spec/threaded/yell_spec.rb
106
- - spec/yell/adapters/base_spec.rb
107
- - spec/yell/adapters/datefile_spec.rb
108
- - spec/yell/adapters/file_spec.rb
109
- - spec/yell/adapters/io_spec.rb
110
- - spec/yell/adapters/streams_spec.rb
111
- - spec/yell/adapters_spec.rb
112
- - spec/yell/configuration_spec.rb
113
- - spec/yell/event_spec.rb
114
- - spec/yell/formatter_spec.rb
115
- - spec/yell/level_spec.rb
116
- - spec/yell/loggable_spec.rb
117
- - spec/yell/logger_spec.rb
118
- - spec/yell/repository_spec.rb
119
- - spec/yell/silencer_spec.rb
120
- - spec/yell_spec.rb
89
+ test_files: []
@@ -1,7 +0,0 @@
1
- test:
2
- :level: info
3
-
4
- :adapters:
5
- - :stdout
6
- - :stderr:
7
- :level: "gte.error"
data/spec/spec_helper.rb DELETED
@@ -1,50 +0,0 @@
1
- $:.unshift File.expand_path('..', __FILE__)
2
- $:.unshift File.expand_path('../../lib', __FILE__)
3
-
4
- ENV['YELL_ENV'] = 'test'
5
-
6
- require 'rspec/core'
7
- require 'rspec/expectations'
8
- require 'rr'
9
- require 'timecop'
10
-
11
- begin
12
- require 'coveralls'
13
-
14
- require 'simplecov'
15
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
16
- SimpleCov::Formatter::HTMLFormatter,
17
- Coveralls::SimpleCov::Formatter
18
- ]
19
-
20
- SimpleCov.start do
21
- add_filter 'spec'
22
- end
23
- rescue LoadError
24
- STDERR.puts "Not running coverage..."
25
- end
26
-
27
- require 'yell'
28
-
29
- RSpec.configure do |config|
30
- config.mock_framework = :rr
31
-
32
- config.before do
33
- Yell::Repository.loggers.clear
34
-
35
- Dir[ fixture_path + "/*.log" ].each { |f| File.delete f }
36
- end
37
-
38
- config.after do
39
- Timecop.return # release time after each test
40
- end
41
-
42
-
43
- private
44
-
45
- def fixture_path
46
- File.expand_path( "fixtures", File.dirname(__FILE__) )
47
- end
48
-
49
- end
50
-
@@ -1,100 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "running Yell multi-threaded" do
4
- let( :threads ) { 100 }
5
- let( :range ) { (1..threads) }
6
-
7
- let( :filename ) { fixture_path + '/threaded.log' }
8
- let( :lines ) { `wc -l #{filename}`.to_i }
9
-
10
- context "one instance" do
11
- before do
12
- logger = Yell.new filename
13
-
14
- range.map do |count|
15
- Thread.new { 10.times { logger.info count } }
16
- end.each(&:join)
17
-
18
- sleep 0.5
19
- end
20
-
21
- it "should write all messages" do
22
- lines.should == 10*threads
23
- end
24
- end
25
-
26
- # context "one instance per thread" do
27
- # before do
28
- # range.map do |count|
29
- # Thread.new do
30
- # logger = Yell.new( filename )
31
-
32
- # 10.times { logger.info count }
33
- # end
34
- # end.each(&:join)
35
-
36
- # sleep 0.5
37
- # end
38
-
39
- # it "should write all messages" do
40
- # lines.should == 10*threads
41
- # end
42
- # end
43
-
44
- context "one instance in the repository" do
45
- before do
46
- Yell[ 'threaded' ] = Yell.new( filename )
47
- end
48
-
49
- it "should write all messages" do
50
- range.map do |count|
51
- Thread.new { 10.times { Yell['threaded'].info count } }
52
- end.each(&:join)
53
-
54
- lines.should == 10*threads
55
- end
56
- end
57
-
58
- context "multiple datefile instances" do
59
- let( :threadlist ) { [] }
60
- let( :date ) { Time.now }
61
-
62
- before do
63
- Timecop.freeze( date - 86400 )
64
-
65
- range.each do |count|
66
- threadlist << Thread.new do
67
- logger = Yell.new :datefile, :filename => filename, :keep => 2
68
- loop { logger.info :info; sleep 0.1 }
69
- end
70
- end
71
-
72
- sleep 0.3 # sleep to get some messages into the file
73
- end
74
-
75
- after do
76
- threadlist.each(&:kill)
77
- end
78
-
79
- it "should safely rollover" do
80
- # now cycle the days
81
- 7.times do |count|
82
- Timecop.freeze( date + 86400*count )
83
- sleep 0.3
84
-
85
- files = Dir[ fixture_path + '/*.*.log' ]
86
- files.size.should == 2
87
-
88
- # files.last.should match( datefile_pattern_for(Time.now) ) # today
89
- # files.first.should match( datefile_pattern_for(Time.now-86400) ) # yesterday
90
- end
91
- end
92
- end
93
-
94
- private
95
-
96
- def datefile_pattern_for( time )
97
- time.strftime(Yell::Adapters::Datefile::DefaultDatePattern)
98
- end
99
- end
100
-
@@ -1,43 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Yell::Adapters::Base do
4
-
5
- context "initialize" do
6
- context ":level" do
7
- let(:level) { Yell::Level.new(:warn) }
8
-
9
- it "should set the level" do
10
- adapter = Yell::Adapters::Base.new(:level => level)
11
-
12
- expect(adapter.level).to eq(level)
13
- end
14
-
15
- it "should set the level when block was given" do
16
- adapter = Yell::Adapters::Base.new { |a| a.level = level }
17
-
18
- expect(adapter.level).to eq(level)
19
- end
20
- end
21
- end
22
-
23
- context "#write" do
24
- let(:logger) { Yell::Logger.new }
25
- subject { Yell::Adapters::Base.new(:level => 1) }
26
-
27
- it "should delegate :event to :write!" do
28
- event = Yell::Event.new(logger, 1, "Hello World!")
29
- mock(subject).write!(event)
30
-
31
- subject.write(event)
32
- end
33
-
34
- it "should not write when event does not have the right level" do
35
- event = Yell::Event.new(logger, 0, "Hello World!")
36
- dont_allow(subject).write!(event)
37
-
38
- subject.write(event)
39
- end
40
- end
41
-
42
- end
43
-
@@ -1,168 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Yell::Adapters::Datefile do
4
- let(:logger) { Yell::Logger.new }
5
- let(:message) { "Hello World" }
6
- let(:event) { Yell::Event.new(logger, 1, message) }
7
-
8
- let(:today) { Time.now }
9
- let(:tomorrow) { Time.now + 86400 }
10
-
11
- let(:filename) { fixture_path + '/test.log' }
12
- let(:today_filename) { fixture_path + "/test.#{today.strftime(Yell::Adapters::Datefile::DefaultDatePattern)}.log" }
13
- let(:tomorrow_filename) { fixture_path + "/test.#{tomorrow.strftime(Yell::Adapters::Datefile::DefaultDatePattern)}.log" }
14
-
15
- let(:adapter) { Yell::Adapters::Datefile.new(:filename => filename, :format => "%m") }
16
-
17
- before do
18
- Timecop.freeze(today)
19
- end
20
-
21
- it { should be_kind_of Yell::Adapters::File }
22
-
23
- describe "#write" do
24
- let(:today_lines) { File.readlines(today_filename) }
25
-
26
- before do
27
- adapter.write(event)
28
- end
29
-
30
- it "should be output to filename with date pattern" do
31
- expect(File.exist?(today_filename)).to be_true
32
-
33
- expect(today_lines.size).to eq(2) # includes header line
34
- expect(today_lines.last).to match(message)
35
- end
36
-
37
- it "should output to the same file" do
38
- adapter.write(event)
39
-
40
- expect(File.exist?(today_filename)).to be_true
41
- expect(today_lines.size).to eq(3) # includes header line
42
- end
43
-
44
- it "should not open file handle again" do
45
- dont_allow(File).open(anything, anything)
46
-
47
- adapter.write(event)
48
- end
49
-
50
- context "on rollover" do
51
- let(:tomorrow_lines) { File.readlines(tomorrow_filename) }
52
-
53
- before do
54
- Timecop.freeze(tomorrow) { adapter.write(event) }
55
- end
56
-
57
- it "should rotate file" do
58
- expect(File.exist?(tomorrow_filename)).to be_true
59
-
60
- expect(tomorrow_lines.size).to eq(2) # includes header line
61
- expect(tomorrow_lines.last).to match(message)
62
- end
63
- end
64
- end
65
-
66
- describe "#keep" do
67
- before do
68
- adapter.symlink = false # to not taint the Dir
69
- adapter.keep = 2
70
-
71
- adapter.write(event)
72
- end
73
-
74
- it "should keep the specified number or files upon rollover" do
75
- expect(Dir[fixture_path + '/*.log'].size).to eq(1)
76
-
77
- Timecop.freeze(tomorrow) { adapter.write(event) }
78
- expect(Dir[fixture_path + '/*.log'].size).to eq(2)
79
-
80
- Timecop.freeze(tomorrow + 86400 ) { adapter.write(event) }
81
- expect(Dir[fixture_path + '/*.log'].size).to eq(2)
82
- end
83
- end
84
-
85
- describe "#symlink" do
86
- context "when true (default)" do
87
- before do
88
- adapter.write(event)
89
- end
90
-
91
- it "should be created on the original filename" do
92
- expect(File.symlink?(filename)).to be_true
93
- expect(File.readlink(filename)).to eq(today_filename)
94
- end
95
-
96
- it "should be recreated upon rollover" do
97
- Timecop.freeze(tomorrow) { adapter.write(event) }
98
-
99
- expect(File.symlink?(filename)).to be_true
100
- expect(File.readlink(filename)).to eq(tomorrow_filename)
101
- end
102
- end
103
-
104
- context "when false" do
105
- before do
106
- adapter.symlink = false
107
- end
108
-
109
- it "should not create the sylink the original filename" do
110
- adapter.write( event )
111
-
112
- expect(File.symlink?(filename)).to be_false
113
- end
114
- end
115
- end
116
-
117
- describe "#header" do
118
- let(:header) { File.open(today_filename, &:readline) }
119
-
120
- context "when true (default)" do
121
- before do
122
- adapter.write(event)
123
- end
124
-
125
- it "should be written" do
126
- expect(header).to match(Yell::Adapters::Datefile::HeaderRegexp)
127
- end
128
-
129
- it "should be rewritten upon rollover" do
130
- Timecop.freeze(tomorrow) { adapter.write(event) }
131
-
132
- expect(File.symlink?(filename)).to be_true
133
- expect(File.readlink(filename)).to eq(tomorrow_filename)
134
- end
135
- end
136
-
137
- context "when false" do
138
- before do
139
- adapter.header = false
140
- end
141
-
142
- it "should not be written" do
143
- adapter.write(event)
144
-
145
- expect(header).to eq("Hello World\n")
146
- end
147
- end
148
- end
149
-
150
- context "another adapter with the same :filename" do
151
- let(:another_adapter) { Yell::Adapters::Datefile.new(:filename => filename) }
152
-
153
- before do
154
- adapter.write(event)
155
- end
156
-
157
- it "should not write the header again" do
158
- another_adapter.write(event)
159
-
160
- # 1: header
161
- # 2: adapter write
162
- # 3: another_adapter: write
163
- expect(File.readlines(today_filename).size).to eq(3)
164
- end
165
- end
166
-
167
- end
168
-
@@ -1,75 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Yell::Adapters::File do
4
- let(:devnull) { File.new('/dev/null', 'w') }
5
-
6
- before do
7
- stub(File).open(anything, anything) { devnull }
8
- end
9
-
10
- it { should be_kind_of(Yell::Adapters::Io) }
11
-
12
- context "#stream" do
13
- subject { Yell::Adapters::File.new.send(:stream) }
14
-
15
- it { should be_kind_of(File) }
16
- end
17
-
18
- context "#write" do
19
- let(:logger) { Yell::Logger.new }
20
- let(:event) { Yell::Event.new(logger, 1, "Hello World") }
21
-
22
- context "default filename" do
23
- let(:filename) { File.expand_path "#{Yell.env}.log" }
24
- let(:adapter) { Yell::Adapters::File.new }
25
-
26
- it "should print to file" do
27
- mock(File).open(filename, File::WRONLY|File::APPEND|File::CREAT) { devnull }
28
-
29
- adapter.write(event)
30
- end
31
- end
32
-
33
- context "with given :filename" do
34
- let(:filename) { fixture_path + '/filename.log' }
35
- let(:adapter) { Yell::Adapters::File.new(:filename => filename) }
36
-
37
- it "should print to file" do
38
- mock(File).open(filename, File::WRONLY|File::APPEND|File::CREAT) { devnull }
39
-
40
- adapter.write(event)
41
- end
42
- end
43
-
44
- context "with given :pathname" do
45
- let(:pathname) { Pathname.new(fixture_path).join('filename.log') }
46
- let(:adapter) { Yell::Adapters::File.new( :filename => pathname ) }
47
-
48
- it "should accept pathanme as filename" do
49
- mock(File).open(pathname.to_s, File::WRONLY|File::APPEND|File::CREAT) { devnull }
50
-
51
- adapter.write(event)
52
- end
53
- end
54
-
55
- context "#sync" do
56
- let(:adapter) { Yell::Adapters::File.new }
57
-
58
- it "should sync by default" do
59
- mock(devnull).sync=(true)
60
-
61
- adapter.write(event)
62
- end
63
-
64
- it "pass the option to File" do
65
- adapter.sync = false
66
-
67
- mock(devnull).sync=(false)
68
-
69
- adapter.write(event)
70
- end
71
- end
72
- end
73
-
74
- end
75
-
@@ -1,72 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Yell::Adapters::Io do
4
-
5
- it { should be_kind_of Yell::Adapters::Base }
6
-
7
- context "initialize" do
8
- it "should set default :format" do
9
- adapter = Yell::Adapters::Io.new
10
-
11
- expect(adapter.format).to be_kind_of(Yell::Formatter)
12
- end
13
-
14
- context ":level" do
15
- let(:level) { Yell::Level.new(:warn) }
16
-
17
- it "should set the level" do
18
- adapter = Yell::Adapters::Io.new(:level => level)
19
-
20
- expect(adapter.level).to eq(level)
21
- end
22
-
23
- it "should set the level when block was given" do
24
- adapter = Yell::Adapters::Io.new { |a| a.level = level }
25
-
26
- expect(adapter.level).to eq(level)
27
- end
28
- end
29
-
30
- context ":format" do
31
- let(:format) { Yell::Formatter.new }
32
-
33
- it "should set the level" do
34
- adapter = Yell::Adapters::Io.new(:format => format)
35
-
36
- expect(adapter.format).to eq(format)
37
- end
38
-
39
- it "should set the level when block was given" do
40
- adapter = Yell::Adapters::Io.new { |a| a.format = format }
41
-
42
- expect(adapter.format).to eq(format)
43
- end
44
- end
45
- end
46
-
47
- context "#write" do
48
- let(:logger) { Yell::Logger.new }
49
- let(:event) { Yell::Event.new(logger, 1, "Hello World") }
50
- let(:adapter) { Yell::Adapters::Io.new }
51
- let(:stream) { File.new('/dev/null', 'w') }
52
-
53
- before do
54
- stub(adapter).stream { stream }
55
- end
56
-
57
- it "should format the message" do
58
- mock.proxy(adapter.format).format( event )
59
-
60
- adapter.write(event)
61
- end
62
-
63
- it "should print formatted message to stream" do
64
- formatted = Yell::Formatter.new.format( event )
65
- mock(stream).syswrite( formatted << "\n" )
66
-
67
- adapter.write(event)
68
- end
69
- end
70
-
71
- end
72
-