ruby-dzen 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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ (The MIT License)
2
+
3
+ Copyright (c) Tom Preston-Werner, Rick Olson
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the 'Software'), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,128 @@
1
+ # ruby-dzen
2
+
3
+ A small wrapper for [dzen2][dzen]'s in-text formatting
4
+
5
+ You can define what dzen2 displays by using pure ruby code.
6
+
7
+ The DSL is heavily inspired by [Sinatra][].
8
+
9
+ ## Simple DSL
10
+ There are just 4 methods you need to know: `app`, `configure`, `before_run` and `order`
11
+
12
+ The simplest way to use ruby-dzen is to define a simple app:
13
+
14
+ app :clock do
15
+ Time.now.strftime("%d.%m.%Y %H:%M")
16
+ end
17
+
18
+ Each of these `app` blocks must return a string to be displayed.
19
+
20
+ You can easily configure the output:
21
+
22
+ configure do |c|
23
+ c.interval = 3
24
+ end
25
+
26
+ There are several options configurable. See [dzen/base.rb][base.rb] for the defaults. ruby-dzen comes with two pre-defined option sets:
27
+
28
+ * One for real dzen2-formatted text including colors and delimiters. This is used by default.
29
+ * One for simple text console output using escape sequences to display colors. Just define TERMINAL in your code or via commandline. (I will change this to a more ruby-ish way, soon)
30
+
31
+ You can define a handler to be run beforehand, for example to display a short loading message:
32
+
33
+ before_run do
34
+ "--- Loading ---"
35
+ end
36
+
37
+ The output order will either be in the order as the apps are defined in your app file or you can sort them using the `order` method:
38
+
39
+ order :clock, :loadavg
40
+
41
+ If you define an app but you don't define it in your order list, it won't be displayed at all.
42
+
43
+ See the [example file][example] for a already working script.
44
+
45
+ ## Run it!
46
+
47
+ As I'm to lazy for now to create a proper gem, just clone my repo and write your own small app collection.
48
+
49
+ Then run it with
50
+
51
+ ruby -Ipath/to/ruby-dzen/lib yourscript.rb | dzen2
52
+
53
+ Make sure you have the svn-Version of dzen2, as it has some extra things which are not in the released packages:
54
+
55
+ svn checkout http://dzen.googlecode.com/svn/trunk/ dzen
56
+
57
+ You can then set dzen2's output by its commandline options. For example change the used font with:
58
+
59
+ ... | dzen2 -fn "-*-terminus-medium-r-normal--14-120-75-75-C-70-iso8859-1"
60
+
61
+ See [dzen2's documentation][dzen] for all possible options.
62
+
63
+ If you want to use the text console output (for debugging or whatever) run it as:
64
+
65
+ TERMINAL=1 ruby -Ipath/to/ruby-dzen/lib yourscript.rb
66
+
67
+ This will change soon to a more ruby-ish way, I hope.
68
+
69
+ ## Helpers
70
+
71
+ As it is all pure ruby code, just define a method in your code and call it within your app module.
72
+
73
+ I already wrote 2 small helper functions: `_color` and `color_critical`.
74
+
75
+ `_color` colorizes a given string using the callbacks defined by DZEN::Base (or its subclass).
76
+
77
+ `color_critical` colorizes a number value based on wether it's below a critical value or not.
78
+
79
+ See the docu for their arguments in [dzen/helpers.rb][helpers.rb].
80
+
81
+ To use them in your code just do the following in your script:
82
+
83
+ include DZEN::Helpers
84
+
85
+ and use them in your apps.
86
+
87
+ ## New outputs
88
+
89
+ To define a new output class, just subclass DZEN::Base and make sure your class defines the `Config` constant overwriting the existent config keys.
90
+
91
+ This is exactly the way DZEN::Default and DZEN::Terminal are defined. See [dzen/base.rb][base.rb].
92
+
93
+ ## ToDo
94
+
95
+ * gemify it!
96
+ * caching of apps (nearly finished, just need a proper API)
97
+ * more ruby-ish way to switch output class
98
+
99
+ Feel free to implement what you need and let me know about your changes.
100
+
101
+ ## License
102
+
103
+ The code is released under the MIT license. See [LICENSE][].
104
+
105
+ ## Contribute
106
+
107
+ If you'd like to hack on ruby-dzen, start by forking my repo on GitHub:
108
+
109
+ http://github.com/badboy/ruby-dzen
110
+
111
+ ruby-dzen has no external dependencies other than dzen2 itself.
112
+
113
+ 1. Clone down your fork
114
+ 1. Create a thoughtfully named topic branch to contain your change
115
+ 1. Hack away
116
+ 1. Add tests and make sure everything still passes by running `rake`
117
+ 1. If you are adding new functionality, document it in the README
118
+ 1. Do not change the version number, I will do that on my end
119
+ 1. If necessary, rebase your commits into logical chunks, without errors
120
+ 1. Push the branch up to GitHub
121
+ 1. Send me (badboy) a pull request for your branch
122
+
123
+ [dzen]: http://dzen.geekmode.org/dwiki/doku.php
124
+ [base.rb]: http://github.com/badboy/ruby-dzen/blob/master/lib/dzen/base.rb
125
+ [helpers.rb]: http://github.com/badboy/ruby-dzen/blob/master/lib/dzen/helpers.rb
126
+ [sinatra]: http://www.sinatrarb.com/
127
+ [LICENSE]: http://github.com/badboy/ruby-dzen/blob/master/LICENSE
128
+ [example]: http://github.com/badboy/ruby-dzen/blob/master/example/sample.rb
@@ -0,0 +1,16 @@
1
+ require 'rake/testtask'
2
+ begin
3
+ require 'mg'
4
+ rescue LoadError
5
+ abort "Please `gem install mg`"
6
+ end
7
+
8
+ MG.new("ruby-dzen.gemspec")
9
+
10
+ Rake::TestTask.new(:test) do |test|
11
+ test.libs << 'lib' << 'test'
12
+ test.pattern = 'test/**/test_*.rb'
13
+ test.verbose = true
14
+ end
15
+
16
+ task :default => :test
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+
3
+ require 'dzen/helpers'
4
+ require 'dzen/macros'
5
+ require 'dzen/base'
6
+
7
+ module DZEN
8
+ VERSION = '0.0.1'
9
+
10
+ @@app_file = lambda do
11
+ ignore = [
12
+ /lib\/dzen.*\.rb/, # Library
13
+ /\(.*\)/, # Generated code
14
+ /custom_require\.rb/ # RubyGems require
15
+ ]
16
+
17
+ path = caller.map { |line| line.split(/:\d/, 2).first }.find do |file|
18
+ next if ignore.any? { |pattern| file =~ pattern }
19
+ file
20
+ end
21
+
22
+ path || $0
23
+ end.call
24
+
25
+ #
26
+ # File name of the application file. Inspired by Sinatra
27
+ #
28
+ def self.app_file
29
+ @@app_file
30
+ end
31
+
32
+ #
33
+ # Runs application if application file is the script being executed
34
+ #
35
+ def self.run?
36
+ self.app_file == $0
37
+ end
38
+ end
@@ -0,0 +1,170 @@
1
+ # encoding: utf-8
2
+
3
+ require 'ostruct'
4
+
5
+ module DZEN
6
+ # Subclass this and define own options
7
+ # to implement a different output
8
+ class Base
9
+ Config = {
10
+ :delimiter => '',
11
+ :ending => '',
12
+ :interval => 3,
13
+ :output => $stdout,
14
+ :output_method => :puts,
15
+ :color => {
16
+ :start => nil,
17
+ :end => nil
18
+ }
19
+ }
20
+
21
+ # Gets the actual used config
22
+ attr_reader :config
23
+
24
+ # Public: Initialize a new dzen2 output instance
25
+ #
26
+ # config - A Hash containing the config keys
27
+ #
28
+ # Returns a newly initialized DZEN::Base instance
29
+ def initialize(config={})
30
+ @config = OpenStruct.new(self.class::Config.merge(config))
31
+
32
+ @before_run_handler = []
33
+ @apps = []
34
+ @order = []
35
+ end
36
+
37
+ # Public: Configure the instance.
38
+ #
39
+ # The block will be yielded the current configuration.
40
+ #
41
+ # Returns the config
42
+ def configure
43
+ yield @config
44
+ @config
45
+ end
46
+
47
+ # Public: Add before_run handler.
48
+ #
49
+ # It's possible to define more than one before_run handler.
50
+ #
51
+ # blk - The block to be run when starting
52
+ def add_before_run(&blk)
53
+ @before_run_handler << blk
54
+ end
55
+
56
+ # Public: Set the order of apps.
57
+ #
58
+ # apps - Array of app names in sorted order.
59
+ #
60
+ # Returns the passed order array.
61
+ def order=(apps)
62
+ @order = apps
63
+ end
64
+
65
+ # Public: Add new handler for an app.
66
+ #
67
+ # name - Name of the app.
68
+ # option - Some options [not used yet].
69
+ # blk - The actual handler block.
70
+ def add_handler(name, options, &blk)
71
+ @apps << [name, options||{}, blk]
72
+ end
73
+
74
+ # Sort the apps as defined by @order
75
+ # Any not-listed app is not added to the actual output array
76
+ def sort_apps!
77
+ return if @order.empty?
78
+ @apps = @order.map do |app|
79
+ @apps.find { |e| e.first == app }
80
+ end
81
+ end
82
+
83
+ # Public: Run the instance in an endless loop
84
+ #
85
+ # These endless loop may be stopped by sending it a SIGINT
86
+ # It runs the before_run handler first, then executes the
87
+ # defined app modules each interval
88
+ def run!
89
+ trap(:INT) { @output.puts; exit 0; }
90
+
91
+ sort_apps!
92
+
93
+ @before_run_handler.each do |handler|
94
+ @config.output.puts handler.call
95
+ end
96
+
97
+ loop do
98
+ normal_text = @apps.map { |(name, options, callback)|
99
+ if options[:cache]
100
+ # TODO: implement the cache
101
+ callback.call
102
+ else
103
+ callback.call
104
+ end
105
+ }.join(@config.delimiter)
106
+
107
+ @config.output.send(@config.output_method, @config.start) if @config.start
108
+ @config.output.print(normal_text)
109
+ @config.output.send(@config.output_method, @config.ending) if @config.ending
110
+ @config.output.flush
111
+ sleep @config.interval
112
+ end
113
+ rescue Errno::EPIPE
114
+ exit 0
115
+ end
116
+ end
117
+
118
+ # Default Dzen2 output
119
+ # The in-text formating commands are used as defined at
120
+ # http://dzen.geekmode.org/dwiki/doku.php?id=dzen:command-and-option-list
121
+ class Default < Base
122
+ Config = {
123
+ :delimiter => "^fg(#333333)^p(5;-2)^ro(2)^p()^fg()^p(5)",
124
+ :ending => "^p(6)\n",
125
+ :interval => 3,
126
+ :output => $stdout,
127
+ :output_method => :puts,
128
+ :color => {
129
+ :start => proc{|c| "^fg(#{c})"},
130
+ :end => proc{|c| "^fg()" }
131
+ }
132
+ }
133
+ end
134
+
135
+ # Simple Terminal-aware output.
136
+ # May be used within a simple "watch" command
137
+ # Maybe integration in screen is possible
138
+ class Terminal < Base
139
+ Colors = {
140
+ :black => 30,
141
+ :red => 31,
142
+ :green => 32,
143
+ :yellow => 33,
144
+ :blue => 34,
145
+ :magenta => 35,
146
+ :cyan => 36,
147
+ :white => 37
148
+ }
149
+
150
+ Config = {
151
+ :delimiter => " | ",
152
+ :start => "\r",
153
+ :interval => 3,
154
+ :output => $stdout,
155
+ :output_method => :print,
156
+ :color => {
157
+ :start => proc{|c|
158
+ Colors[c] && "\e[#{Colors[c]}m"
159
+ },
160
+ :end => proc{|c| Colors[c] && "\e[0m" }
161
+ }
162
+ }
163
+ end
164
+ end
165
+
166
+ # Expose DSL
167
+ include DZEN::Macros
168
+
169
+ # Run DZEN instance if any
170
+ at_exit { @@dzen.run! if $!.nil? && run? }
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+
3
+ module DZEN
4
+ # Some small helpers used in app module outputs.
5
+ #
6
+ # You have to
7
+ # include DZEN::Helpers
8
+ # in your app file to actually use them.
9
+ module Helpers
10
+
11
+ # Public: Colorize a given string using the callbacks
12
+ # defined by DZEN::Base (or its subclass).
13
+ #
14
+ # c - The color string, like "red" or "#ff0000"
15
+ # Make sure the implementation of config.color callbacks
16
+ # can interpret this colors.
17
+ # text - The text to be colored.
18
+ #
19
+ # Returns the colored string.
20
+ def _color(c, text)
21
+ config = dzen.config.color
22
+ %|#{config[:start].call(c)}#{text}#{config[:end].call(c)}|
23
+ end
24
+
25
+ # Public: Colorize a number based on wether it's
26
+ # below a critical value or not.
27
+ #
28
+ # n - The number to colorize.
29
+ # critical - The critical value.
30
+ # options - A Hash of colors for the different colors
31
+ # :normal - for the value equal or below `critical`
32
+ # :critical - for the value above `critical`
33
+ #
34
+ # Returns the colored string.
35
+ def color_critical(n, critical, options = {})
36
+ options = { :normal => "#ff8700", :critical => "red" }.merge(options)
37
+ if n.to_i == 0
38
+ n.to_s
39
+ elsif n.to_i < critical
40
+ _color(options[:normal], n.to_i)
41
+ else
42
+ _color(options[:critical], n.to_i)
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,70 @@
1
+ # encoding: utf-8
2
+
3
+ module DZEN
4
+ module Macros
5
+ def self.included(mod)
6
+ @@dzen = nil
7
+ end
8
+
9
+ # Public: Configure the instance.
10
+ #
11
+ # The block will be yielded the current configuration.
12
+ #
13
+ # Example:
14
+ # configure do |c|
15
+ # c.interval = 3
16
+ # end
17
+ #
18
+ # Returns the config
19
+ def configure(&blk)
20
+ dzen.configure(&blk)
21
+ end
22
+
23
+ # Public: Set the order of apps.
24
+ #
25
+ # apps - App names in sorted order.
26
+ #
27
+ # Returns the passed order array.
28
+ def order(*apps)
29
+ dzen.order = apps
30
+ end
31
+
32
+ # Public: Add before_run handler.
33
+ #
34
+ # blk - The block to be run when starting
35
+ def before_run(&blk)
36
+ dzen.add_before_run(&blk)
37
+ end
38
+
39
+ # Public: Add new handler for an app.
40
+ #
41
+ # name - Name of the app.
42
+ # option - Some options [not used yet].
43
+ # blk - The actual handler block.
44
+ def app(name, options=nil, &blk)
45
+ dzen.add_handler(name, options, &blk)
46
+ end
47
+
48
+ # Public: Gets the current DZEN instance.
49
+ #
50
+ # Define TERMINAL or ENV['TERMINAL'] to use DZEN::Terminal
51
+ # instead of DZEN::Default.
52
+ #
53
+ # Returns a newly created or currently existing DZEN instance.
54
+ def dzen
55
+ return @@dzen unless @@dzen.nil?
56
+
57
+ @@dzen = DZEN::Terminal.new if defined?(::TERMINAL) || !!ENV['TERMINAL']
58
+ @@dzen = DZEN::Default.new unless @@dzen
59
+
60
+ @@dzen
61
+ end
62
+
63
+ # Public: Gets wether to run the DZEN output at exit or not.
64
+ #
65
+ # Returns a boolean.
66
+ def run?
67
+ !!@@dzen
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,38 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+ require 'mocha'
5
+ require 'fileutils'
6
+
7
+ dir = File.dirname(File.expand_path(__FILE__))
8
+ $LOAD_PATH.unshift(File.join(dir, '..', 'lib'))
9
+ $LOAD_PATH.unshift(dir)
10
+
11
+ require 'dzen'
12
+
13
+ # Make sure we're in the test dir, the tests expect that to be the current
14
+ # directory.
15
+ TEST_DIR = File.join(File.dirname(__FILE__), *%w[.])
16
+
17
+ def testpath(path)
18
+ File.join(TEST_DIR, path)
19
+ end
20
+
21
+ # test/spec/mini 3
22
+ # http://gist.github.com/25455
23
+ # chris@ozmm.org
24
+ # file:lib/test/spec/mini.rb
25
+ def context(*args, &block)
26
+ return super unless (name = args.first) && block
27
+ require 'test/unit'
28
+ klass = Class.new(defined?(ActiveSupport::TestCase) ? ActiveSupport::TestCase : Test::Unit::TestCase) do
29
+ def self.test(name, &block)
30
+ define_method("test_#{name.gsub(/\W/,'_')}", &block) if block
31
+ end
32
+ def self.xtest(*args) end
33
+ def self.setup(&block) define_method(:setup, &block) end
34
+ def self.teardown(&block) define_method(:teardown, &block) end
35
+ end
36
+ (class << klass; self end).send(:define_method, :name) { name.gsub(/\W/,'_') }
37
+ klass.class_eval &block
38
+ end
@@ -0,0 +1,74 @@
1
+ require 'helper'
2
+
3
+ context "Base" do
4
+ setup do
5
+ @base = DZEN::Base.new
6
+ end
7
+
8
+ test "configure" do
9
+ @base.configure { |c| c.interval = 42 }
10
+ assert_equal 42, @base.config.interval
11
+ end
12
+
13
+ test "add before_run handler" do
14
+ @base.add_before_run { 42 }
15
+ assert @base.instance_eval{@before_run_handler}
16
+ assert_equal 1, @base.instance_eval{@before_run_handler}.length
17
+ assert_equal 42, @base.instance_eval{@before_run_handler}.first.call
18
+ end
19
+
20
+ test "set order" do
21
+ @base.order = [:cpu, :load, :clock]
22
+ assert_equal [:cpu, :load, :clock], @base.instance_eval{@order}
23
+ end
24
+
25
+ test "add app handler" do
26
+ @base.add_handler(:cpu, {}) { }
27
+ assert_equal 1, @base.instance_eval{@apps}.size
28
+ @base.add_handler(:load, {}) { }
29
+ assert_equal 2, @base.instance_eval{@apps}.size
30
+ end
31
+
32
+ test "sort apps" do
33
+ @base.add_handler(:load, {}) { }
34
+ @base.add_handler(:cpu, {}) { }
35
+ assert_equal [:load, :cpu], @base.instance_eval{@apps}.map{|a|a.first}
36
+ @base.order = [:cpu, :load]
37
+ @base.sort_apps!
38
+ assert_equal [:cpu, :load], @base.instance_eval{@apps}.map{|a|a.first}
39
+ end
40
+
41
+ class OutputHandler
42
+ attr_accessor :output
43
+ def initialize
44
+ @output = ''
45
+ end
46
+
47
+ def to_s
48
+ @output.to_s
49
+ end
50
+
51
+ def puts(msg)
52
+ @output << msg << "\n"
53
+ end
54
+
55
+ def print(msg)
56
+ @output << msg
57
+ end
58
+ end
59
+
60
+ test "run it" do
61
+ output = OutputHandler.new
62
+ @base.configure do |c|
63
+ c.interval = 0.1
64
+ c.delimiter = '|'
65
+ c.output = output
66
+ end
67
+ @base.add_handler(:one, {}) { "1" }
68
+ @base.add_handler(:two, {}) { "2" }
69
+ t = Thread.new { @base.run! }
70
+ sleep @base.config.interval*2
71
+ t.kill
72
+ assert_equal "1|2\n", output.to_s
73
+ end
74
+ end
@@ -0,0 +1,33 @@
1
+ require 'helper'
2
+ require 'ostruct'
3
+
4
+ context "Base" do
5
+ class TestClass
6
+ include DZEN::Helpers
7
+
8
+ def dzen
9
+ OpenStruct.new({
10
+ :config => OpenStruct.new({:color => {
11
+ :start => proc{|c|"<c(#{c})>"},
12
+ :end => proc{|c|"</c(#{c})>"}
13
+ }
14
+ })
15
+ })
16
+ end
17
+ end
18
+
19
+ setup do
20
+ @test = TestClass.new
21
+ end
22
+
23
+ test "_color" do
24
+ assert_equal %|<c(red)>foo</c(red)>|, @test._color('red', 'foo')
25
+ end
26
+
27
+ test "color_critical" do
28
+ colors = { :normal => 'white', :critical => 'red' }
29
+ assert_equal %|0|, @test.color_critical(0, 0, colors)
30
+ assert_equal %|<c(white)>5</c(white)>|, @test.color_critical(5, 6, colors)
31
+ assert_equal %|<c(red)>7</c(red)>|, @test.color_critical(7, 6, colors)
32
+ end
33
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-dzen
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
+ - badboy
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-09-18 00:00:00 +02:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: " ruby-dzen is a small wrapper for dzen2's in-text formatting\n With its simple DSL you can define what dzen2 display by using pure ruby code.\n\n Just define your app modules in a file, execute it and pipe the output to dzen.\n\n The simplest example is the following:\n app :hello do\n \"hello\"\n end\n"
22
+ email: badboy@archlinux.us
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files: []
28
+
29
+ files:
30
+ - README.md
31
+ - Rakefile
32
+ - LICENSE
33
+ - lib/dzen.rb
34
+ - lib/dzen/macros.rb
35
+ - lib/dzen/base.rb
36
+ - lib/dzen/helpers.rb
37
+ - test/test_helper.rb
38
+ - test/helper.rb
39
+ - test/test_base.rb
40
+ has_rdoc: true
41
+ homepage: http://github.com/badboy/ruby-dzen
42
+ licenses: []
43
+
44
+ post_install_message:
45
+ rdoc_options: []
46
+
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ segments:
55
+ - 0
56
+ version: "0"
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ segments:
63
+ - 0
64
+ version: "0"
65
+ requirements: []
66
+
67
+ rubyforge_project:
68
+ rubygems_version: 1.3.7
69
+ signing_key:
70
+ specification_version: 3
71
+ summary: A small wrapper DSL for dzen2's in-text formatting
72
+ test_files: []
73
+