mutter 0.3.7 → 0.4.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.
- data/README.md +29 -1
- data/VERSION +1 -1
- data/lib/mutter.rb +5 -0
- data/lib/mutter/mutterer.rb +17 -8
- data/lib/mutter/{styles.yml → styles/default.yml} +0 -0
- data/lib/mutter/styles/html.yml +29 -0
- data/lib/mutter/table.rb +78 -0
- data/mutter.gemspec +9 -5
- data/spec/table_spec.rb +21 -0
- metadata +7 -3
data/README.md
CHANGED
@@ -11,7 +11,7 @@ synopsis
|
|
11
11
|
--------
|
12
12
|
|
13
13
|
require 'mutter'
|
14
|
-
|
14
|
+
|
15
15
|
mut = Mutter.new # creates a new 'Mutterer', who talks in command-line language
|
16
16
|
mut.say "hello _world_" # underlines 'world'
|
17
17
|
mut.say "hello world", :bold # bolds the whole string
|
@@ -19,6 +19,34 @@ synopsis
|
|
19
19
|
mut.print "bonjour!" # alias of `say`
|
20
20
|
mut["_hola_"] # return the stylized string without printing
|
21
21
|
|
22
|
+
### Tables
|
23
|
+
|
24
|
+
# Define your table structure, arguments are optional.
|
25
|
+
# Strings which don't fit the column width will be truncated
|
26
|
+
# with '..' by default, you can change that with the :truncater
|
27
|
+
# option.
|
28
|
+
table = Mutter::Table.new(:delimiter => '|') do
|
29
|
+
column :width => 15, :style => :green
|
30
|
+
column :style => :yellow
|
31
|
+
column :width => 15, :align => :right
|
32
|
+
end
|
33
|
+
|
34
|
+
# Add some rows
|
35
|
+
table << ["gaspar", "morello", 1976]
|
36
|
+
table << ["eddie", "vedder", 1964]
|
37
|
+
table << ["david", "bowie", 1947]
|
38
|
+
|
39
|
+
# Print
|
40
|
+
print table.to_s
|
41
|
+
|
42
|
+
If you want something barebones, you can also do
|
43
|
+
|
44
|
+
t = Mutter::Table.new
|
45
|
+
t.rows = (1..10).map {|n| [n, n **2, n **3] }
|
46
|
+
t.print
|
47
|
+
|
48
|
+
And it'll make sure everything is aligned nicely
|
49
|
+
|
22
50
|
styles
|
23
51
|
------
|
24
52
|
mutter supports these styles:
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/lib/mutter.rb
CHANGED
@@ -8,6 +8,7 @@ $:.unshift File.dirname(__FILE__) + '/mutter'
|
|
8
8
|
|
9
9
|
require 'mutterer'
|
10
10
|
require 'indenter'
|
11
|
+
require 'table'
|
11
12
|
require 'ext'
|
12
13
|
|
13
14
|
module Mutter
|
@@ -50,6 +51,10 @@ module Mutter
|
|
50
51
|
new.stylize *args
|
51
52
|
end
|
52
53
|
|
54
|
+
def self.process *args
|
55
|
+
new.process *args
|
56
|
+
end
|
57
|
+
|
53
58
|
def self.new *args
|
54
59
|
Mutterer.new(*args)
|
55
60
|
end
|
data/lib/mutter/mutterer.rb
CHANGED
@@ -9,7 +9,7 @@ module Mutter
|
|
9
9
|
#
|
10
10
|
def initialize obj = {}
|
11
11
|
self.reset
|
12
|
-
@defaults = load
|
12
|
+
@defaults = load 'default'
|
13
13
|
|
14
14
|
case obj
|
15
15
|
when Hash # A style definition: expand quick-styles and merge with @styles
|
@@ -44,12 +44,13 @@ module Mutter
|
|
44
44
|
|
45
45
|
def clear opt = :all
|
46
46
|
case opt
|
47
|
-
when :user
|
48
|
-
when :
|
49
|
-
when :
|
50
|
-
when :
|
51
|
-
when :
|
52
|
-
|
47
|
+
when :user then @styles = {}
|
48
|
+
when :styles then @styles, @defaults = {}, {}
|
49
|
+
when :active then @active = []
|
50
|
+
when :all then @active, @styles, @defaults = [], {}, {}
|
51
|
+
when :default,
|
52
|
+
:defaults then @defaults = {}
|
53
|
+
else raise ArgumentError, "[:user, :default, :active, :all] only"
|
53
54
|
end
|
54
55
|
self
|
55
56
|
end
|
@@ -60,7 +61,8 @@ module Mutter
|
|
60
61
|
# and converts the keys to symbols
|
61
62
|
#
|
62
63
|
def load styles
|
63
|
-
styles += '.yml' unless styles =~ /\.ya?ml
|
64
|
+
styles += '.yml' unless styles =~ /\.ya?ml$/
|
65
|
+
styles = File.join(File.dirname(__FILE__), "styles", styles) unless File.exist? styles
|
64
66
|
YAML.load_file(styles).inject({}) do |h, (key, value)|
|
65
67
|
value = { :match => value['match'], :style => value['style'] }
|
66
68
|
h.merge key.to_sym => value
|
@@ -107,6 +109,13 @@ module Mutter
|
|
107
109
|
end
|
108
110
|
end
|
109
111
|
alias :oo watch
|
112
|
+
|
113
|
+
#
|
114
|
+
# Create a table
|
115
|
+
#
|
116
|
+
def table *args, &blk
|
117
|
+
Table.new(*args, &blk)
|
118
|
+
end
|
110
119
|
|
111
120
|
#
|
112
121
|
# Add and remove styles from the active styles
|
File without changes
|
@@ -0,0 +1,29 @@
|
|
1
|
+
bold:
|
2
|
+
match: ['<b>','</b>']
|
3
|
+
style:
|
4
|
+
- bold
|
5
|
+
|
6
|
+
underline:
|
7
|
+
match: ['<u>','</u>']
|
8
|
+
style:
|
9
|
+
- underline
|
10
|
+
|
11
|
+
inverse:
|
12
|
+
match: ['<i>','</i>']
|
13
|
+
style:
|
14
|
+
- inverse
|
15
|
+
|
16
|
+
error:
|
17
|
+
match: ['<err>','</err>']
|
18
|
+
style:
|
19
|
+
- red
|
20
|
+
|
21
|
+
warning:
|
22
|
+
match: ['<warn>','</warn>']
|
23
|
+
style:
|
24
|
+
- yellow
|
25
|
+
|
26
|
+
ok:
|
27
|
+
match: ['<ok>','</ok>']
|
28
|
+
style:
|
29
|
+
- green
|
data/lib/mutter/table.rb
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
module Mutter
|
2
|
+
class Table
|
3
|
+
attr_accessor :rows, :columns
|
4
|
+
|
5
|
+
DefaultTable = {
|
6
|
+
:delimiter => " ",
|
7
|
+
:truncater => ".."
|
8
|
+
}
|
9
|
+
DefaultColumn = {
|
10
|
+
:align => :left,
|
11
|
+
:style => []
|
12
|
+
}
|
13
|
+
|
14
|
+
def initialize options = {}, &blk
|
15
|
+
@columns, @rows = [], []
|
16
|
+
@options = DefaultTable.merge options
|
17
|
+
instance_eval(&blk) if block_given?
|
18
|
+
end
|
19
|
+
|
20
|
+
def column options = {}
|
21
|
+
@columns << DefaultColumn.merge(options)
|
22
|
+
end
|
23
|
+
|
24
|
+
def << row
|
25
|
+
if row.size > @columns.size
|
26
|
+
raise ArgumentError,
|
27
|
+
"row size is #{row.size} but I only have #{@columns.size} columns"
|
28
|
+
else
|
29
|
+
@rows << row
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def render
|
34
|
+
# Create missing columns as needed
|
35
|
+
(@rows.map {|r| r.size }.max - @columns.size).times do
|
36
|
+
self.column
|
37
|
+
end
|
38
|
+
|
39
|
+
# Compute max column width
|
40
|
+
@columns.each_with_index do |col, i|
|
41
|
+
col[:_width] = @rows.map do |r|
|
42
|
+
r[i].to_s.length
|
43
|
+
end.max if @rows[i]
|
44
|
+
end
|
45
|
+
|
46
|
+
# print table
|
47
|
+
@rows.map do |row|
|
48
|
+
@columns.zip(row).map do |col, cell|
|
49
|
+
process(cell.to_s || "",
|
50
|
+
col[:width] || col[:_width],
|
51
|
+
col[:align],
|
52
|
+
col[:style])
|
53
|
+
end.join @options[:delimiter]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
alias :to_a render
|
57
|
+
|
58
|
+
def to_s
|
59
|
+
render.join("\n")
|
60
|
+
end
|
61
|
+
|
62
|
+
def print
|
63
|
+
puts render
|
64
|
+
end
|
65
|
+
|
66
|
+
def process str, length = nil, align = :left, style = []
|
67
|
+
length ||= str.length
|
68
|
+
|
69
|
+
if str.length > length
|
70
|
+
str[0...(length - @options[:truncater].length)] + @options[:truncater]
|
71
|
+
else
|
72
|
+
s = [Mutter.process(str, style), ' ' * (length - str.length)]
|
73
|
+
s.reverse! if align == :right
|
74
|
+
s.join
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
data/mutter.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mutter}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["cloudhead"]
|
12
|
-
s.date = %q{2009-10-
|
12
|
+
s.date = %q{2009-10-15}
|
13
13
|
s.description = %q{the tiny CLI library}
|
14
14
|
s.email = %q{self@cloudhead.net}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -27,11 +27,14 @@ Gem::Specification.new do |s|
|
|
27
27
|
"lib/mutter.rb",
|
28
28
|
"lib/mutter/indenter.rb",
|
29
29
|
"lib/mutter/mutterer.rb",
|
30
|
-
"lib/mutter/styles.yml",
|
30
|
+
"lib/mutter/styles/default.yml",
|
31
|
+
"lib/mutter/styles/html.yml",
|
32
|
+
"lib/mutter/table.rb",
|
31
33
|
"mutter.gemspec",
|
32
34
|
"spec/mutter_spec.rb",
|
33
35
|
"spec/spec_helper.rb",
|
34
|
-
"spec/style.yml"
|
36
|
+
"spec/style.yml",
|
37
|
+
"spec/table_spec.rb"
|
35
38
|
]
|
36
39
|
s.homepage = %q{http://github.com/cloudhead/mutter}
|
37
40
|
s.rdoc_options = ["--charset=UTF-8"]
|
@@ -41,7 +44,8 @@ Gem::Specification.new do |s|
|
|
41
44
|
s.summary = %q{the tiny CLI library}
|
42
45
|
s.test_files = [
|
43
46
|
"spec/mutter_spec.rb",
|
44
|
-
"spec/spec_helper.rb"
|
47
|
+
"spec/spec_helper.rb",
|
48
|
+
"spec/table_spec.rb"
|
45
49
|
]
|
46
50
|
|
47
51
|
if s.respond_to? :specification_version then
|
data/spec/table_spec.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec/spec_helper'
|
2
|
+
|
3
|
+
describe Mutter::Table do
|
4
|
+
it "should render tables defined with a block" do
|
5
|
+
table = Mutter::Table.new(:delimiter => '|') do
|
6
|
+
column :width => 8
|
7
|
+
column :align => :right
|
8
|
+
column
|
9
|
+
end
|
10
|
+
|
11
|
+
table << ["hello", "moto", "malacif"]
|
12
|
+
table << ["misha", "fafa", "fio"]
|
13
|
+
table << ["lombardic", "fister", "falalala"]
|
14
|
+
|
15
|
+
table.to_a.should == [
|
16
|
+
"hello | moto|malacif ",
|
17
|
+
"misha | fafa|fio ",
|
18
|
+
"lombar..|fister|falalala"
|
19
|
+
]
|
20
|
+
end
|
21
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mutter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- cloudhead
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-10-
|
12
|
+
date: 2009-10-15 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -33,11 +33,14 @@ files:
|
|
33
33
|
- lib/mutter.rb
|
34
34
|
- lib/mutter/indenter.rb
|
35
35
|
- lib/mutter/mutterer.rb
|
36
|
-
- lib/mutter/styles.yml
|
36
|
+
- lib/mutter/styles/default.yml
|
37
|
+
- lib/mutter/styles/html.yml
|
38
|
+
- lib/mutter/table.rb
|
37
39
|
- mutter.gemspec
|
38
40
|
- spec/mutter_spec.rb
|
39
41
|
- spec/spec_helper.rb
|
40
42
|
- spec/style.yml
|
43
|
+
- spec/table_spec.rb
|
41
44
|
has_rdoc: true
|
42
45
|
homepage: http://github.com/cloudhead/mutter
|
43
46
|
licenses: []
|
@@ -69,3 +72,4 @@ summary: the tiny CLI library
|
|
69
72
|
test_files:
|
70
73
|
- spec/mutter_spec.rb
|
71
74
|
- spec/spec_helper.rb
|
75
|
+
- spec/table_spec.rb
|