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
@@ -1,263 +0,0 @@
1
- require 'spec_helper'
2
-
3
- class LoggerFactory
4
- attr_accessor :logger
5
-
6
- def foo
7
- logger.info :foo
8
- end
9
-
10
- def bar
11
- logger.info :bar
12
- end
13
- end
14
-
15
- describe Yell::Logger do
16
- let(:filename) { fixture_path + '/logger.log' }
17
-
18
- describe "a Logger instance" do
19
- let(:logger) { Yell::Logger.new }
20
- subject { logger }
21
-
22
- its(:name) { should be_nil }
23
-
24
- context "log methods" do
25
- it { should respond_to(:debug) }
26
- it { should respond_to(:debug?) }
27
-
28
- it { should respond_to(:info) }
29
- it { should respond_to(:info?) }
30
-
31
- it { should respond_to(:warn) }
32
- it { should respond_to(:warn?) }
33
-
34
- it { should respond_to(:error) }
35
- it { should respond_to(:error?) }
36
-
37
- it { should respond_to(:fatal) }
38
- it { should respond_to(:fatal?) }
39
-
40
- it { should respond_to(:unknown) }
41
- it { should respond_to(:unknown?) }
42
- end
43
-
44
- context "default #adapters" do
45
- subject { logger.adapters }
46
-
47
- its(:size) { should eq(1) }
48
- its(:first) { should be_kind_of(Yell::Adapters::File) }
49
- end
50
-
51
- context "default #level" do
52
- subject { logger.level }
53
-
54
- it { should be_instance_of(Yell::Level) }
55
- its(:severities) { should eq([true, true, true, true, true, true]) }
56
- end
57
-
58
- context "default #trace" do
59
- subject { logger.trace }
60
-
61
- it { should be_instance_of(Yell::Level) }
62
- its(:severities) { should eq([false, false, false, true, true, true]) } # from error onwards
63
- end
64
- end
65
-
66
- describe "initialize with #name" do
67
- let(:name) { 'test' }
68
- let!(:logger) { Yell.new(:name => name) }
69
-
70
- it "should be added to the repository" do
71
- expect(Yell::Repository[name]).to eq(logger)
72
- end
73
- end
74
-
75
- context "initialize with #level" do
76
- let(:level) { :error }
77
- let(:logger) { Yell.new(:level => level) }
78
- subject { logger.level }
79
-
80
- it { should be_instance_of(Yell::Level) }
81
- its(:severities) { should eq([false, false, false, true, true, true]) }
82
- end
83
-
84
- context "initialize with #trace" do
85
- let(:trace) { :info }
86
- let(:logger) { Yell.new(:trace => trace) }
87
- subject { logger.trace }
88
-
89
- it { should be_instance_of(Yell::Level) }
90
- its(:severities) { should eq([false, true, true, true, true, true]) }
91
- end
92
-
93
- context "initialize with #silence" do
94
- let(:silence) { "test" }
95
- let(:logger) { Yell.new(:silence => silence) }
96
- subject { logger.silencer }
97
-
98
- it { should be_instance_of(Yell::Silencer) }
99
- its(:patterns) { should eq([silence]) }
100
- end
101
-
102
- context "initialize with a #filename" do
103
- it "should call adapter with :file" do
104
- mock.proxy(Yell::Adapters::File).new(:filename => filename)
105
-
106
- Yell::Logger.new(filename)
107
- end
108
- end
109
-
110
- context "initialize with a #filename of Pathname type" do
111
- let(:pathname) { Pathname.new(filename) }
112
-
113
- it "should call adapter with :file" do
114
- mock.proxy(Yell::Adapters::File).new(:filename => pathname)
115
-
116
- Yell::Logger.new(pathname)
117
- end
118
- end
119
-
120
- context "initialize with a :stdout adapter" do
121
- before { mock.proxy(Yell::Adapters::Stdout).new(anything) }
122
-
123
- it "should call adapter with STDOUT" do
124
- Yell::Logger.new(STDOUT)
125
- end
126
-
127
- it "should call adapter with :stdout" do
128
- Yell::Logger.new(:stdout)
129
- end
130
- end
131
-
132
- context "initialize with a :stderr adapter" do
133
- before { mock.proxy(Yell::Adapters::Stderr).new(anything) }
134
-
135
- it "should call adapter with STDERR" do
136
- Yell::Logger.new(STDERR)
137
- end
138
-
139
- it "should call adapter with :stderr" do
140
- Yell::Logger.new(:stderr)
141
- end
142
- end
143
-
144
- context "initialize with a block" do
145
- let(:level) { Yell::Level.new :error }
146
- let(:stdout) { Yell::Adapters::Stdout.new }
147
- let(:adapters) { loggr.instance_variable_get(:@adapters) }
148
-
149
- context "with arity" do
150
- subject do
151
- Yell::Logger.new(:level => level) { |l| l.adapter(:stdout) }
152
- end
153
-
154
- its(:level) { should eq(level) }
155
- its('adapters.size') { should eq(1) }
156
- its('adapters.first') { should be_instance_of(Yell::Adapters::Stdout) }
157
- end
158
-
159
- context "without arity" do
160
- subject do
161
- Yell::Logger.new(:level => level) { adapter(:stdout) }
162
- end
163
-
164
- its(:level) { should eq(level) }
165
- its('adapters.size') { should eq(1) }
166
- its('adapters.first') { should be_instance_of(Yell::Adapters::Stdout) }
167
- end
168
- end
169
-
170
- context "initialize with #adapters option" do
171
- let(:logger) do
172
- Yell::Logger.new(:adapters => [:stdout, {:stderr => {:level => :error}}])
173
- end
174
-
175
- let(:adapters) { logger.instance_variable_get(:@adapters) }
176
- let(:stdout) { adapters.first }
177
- let(:stderr) { adapters.last }
178
-
179
- it "should define those adapters" do
180
- expect(adapters.size).to eq(2)
181
-
182
- expect(stdout).to be_kind_of(Yell::Adapters::Stdout)
183
- expect(stderr).to be_kind_of(Yell::Adapters::Stderr)
184
- end
185
-
186
- it "should pass :level to :stderr adapter" do
187
- expect(stderr.level.at?(:warn)).to be_false
188
- expect(stderr.level.at?(:error)).to be_true
189
- expect(stderr.level.at?(:fatal)).to be_true
190
- end
191
- end
192
-
193
- context "caller's :file, :line and :method" do
194
- let(:stdout) { Yell::Adapters::Stdout.new(:format => "%F, %n: %M") }
195
- let(:logger) { Yell::Logger.new(:trace => true) { |l| l.adapter(stdout) } }
196
-
197
- it "should write correctly" do
198
- factory = LoggerFactory.new
199
- factory.logger = logger
200
-
201
- mock(stdout.send(:stream)).syswrite("#{__FILE__}, 7: foo\n")
202
- mock(stdout.send(:stream)).syswrite("#{__FILE__}, 11: bar\n")
203
-
204
- factory.foo
205
- factory.bar
206
- end
207
- end
208
-
209
- context "logging in general" do
210
- let(:logger) { Yell::Logger.new(filename, :format => "%m") }
211
- let(:line) { File.open(filename, &:readline) }
212
-
213
- it "should output a single message" do
214
- logger.info "Hello World"
215
-
216
- expect(line).to eq("Hello World\n")
217
- end
218
-
219
- it "should output multiple messages" do
220
- logger.info "Hello", "W", "o", "r", "l", "d"
221
-
222
- expect(line).to eq("Hello W o r l d\n")
223
- end
224
-
225
- it "should output a hash and message" do
226
- logger.info "Hello World", :test => :message
227
-
228
- expect(line).to eq("Hello World test: message\n")
229
- end
230
-
231
- it "should output a hash and message" do
232
- logger.info( {:test => :message}, "Hello World" )
233
-
234
- expect(line).to eq("test: message Hello World\n")
235
- end
236
-
237
- it "should output a hash and block" do
238
- logger.info(:test => :message) { "Hello World" }
239
-
240
- expect(line).to eq("test: message Hello World\n")
241
- end
242
- end
243
-
244
- context "logging with a silencer" do
245
- let(:silence) { "this" }
246
- let(:stdout) { Yell::Adapters::Stdout.new }
247
- let(:logger) { Yell::Logger.new(stdout, :silence => silence) }
248
-
249
- it "should not pass a matching message to any adapter" do
250
- dont_allow(stdout).write
251
-
252
- logger.info "this should not be logged"
253
- end
254
-
255
- it "should pass a non-matching message to any adapter" do
256
- mock(stdout).write(is_a(Yell::Event))
257
-
258
- logger.info "that should be logged"
259
- end
260
- end
261
-
262
- end
263
-
@@ -1,70 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Yell::Repository do
4
- let(:name) { 'test' }
5
- let(:logger) { Yell.new(:stdout) }
6
-
7
- subject { Yell::Repository[name] }
8
-
9
- context ".[]" do
10
- it "should raise when not set" do
11
- expect { subject }.to raise_error(Yell::LoggerNotFound)
12
- end
13
-
14
- context "when logger with :name exists" do
15
- let!(:logger) { Yell.new(:stdout, :name => name) }
16
-
17
- it { should eq(logger) }
18
- end
19
-
20
- context "given a Class" do
21
- let!(:logger) { Yell.new(:stdout, :name => "Numeric") }
22
-
23
- it "should raise with the correct :name when logger not found" do
24
- mock.proxy(Yell::LoggerNotFound).new(String)
25
- lambda { Yell::Repository[String] }.should raise_error(Yell::LoggerNotFound)
26
- end
27
-
28
- it "should return the logger" do
29
- Yell::Repository[Numeric].should eq(logger)
30
- end
31
-
32
- it "should return the logger when superclass has it defined" do
33
- Yell::Repository[Integer].should eq(logger)
34
- end
35
- end
36
- end
37
-
38
- context ".[]=" do
39
- before { Yell::Repository[name] = logger }
40
- it { should eq(logger) }
41
- end
42
-
43
- context ".[]= with a named logger" do
44
- let!(:logger) { Yell.new(:stdout, :name => name) }
45
- before { Yell::Repository[name] = logger }
46
-
47
- it { should eq(logger) }
48
- end
49
-
50
- context ".[]= with a named logger of a different name" do
51
- let(:other) { 'other' }
52
- let(:logger) { Yell.new(:stdout, :name => other) }
53
- before { Yell::Repository[name] = logger }
54
-
55
- it "should add logger to both repositories" do
56
- Yell::Repository[name].should eq(logger)
57
- Yell::Repository[other].should eq(logger)
58
- end
59
- end
60
-
61
- context "loggers" do
62
- let(:loggers) { { name => logger } }
63
- subject { Yell::Repository.loggers }
64
- before { Yell::Repository[name] = logger }
65
-
66
- it { should eq(loggers) }
67
- end
68
-
69
- end
70
-
@@ -1,49 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Yell::Silencer do
4
-
5
- context "initialize with #patterns" do
6
- subject { Yell::Silencer.new(/this/) }
7
-
8
- its(:patterns) { should eq([/this/]) }
9
- end
10
-
11
- context "#add" do
12
- let(:silencer) { Yell::Silencer.new }
13
-
14
- it "should add patterns" do
15
- silencer.add /this/, /that/
16
-
17
- expect(silencer.patterns).to eq([/this/, /that/])
18
- end
19
-
20
- it "should ignore duplicate patterns" do
21
- silencer.add /this/, /that/, /this/
22
-
23
- expect(silencer.patterns).to eq([/this/, /that/])
24
- end
25
- end
26
-
27
- context "#silence?" do
28
- let(:silencer) { Yell::Silencer.new }
29
-
30
- it "should be false when no patterns present" do
31
- expect(silencer.silence?).to be_false
32
- end
33
-
34
- it "should be true when patterns present" do
35
- silencer.add /this/
36
-
37
- expect(silencer.silence?).to be_true
38
- end
39
- end
40
-
41
- context "#silence" do
42
- let(:silencer) { Yell::Silencer.new(/this/) }
43
-
44
- it "should reject messages that match any pattern" do
45
- expect(silencer.silence("this", "that")).to eq(["that"])
46
- end
47
- end
48
-
49
- end
data/spec/yell_spec.rb DELETED
@@ -1,102 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Yell do
4
- let( :logger ) { Yell.new }
5
-
6
- subject { logger }
7
-
8
- it { should be_kind_of Yell::Logger }
9
-
10
- it "should raise AdapterNotFound when adapter cant be loaded" do
11
- expect {
12
- Yell.new :unknownadapter
13
- }.to raise_error(Yell::AdapterNotFound)
14
- end
15
-
16
- context ".level" do
17
- subject { Yell.level }
18
- it { should be_kind_of Yell::Level }
19
- end
20
-
21
- context ".format" do
22
- subject { Yell.format( "%m" ) }
23
- it { should be_kind_of Yell::Formatter }
24
- end
25
-
26
- context ".load!" do
27
- subject { Yell.load!( 'yell.yml' ) }
28
-
29
- before do
30
- mock(Yell::Configuration).load!('yell.yml') { {} }
31
- end
32
-
33
- it { should be_kind_of Yell::Logger }
34
- end
35
-
36
- context ".[]" do
37
- let(:name) { 'test' }
38
-
39
- it "should delegate to the repository" do
40
- mock(Yell::Repository)[name]
41
-
42
- Yell[name]
43
- end
44
- end
45
-
46
- context ".[]=" do
47
- let(:name) { 'test' }
48
-
49
- it "should delegate to the repository" do
50
- mock.proxy(Yell::Repository)[name] = logger
51
-
52
- Yell[name] = logger
53
- end
54
- end
55
-
56
- context ".env" do
57
- subject { Yell.env }
58
-
59
- it "should default to YELL_ENV" do
60
- subject.should == 'test'
61
- end
62
-
63
- context "fallback to RACK_ENV" do
64
- before do
65
- stub(ENV).key?('YELL_ENV') { false }
66
- mock(ENV).key?('RACK_ENV') { true }
67
-
68
- ENV['RACK_ENV'] = 'rack'
69
- end
70
-
71
- after { ENV.delete 'RACK_ENV' }
72
-
73
- it { should == 'rack' }
74
- end
75
-
76
- context "fallback to RAILS_ENV" do
77
- before do
78
- stub(ENV).key?('YELL_ENV') { false }
79
- stub(ENV).key?('RACK_ENV') { false }
80
- mock(ENV).key?('RAILS_ENV') { true }
81
-
82
- ENV['RAILS_ENV'] = 'rails'
83
- end
84
-
85
- after { ENV.delete 'RAILS_ENV' }
86
-
87
- it { should == 'rails' }
88
- end
89
-
90
- context "fallback to development" do
91
- before do
92
- stub(ENV).key?('YELL_ENV') { false }
93
- stub(ENV).key?('RACK_ENV') { false }
94
- stub(ENV).key?('RAILS_ENV') { false }
95
- end
96
-
97
- it { should == 'development' }
98
- end
99
- end
100
-
101
- end
102
-