heel 0.6.0 → 1.0.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/lib/heel/version.rb CHANGED
@@ -1,21 +1,26 @@
1
+ #--
2
+ # Copyright (c) 2007, 2008 Jeremy Hinegardner
3
+ # All rights reserved. Licensed under the BSD license. See LICENSE for details
4
+ #++
5
+
1
6
  module Heel
2
- module Version
3
- MAJOR = 0
4
- MINOR = 6
5
- BUILD = 0
7
+ module Version
8
+ MAJOR = 1
9
+ MINOR = 0
10
+ BUILD = 0
11
+
12
+ def to_a
13
+ [MAJOR, MINOR, BUILD]
14
+ end
6
15
 
7
- def to_a
8
- [MAJOR, MINOR, BUILD]
9
- end
16
+ def to_s
17
+ to_a.join(".")
18
+ end
19
+ module_function :to_a
20
+ module_function :to_s
10
21
 
11
- def to_s
12
- to_a.join(".")
13
- end
14
- module_function :to_a
15
- module_function :to_s
16
-
17
- STRING = Version.to_s
18
- end
19
- VERSION = Version.to_s
22
+ STRING = Version.to_s
23
+ end
24
+ VERSION = Version.to_s
20
25
  end
21
26
 
@@ -0,0 +1,20 @@
1
+ require 'spec/spec_helper'
2
+
3
+ describe Heel::Configuration do
4
+ it "finds files relative to root of gem" do
5
+ Heel::Configuration.root_dir.should == File.expand_path(File.join(File.dirname(__FILE__), "..")) + "/"
6
+ end
7
+
8
+ it "finds files in the config dir of the project" do
9
+ Heel::Configuration.config_path('config.rb').should == File.expand_path(File.join(File.dirname(__FILE__), "..", "config", "config.rb"))
10
+ end
11
+
12
+ it "finds files in the data dir of the project" do
13
+ Heel::Configuration.data_path('famfamfam', 'icons').should == File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "famfamfam", "icons"))
14
+ end
15
+
16
+ it "finds files in the lib dir of the project" do
17
+ Heel::Configuration.lib_path('heel.rb').should == File.expand_path(File.join(File.dirname(__FILE__), "..", "lib", "heel.rb"))
18
+ end
19
+
20
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec/spec_helper'
2
+
3
+ describe Heel::DirectoryIndexer do
4
+ before(:each) do
5
+ @indexer = Heel::DirectoryIndexer.new(Heel::Configuration.data_path("listing.rhtml"), { :highlighting => true })
6
+ end
7
+
8
+ it "should ignore .htaccess files" do
9
+ @indexer.options[:ignore_globs] = %w( *~ .htaccess . )
10
+ @indexer.should_ignore?(".htaccess").should == true
11
+ end
12
+
13
+ it "should not ignore .html files " do
14
+ @indexer.options[:ignore_globs] = %w( *~ .htaccess . )
15
+ @indexer.should_ignore?("something.html").should == false
16
+ end
17
+
18
+ it "can tell if highlighting is to be performed" do
19
+ @indexer.should be_highlighting
20
+ end
21
+
22
+ it "knows if the template should be reloaded on changes" do
23
+ @indexer.should_not be_reload_on_template_change
24
+ end
25
+
26
+ it "may or maynot use icons" do
27
+ @indexer.should_not be_using_icons
28
+ end
29
+
30
+ it "uses a mime map" do
31
+ @indexer.mime_map.should be_instance_of(Heel::MimeMap)
32
+ end
33
+
34
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec/spec_helper'
2
+ require 'rack/mock'
3
+ require 'heel/rackapp'
4
+
5
+ describe Heel::RackApp do
6
+ before(:each) do
7
+ @app = Heel::RackApp.new( { :highlighting => 'true' } )
8
+ @request = Rack::MockRequest.new(@app)
9
+ end
10
+
11
+ it "should return the a listing for the currrent directory" do
12
+ res = @request.get("/")
13
+ res.should be_ok
14
+ res['Content-Type'].should == "text/html"
15
+ res.body.should =~ /Rakefile/
16
+ end
17
+
18
+ it 'should highlight a ruby file' do
19
+ res = @request.get("/gemspec.rb")
20
+ res.should be_ok
21
+ res['Content-Type'].should == "text/html"
22
+ res.body.should =~ /class="CodeRay"/
23
+ end
24
+
25
+ it "should not highlight a ruby file if told not to" do
26
+ res = @request.get("/gemspec.rb?highlighting=off")
27
+ res.should be_ok
28
+ res.body.size.should == File.size("gemspec.rb")
29
+ res['Content-Type'].should == "text/plain"
30
+ end
31
+
32
+ it "should return a 405 if given a non-GET request" do
33
+ res = @request.post("/")
34
+ res.should_not be_ok
35
+ res.status.should == 405
36
+ end
37
+
38
+ it "should return a 403 if accessing an invalid location" do
39
+ res = @request.get("/../../../../etc/passwd")
40
+ res.should_not be_ok
41
+ res.status.should == 403
42
+ end
43
+ end
data/spec/server_spec.rb CHANGED
@@ -1,115 +1,114 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__),"spec_helper.rb"))
1
+ require "spec/spec_helper"
2
2
  describe Heel::Server do
