flnt 0.1.1 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 11f597c1c684124be6cbbc17b8b2fa388aa68ea6
4
- data.tar.gz: 1f2b8774e99a066dcafd5032b1e0fd2d9447c109
3
+ metadata.gz: b571a4742a35bac7d8b9b94fdd9f764ba19d3f95
4
+ data.tar.gz: 6795af010a0846ef8250a3a27fb64b292cc4baab
5
5
  SHA512:
6
- metadata.gz: 7dd93d150a0e618ca658560ae9b98d13b5c58c345899dfbda1f2d3c590a223850ed613333c00aaf0bbc89c32af27fb520b0b5e1c9596f406d0edc552bcab637e
7
- data.tar.gz: b3d4a5c6cd88a13509e93a8351d6393966cecced7b23016c9ee0b754500ad9baf2c0c796e13564f91b8c0fbecc1da799a6c58443fb1d8d8df8233e639b95add1
6
+ metadata.gz: 04d5b1811f70c88b598ad5690565dff3a259dd741543c885848f7cc91f2f93467bedce0282003ac55a21cb6e0ba73d3f313f434ddd929fef24184f61d49efc0d
7
+ data.tar.gz: f1f7dedc3d305b4a255a72fa53479a2ad70c3d848369b70f79b8a5c3c678757ed5c9573f2188d3bd53b9ecff5e82906a79253343d1b7c47dd2cd4b96f84ef03a
data/flnt.gemspec CHANGED
@@ -24,5 +24,6 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "rake"
25
25
  spec.add_development_dependency "pry"
26
26
 
27
- spec.add_development_dependency "rspec"
27
+ spec.add_development_dependency "rspec", ">= 3.1"
28
+ spec.add_development_dependency "rspec-mocks"
28
29
  end
data/lib/flnt.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require "flnt/version"
2
2
  require "flnt/logger"
3
+ require "flnt/teeable_logger"
3
4
  require "flnt/configuration"
4
5
 
5
6
  module Flnt
@@ -10,7 +11,9 @@ module Flnt
10
11
  (BasicObject.instance_methods + BasicObject.private_instance_methods)).
11
12
  delete_if {|method_name| method_name.to_s =~ /([\-\[\]\/~=+*&|%<>!?])/}.
12
13
  each do |target_method|
