rumbrl 0.2.0 → 0.2.1
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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +1 -1
- data/lib/rumbrl/grumble.rb +21 -0
- data/lib/rumbrl/log.rb +5 -1
- data/lib/rumbrl/smash.rb +23 -0
- data/lib/rumbrl/version.rb +1 -1
- data/lib/rumbrl.rb +2 -0
- data/spec/rumbrl/grumble_spec.rb +44 -0
- data/spec/rumbrl/smash_spec.rb +26 -0
- metadata +7 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 42416cc7739466e12403fea5b1ee7b01cfaad5be
|
4
|
+
data.tar.gz: 65e5d4448dad98dc236c8b0a8cfb55b731ca7311
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b095ec959d537604908b41ce6838f8b3832179b5a761ba7033e5e202ac613f7d3f6d55061bdd4dab88e0039ce5a467547d7b1b4108e8c69d40622f932de3e6e
|
7
|
+
data.tar.gz: f6c40a1ae5910fce413f4a8a3c07c7bb2e8549212ceb4fa01fde04d3444e65465998dd4302e10c88d2dfab559efdfdbe893ce3b24f5b6db3c171ed7d961cc233
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -2,7 +2,7 @@ rumbrl
|
|
2
2
|
======
|
3
3
|
|
4
4
|
[](http://badge.fury.io/rb/rumbrl)
|
5
|
-
[](https://gemnasium.com/behance/rumbrl)
|
6
6
|
[](https://codeclimate.com/github/behance/rumbrl)
|
7
7
|
|
8
8
|
**R**eally d**UMB** **R**uby **L**ogger
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rumbrl/log'
|
2
|
+
|
3
|
+
module Rumbrl
|
4
|
+
# Behance specific logger
|
5
|
+
class Grumble < Log
|
6
|
+
BASE_DATA_FORMAT = "CHANNEL='%s' MESSAGE='%s'"
|
7
|
+
BASE_LOG_FORMAT = "[%datetime%] LEVEL='%severity%' %message%"
|
8
|
+
|
9
|
+
def initialize(path, age, size)
|
10
|
+
super path, age, size, BASE_DATA_FORMAT, BASE_LOG_FORMAT
|
11
|
+
self.datetime_format = '%F %T'
|
12
|
+
end
|
13
|
+
|
14
|
+
def method_missing(name, channel, message, **args)
|
15
|
+
format = BASE_LOG_FORMAT
|
16
|
+
args.each { |k, v| format += " #{k.upcase}='#{v.gsub("'", '"')}'" }
|
17
|
+
setup_format(format)
|
18
|
+
super(*[name, channel, message])
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/rumbrl/log.rb
CHANGED
@@ -23,7 +23,7 @@ module Rumbrl
|
|
23
23
|
def initialize(path, age, size, data_format, log_format = nil)
|
24
24
|
@logger = ::Logger.new(log_file(path), shift_age: age, shift_size: size)
|
25
25
|
@data_format = data_format
|
26
|
-
|
26
|
+
setup_format(log_format) if log_format
|
27
27
|
end
|
28
28
|
|
29
29
|
def method_missing(name, *args)
|
@@ -32,6 +32,10 @@ module Rumbrl
|
|
32
32
|
write(args, level: name)
|
33
33
|
end
|
34
34
|
|
35
|
+
def setup_format(format)
|
36
|
+
@logger.formatter = log_formatter(format)
|
37
|
+
end
|
38
|
+
|
35
39
|
private
|
36
40
|
|
37
41
|
def log_file(path)
|
data/lib/rumbrl/smash.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module Rumbrl
|
2
|
+
# serializes & flattens hashes
|
3
|
+
class Smash
|
4
|
+
def self.face(namespace: '', **target)
|
5
|
+
res = {}
|
6
|
+
# flattens a hash
|
7
|
+
target.each do |k, v|
|
8
|
+
cur_nspace = build_namespace(namespace, k)
|
9
|
+
if v.is_a? Hash
|
10
|
+
res.update face(**v, namespace: cur_nspace)
|
11
|
+
next
|
12
|
+
end
|
13
|
+
res[cur_nspace.to_sym] = v
|
14
|
+
end
|
15
|
+
res
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.build_namespace(prev = '', cur = '')
|
19
|
+
prev = "#{prev}_" unless prev.empty?
|
20
|
+
"#{prev}#{cur}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/rumbrl/version.rb
CHANGED
data/lib/rumbrl.rb
CHANGED
@@ -0,0 +1,44 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe Rumbrl::Grumble do
|
4
|
+
let(:log) { Rumbrl::Grumble.new 'path/to/log', 'weekly', 123 }
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
allow_any_instance_of(Logger::LogDevice).to receive(:write)
|
8
|
+
|
9
|
+
# TODO: make this...less hacky
|
10
|
+
allow(::File).to receive(:open).and_return(STDOUT)
|
11
|
+
end
|
12
|
+
|
13
|
+
describe 'delegates' do
|
14
|
+
it { expect(log).to delegate_method(:log).to(:logger) }
|
15
|
+
it { expect(log).to delegate_method(:debug?).to(:logger) }
|
16
|
+
it { expect(log).to delegate_method(:error?).to(:logger) }
|
17
|
+
it { expect(log).to delegate_method(:fatal?).to(:logger) }
|
18
|
+
it { expect(log).to delegate_method(:info?).to(:logger) }
|
19
|
+
it do
|
20
|
+
expect(log).to delegate_method(:datetime_format=)
|
21
|
+
.with_arguments('').to(:logger)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#method_missing' do
|
26
|
+
context 'unknown method is called' do
|
27
|
+
it 'fails on unknown method call' do
|
28
|
+
expect { log.this_is_a_missing_method 'channel', 'sadtimes', {} }
|
29
|
+
.to raise_error(NoMethodError)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'method is known' do
|
34
|
+
it 'logs correctly' do
|
35
|
+
log = Rumbrl::Grumble.new('path/to/log', 'weekly', 123)
|
36
|
+
|
37
|
+
line = /\[.*\] LEVEL='INFO' CHANNEL='channel' MESSAGE='msg' FOO='bar'\n/
|
38
|
+
expect_any_instance_of(Logger::LogDevice).to receive(:write).with(line)
|
39
|
+
|
40
|
+
log.info('channel', 'msg', foo: 'bar')
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe Rumbrl::Smash do
|
4
|
+
describe '.face' do
|
5
|
+
it 'does not change flat hash' do
|
6
|
+
target = { bar: 'foo' }
|
7
|
+
expect(Rumbrl::Smash.face(target)).to eql target
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'flattens nested hashes with namespaced keys' do
|
11
|
+
target = { bar: 'foo', baz: { wee: 'boo' } }
|
12
|
+
flattened = { bar: 'foo', baz_wee: 'boo' }
|
13
|
+
expect(Rumbrl::Smash.face(target)).to eql flattened
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '.build_namespace' do
|
18
|
+
it 'works' do
|
19
|
+
expect(Rumbrl::Smash.build_namespace('foo', 'bar')).to eql 'foo_bar'
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'does not prepend when previous namespace is empty' do
|
23
|
+
expect(Rumbrl::Smash.build_namespace('', 'bar')).to eql 'bar'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rumbrl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- chr0n1x
|
@@ -97,11 +97,15 @@ files:
|
|
97
97
|
- lib/rumbrl.rb
|
98
98
|
- lib/rumbrl/env.rb
|
99
99
|
- lib/rumbrl/factory.rb
|
100
|
+
- lib/rumbrl/grumble.rb
|
100
101
|
- lib/rumbrl/log.rb
|
102
|
+
- lib/rumbrl/smash.rb
|
101
103
|
- lib/rumbrl/version.rb
|
102
104
|
- rumbrl.gemspec
|
103
105
|
- spec/rumbrl/factory_spec.rb
|
106
|
+
- spec/rumbrl/grumble_spec.rb
|
104
107
|
- spec/rumbrl/log_spec.rb
|
108
|
+
- spec/rumbrl/smash_spec.rb
|
105
109
|
- spec/spec_helper.rb
|
106
110
|
homepage: ''
|
107
111
|
licenses:
|
@@ -129,5 +133,7 @@ specification_version: 4
|
|
129
133
|
summary: ''
|
130
134
|
test_files:
|
131
135
|
- spec/rumbrl/factory_spec.rb
|
136
|
+
- spec/rumbrl/grumble_spec.rb
|
132
137
|
- spec/rumbrl/log_spec.rb
|
138
|
+
- spec/rumbrl/smash_spec.rb
|
133
139
|
- spec/spec_helper.rb
|