3
- before(:each) do
4
- @stdin = StringIO.new
5
- @stdout = StringIO.new
6
- @stderr = StringIO.new
7
- ENV["HEEL_DEFAULT_DIRECTORY"] = "/tmp/heel"
3
+ before(:each) do
4
+ @stdin = StringIO.new
5
+ @stdout = StringIO.new
6
+ @stderr = StringIO.new
7
+ ENV["HEEL_DEFAULT_DIRECTORY"] = "/tmp/heel"
8
+ end
9
+
10
+ after(:each) do
11
+ ENV.delete("HEEL_DEFAULT_DIRECTORY")
12
+ FileUtils.rm_rf "/tmp/heel"
13
+ end
14
+
15
+ it "should output the version when invoked with --version" do
16
+ server = Heel::Server.new(["--version"])
17
+ server.set_io(@stdin, @stdout)
18
+ begin
19
+ server.run
20
+ rescue SystemExit => se
21
+ se.status.should == 0
22
+ @stdout.string.should =~ /version #{Heel::VERSION}/
8
23
  end
9
-
10
- after(:each) do
11
- ENV.delete("HEEL_DEFAULT_DIRECTORY")
12
- FileUtils.rm_rf "/tmp/heel"
24
+ end
25
+
26
+ it "should output the Usage when invoked with --help" do
27
+ server = Heel::Server.new(["--help"])
28
+ server.set_io(@stdin, @stdout)
29
+ begin
30
+ server.run
31
+ rescue SystemExit => se
32
+ se.status.should == 0
33
+ @stdout.string.should =~ /Usage/m
13
34
  end
14
-
15
- it "should output the version when invoked with --version" do
16
- server = Heel::Server.new(["--version"])
17
- server.set_io(@stdin, @stdout)
18
- begin
19
- server.run
20
- rescue SystemExit => se
21
- se.status.should == 0
22
- @stdout.string.should =~ /version #{Heel::VERSION}/
23
- end
35
+ end
36
+
37
+ it "should have an error when invoked with invalid parameters" do
38
+ server = Heel::Server.new(["--junk"])
39
+ server.set_io(@stdin,@stdout)
40
+ begin
41
+ server.run
42
+ rescue SystemExit => se
43
+ se.status.should == 1
44
+ @stdout.string.should =~ /Try .*--help/m
24
45
  end
25
-
26
- it "should output the Usage when invoked with --help" do
27
- server = Heel::Server.new(["--help"])
28
- server.set_io(@stdin, @stdout)
29
- begin
30
- server.run
31
- rescue SystemExit => se
32
- se.status.should == 0
33
- @stdout.string.should =~ /Usage/m
34
- end
46
+ end
47
+
48
+ it "should raise print an error if the directory to serve does not exist" do
49
+ server = Heel::Server.new(%w[--root /not/valid])
50
+ server.set_io(@stdin,@stdout)
51
+ begin
52
+ server.run
53
+ rescue SystemExit => se
54
+ se.status.should == 1
55
+ @stdout.string.should =~ /Try .*--help/m
35
56
  end
36
-
37
- it "should have an error when invoked with invalid parameters" do
38
- server = Heel::Server.new(["--junk"])
39
- server.set_io(@stdin,@stdout)
40
- begin
41
- server.run
42
- rescue SystemExit => se
43
- se.status.should == 1
44
- @stdout.string.should =~ /Try .*--help/m
45
- end
57
+ end
58
+
59
+ it "should allow port and address to be set" do
60
+ server = Heel::Server.new(%w[--port 4242 --address 192.168.1.1])
61
+ server.merge_options
62
+ server.options.address.should == "192.168.1.1"
63
+ server.options.port.should == 4242
64
+ end
65
+
66
+ it "should allow the highlighting option to be unset" do
67
+ server = Heel::Server.new(%w[--no-highlighting])
68
+ server.merge_options
69
+ server.options.highlighting.should == false
70
+ end
71
+
72
+ it "should set no-launch-browser option and kill option" do
73
+ server = Heel::Server.new(%w[--no-launch-browser])
74
+ server.merge_options
75
+ server.options.launch_browser.should == false
76
+ end
77
+
78
+ it "should attempt to kill the process" do
79
+ server = Heel::Server.new(%w[--kill])
80
+ server.set_io(@stdin,@stdout)
81
+
82
+ begin
83
+ server.run
84
+ violated("Should have thrown SystemExit")
85
+ rescue SystemExit => se
86
+ se.status.should == 0
87
+ @stdout.string.should =~ /Done/m
46
88
  end
