logsaber 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.circleci/config.yml +21 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/README.markdown +5 -6
- data/lib/logsaber/entry.rb +13 -11
- data/lib/logsaber/formatter.rb +6 -1
- data/lib/logsaber/log.rb +9 -3
- data/lib/logsaber/options.rb +3 -1
- data/lib/logsaber/simple_color.rb +1 -1
- data/lib/logsaber/version.rb +1 -1
- data/logsaber.gemspec +5 -5
- data/spec/log_feature_spec.rb +13 -0
- data/spec/log_spec.rb +36 -0
- data/spec/spec_helper.rb +0 -16
- metadata +18 -20
- data/.rvmrc +0 -1
- data/.travis.yml +0 -11
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 1fb9c4ba5b8572cf1343d8f6c78c4ca41cb31361ba7ab028b00e85cd728285cc
|
4
|
+
data.tar.gz: 71a9a4c4ba811a381a13ae6377491c0d0473c94496582ecbf7b19ba725543ecc
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3f37e4f231970523cf0b24f49c148442148ca08e6a20c61794b95054caf6b7f2fe36b6978113f50c0f2520d39fc0089e44f108f339e3d67c618660088feb1184
|
7
|
+
data.tar.gz: e280a3df89f1f3c4a477edd634d19b8c3052b931fa2500e0da32e769cc0d5467bb85580c0fbca5855ab63dd0d3d29a5f53a8baa8a61f8e42828bee66d50404a4
|
@@ -0,0 +1,21 @@
|
|
1
|
+
version: 2.1
|
2
|
+
orbs:
|
3
|
+
ruby: circleci/ruby@0.1.2
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
build:
|
7
|
+
docker:
|
8
|
+
- image: circleci/ruby:2.6.3-stretch-node
|
9
|
+
executor: ruby/default
|
10
|
+
steps:
|
11
|
+
- checkout
|
12
|
+
- run:
|
13
|
+
name: Which bundler?
|
14
|
+
command: bundle -v
|
15
|
+
- ruby/bundle-install
|
16
|
+
test:
|
17
|
+
executor: ruby/default
|
18
|
+
steps:
|
19
|
+
- run:
|
20
|
+
name: Uspec tests
|
21
|
+
command: uspec
|
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
logsaber
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-3.1.2
|
data/README.markdown
CHANGED
@@ -3,12 +3,11 @@ Logsaber
|
|
3
3
|
|
4
4
|
A logger for a more civilized age.
|
5
5
|
|
6
|
-
|
7
|
-
- Release version README: http://rubydoc.info/gems/logsaber/file/README.markdown
|
6
|
+
Reference documentation for the [Latest Released](http://rubydoc.info/gems/logsaber/file/README.markdown) and [Edge Version](https://github.com/acook/logsaber#readme) is available.
|
8
7
|
|
9
|
-
[![
|
10
|
-
[![
|
11
|
-
[![
|
8
|
+
[![Gem Version](https://img.shields.io/gem/v/logsaber.svg?style=for-the-badge)](https://rubygems.org/gems/logsaber/)
|
9
|
+
[![CircleCI](https://img.shields.io/circleci/build/github/acook/logsaber?style=for-the-badge&token=de887bd244ab55306432fef45b8307ef4c18075c)](https://app.circleci.com/pipelines/github/acook/logsaber)
|
10
|
+
[![Code Climate](https://img.shields.io/codeclimate/maintainability/acook/logsaber?style=for-the-badge)](https://codeclimate.com/github/acook/logsaber)
|
12
11
|
|
13
12
|
Philosophy / Why Logsaber?
|
14
13
|
--------------------------
|
@@ -193,4 +192,4 @@ Contributing
|
|
193
192
|
Author
|
194
193
|
======
|
195
194
|
|
196
|
-
Anthony M. Cook 2013
|
195
|
+
Anthony M. Cook 2013-2021
|
data/lib/logsaber/entry.rb
CHANGED
@@ -2,16 +2,22 @@ module Logsaber
|
|
2
2
|
class Entry
|
3
3
|
def self.create all_details, &block
|
4
4
|
all_details << block.call if block
|
5
|
-
new all_details.
|
5
|
+
new all_details.shift, Array(all_details)
|
6
6
|
end
|
7
7
|
|
8
|
-
def initialize
|
9
|
-
@
|
8
|
+
def initialize primary, secondary
|
9
|
+
@primary, @secondary = primary, secondary
|
10
10
|
end
|
11
|
-
attr :
|
11
|
+
attr :primary, :secondary
|
12
12
|
|
13
13
|
def parse
|
14
|
-
|
14
|
+
{
|
15
|
+
label: label,
|
16
|
+
info: info,
|
17
|
+
primary: primary,
|
18
|
+
secondary: secondary,
|
19
|
+
object: value
|
20
|
+
}
|
15
21
|
end
|
16
22
|
|
17
23
|
protected
|
@@ -20,10 +26,6 @@ module Logsaber
|
|
20
26
|
secondary.last || primary
|
21
27
|
end
|
22
28
|
|
23
|
-
def text
|
24
|
-
"#{label} : #{info}"
|
25
|
-
end
|
26
|
-
|
27
29
|
def label
|
28
30
|
if !secondary.empty? then
|
29
31
|
view primary
|
@@ -36,14 +38,14 @@ module Logsaber
|
|
36
38
|
|
37
39
|
def info
|
38
40
|
if secondary.empty? then
|
39
|
-
view primary
|
41
|
+
Array view primary
|
40
42
|
else
|
41
43
|
details
|
42
44
|
end
|
43
45
|
end
|
44
46
|
|
45
47
|
def details
|
46
|
-
secondary.map{|item| analyze item }
|
48
|
+
secondary.map{|item| analyze item }
|
47
49
|
end
|
48
50
|
|
49
51
|
def view object
|
data/lib/logsaber/formatter.rb
CHANGED
@@ -17,6 +17,7 @@ module Logsaber
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def color!
|
20
|
+
require 'logsaber/simple_color'
|
20
21
|
@color = SimpleColor.new
|
21
22
|
end
|
22
23
|
|
@@ -36,7 +37,11 @@ module Logsaber
|
|
36
37
|
end
|
37
38
|
|
38
39
|
def layout severity, contents
|
39
|
-
%(#{timestamp} [#{severity_info severity}] #{process_info} | #{contents})
|
40
|
+
%(#{timestamp} [#{severity_info severity}] #{process_info} | #{view contents})
|
41
|
+
end
|
42
|
+
|
43
|
+
def view contents
|
44
|
+
"#{contents[:label]} : #{contents[:info].join ' | '}"
|
40
45
|
end
|
41
46
|
|
42
47
|
def timestamp
|
data/lib/logsaber/log.rb
CHANGED
@@ -17,7 +17,7 @@ module Logsaber
|
|
17
17
|
SEVERITY_LEVELS ||= [:debug, :info, :warn, :error, :fatal, :off]
|
18
18
|
|
19
19
|
def initialize output, level, appname, formatter
|
20
|
-
|
20
|
+
self.output = output
|
21
21
|
@level = level.to_sym
|
22
22
|
@appname = appname
|
23
23
|
@formatter = formatter.set_log self
|
@@ -39,6 +39,10 @@ module Logsaber
|
|
39
39
|
END_OF_METHOD
|
40
40
|
end
|
41
41
|
|
42
|
+
def output= new_output
|
43
|
+
@output = [new_output].flatten.map {|io| outputize(io) }
|
44
|
+
end
|
45
|
+
|
42
46
|
protected
|
43
47
|
|
44
48
|
def log severity, *details, &block
|
@@ -50,8 +54,10 @@ module Logsaber
|
|
50
54
|
end
|
51
55
|
|
52
56
|
def out text
|
53
|
-
output.
|
54
|
-
|
57
|
+
output.each do |io|
|
58
|
+
io.puts text
|
59
|
+
io.flush
|
60
|
+
end
|
55
61
|
end
|
56
62
|
|
57
63
|
def format *args
|
data/lib/logsaber/options.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
1
3
|
module Logsaber
|
2
|
-
class Options < OpenStruct
|
4
|
+
class Options < ::OpenStruct
|
3
5
|
def self.extract_from args, defaults = {}, primary = nil
|
4
6
|
options = args.last.is_a?(Hash) ? args.pop : Hash.new
|
5
7
|
options[primary] = args.shift if primary && args.first
|
data/lib/logsaber/version.rb
CHANGED
data/logsaber.gemspec
CHANGED
@@ -4,18 +4,18 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'logsaber/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
|
-
gem.name =
|
7
|
+
gem.name = 'logsaber'
|
8
8
|
gem.version = Logsaber::VERSION
|
9
|
-
gem.authors = [
|
10
|
-
gem.email = [
|
9
|
+
gem.authors = ['Anthony Cook']
|
10
|
+
gem.email = ['anthonymichaelcook@gmail.com']
|
11
11
|
gem.description = %q{A logger for a more civilized age. Intelligent logs for your applications.}
|
12
12
|
gem.summary = %q{A logger for a more civilized age.}
|
13
|
-
gem.homepage =
|
13
|
+
gem.homepage = 'http://github.com/acook/logsaber'
|
14
14
|
|
15
15
|
gem.files = `git ls-files`.split($/)
|
16
16
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
-
gem.require_paths = [
|
18
|
+
gem.require_paths = ['lib']
|
19
19
|
|
20
20
|
gem.add_development_dependency 'uspec'
|
21
21
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require_relative 'spec_helper'
|
2
|
+
|
3
|
+
spec 'does stuff' do
|
4
|
+
stringio = StringIO.new
|
5
|
+
log = Logsaber.create stringio
|
6
|
+
|
7
|
+
log.info 5
|
8
|
+
expecting = /20\d\d-\d\d-\d\d \d\d:\d\d:\d\d.\d\d\d \[ INFO\] #{Process.pid} \| OBJ : 5\n/
|
9
|
+
actual = stringio.tap(&:rewind).read
|
10
|
+
match = expecting.match actual
|
11
|
+
|
12
|
+
!!match || actual
|
13
|
+
end
|
data/spec/log_spec.rb
CHANGED
@@ -1,5 +1,21 @@
|
|
1
1
|
require_relative 'spec_helper'
|
2
2
|
|
3
|
+
def self.capture
|
4
|
+
readme, writeme = IO.pipe
|
5
|
+
pid = fork do
|
6
|
+
$stdout.reopen writeme
|
7
|
+
readme.close
|
8
|
+
|
9
|
+
yield
|
10
|
+
end
|
11
|
+
|
12
|
+
writeme.close
|
13
|
+
output = readme.read
|
14
|
+
Process.waitpid(pid)
|
15
|
+
|
16
|
+
output
|
17
|
+
end
|
18
|
+
|
3
19
|
test_string = 'foo'
|
4
20
|
|
5
21
|
spec 'will output to a file, given a filename' do
|
@@ -149,3 +165,23 @@ spec 'Log#log allows many items' do
|
|
149
165
|
@log.info :foo, '1', '2', '3'
|
150
166
|
@output.string.include? format('foo', '1 | 2 | 3')
|
151
167
|
end
|
168
|
+
|
169
|
+
spec 'Log.create can take an array of outputs' do
|
170
|
+
Logsaber::Log.create output: [StringIO.new, StringIO.new]
|
171
|
+
true
|
172
|
+
end
|
173
|
+
|
174
|
+
spec 'Logging goes to every output' do
|
175
|
+
s1 = StringIO.new
|
176
|
+
s2 = StringIO.new
|
177
|
+
|
178
|
+
text = 'What we display??'
|
179
|
+
|
180
|
+
@log = Logsaber::Log.create output: [s1, s2]
|
181
|
+
|
182
|
+
@log.error text
|
183
|
+
|
184
|
+
s1.string.include?(text) && s2.string.include?(text) || s2.string
|
185
|
+
end
|
186
|
+
|
187
|
+
|
data/spec/spec_helper.rb
CHANGED
@@ -9,19 +9,3 @@ Dir.chdir File.dirname(__FILE__)
|
|
9
9
|
require_relative '../lib/logsaber'
|
10
10
|
|
11
11
|
extend Uspec
|
12
|
-
|
13
|
-
def self.capture
|
14
|
-
readme, writeme = IO.pipe
|
15
|
-
pid = fork do
|
16
|
-
$stdout.reopen writeme
|
17
|
-
readme.close
|
18
|
-
|
19
|
-
yield
|
20
|
-
end
|
21
|
-
|
22
|
-
writeme.close
|
23
|
-
output = readme.read
|
24
|
-
Process.waitpid(pid)
|
25
|
-
|
26
|
-
output
|
27
|
-
end
|
metadata
CHANGED
@@ -1,30 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logsaber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Anthony Cook
|
9
|
-
autorequire:
|
8
|
+
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2023-02-20 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: uspec
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
description: A logger for a more civilized age. Intelligent logs for your applications.
|
@@ -34,9 +31,10 @@ executables: []
|
|
34
31
|
extensions: []
|
35
32
|
extra_rdoc_files: []
|
36
33
|
files:
|
37
|
-
- .
|
38
|
-
- .
|
39
|
-
- .
|
34
|
+
- ".circleci/config.yml"
|
35
|
+
- ".gitignore"
|
36
|
+
- ".ruby-gemset"
|
37
|
+
- ".ruby-version"
|
40
38
|
- Gemfile
|
41
39
|
- LICENSE.txt
|
42
40
|
- README.markdown
|
@@ -49,32 +47,32 @@ files:
|
|
49
47
|
- lib/logsaber/simple_color.rb
|
50
48
|
- lib/logsaber/version.rb
|
51
49
|
- logsaber.gemspec
|
50
|
+
- spec/log_feature_spec.rb
|
52
51
|
- spec/log_spec.rb
|
53
52
|
- spec/spec_helper.rb
|
54
53
|
homepage: http://github.com/acook/logsaber
|
55
54
|
licenses: []
|
56
|
-
|
55
|
+
metadata: {}
|
56
|
+
post_install_message:
|
57
57
|
rdoc_options: []
|
58
58
|
require_paths:
|
59
59
|
- lib
|
60
60
|
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
-
none: false
|
62
61
|
requirements:
|
63
|
-
- -
|
62
|
+
- - ">="
|
64
63
|
- !ruby/object:Gem::Version
|
65
64
|
version: '0'
|
66
65
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
-
none: false
|
68
66
|
requirements:
|
69
|
-
- -
|
67
|
+
- - ">="
|
70
68
|
- !ruby/object:Gem::Version
|
71
69
|
version: '0'
|
72
70
|
requirements: []
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
specification_version: 3
|
71
|
+
rubygems_version: 3.3.7
|
72
|
+
signing_key:
|
73
|
+
specification_version: 4
|
77
74
|
summary: A logger for a more civilized age.
|
78
75
|
test_files:
|
76
|
+
- spec/log_feature_spec.rb
|
79
77
|
- spec/log_spec.rb
|
80
78
|
- spec/spec_helper.rb
|
data/.rvmrc
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
rvm --create ruby-1.9.3-p385@logsaber
|