mutter 0.3.3 → 0.3.6
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/Rakefile +1 -26
- data/VERSION +1 -1
- data/lib/mutter/mutterer.rb +24 -17
- data/mutter.gemspec +5 -2
- data/spec/mutter_spec.rb +31 -18
- metadata +2 -2
data/Rakefile
CHANGED
@@ -13,36 +13,11 @@ begin
|
|
13
13
|
gem.authors = ["cloudhead"]
|
14
14
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
15
15
|
end
|
16
|
-
|
16
|
+
Jeweler::RubyforgeTasks.new
|
17
17
|
rescue LoadError
|
18
18
|
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
19
19
|
end
|
20
20
|
|
21
|
-
# rubyforge
|
22
|
-
begin
|
23
|
-
require 'rake/contrib/sshpublisher'
|
24
|
-
namespace :rubyforge do
|
25
|
-
desc "Release gem and RDoc documentation to RubyForge"
|
26
|
-
task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
|
27
|
-
|
28
|
-
namespace :release do
|
29
|
-
desc "Publish RDoc to RubyForge."
|
30
|
-
task :docs => [:rdoc] do
|
31
|
-
config = YAML.load(
|
32
|
-
File.read(File.expand_path('~/.rubyforge/user-config.yml'))
|
33
|
-
)
|
34
|
-
host = "#{config['username']}@rubyforge.org"
|
35
|
-
remote_dir = "/var/www/gforge-projects/the-perfect-gem/"
|
36
|
-
local_dir = 'rdoc'
|
37
|
-
|
38
|
-
Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
rescue LoadError
|
43
|
-
puts "Rake SshDirPublisher is unavailable or your rubyforge environment is not configured."
|
44
|
-
end
|
45
|
-
|
46
21
|
require 'rake/testtask'
|
47
22
|
Rake::TestTask.new(:test) do |test|
|
48
23
|
test.libs << 'lib' << 'test'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.6
|
data/lib/mutter/mutterer.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
module Mutter
|
2
2
|
class Mutterer
|
3
|
-
attr_accessor :styles
|
4
|
-
|
5
3
|
@stream = STDOUT
|
6
4
|
|
7
5
|
# Initialize the styles, and load the defaults from +styles.yml+
|
@@ -11,28 +9,27 @@ module Mutter
|
|
11
9
|
#
|
12
10
|
def initialize obj = {}
|
13
11
|
self.reset
|
14
|
-
load File.dirname(__FILE__) + "/styles"
|
12
|
+
@defaults = load File.dirname(__FILE__) + "/styles"
|
15
13
|
|
16
14
|
case obj
|
17
15
|
when Hash # A style definition: expand quick-styles and merge with @styles
|
18
|
-
|
16
|
+
@styles = obj.inject({}) do |h, (k, v)|
|
19
17
|
h.merge k =>
|
20
18
|
(v.is_a?(Hash) ? v : { :match => v, :style => [k].flatten })
|
21
19
|
end
|
22
|
-
@styles.merge! obj
|
23
20
|
when Array # An array of styles to be activated
|
24
21
|
@active = obj
|
25
22
|
when Symbol # A single style to be activated
|
26
|
-
self
|
23
|
+
self << obj
|
27
24
|
when String # The path of a yaml style-sheet
|
28
|
-
load obj
|
25
|
+
@styles = load obj
|
29
26
|
else raise ArgumentError
|
30
27
|
end
|
31
28
|
|
32
29
|
#
|
33
30
|
# Create an instance method for each style
|
34
31
|
#
|
35
|
-
|
32
|
+
self.styles.keys.each do |style|
|
36
33
|
(class << self; self end).class_eval do
|
37
34
|
define_method style do |msg|
|
38
35
|
say msg, style
|
@@ -41,8 +38,19 @@ module Mutter
|
|
41
38
|
end
|
42
39
|
end
|
43
40
|
|
44
|
-
def
|
45
|
-
@
|
41
|
+
def styles
|
42
|
+
@defaults.merge @styles
|
43
|
+
end
|
44
|
+
|
45
|
+
def clear opt = :all
|
46
|
+
case opt
|
47
|
+
when :user then @styles = {}
|
48
|
+
when :default then @defaults = {}
|
49
|
+
when :styles then @styles, @defaults = {}, {}
|
50
|
+
when :active then @active = []
|
51
|
+
when :all then @active, @styles, @defaults = [], {}, {}
|
52
|
+
else raise ArgumentError, "[:user, :default, :active, :all] only"
|
53
|
+
end
|
46
54
|
self
|
47
55
|
end
|
48
56
|
alias :reset clear
|
@@ -53,11 +61,10 @@ module Mutter
|
|
53
61
|
#
|
54
62
|
def load styles
|
55
63
|
styles += '.yml' unless styles =~ /\.ya?ml/
|
56
|
-
|
64
|
+
YAML.load_file(styles).inject({}) do |h, (key, value)|
|
57
65
|
value = { :match => value['match'], :style => value['style'] }
|
58
66
|
h.merge key.to_sym => value
|
59
67
|
end
|
60
|
-
@styles.merge! @defaults
|
61
68
|
end
|
62
69
|
|
63
70
|
#
|
@@ -128,13 +135,13 @@ module Mutter
|
|
128
135
|
# the matches are sent to +stylize+
|
129
136
|
#
|
130
137
|
def parse string
|
131
|
-
|
132
|
-
glyph,
|
138
|
+
self.styles.inject(string) do |str, (name, options)|
|
139
|
+
glyph, style = options[:match], options[:style]
|
133
140
|
if glyph.is_a? Array
|
134
|
-
str.gsub(/#{Regexp.escape(glyph.first)}(
|
135
|
-
#{Regexp.escape(glyph.last)}/x) { stylize $1,
|
141
|
+
str.gsub(/#{Regexp.escape(glyph.first)}(.*?)
|
142
|
+
#{Regexp.escape(glyph.last)}/x) { stylize $1, style }
|
136
143
|
else
|
137
|
-
str.gsub(/(#{Regexp.escape(glyph)}+)(
|
144
|
+
str.gsub(/(#{Regexp.escape(glyph)}+)(.*?)\1/) { stylize $2, style }
|
138
145
|
end
|
139
146
|
end
|
140
147
|
end
|
data/mutter.gemspec
CHANGED
@@ -1,12 +1,15 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
|
1
4
|
# -*- encoding: utf-8 -*-
|
2
5
|
|
3
6
|
Gem::Specification.new do |s|
|
4
7
|
s.name = %q{mutter}
|
5
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.6"
|
6
9
|
|
7
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
11
|
s.authors = ["cloudhead"]
|
9
|
-
s.date = %q{2009-
|
12
|
+
s.date = %q{2009-10-06}
|
10
13
|
s.description = %q{the tiny CLI library}
|
11
14
|
s.email = %q{self@cloudhead.net}
|
12
15
|
s.extra_rdoc_files = [
|
data/spec/mutter_spec.rb
CHANGED
@@ -43,17 +43,17 @@ describe Mutter do
|
|
43
43
|
out.should == "\e[1mhello * world\e[22m\n"
|
44
44
|
end
|
45
45
|
|
46
|
-
it "should set
|
46
|
+
it "should set actives at the instance level" do
|
47
47
|
Mutter.new([:bold, :underline]).say "hello mutter!"
|
48
48
|
out.should == "\e[4m\e[1mhello mutter!\e[22m\e[24m\n"
|
49
49
|
end
|
50
50
|
|
51
|
-
it "should set
|
51
|
+
it "should set actives at the method level" do
|
52
52
|
Mutter.say "hello mutter!", :bold, :underline
|
53
53
|
out.should == "\e[4m\e[1mhello mutter!\e[22m\e[24m\n"
|
54
54
|
end
|
55
55
|
|
56
|
-
it "should set
|
56
|
+
it "should set actives at both levels" do
|
57
57
|
Mutter.new(:bold).say "hello mutter!", :underline, :yellow
|
58
58
|
out.should == "\e[33m\e[4m\e[1mhello mutter!\e[22m\e[24m\e[39m\n"
|
59
59
|
end
|
@@ -69,17 +69,24 @@ describe Mutter do
|
|
69
69
|
Mutter.new(style).say "alert!", :alert
|
70
70
|
out.should == "\e[31m\e[1malert!\e[22m\e[39m\n"
|
71
71
|
end
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
72
|
+
|
73
|
+
describe "in shorthand form" do
|
74
|
+
it "should work with simple shorthand styles" do
|
75
|
+
Mutter.new({:bold => '~'}).say "~hello mutter!~"
|
76
|
+
out.should == "\e[1mhello mutter!\e[22m\n"
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should work with complex shorthand styles" do
|
80
|
+
Mutter.new({:cyan => ['<', '>']}).say "<hello mutter!>"
|
81
|
+
out.should == "\e[36mhello mutter!\e[39m\n"
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should work with multiple shorthand styles" do
|
85
|
+
Mutter.new({[:cyan, :underline] => '~'}).say "~hello mutter!~"
|
86
|
+
out.should == "\e[4m\e[36mhello mutter!\e[39m\e[24m\n"
|
87
|
+
end
|
81
88
|
end
|
82
|
-
|
89
|
+
|
83
90
|
it "should mix styles" do
|
84
91
|
Mutter.new({:cyan => '~'}).say "_*hello* ~world~_"
|
85
92
|
out.should == "\e[4m\e[1mhello\e[22m \e[36mworld\e[39m\e[24m\n"
|
@@ -89,11 +96,6 @@ describe Mutter do
|
|
89
96
|
Mutter.new({:cyan => '~'}).say "~[hello mutter!]~"
|
90
97
|
out.should == "\e[36m\e[7mhello mutter!\e[27m\e[39m\n"
|
91
98
|
end
|
92
|
-
|
93
|
-
it "should work with multiple shorthand styles" do
|
94
|
-
Mutter.new({[:cyan, :underline] => '~'}).say "~hello mutter!~"
|
95
|
-
out.should == "\e[4m\e[36mhello mutter!\e[39m\e[24m\n"
|
96
|
-
end
|
97
99
|
|
98
100
|
it "should load styles from a yaml" do
|
99
101
|
Mutter.new("spec/style").say "{important message!}"
|
@@ -105,6 +107,17 @@ describe Mutter do
|
|
105
107
|
out.should == "\e[33m\e[4m\e[1mimportant message!\e[22m\e[24m\e[39m\n"
|
106
108
|
end
|
107
109
|
|
110
|
+
it "should clear all styles" do
|
111
|
+
Mutter.new.clear(:all).say "[hello] *world*"
|
112
|
+
out.should == "[hello] *world*\n"
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should clear active styles" do
|
116
|
+
mut = Mutter.new(:bold)
|
117
|
+
mut.clear(:active).say "hello"
|
118
|
+
out.should == "hello\n"
|
119
|
+
end
|
120
|
+
|
108
121
|
it "should add and remove active styles" do
|
109
122
|
mut = Mutter.new
|
110
123
|
mut << :bold << :underline << :inverse
|
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.3.
|
4
|
+
version: 0.3.6
|
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-
|
12
|
+
date: 2009-10-06 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|