47
-
48
- it "should raise print an error if the directory to serve does not exist" do
49
- server = Heel::Server.new(%w[--root /not/valid])
50
- server.set_io(@stdin,@stdout)
51
- begin
52
- server.run
53
- rescue SystemExit => se
54
- se.status.should == 1
55
- @stdout.string.should =~ /Try .*--help/m
56
- end
89
+ end
90
+
91
+ it "should setup a heel directory" do
92
+ server = Heel::Server.new(%w[--daemonize])
93
+ server.set_io(@stdin,@stdout)
94
+ File.directory?(server.default_directory).should == false
95
+ server.setup_heel_dir
96
+ File.directory?(server.default_directory).should == true
97
+ @stdout.string.should =~ /Created/m
98
+ end
99
+
100
+ it "should send a signal to a pid" do
101
+ server = Heel::Server.new(%w[--kil])
102
+ server.set_io(@stdin,@stdout)
103
+ server.setup_heel_dir
104
+
105
+ File.open(server.pid_file,"w+") { |f| f.write("-42") }
106
+ begin
107
+ server.run
108
+ violated("Should have exited")
109
+ rescue SystemExit => se
110
+ se.status.should == 0
111
+ @stdout.string.should =~ /Sending TERM to process -42/m
57
112
  end
58
-
59
- it "should allow port and address to be set" do
60
- server = Heel::Server.new(%w[--port 4242 --address 192.168.1.1])
61
- server.merge_options
62
- server.options.address.should == "192.168.1.1"
63
- server.options.port.should == 4242
64
- end
65
-
66
- it "should allow the highlighting option to be unset" do
67
- server = Heel::Server.new(%w[--no-highlighting])
68
- server.merge_options
69
- server.options.highlighting.should == false
70
- end
71
-
72
- it "should set no-launch-browser option and kill option" do
73
- server = Heel::Server.new(%w[--no-launch-browser])
74
- server.merge_options
75
- server.options.launch_browser.should == false
76
- end
77
-
78
- it "should attempt to kill the process" do
79
- server = Heel::Server.new(%w[--kill])
80
- server.set_io(@stdin,@stdout)
81
-
82
- begin
83
- server.run
84
- violated("Should have thrown SystemExit")
85
- rescue SystemExit => se
86
- se.status.should == 0
87
- @stdout.string.should =~ /Done/m
88
- end
89
- end
90
-
91
- it "should setup a heel directory" do
92
- server = Heel::Server.new(%w[--daemonize])
93
- server.set_io(@stdin,@stdout)
94
- File.directory?(server.default_directory).should == false
95
- server.setup_heel_dir
96
- File.directory?(server.default_directory).should == true
97
- @stdout.string.should =~ /Created/m
98
- end
99
-
100
- it "should send a signal to a pid" do
101
- server = Heel::Server.new(%w[--kil])
102
- server.set_io(@stdin,@stdout)
103
- server.setup_heel_dir
104
-
105
- File.open(server.pid_file,"w+") { |f| f.write("-42") }
106
- begin
107
- server.run
108
- violated("Should have exited")
109
- rescue SystemExit => se
110
- se.status.should == 0
111
- @stdout.string.should =~ /Sending TERM to process -42/m
112
- end
113
- end
114
-
115
- end
113
+ end
114
+ end
@@ -0,0 +1,42 @@
1
+ #--
2
+ # Copyright (c) 2007, 2008 Jeremy Hinegardner
3
+ # All rights reserved. Licensed under the BSD license. See LICENSE for details
4
+ #++
5
+
6
+ require 'tasks/config'
7
+ #-------------------------------------------------------------------------------
8
+ # announcement methods
9
+ #-------------------------------------------------------------------------------
10
+
11
+ proj_config = Configuration.for('project')
12
+ namespace :announce do
13
+ desc "create email for ruby-talk"
14
+ task :email do
15
+ info = Utils.announcement
16
+
17
+ File.open("email.txt", "w") do |mail|
18
+ mail.puts "From: #{proj_config.author} <#{proj_config.email}>"
19
+ mail.puts "To: ruby-talk@ruby-lang.org"
20
+ mail.puts "Date: #{Time.now.rfc2822}"
21
+ mail.puts "Subject: [ANN] #{info[:subject]}"
22
+ mail.puts
23
+ mail.puts info[:title]
24
+ mail.puts
25
+ mail.puts info[:urls]
26
+ mail.puts
27
+ mail.puts info[:description]
28
+ mail.puts
29
+ mail.puts "{{ Release notes for Version #{Heel::VERSION} }}"
30
+ mail.puts
31
+ mail.puts info[:release_notes]
32
+ mail.puts
33
+ mail.puts info[:urls]
34
+ end
35
+ puts "Created the following as email.txt:"
36
+ puts "-" * 72
37
+ puts File.read("email.txt")
38
+ puts "-" * 72
39
+ end
40
+
41
+ CLOBBER << "email.txt"
42
+ end
data/tasks/config.rb ADDED
@@ -0,0 +1,103 @@
1
+ require 'configuration'
2
+
3
+ require 'rake'
4
+ require 'heel'
5
+ require 'heel/configuration'
6
+ require 'heel/version'
7
+
8
+ require 'tasks/utils'
9
+
10
+ #-----------------------------------------------------------------------
11
+ # General project configuration
12
+ #-----------------------------------------------------------------------
13
+ Configuration.for('project') {
14
+ name Heel.to_s.downcase
15
+ version Heel::VERSION
16
+ author "Jeremy Hinegardner"
17
+ email "jeremy at hinegardner dot org"
18
+ homepage Heel::Configuration::HOMEPAGE
19
+ description Utils.section_of("README", "description")
20
+ summary description.split(".").first
21
+ history "HISTORY"
22
+ license "LICENSE"
23
+ readme "README"
24
+ }
25
+
26
+ #-----------------------------------------------------------------------
27
+ # Packaging
28
+ #-----------------------------------------------------------------------
29
+ Configuration.for('packaging') {
30
+ # files in the project
31
+ proj_conf = Configuration.for('project')
32
+ files {
33
+ bin FileList["bin/*"]
34
+ lib FileList["lib/**/*.rb"]
35
+ test FileList["spec/**/*.rb"]
36
+ data FileList["data/**/*"]
37
+ tasks FileList["tasks/**/*.r{ake,b}"]
38
+ rdoc FileList[proj_conf.readme, proj_conf.history,
39
+ proj_conf.license] + lib
40
+ all bin + lib + test + data + rdoc + tasks
41
+ }
42
+
43
+ # ways to package the results
44
+ formats {
45
+ tgz true
46
+ zip true
47
+ gem Configuration::Table.has_key?('gem')
48
+ }
49
+ }
50
+
51
+ #-----------------------------------------------------------------------
52
+ # Gem packaging
53
+ #-----------------------------------------------------------------------
54
+ Configuration.for("gem") {
55
+ spec "gemspec.rb"
56
+ Configuration.for('packaging').files.all << spec
57
+ }
58
+
59
+ #-----------------------------------------------------------------------
60
+ # Testing
61
+ #-----------------------------------------------------------------------
62
+ Configuration.for('test') {
63
+ mode "spec"
64
+ files Configuration.for("packaging").files.test
65
+ options %w[ --format specdoc --color ]
66
+ ruby_opts %w[ ]
67
+ }
68
+
69
+ #-----------------------------------------------------------------------
70
+ # Rcov
71
+ #-----------------------------------------------------------------------
72
+ Configuration.for('rcov') {
73
+ output_dir "coverage"
74
+ libs %w[ lib ]
75
+ rcov_opts %w[ --html ]
76
+ ruby_opts %w[ ]
77
+ test_files Configuration.for('packaging').files.test
78
+
79
+ # hmm... how to configure remote publishing
80
+ }
81
+
82
+ #-----------------------------------------------------------------------
83
+ # Rdoc
84
+ #-----------------------------------------------------------------------
85
+ Configuration.for('rdoc') {
86
+ files Configuration.for('packaging').files.rdoc
87
+ main files.first
88
+ title Configuration.for('project').name
89
+ options %w[ --line-numbers --inline-source ]
90
+ output_dir "doc"
91
+ }
92
+
93
+ #-----------------------------------------------------------------------
94
+ # Rubyforge
95
+ #-----------------------------------------------------------------------
96
+ Configuration.for('rubyforge') {
97
+ project "copiousfreetime"
98
+ user "jjh"
99
+ host "rubyforge.org"
100
+ rdoc_location "#{user}@#{host}:/var/www/gforge-projects/copiousfreetime/heel"
101
+ }
102
+
103
+