13
- if target_method.to_sym != :object_id
14
+
15
+ # Also pass the :singleton_class to avoid rspec stubbing errors
16
+ unless [:singleton_class, :object_id].include?(target_method.to_sym)
14
17
  eval %Q(undef #{target_method})
15
18
  end
16
19
  end
data/lib/flnt/logger.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  require 'fluent/logger'
2
+ require 'logger'
3
+ require 'pathname'
2
4
 
3
5
  module Flnt
4
6
  class Logger < BasicObject
@@ -17,7 +19,36 @@ module Flnt
17
19
  return self
18
20
  end
19
21
 
22
+ # method caching for common log level name
23
+ %w(debug info warn error fatal).each do |log_level|
24
+ define_method log_level do |*args|
25
+ @tag << "." << log_level.to_s
26
+ unless args.empty?
27
+ emit! args.first
28
+ end
29
+
30
+ return self
31
+ end
32
+ end
33
+
20
34
  def emit!(arg)
35
+ ::Fluent::Logger.post @tag, to_info!(arg)
36
+ end
37
+
38
+ def tee!(logger_or_path)
39
+ new_self = TeeableLogger.new(@tag)
40
+ case
41
+ when logger_or_path.respond_to?(:info)
42
+ new_self.teed_logger = logger_or_path
43
+ when [::String, ::Pathname].include?(logger_or_path.class)
44
+ l = ::Logger.new(logger_or_path)
45
+ new_self.teed_logger = l
46
+ end
47
+ new_self
48
+ end
49
+
50
+ private
51
+ def to_info!(arg)
21
52
  info = {}
22
53
  case arg
23
54
  when ::Hash
@@ -31,7 +62,8 @@ module Flnt
31
62
  else
32
63
  info[:info] = arg
33
64
  end
34
- ::Fluent::Logger.post @tag, info
65
+
66
+ info
35
67
  end
36
68
  end
37
69
  end
@@ -0,0 +1,20 @@
1
+ require 'logger'
2
+ require 'flnt/logger'
3
+
4
+ module Flnt
5
+ class TeeableLogger < Flnt::Logger
6
+ attr_accessor :teed_logger
7
+
8
+ def emit!(arg)
9
+ level = __get_last_tag!
10
+ level = 'info' unless %w(debug info warn error fatal).include?(level)
11
+ teed_logger.send(level, arg)
12
+ super
13
+ end
14
+
15
+ private
16
+ def __get_last_tag!
17
+ @tag.split('.').last
18
+ end
19
+ end
20
+ end
data/lib/flnt/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Flnt
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -3,6 +3,7 @@ require "spec_helper"
3
3
  describe "Flnt::Logger" do
4
4
  before do
5
5
  allow(Fluent::Logger::FluentLogger).to receive(:open).with(nil, an_instance_of(Hash))
6
+ .and_return(instance_double("Fluent::Logger::FluentLogger", :post => true))
6
7
  end
7
8
 
8
9
  def tag_of(flnt_logger)
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Flnt::TeeableLogger' do
4
+ before do
5
+ allow(Fluent::Logger::FluentLogger).to receive(:open).with(nil, an_instance_of(Hash))
6
+ .and_return(instance_double("Fluent::Logger::FluentLogger", :post => true))
7
+ end
8
+
9
+ describe '#tee!' do
10
+ let(:flnt) { Flnt.cool_log }
11
+ let(:logger) { Logger.new('/dev/null') }
12
+ let(:new_logger) { flnt.tee!(logger) }
13
+
14
+ it 'should set the teed logger' do
15
+ expect(new_logger.teed_logger).to be(logger)
16
+ end
17
+
18
+ it 'should tee the log to another logger' do
19
+ expect(Fluent::Logger).to receive(:post).with("cool_log.info", {message: "Hello from Hell"})
20
+ expect(logger).to receive(:info).with("Hello from Hell")
21
+
22
+ new_logger.info "Hello from Hell"
23
+ end
24
+
25
+ context 'passed just a path' do
26
+ let(:path) { "/tmp/log-#{$$}.log" }
27
+ let(:new_logger) { flnt.tee!(path) }
28
+
29
+ it 'should create a logger pointing to the path' do
30
+ expect(new_logger.teed_logger).to be_an_instance_of(Logger)
31
+ logdev = new_logger.teed_logger.instance_eval { @logdev }
32
+ expect(logdev.dev.path).to eq path
33
+ end
34
+ end
35
+
36
+ context 'passed just a pathname' do
37
+ let(:path) do
38
+ p = Pathname.new("/tmp/log-#{$$}")
39
+ p.join("app.log")
40
+ p
41
+ end
42
+ let(:new_logger) { flnt.tee!(path) }
43
+
44
+ it 'should create a logger pointing to the path' do
45
+ expect(new_logger.teed_logger).to be_an_instance_of(Logger)
46
+ logdev = new_logger.teed_logger.instance_eval { @logdev }
47
+ expect(logdev.dev.path).to eq path.to_s
48
+ end
49
+ end
50
+ end
51
+
52
+ # FIXME using fakefs to test real log file
53
+ end
@@ -12,30 +12,37 @@ describe "Flnt" do
12
12
  Flnt.init_foo
13
13
  end
14
14
 
15
- it "should initialize fluentd connection just once" do
16
- allow(Flnt).to receive(:initialized?).and_return(true)
17
-
18
- expect(Fluent::Logger::FluentLogger).not_to receive(:open)
19
- expect(Flnt).not_to receive(:Configuration)
20
- Flnt.init_foo
21
- end
22
-
23
- it "should return Flnt::Logger tagged with called method name" do
24
- ret = Flnt.init_foo
25
- expect(ret.instance_eval { @tag }).to eq "init_foo"
26
-
27
- expect { ret.chain_bar }.not_to raise_error
28
- expect { ret.respond_to? }.to raise_error NoMethodError
29
- end
30
-
31
- it "should create a new logger for each call" do
32
- logger1 = Flnt.foo_tag
33
- logger2 = Flnt.foo_tag
34
- expect(logger1.__id__).not_to eq logger2.__id__
35
- end
36
-
37
- it "should create a new logger with custom tag" do
38
- logger = Flnt.tag!("foo.bar.buz")
39
- expect(logger.instance_eval { @tag }).to eq "foo.bar.buz"
15
+ describe 'on connection ok' do
16
+ before do
17
+ allow(Fluent::Logger::FluentLogger).to receive(:open).with(nil, an_instance_of(Hash))
18
+ .and_return(instance_double("Fluent::Logger::FluentLogger", :post => true))
19
+ end
20
+
21
+ it "should initialize fluentd connection just once" do
22
+ allow(Flnt).to receive(:initialized?).and_return(true)
23
+
24
+ expect(Fluent::Logger::FluentLogger).not_to receive(:open)
25
+ expect(Flnt).not_to receive(:Configuration)
26
+ Flnt.init_foo
27
+ end
28
+
29
+ it "should return Flnt::Logger tagged with called method name" do
30
+ ret = Flnt.init_foo
31
+ expect(ret.instance_eval { @tag }).to eq "init_foo"
32
+
33
+ expect { ret.chain_bar }.not_to raise_error
34
+ expect { ret.respond_to? }.to raise_error NoMethodError
35
+ end
36
+
37
+ it "should create a new logger for each call" do
38
+ logger1 = Flnt.foo_tag
39
+ logger2 = Flnt.foo_tag
40
+ expect(logger1.__id__).not_to eq logger2.__id__
41
+ end
42
+
43
+ it "should create a new logger with custom tag" do
44
+ logger = Flnt.tag!("foo.bar.buz")
45
+ expect(logger.instance_eval { @tag }).to eq "foo.bar.buz"
46
+ end
40
47
  end
41
48
  end
data/spec/spec_helper.rb CHANGED
@@ -7,7 +7,6 @@
7
7
  require 'flnt'
8
8
 
9
9
  RSpec.configure do |config|
10
- config.treat_symbols_as_metadata_keys_with_true_values = true
11
10
  config.run_all_when_everything_filtered = true
12
11
  config.filter_run :focus if ENV['FOCUS']
13
12
 
@@ -16,4 +15,10 @@ RSpec.configure do |config|
16
15
  # the seed, which is printed after each run.
17
16
  # --seed 1234
18
17
  config.order = 'random'
18
+
19
+ config.after :each do
20
+ Flnt.instance_eval {
21
+ @initialized = false
22
+ }
23
+ end
19
24
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flnt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Uchio KONDO
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-20 00:00:00.000000000 Z
11
+ date: 2014-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluent-logger
@@ -68,6 +68,20 @@ dependencies:
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '3.1'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '3.1'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec-mocks
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - '>='
@@ -97,9 +111,11 @@ files:
97
111
  - lib/flnt.rb
98
112
  - lib/flnt/configuration.rb
99
113
  - lib/flnt/logger.rb
114
+ - lib/flnt/teeable_logger.rb
100
115
  - lib/flnt/version.rb
101
116
  - spec/lib/flnt/configuration_spec.rb
102
117
  - spec/lib/flnt/logger_spec.rb
118
+ - spec/lib/flnt/teeable_logger_spec.rb
103
119
  - spec/lib/flnt_spec.rb
104
120
  - spec/spec_helper.rb
105
121
  - wercker.yml
@@ -130,5 +146,6 @@ summary: Gentle post-to-fluentd log solution
130
146
  test_files:
131
147
  - spec/lib/flnt/configuration_spec.rb
132
148
  - spec/lib/flnt/logger_spec.rb
149
+ - spec/lib/flnt/teeable_logger_spec.rb
133
150
  - spec/lib/flnt_spec.rb
134
151
  - spec/spec_helper.rb