mutter 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,6 @@
1
+ *.sw?
2
+ .DS_Store
3
+ coverage
4
+ rdoc
5
+ pkg
6
+ .document
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 cloudhead
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,98 @@
1
+ mutter
2
+ ======
3
+
4
+ $ my words come out,
5
+ in color and
6
+ style
7
+
8
+ > mutter takes the concepts of **separation of style & content** to the command-line!
9
+
10
+ synopsis
11
+ --------
12
+
13
+ require 'mutter'
14
+
15
+ mut = Mutter.new # creates a new 'Mutterer', who talks in command-line language
16
+ mut.say "hello _world_" # underlines 'world'
17
+ mut.say "hello world", :bold # bolds the whole string
18
+ mut.say "hello [world]", :cyan # inverts 'world', and colors the string cyan
19
+ mut.print "bonjour!" # alias of `say`
20
+ mut["_hola_"] # return the stylized string without printing
21
+
22
+ styles
23
+ ------
24
+ mutter supports these styles:
25
+
26
+ :bold, :underline, :inverse, :blink
27
+
28
+ and these colors:
29
+
30
+ :red, :green, :blue, :yellow, :cyan, :purple, :white, :black
31
+
32
+ customization
33
+ -------------
34
+
35
+ styles = {
36
+ :warning => { # an alias you can use anywhere in mutter
37
+ :match => ['*!', '!*'], # will match *!mutter!*
38
+ :style => ['yellow', 'bold'] # these styles will be applied to the match
39
+ },
40
+ :error => {
41
+ :match => '!!', # will match !!mutter!!
42
+ :style => ['red', 'underline']
43
+ }
44
+ }
45
+
46
+ mut = Mutter.new(styles)
47
+ mut.say "warning, the dogs have escaped!", :warning # These two are
48
+ mut.warning "warning, the dogs have escaped!" # equivalent
49
+ mut.say "gosh, we have an !!error!!"
50
+
51
+ ### YAML
52
+
53
+ The previous example could have (and should really have) been written in a separate .yml file, like so:
54
+
55
+ warning:
56
+ match:
57
+ - '*!'
58
+ - '!*
59
+ style:
60
+ - yellow
61
+ - bold
62
+
63
+ error:
64
+ match: '!!'
65
+ style:
66
+ - red
67
+ - underline
68
+
69
+ and then loaded like this:
70
+
71
+ Mutter.new("styles.yml")
72
+
73
+ ### quick styles
74
+
75
+ mut = Mutter.new :yellow => '~'
76
+ mut.say "~[black on yellow!]~"
77
+
78
+ ### add/remove styles from an instance
79
+
80
+ mut = Mutter.new(:blink)
81
+ mut >> :blink # remove :blink
82
+ mut << :bold << :underline # add :bold and :underline
83
+ mut.say "hello mutter." # bold and underlined
84
+
85
+ installation
86
+ ------------
87
+
88
+ $ sudo gem install cloudhead-mutter
89
+
90
+ That's it!
91
+ ----------
92
+
93
+ _have fun_
94
+
95
+ Footnote
96
+ --------
97
+
98
+ This code is _highly experimental_, don't try this at home!
data/Rakefile ADDED
@@ -0,0 +1,100 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "mutter"
8
+ gem.summary = %Q{the tiny CLI library}
9
+ gem.email = "self@cloudhead.net"
10
+ gem.homepage = "http://github.com/cloudhead/mutter"
11
+ gem.rubyforge_project = 'mutter'
12
+ gem.authors = ["cloudhead"]
13
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
14
+ end
15
+
16
+ rescue LoadError
17
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
18
+ end
19
+
20
+ # rubyforge
21
+ begin
22
+ require 'rake/contrib/sshpublisher'
23
+ namespace :rubyforge do
24
+ desc "Release gem and RDoc documentation to RubyForge"
25
+ task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
26
+
27
+ namespace :release do
28
+ desc "Publish RDoc to RubyForge."
29
+ task :docs => [:rdoc] do
30
+ config = YAML.load(
31
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
32
+ )
33
+ options << '--line-numbers' << '--inline-source'
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
+ require 'rake/testtask'
47
+ Rake::TestTask.new(:test) do |test|
48
+ test.libs << 'lib' << 'test'
49
+ test.pattern = 'test/**/*_test.rb'
50
+ test.verbose = true
51
+ end
52
+
53
+ begin
54
+ require 'rcov/rcovtask'
55
+ Rcov::RcovTask.new do |test|
56
+ test.libs << 'test'
57
+ test.pattern = 'test/**/*_test.rb'
58
+ test.verbose = true
59
+ end
60
+ rescue LoadError
61
+ task :rcov do
62
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
63
+ end
64
+ end
65
+
66
+
67
+ task :default => :test
68
+
69
+ require 'rake/rdoctask'
70
+ Rake::RDocTask.new do |rdoc|
71
+ if File.exist?('VERSION.yml')
72
+ config = YAML.load(File.read('VERSION.yml'))
73
+ version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
74
+ else
75
+ version = ""
76
+ end
77
+
78
+ rdoc.rdoc_dir = 'rdoc'
79
+ rdoc.title = "mutter #{version}"
80
+ rdoc.rdoc_files.include('README*')
81
+ rdoc.rdoc_files.include('lib/**/*.rb')
82
+ end
83
+
84
+ require 'spec/rake/spectask'
85
+
86
+ Spec::Rake::SpecTask.new("spec") do |t|
87
+ t.spec_files = FileList['spec/**/*_spec.rb']
88
+ t.spec_opts = ['--color', '--format=specdoc']
89
+ end
90
+
91
+ task :test do
92
+ Rake::Task['spec'].invoke
93
+ end
94
+
95
+ Spec::Rake::SpecTask.new("rcov_spec") do |t|
96
+ t.spec_files = FileList['spec/**/*_spec.rb']
97
+ t.spec_opts = ['--color']
98
+ t.rcov = true
99
+ t.rcov_opts = ['--exclude', '^spec,/gems/']
100
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.3.2
data/lib/ext.rb ADDED
@@ -0,0 +1,36 @@
1
+ require 'mutter'
2
+
3
+ class String
4
+ def examine depth = 0
5
+ inspect
6
+ end
7
+ end
8
+
9
+ class Array
10
+ def examine depth = 0
11
+ end
12
+ end
13
+
14
+ class Hash
15
+ def examine depth = 0
16
+ end
17
+ end
18
+
19
+ class Symbol
20
+ def examine depth = 0
21
+ Mutter.stylize inspect, :purple
22
+ end
23
+ end
24
+
25
+ class Numeric
26
+ def examine depth = 0
27
+ Mutter.stylize inspect, :cyan
28
+ end
29
+ end
30
+
31
+ class Object
32
+ def tap
33
+ yield self
34
+ self
35
+ end
36
+ end
@@ -0,0 +1,11 @@
1
+ module Mutter
2
+ class Indenter
3
+ def initialize tab = 2
4
+ @tab = tab
5
+ end
6
+
7
+ def [] n, obj = nil
8
+ ' ' * (n * @tab)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,179 @@
1
+ module Mutter
2
+ class Mutterer
3
+ attr_accessor :styles
4
+
5
+ @stream = STDOUT
6
+
7
+ # Initialize the styles, and load the defaults from +styles.yml+
8
+ #
9
+ # @active: currently active styles, which apply to the whole string
10
+ # @styles: contains all the user + default styles
11
+ #
12
+ def initialize obj = {}
13
+ @active, @styles = [], {}
14
+ load File.dirname(__FILE__) + "/styles"
15
+
16
+ case obj
17
+ when Hash # A style definition: expand quick-styles and merge with @styles
18
+ obj = obj.inject({}) do |h, (k, v)|
19
+ h.merge k =>
20
+ (v.is_a?(Hash) ? v : { :match => v, :style => [k].flatten })
21
+ end
22
+ @styles.merge! obj
23
+ when Array # An array of styles to be activated
24
+ @active = obj
25
+ when Symbol # A single style to be activated
26
+ self.<< obj
27
+ when String # The path of a yaml style-sheet
28
+ load obj
29
+ else raise ArgumentError
30
+ end
31
+
32
+ #
33
+ # Create an instance method for each style
34
+ #
35
+ @styles.keys.each do |style|
36
+ (class << self; self end).class_eval do
37
+ define_method style do |msg|
38
+ say msg, style
39
+ end
40
+ end if style.is_a? Symbol
41
+ end
42
+ end
43
+
44
+ #
45
+ # Loads styles from a YAML style-sheet,
46
+ # and converts the keys to symbols
47
+ #
48
+ def load styles
49
+ styles += '.yml' unless styles =~ /\.ya?ml/
50
+ @defaults = YAML.load_file(styles).inject({}) do |h, (key, value)|
51
+ value = { :match => value['match'], :style => value['style'] }
52
+ h.merge key.to_sym => value
53
+ end
54
+ @styles.merge! @defaults
55
+ end
56
+
57
+ #
58
+ # Output to @stream
59
+ #
60
+ def say msg, *styles
61
+ self.write (ENV['TERM'].include?('color') ? process(msg, *styles) : msg) + "\n"
62
+ return nil
63
+ end
64
+
65
+ alias :print say
66
+
67
+ #
68
+ # Parse the message, but also apply a style on the whole thing
69
+ #
70
+ def process msg, *styles
71
+ stylize(parse(msg), @active + styles).gsub(/\e(\d+)\e/, "\e[\\1m")
72
+ end
73
+ alias :[] process
74
+
75
+ #
76
+ # Write to the out stream, and flush it
77
+ #
78
+ def write str
79
+ self.class.stream.tap do |stream|
80
+ stream.write str
81
+ stream.flush
82
+ end; nil
83
+ end
84
+
85
+ #
86
+ # Utility function, to make a block interruptible
87
+ #
88
+ def watch
89
+ begin
90
+ yield
91
+ rescue Interrupt
92
+ puts
93
+ exit 0
94
+ end
95
+ end
96
+ alias :oo watch
97
+
98
+ #
99
+ # Add and remove styles from the active styles
100
+ #
101
+ def << style
102
+ @active << style
103
+ end
104
+
105
+ def >> style
106
+ @active.delete style
107
+ end
108
+
109
+ def + style
110
+ dup.tap {|m| m << style }
111
+ end
112
+
113
+ def - style
114
+ dup.tap {|m| m >> style }
115
+ end
116
+
117
+ #
118
+ # Parse a string to ANSI codes
119
+ #
120
+ # if the glyph is a pair, we match [0] as the start
121
+ # and [1] as the end marker.
122
+ # the matches are sent to +stylize+
123
+ #
124
+ def parse string
125
+ @styles.inject(string) do |str, (name, options)|
126
+ glyph, styles = options[:match], options[:style]
127
+ if glyph.is_a? Array
128
+ str.gsub(/#{Regexp.escape(glyph.first)}(.+?)
129
+ #{Regexp.escape(glyph.last)}/x) { stylize $1, styles }
130
+ else
131
+ str.gsub(/(#{Regexp.escape(glyph)}+)(.+?)\1/) { stylize $2, styles }
132
+ end
133
+ end
134
+ end
135
+
136
+ #
137
+ # Apply styles to a string
138
+ #
139
+ # if the style is a default ANSI style, we add the start
140
+ # and end sequence to the string.
141
+ #
142
+ # if the style is a custom style, we recurse, sending
143
+ # the list of ANSI styles contained in the custom style.
144
+ #
145
+ # TODO: use ';' delimited codes instead of multiple \e sequences
146
+ #
147
+ def stylize string, styles = []
148
+ [styles].flatten.inject(string) do |str, style|
149
+ style = style.to_sym
150
+ if ANSI[:transforms].include? style
151
+ esc str, *ANSI[:transforms][style]
152
+ elsif ANSI[:colors].include? style
153
+ esc str, ANSI[:colors][style], ANSI[:colors][:reset]
154
+ else
155
+ stylize(str, @styles[style][:style])
156
+ end
157
+ end
158
+ end
159
+
160
+ #
161
+ # Escape a string, for later replacement
162
+ #
163
+ def esc str, open, close
164
+ "\e#{open}\e" + str + "\e#{close}\e"
165
+ end
166
+
167
+ #
168
+ # Output stream (defaults to STDOUT)
169
+ # mostly for test purposes
170
+ #
171
+ def self.stream
172
+ @stream
173
+ end
174
+
175
+ def self.stream= io
176
+ @stream = io
177
+ end
178
+ end
179
+ end
@@ -0,0 +1,14 @@
1
+ bold:
2
+ match: '*'
3
+ style:
4
+ - bold
5
+
6
+ underline:
7
+ match: '_'
8
+ style:
9
+ - underline
10
+
11
+ inverse:
12
+ match: ['[', ']']
13
+ style:
14
+ - inverse
data/lib/mutter.rb ADDED
@@ -0,0 +1,57 @@
1
+ #
2
+ # Mutter — the tiny command-line interface library with lots of style~
3
+ #
4
+
5
+ require 'yaml'
6
+
7
+ $:.unshift File.dirname(__FILE__) + '/mutter'
8
+
9
+ require 'mutterer'
10
+ require 'indenter'
11
+ require 'io'
12
+ require 'ext'
13
+
14
+ module Mutter
15
+ #
16
+ # ANSI color & transform codes
17
+ #
18
+ # If the value's an array,
19
+ # [0] is the start code
20
+ # and [1] is the end code.
21
+ #
22
+ # Colors all have the same
23
+ # reset code (39).
24
+ #
25
+ ANSI = {
26
+ :reset => 0,
27
+ :transforms => {
28
+ :bold => [1, 22],
29
+ :underline => [4, 24],
30
+ :blink => [5, 25],
31
+ :inverse => [7, 27]
32
+ },
33
+ :colors => {
34
+ :black => 30, :red => 31,
35
+ :green => 32, :yellow => 33,
36
+ :blue => 34, :purple => 35,
37
+ :cyan => 36, :white => 37,
38
+ :reset => 39
39
+ }
40
+ }
41
+
42
+ def self.indenter tab
43
+ Indenter.new tab
44
+ end
45
+
46
+ def self.say *args
47
+ new.say *args
48
+ end
49
+
50
+ def self.stylize *args
51
+ new.stylize *args
52
+ end
53
+
54
+ def self.new *args
55
+ Mutterer.new(*args)
56
+ end
57
+ end
data/mutter.gemspec ADDED
@@ -0,0 +1,52 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{mutter}
5
+ s.version = "0.3.2"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["cloudhead"]
9
+ s.date = %q{2009-09-02}
10
+ s.email = %q{self@cloudhead.net}
11
+ s.extra_rdoc_files = [
12
+ "LICENSE",
13
+ "README.md"
14
+ ]
15
+ s.files = [
16
+ ".document",
17
+ ".gitignore",
18
+ "LICENSE",
19
+ "README.md",
20
+ "Rakefile",
21
+ "VERSION",
22
+ "lib/ext.rb",
23
+ "lib/mutter.rb",
24
+ "lib/mutter/indenter.rb",
25
+ "lib/mutter/mutterer.rb",
26
+ "lib/mutter/styles.yml",
27
+ "mutter.gemspec",
28
+ "spec/mutter_spec.rb",
29
+ "spec/spec_helper.rb",
30
+ "spec/style.yml"
31
+ ]
32
+ s.homepage = %q{http://github.com/cloudhead/mutter}
33
+ s.rdoc_options = ["--charset=UTF-8"]
34
+ s.require_paths = ["lib"]
35
+ s.rubyforge_project = %q{mutter}
36
+ s.rubygems_version = %q{1.3.5}
37
+ s.summary = %q{the tiny CLI library}
38
+ s.test_files = [
39
+ "spec/mutter_spec.rb",
40
+ "spec/spec_helper.rb"
41
+ ]
42
+
43
+ if s.respond_to? :specification_version then
44
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
45
+ s.specification_version = 3
46
+
47
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
48
+ else
49
+ end
50
+ else
51
+ end
52
+ end
@@ -0,0 +1,129 @@
1
+ require 'spec/spec_helper'
2
+
3
+ describe Mutter do
4
+ def out
5
+ File.read("spec/out.txt")
6
+ end
7
+
8
+ before(:each) do
9
+ Mutter::Mutterer.stream = File.new("spec/out.txt", 'w')
10
+ end
11
+
12
+ after(:all) do
13
+ File.delete("spec/out.txt")
14
+ end
15
+
16
+ it "should output strings" do
17
+ Mutter.say "hello mutter!"
18
+ out.should == "hello mutter!\n"
19
+ end
20
+
21
+ it "should underline" do
22
+ Mutter.say "_hello mutter!_"
23
+ out.should == "\e[4mhello mutter!\e[24m\n"
24
+ end
25
+
26
+ it "should bold" do
27
+ Mutter.say "*hello mutter!*"
28
+ out.should == "\e[1mhello mutter!\e[22m\n"
29
+ end
30
+
31
+ it "should inverse" do
32
+ Mutter.say "[hello mutter!]"
33
+ out.should == "\e[7mhello mutter!\e[27m\n"
34
+ end
35
+
36
+ it "should blink" do
37
+ Mutter.say "hello mutter!", :blink
38
+ out.should == "\e[5mhello mutter!\e[25m\n"
39
+ end
40
+
41
+ it "should escape glyphs" do
42
+ Mutter.say "**hello * world**"
43
+ out.should == "\e[1mhello * world\e[22m\n"
44
+ end
45
+
46
+ it "should set defaults at the instance level" do
47
+ Mutter.new([:bold, :underline]).say "hello mutter!"
48
+ out.should == "\e[4m\e[1mhello mutter!\e[22m\e[24m\n"
49
+ end
50
+
51
+ it "should set defaults at the method level" do
52
+ Mutter.say "hello mutter!", :bold, :underline
53
+ out.should == "\e[4m\e[1mhello mutter!\e[22m\e[24m\n"
54
+ end
55
+
56
+ it "should set defaults at both levels" do
57
+ Mutter.new(:bold).say "hello mutter!", :underline, :yellow
58
+ out.should == "\e[33m\e[4m\e[1mhello mutter!\e[22m\e[24m\e[39m\n"
59
+ end
60
+
61
+ describe "with custom styles" do
62
+ it "should work with custom styles" do
63
+ style = {
64
+ :alert => {
65
+ :match => '!!',
66
+ :style => ['bold', 'red']
67
+ }
68
+ }
69
+ Mutter.new(style).say "alert!", :alert
70
+ out.should == "\e[31m\e[1malert!\e[22m\e[39m\n"
71
+ end
72
+
73
+ it "should work with shorthand custom styles" do
74
+ Mutter.new({:bold => '~'}).say "~hello mutter!~"
75
+ out.should == "\e[1mhello mutter!\e[22m\n"
76
+ end
77
+
78
+ it "should color" do
79
+ Mutter.new({:cyan => ['<', '>']}).say "<hello mutter!>"
80
+ out.should == "\e[36mhello mutter!\e[39m\n"
81
+ end
82
+
83
+ it "should mix styles" do
84
+ Mutter.new({:cyan => '~'}).say "_*hello* ~world~_"
85
+ out.should == "\e[4m\e[1mhello\e[22m \e[36mworld\e[39m\e[24m\n"
86
+ end
87
+
88
+ it "should color backgrounds" do
89
+ Mutter.new({:cyan => '~'}).say "~[hello mutter!]~"
90
+ out.should == "\e[36m\e[7mhello mutter!\e[27m\e[39m\n"
91
+ 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
+
98
+ it "should load styles from a yaml" do
99
+ Mutter.new("spec/style").say "{important message!}"
100
+ out.should == "\e[33m\e[4m\e[1mimportant message!\e[22m\e[24m\e[39m\n"
101
+ end
102
+
103
+ it "should be able to call styles as methods" do
104
+ Mutter.new("spec/style").important "important message!"
105
+ out.should == "\e[33m\e[4m\e[1mimportant message!\e[22m\e[24m\e[39m\n"
106
+ end
107
+
108
+ it "should add and remove active styles" do
109
+ mut = Mutter.new
110
+ mut << :bold << :underline << :inverse
111
+ mut >> :inverse
112
+ mut.say "hello mutter!"
113
+ out.should == "\e[4m\e[1mhello mutter!\e[22m\e[24m\n"
114
+ end
115
+
116
+ it "should return instances of itself, +- active styles" do
117
+ mut = Mutter.new
118
+ mut << :bold << :underline
119
+ (mut - :bold).say "hello mutter!"
120
+ out.should == "\e[4mhello mutter!\e[24m\n"
121
+ end
122
+ end
123
+
124
+ it "should parse a complex string" do
125
+ m = Mutter.new({:cyan => ['<','>']})
126
+ m.say "hello *mutter*, would you _<please be quiet>_ for this <[test]>?"
127
+ out.should == "hello \e[1mmutter\e[22m, would you \e[4m\e[36mplease be quiet\e[39m\e[24m for this \e[36m\e[7mtest\e[27m\e[39m?\n"
128
+ end
129
+ end
@@ -0,0 +1,9 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+
4
+ $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+ $:.unshift(File.dirname(__FILE__))
6
+
7
+ require 'mutter'
8
+
9
+
data/spec/style.yml ADDED
@@ -0,0 +1,14 @@
1
+ important:
2
+ match:
3
+ - '{'
4
+ - '}'
5
+ style:
6
+ - bold
7
+ - underline
8
+ - yellow
9
+
10
+ warning:
11
+ match: '@'
12
+ style:
13
+ - red
14
+
metadata ADDED
@@ -0,0 +1,71 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mutter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.2
5
+ platform: ruby
6
+ authors:
7
+ - cloudhead
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-09-02 00:00:00 -04:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: self@cloudhead.net
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - LICENSE
24
+ - README.md
25
+ files:
26
+ - .document
27
+ - .gitignore
28
+ - LICENSE
29
+ - README.md
30
+ - Rakefile
31
+ - VERSION
32
+ - lib/ext.rb
33
+ - lib/mutter.rb
34
+ - lib/mutter/indenter.rb
35
+ - lib/mutter/mutterer.rb
36
+ - lib/mutter/styles.yml
37
+ - mutter.gemspec
38
+ - spec/mutter_spec.rb
39
+ - spec/spec_helper.rb
40
+ - spec/style.yml
41
+ has_rdoc: true
42
+ homepage: http://github.com/cloudhead/mutter
43
+ licenses: []
44
+
45
+ post_install_message:
46
+ rdoc_options:
47
+ - --charset=UTF-8
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: "0"
55
+ version:
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: "0"
61
+ version:
62
+ requirements: []
63
+
64
+ rubyforge_project: mutter
65
+ rubygems_version: 1.3.5
66
+ signing_key:
67
+ specification_version: 3
68
+ summary: the tiny CLI library
69
+ test_files:
70
+ - spec/mutter_spec.rb
71
+ - spec/spec_helper.rb