discoball 0.0.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.
- data/README.md +20 -0
- data/bin/discoball +6 -0
- data/discoball.gemspec +24 -0
- data/lib/discoball.rb +32 -0
- metadata +81 -0
data/README.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
discoball
|
2
|
+
=========
|
3
|
+
|
4
|
+
`discoball` is a tool to filter streams and colorize patterns. It functions somewhat like `egrep --color`,
|
5
|
+
except that it can highlight multiple patterns (in different colors). Patterns are arbitrary ruby regexes that
|
6
|
+
are matched against the entire line.
|
7
|
+
|
8
|
+
Usage:
|
9
|
+
|
10
|
+
$ discoball [options] <pattern1 pattern2 ...>
|
11
|
+
|
12
|
+
Examples:
|
13
|
+
|
14
|
+
* Highlight instances of "foo" and "bar" in the text of `myfile.txt`:
|
15
|
+
|
16
|
+
$ cat myfile.txt | discoball foo bar
|
17
|
+
|
18
|
+
* Highlight paths of processes running out of `/usr/sbin/`:
|
19
|
+
|
20
|
+
$ ps -ef | discoball '/usr/sbin/.*$'
|
data/bin/discoball
ADDED
data/discoball.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "discoball"
|
3
|
+
s.version = "0.0.1"
|
4
|
+
|
5
|
+
s.required_rubygems_version = Gem::Requirement.new(">=0") if s.respond_to? :required_rubygems_version=
|
6
|
+
s.specification_version = 2 if s.respond_to? :specification_version=
|
7
|
+
|
8
|
+
s.author = "Caleb Spare"
|
9
|
+
s.email = "cespare@gmail.com"
|
10
|
+
|
11
|
+
s.description = "A simple stream filter to highlight patterns"
|
12
|
+
s.summary = "A simple stream filter to highlight patterns"
|
13
|
+
s.homepage = "http://github.com/cespare/discoball"
|
14
|
+
s.rubyforge_project = "discoball"
|
15
|
+
|
16
|
+
s.executables = %w(discoball)
|
17
|
+
s.files = %w(
|
18
|
+
README.md
|
19
|
+
discoball.gemspec
|
20
|
+
lib/discoball.rb
|
21
|
+
bin/discoball
|
22
|
+
)
|
23
|
+
s.add_dependency("colorize", ">=0.5.8")
|
24
|
+
end
|
data/lib/discoball.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "colorize"
|
4
|
+
|
5
|
+
module Discoball
|
6
|
+
UNUSABLE_COLORS = [/black$/, /^default$/, /white$/, /^light/]
|
7
|
+
|
8
|
+
class Highlighter
|
9
|
+
def initialize(patterns)
|
10
|
+
@patterns = patterns
|
11
|
+
@color_stack = String.colors.reject { |color| UNUSABLE_COLORS.any? { |unusable| color =~ unusable } }
|
12
|
+
@color_assignments = {}
|
13
|
+
end
|
14
|
+
|
15
|
+
def filter(line)
|
16
|
+
matches = @patterns.flat_map { |pattern| line.scan(pattern) }.uniq
|
17
|
+
matches.each { |match| line.gsub!(match, highlight(match)) }
|
18
|
+
line
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def highlight(match)
|
24
|
+
unless @color_assignments.include? match
|
25
|
+
color = @color_stack.pop
|
26
|
+
@color_stack.insert(0, color)
|
27
|
+
@color_assignments[match] = color
|
28
|
+
end
|
29
|
+
match.colorize(@color_assignments[match]).underline
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: discoball
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Caleb Spare
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2011-05-10 00:00:00 -07:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: colorize
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
- 5
|
31
|
+
- 8
|
32
|
+
version: 0.5.8
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
description: A simple stream filter to highlight patterns
|
36
|
+
email: cespare@gmail.com
|
37
|
+
executables:
|
38
|
+
- discoball
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files: []
|
42
|
+
|
43
|
+
files:
|
44
|
+
- README.md
|
45
|
+
- discoball.gemspec
|
46
|
+
- lib/discoball.rb
|
47
|
+
- bin/discoball
|
48
|
+
has_rdoc: true
|
49
|
+
homepage: http://github.com/cespare/discoball
|
50
|
+
licenses: []
|
51
|
+
|
52
|
+
post_install_message:
|
53
|
+
rdoc_options: []
|
54
|
+
|
55
|
+
require_paths:
|
56
|
+
- lib
|
57
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
segments:
|
63
|
+
- 0
|
64
|
+
version: "0"
|
65
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
segments:
|
71
|
+
- 0
|
72
|
+
version: "0"
|
73
|
+
requirements: []
|
74
|
+
|
75
|
+
rubyforge_project: discoball
|
76
|
+
rubygems_version: 1.3.7
|
77
|
+
signing_key:
|
78
|
+
specification_version: 2
|
79
|
+
summary: A simple stream filter to highlight patterns
|
80
|
+
test_files: []
|
81
|
+
|