stephencelis-dots 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/History.rdoc ADDED
@@ -0,0 +1,5 @@
1
+ == 0.0.1 / 2009-05-10
2
+
3
+ * 1 major enhancement:
4
+
5
+ * Birthday!
data/Manifest.txt ADDED
@@ -0,0 +1,16 @@
1
+ History.rdoc
2
+ Manifest.txt
3
+ Rakefile
4
+ README.rdoc
5
+ cucumber.yml
6
+ dots.gemspec
7
+ features
8
+ features/dots.feature
9
+ features/step_definitions/dots_steps.rb
10
+ features/support/env.rb
11
+ lib
12
+ lib/dots/kaoemoji.rb
13
+ lib/dots/rainbows.rb
14
+ lib/dots/redgreen.rb
15
+ lib/dots.rb
16
+ spec/dots_spec.rb
data/README.rdoc ADDED
@@ -0,0 +1,89 @@
1
+ RDoc.......................................................................
2
+ ........................FFF................FFF.........F...................
3
+ ........................FF.................FF...........E..................
4
+ ..................FFFFF.FF....FFFFFF....FEFFFEF...FEEFFEE..................
5
+ ................FF....FFFF...FE....FFF....FFF....FEF.......................
6
+ ................FFF....FFF...FEF....FF.....FF......FFEEF...................
7
+ ..................FEEEF.FFF....EEEEEF.......FEF........FFF.................
8
+ ...................................................FFEEFF..................
9
+ ................FFFFFEEEEEFFFFF.F..F.FFFFFEEEEEEFFFFF......................
10
+ ..............F........F.FFFFEEEEEEEEEEFFFFF.F.............................
11
+ .....................................................................ready!
12
+
13
+ Free progress dots for your scripts. <tt>Test::Unit</tt>-style.
14
+
15
+ http://github.com/stephencelis/dots
16
+
17
+
18
+ == Example
19
+
20
+ % ruby -rubygems
21
+ require "dots"
22
+ require "open-uri"
23
+ require "hpricot"
24
+
25
+ File.open("alts.txt", "w") do |f|
26
+ (1..10).each.with_dots do |n|
27
+ doc = Hpricot open("http://www.qwantz.com/archive/%06d.html" % n)
28
+ alt = (doc / "font img").pop["title"]
29
+ raise "No alt text found!" if alt.nil?
30
+ f.puts "%3d. %s" % [n, alt]
31
+ end
32
+ end
33
+ ^D
34
+ ..........
35
+ Finished in 6.225932 seconds.
36
+
37
+ 10 total, 10 passed, 0 failed, 0 erred
38
+
39
+
40
+ == Usage
41
+
42
+ Swap out +each+ for +each_with_dots+, or, with enumerators, just add
43
+ +with_dots+; if you don't want to write to standard output, specify the IO as
44
+ an argument for +each_with_dots+ (or +with_dots+).
45
+
46
+ Raise nameless (i.e., +RuntimeError+) exceptions for potential failures.
47
+
48
+
49
+ == Extras
50
+
51
+ * <tt>require "dots/redgreen"</tt>
52
+ * <tt>require "dots/rainbows"</tt>
53
+ * <tt>require "dots/kaoemoji"</tt>
54
+
55
+ Oh, and for heavy, non-iterative processing:
56
+
57
+ dots do
58
+ # ...
59
+ end
60
+
61
+
62
+ == Install
63
+
64
+ % sudo gem install stephencelis-dots --source=http://gems.github.com
65
+
66
+
67
+ == License
68
+
69
+ (The MIT License)
70
+
71
+ (c) 2009-* Stephen Celis, stephen@stephencelis.com.
72
+
73
+ Permission is hereby granted, free of charge, to any person obtaining a copy
74
+ of this software and associated documentation files (the "Software"), to deal
75
+ in the Software without restriction, including without limitation the rights
76
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
77
+ copies of the Software, and to permit persons to whom the Software is
78
+ furnished to do so, subject to the following conditions:
79
+
80
+ The above copyright notice and this permission notice shall be included in all
81
+ copies or substantial portions of the Software.
82
+
83
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
84
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
85
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
86
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
87
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
88
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
89
+ SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,40 @@
1
+ defaults = [:requirements]
2
+ required = []
3
+ required << "* Ruby 1.8.7 or greater is required" if RUBY_VERSION < "1.8.7"
4
+
5
+ desc "Show any uninstalled requirements to run the full test suite"
6
+ task :requirements do
7
+ puts required
8
+ end
9
+
10
+ begin
11
+ require "spec/rake/spectask"
12
+
13
+ desc "Run all specs"
14
+ Spec::Rake::SpecTask.new :spec do |t|
15
+ t.ruby_opts = ["-Ilib"]
16
+ t.spec_opts = ["--color"]
17
+ t.spec_files = FileList["spec/**/*_spec.rb"]
18
+ end
19
+
20
+ defaults << :spec
21
+ rescue LoadError
22
+ required << "* RSpec is required."
23
+ end
24
+
25
+ begin
26
+ require "cucumber/rake/task"
27
+
28
+ desc "Run all features"
29
+ Cucumber::Rake::Task.new :features do |t|
30
+ t.cucumber_opts = "--no-source --format=progress features"
31
+ end
32
+
33
+ defaults << :features
34
+ rescue LoadError
35
+ required << "* Cucumber is required"
36
+ end
37
+
38
+ defaults << :requirements if defaults.empty?
39
+
40
+ task :default => defaults
data/cucumber.yml ADDED
@@ -0,0 +1 @@
1
+ default: --no-source features
data/dots.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{dots}
5
+ s.version = "0.0.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Stephen Celis"]
9
+ s.date = %q{2009-05-10}
10
+ s.description = %q{Free progress dots for your scripts.}
11
+ s.email = ["stephen@stephencelis.com"]
12
+ s.extra_rdoc_files = ["History.rdoc", "Manifest.txt", "README.rdoc"]
13
+ s.files = ["History.rdoc", "Manifest.txt", "Rakefile", "README.rdoc", "cucumber.yml", "dots.gemspec", "features", "features/dots.feature", "features/step_definitions/dots_steps.rb", "features/support/env.rb", "lib", "lib/dots/kaoemoji.rb", "lib/dots/rainbows.rb", "lib/dots/redgreen.rb", "lib/dots.rb", "spec/dots_spec.rb"]
14
+ s.has_rdoc = true
15
+ s.rdoc_options = ["--main", "README.rdoc"]
16
+ s.require_paths = ["lib"]
17
+ s.rubyforge_project = %q{dots}
18
+ s.rubygems_version = %q{1.3.2}
19
+ s.summary = %q{Free progress dots for your scripts}
20
+ s.homepage = "http://github.com/stephencelis/dots"
21
+
22
+ if s.respond_to? :specification_version then
23
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
24
+ s.specification_version = 3
25
+ end
26
+ end
@@ -0,0 +1,49 @@
1
+ Feature: dot progress
2
+ In order to keep track of long-running tasks
3
+ As a task-runner
4
+ I want to see the progress visually
5
+
6
+ Scenario: Display dots
7
+ Given an array [1, 2, 3, 4, 5]
8
+ When I run it with dots
9
+ Then I should see 5 "." dots
10
+ And I should see 0 "F" dots
11
+ And I should see 0 "E" dots
12
+ And I should see how long it took
13
+ And I should not see "Failure"
14
+ And I should not see "Error"
15
+ And I should see "5 total, 5 passed, 0 failed, 0 erred"
16
+
17
+ Scenario: Display failures
18
+ Given an array [1, 2, 3, 4, 5]
19
+ When I don't want 3s
20
+ And I run it with dots
21
+ Then I should see 4 "." dots
22
+ And I should see 1 "F" dot
23
+ And I should see 0 "E" dots
24
+ And I should see how long it took
25
+ And I should see ") Failure" 1 time
26
+ And I should not see ") Error"
27
+ And I should see "No threes!"
28
+ And I should see the exception's line number
29
+ And I should see "<3>"
30
+ And I should see "5 total, 4 passed, 1 failed, 0 erred"
31
+
32
+ Scenario: Display errors
33
+ Given an array [1, 2, 3, 4, 5]
34
+ When I divide each by zero
35
+ And I run it with dots
36
+ Then I should see 5 "E" dots
37
+ And I should see 0 "." dots
38
+ And I should see 0 "F" dots
39
+ And I should see how long it took
40
+ And I should see ") Error" 5 times
41
+ And I should see "ZeroDivisionError: divided by 0" 5 times
42
+ And I should see the exception's line number
43
+ And I should not see "Failure"
44
+ And I should see "5 total, 0 passed, 0 failed, 5 erred"
45
+
46
+ Scenario: Constant dots
47
+ Given a task that takes 5 seconds
48
+ When I run it in a dots block
49
+ Then I should see 5 "." dots
@@ -0,0 +1,59 @@
1
+ Given(/^an \w+ (.+)$/) do |object|
2
+ @enumerable = eval(object)
3
+ end
4
+
5
+ Given(/^a task that takes (\d+) seconds$/) do |number|
6
+ short_second = 1 / 100
7
+ short_seconds = number.to_i / 100
8
+ @proc = Proc.new { |io| dots(short_second, io) { sleep short_seconds } }
9
+ end
10
+
11
+ When(/^I run it with dots$/) do
12
+ @proc ||= Proc.new { |each| each }
13
+ @io = StringIO.new
14
+ @enumerable.each_with_dots(@io, &@proc)
15
+ @io.rewind
16
+ @content = @io.read
17
+ end
18
+
19
+ When(/^I run it in a dots block$/) do
20
+ @io = StringIO.new ""
21
+ @proc.call(@io)
22
+ @io.rewind
23
+ @content = @io.read
24
+ end
25
+
26
+ When(/^I don't want (\d+)s$/) do |number|
27
+ @proc = Proc.new { |each| raise "No threes!" if each == number.to_i }
28
+ @line = __LINE__ - 1
29
+ end
30
+
31
+ When(/^I divide each by zero$/) do
32
+ @proc = Proc.new { |each| each / 0 }
33
+ @line = __LINE__ - 1
34
+ end
35
+
36
+ Then(/^I should see (\d+) "([^\"])" dots?$/) do |dot, number|
37
+ length = @enumerable.nil? ? -1 : @enumerable.length
38
+ @content[0..length].count(dot).should be(number.to_i)
39
+ end
40
+
41
+ Then(/^I should see how long it took$/) do
42
+ @content.should match(/Finished in \d+\.\d+ seconds/)
43
+ end
44
+
45
+ Then(/^I should see "([^\"]*)" (\d+) times?$/) do |message, number|
46
+ @content.split(message).length.should be(number.to_i + 1)
47
+ end
48
+
49
+ Then(/^I should see "([^\"]*)"$/) do |message|
50
+ @content.should include(message)
51
+ end
52
+
53
+ Then(/^I should not see "([^\"]*)"$/) do |message|
54
+ @content.should_not include(message)
55
+ end
56
+
57
+ Then(/^I should see the exception's line number$/) do
58
+ @content.should include("#{File.basename(__FILE__)}:#@line")
59
+ end
@@ -0,0 +1,4 @@
1
+ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + "/../../lib")
2
+ require "dots"
3
+ require "spec/expectations"
4
+ require "spec/mocks"
data/lib/dots.rb ADDED
@@ -0,0 +1,169 @@
1
+ # Dots makes dots.
2
+ module Dots
3
+ VERSION = "0.0.1"
4
+
5
+ class InvalidDot < StandardError
6
+ end
7
+
8
+ #--
9
+ # Allows us direct access to +Enumerator+, ensuring compatibility with 1.8.7
10
+ # and 1.9.
11
+ #++
12
+ include Enumerable
13
+
14
+ #--
15
+ # How dots appear.
16
+ #++
17
+ @@dots = { "." => ".", "F" => "F", "E" => "E" }
18
+
19
+ # Access how a dot should appear.
20
+ def [](key)
21
+ raise InvalidDot unless @@dots.keys.include? key.to_s
22
+ dot = @@dots[key.to_s]
23
+ dot.respond_to?(:call) ? dot.call : dot
24
+ end
25
+
26
+ # Configure how dots appear. For red and green:
27
+ #
28
+ # Dots["."] = "\e[32m.\e[0m"
29
+ # Dots["F"] = "\e[31mF\e[0m"
30
+ # Dots["E"] = "\e[31mE\e[0m"
31
+ #
32
+ # Or, just <tt>require "dots/redgreen"</tt>.
33
+ #
34
+ # For a random rainbow, <tt>require "dots/rainbow"</tt>, or use a procedure:
35
+ #
36
+ # Dots["."] = Proc.new { \e[%dm.\e[0m" % [rand(10) + 30] }
37
+ def []=(key, value)
38
+ raise InvalidDot unless @@dots.keys.include? key.to_s
39
+ @@dots[key.to_s] = value
40
+ end
41
+
42
+ Enumerable.module_eval do
43
+ # Sends a dot to standard output (or designated IO) after each iteration.
44
+ #
45
+ # If an exception is raised during an iteration, an "E" or "F" will be
46
+ # sent in dot's stead: "F" for instances of +RuntimeError+, which may be
47
+ # raised blankly in an iteration, and "E" otherwise, assuming
48
+ # unanticipated errors.
49
+ #
50
+ # Example:
51
+ #
52
+ # >> require "dots"
53
+ # => true
54
+ # >> (0..5).each_with_dots do |n|
55
+ # ?> 100 / n
56
+ # ?> raise "No fours!" if n == 4
57
+ # ?> end
58
+ # E...F.
59
+ # Finished in 0.000430 seconds.
60
+ #
61
+ # 1) Error
62
+ # ZeroDivisionError: divided by 0
63
+ # with <0>
64
+ # (irb):3:in `/'
65
+ # (irb):3:in `irb_binding'
66
+ # (irb):2:in `irb_binding'
67
+ # /usr/local/lib/ruby/1.8/irb/workspace.rb:52:in `irb_binding'
68
+ # /usr/local/lib/ruby/1.8/irb/workspace.rb:52
69
+ #
70
+ # 2) Failure
71
+ # No fours!
72
+ # with <4>
73
+ # [(irb):4]
74
+ def each_with_dots(io = $stdout)
75
+ old_sync, io.sync = io.sync, true
76
+ exceptions, passed, start = [], 0, Time.now
77
+ trap("INT") { return io.puts "abort!" }
78
+ each do |object|
79
+ begin
80
+ yield object
81
+ io.print Dots["."]
82
+ passed += 1
83
+ rescue => e
84
+ if e.is_a? RuntimeError
85
+ io.print Dots["F"]
86
+ else
87
+ io.print Dots["E"]
88
+ end
89
+ exceptions << [object, e] unless exceptions.nil?
90
+ end
91
+ end
92
+ ensure
93
+ Dots.report exceptions, passed, start, io
94
+ io.sync = old_sync
95
+ end
96
+ end
97
+
98
+ Enumerator.class_eval do
99
+ # Returns an <tt>Enumerator</tt> for <tt>Enumerable#each_with_dots</tt>.
100
+ def with_dots(io = $stdout, &block)
101
+ enum = enum_for :each_with_dots, io
102
+ block_given? ? enum.each(&block) : enum
103
+ end
104
+ end if RUBY_VERSION >= "1.8.7"
105
+
106
+ Kernel.module_eval do
107
+ private
108
+ # Sends dots to standard output (or designated IO) on an interval for the
109
+ # duration of the block.
110
+ #
111
+ # Example:
112
+ #
113
+ # >> dots do
114
+ # ?> sleep 5
115
+ # ?> end
116
+ # .....=> 5
117
+ def dots(interval = 1, io = $stdout)
118
+ old_sync, io.sync = io.sync, true
119
+
120
+ thread = Thread.new do
121
+ dot = lambda do
122
+ io.print Dots["."]
123
+ sleep interval and dot.call
124
+ end
125
+ dot.call
126
+ end
127
+
128
+ yield
129
+ ensure
130
+ io.sync = old_sync
131
+ thread.kill
132
+ end
133
+ end
134
+
135
+ # Formats reports for +each_with_dots+.
136
+ def report(exceptions, passed = 0, start = nil, io = $stdout)
137
+ failed = erred = 0
138
+
139
+ io.puts
140
+ io.puts "Finished in #{Time.now - start} seconds." unless start.nil?
141
+ exceptions.each_with_index do |(o, e), i|
142
+ io.puts
143
+ if e.is_a? RuntimeError
144
+ failed += 1
145
+ io.puts "%3d) Failure" % [i + 1]
146
+ io.puts "#{e.message} " unless e.message.empty?
147
+ io.puts "with <#{o.inspect}>"
148
+ io.puts "[#{e.backtrace.first[/.+\d+/]}]"
149
+ else
150
+ erred += 1
151
+ io.puts "%3d) Error" % [i + 1]
152
+ io.puts "#{e.class.name}: #{e.message}"
153
+ io.puts "with <#{o.inspect}>"
154
+ io.puts e.backtrace.select { |l| l !~ /dots.rb/ }.map { |l| "\t#{l}" }
155
+ end
156
+ end
157
+ io.puts
158
+ io.puts summary(passed, failed, erred)
159
+ end
160
+
161
+ private
162
+
163
+ def summary(passed, failed, erred)
164
+ "%d total, %d passed, %d failed, %d erred" %
165
+ [passed + failed + erred, passed, failed, erred]
166
+ end
167
+
168
+ extend self
169
+ end
@@ -0,0 +1,5 @@
1
+ # Require this file to give your iterations some personality.
2
+
3
+ Dots["."] = "\e[32m(^_^)\e[0m"
4
+ Dots["F"] = "\e[31m(>_<)\e[0m"
5
+ Dots["E"] = "\e[34m(T_T)\e[0m"
@@ -0,0 +1,5 @@
1
+ # Require this file to add some capricious playfulness to your iterations.
2
+
3
+ Dots["."] = Proc.new { "\e[%dm.\e[0m" % [rand(10) + 30] }
4
+ Dots["F"] = Proc.new { "\e[%dmF\e[0m" % [rand(10) + 30] }
5
+ Dots["E"] = Proc.new { "\e[%dmE\e[0m" % [rand(10) + 30] }
@@ -0,0 +1,14 @@
1
+ # Require this file to add some red and green flair to your iterations.
2
+
3
+ Dots["."] = "\e[32m#{Dots["."]}\e[0m"
4
+ Dots["F"] = "\e[31m#{Dots["F"]}\e[0m"
5
+ Dots["E"] = "\e[31m#{Dots["E"]}\e[0m"
6
+
7
+ Dots.module_eval do
8
+ # Overrides Dots#summary with some red and green flair.
9
+ def summary(passed, failed, erred)
10
+ code = failed + erred == 0 ? "2" : "1"
11
+ "\e[3%dm%d total, %d passed, %d failed, %d erred\e[0m" %
12
+ [code, passed + failed + erred, passed, failed, erred]
13
+ end
14
+ end
data/spec/dots_spec.rb ADDED
@@ -0,0 +1,131 @@
1
+ require "spec/mocks"
2
+ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + "/../lib")
3
+ require "dots"
4
+ include Enumerable # To bring 1.8.7's Enumerator top-level.
5
+
6
+ def enumerator?
7
+ RUBY_VERSION >= "1.8.7"
8
+ end
9
+
10
+ describe Dots do
11
+ it 'should be configurable for "."' do
12
+ Dots["."].should == "."
13
+ proc { Dots["."] = ":)" }.should_not raise_error
14
+ Dots["."].should == ":)"
15
+ end
16
+
17
+ it 'should be configurable for "F"' do
18
+ Dots["F"].should == "F"
19
+ proc { Dots["F"] = ":|" }.should_not raise_error
20
+ Dots["F"].should == ":|"
21
+ end
22
+
23
+ it 'should be configurable for "E"' do
24
+ Dots["E"].should == "E"
25
+ proc { Dots["E"] = ":(" }.should_not raise_error
26
+ Dots["E"].should == ":("
27
+ end
28
+
29
+ it 'should not be configurable for anything else' do
30
+ proc { Dots["A"] }.should raise_error(Dots::InvalidDot)
31
+ proc { Dots["A"] = ":D" }.should raise_error(Dots::InvalidDot)
32
+ end
33
+ end
34
+
35
+ describe "Monkey-patched" do
36
+ describe "Enumerable.instance_methods" do
37
+ it do
38
+ Enumerable.instance_methods.should include("each_with_dots")
39
+ end
40
+ end
41
+
42
+ describe "Enumerator.instance_methods" do
43
+ it do
44
+ Enumerator.instance_methods.should include("with_dots")
45
+ end
46
+ end if enumerator?
47
+
48
+ describe "Kernel.methods" do
49
+ it do
50
+ Kernel.private_instance_methods.should include("dots")
51
+ end
52
+ end
53
+ end
54
+
55
+ describe "each_with_dots" do
56
+ before :each do
57
+ @enumerated = 1..5
58
+ @io = StringIO.new
59
+ @proc = Proc.new {}
60
+ end
61
+
62
+ after :each do
63
+ @enumerated.each_with_dots @io, &@proc
64
+ end
65
+
66
+ it "should synchronize standard output" do
67
+ @io.should_receive(:sync=).twice
68
+ end
69
+
70
+ it 'should receive print dots' do
71
+ Dots.should_receive(:[]).exactly(5).times.with "."
72
+ end
73
+
74
+ it 'should receive print Fs' do
75
+ @proc = Proc.new { |n| raise }
76
+ Dots.should_receive(:[]).exactly(5).times.with "F"
77
+ end
78
+
79
+ it 'should receive print Es' do
80
+ @proc = Proc.new { |n| n / 0 }
81
+ Dots.should_receive(:[]).exactly(5).times.with "E"
82
+ end
83
+
84
+ it "should track the time" do
85
+ Time.should_receive :now
86
+ end
87
+
88
+ it 'should receive "report"' do
89
+ Dots.should_receive :report
90
+ end
91
+ end
92
+
93
+ describe "each.with_dots" do
94
+ before :each do
95
+ @it = (1..5).each
96
+ end
97
+
98
+ it do
99
+ @it.with_dots.should be_an(Enumerator)
100
+ end
101
+
102
+ it 'should receive "enum_for" with "each_with_dots"' do
103
+ @io = StringIO.new
104
+ @it.should_receive(:enum_for).with(:each_with_dots, @io).and_return @it
105
+ @it.with_dots(@io) {}.should == (1..5)
106
+ end
107
+ end if enumerator?
108
+
109
+ describe "with_dots" do
110
+ it "should print dots" do
111
+ Dots.should_receive(:[]).with "."
112
+ dots(1, StringIO.new) {}
113
+ end
114
+
115
+ it "should require a block" do
116
+ proc { dots }.should raise_error(LocalJumpError)
117
+ end
118
+
119
+ it "should synchronize standard output" do
120
+ io = StringIO.new
121
+ io.should_receive(:sync=).twice
122
+ dots(1, io) {}
123
+ end
124
+
125
+ it "should spin up and kill a thread" do
126
+ thread = mock "thread"
127
+ Thread.should_receive(:new).and_return thread
128
+ thread.should_receive :kill
129
+ dots(1, StringIO.new) {}
130
+ end
131
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: stephencelis-dots
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Stephen Celis
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-05-10 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Free progress dots for your scripts.
17
+ email:
18
+ - stephen@stephencelis.com
19
+ executables: []
20
+
21
+ extensions: []
22
+
23
+ extra_rdoc_files:
24
+ - History.rdoc
25
+ - Manifest.txt
26
+ - README.rdoc
27
+ files:
28
+ - History.rdoc
29
+ - Manifest.txt
30
+ - Rakefile
31
+ - README.rdoc
32
+ - cucumber.yml
33
+ - dots.gemspec
34
+ - features
35
+ - features/dots.feature
36
+ - features/step_definitions/dots_steps.rb
37
+ - features/support/env.rb
38
+ - lib
39
+ - lib/dots/kaoemoji.rb
40
+ - lib/dots/rainbows.rb
41
+ - lib/dots/redgreen.rb
42
+ - lib/dots.rb
43
+ - spec/dots_spec.rb
44
+ has_rdoc: true
45
+ homepage: http://github.com/stephencelis/dots
46
+ post_install_message:
47
+ rdoc_options:
48
+ - --main
49
+ - README.rdoc
50
+ require_paths:
51
+ - lib
52
+ required_ruby_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ version:
58
+ required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: "0"
63
+ version:
64
+ requirements: []
65
+
66
+ rubyforge_project: dots
67
+ rubygems_version: 1.2.0
68
+ signing_key:
69
+ specification_version: 3
70
+ summary: Free progress dots for your scripts
71
+ test_files: []
72
+