rack-raker 0.0.1 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'rack'
4
+ gem 'rake'
5
+
6
+ group :development do
7
+ gem 'test-spec'
8
+ end
data/Rakefile CHANGED
@@ -1,10 +1,13 @@
1
- require 'rake'
1
+ require 'bundler'
2
2
  require 'rake/testtask'
3
3
 
4
+ Bundler::GemHelper.install_tasks
5
+
4
6
  task :default => :test
5
7
 
6
- Rake::TestTask.new('test') do |t|
7
- t.pattern = 'test/**/*_test.rb'
8
- t.warning = true
9
- t.verbose = true
8
+ desc 'Run the tests'
9
+ task :test do
10
+ require 'rake/runtest'
11
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), 'lib')
12
+ Rake.run_tests 'test/**/*_test.rb'
10
13
  end
data/config.ru CHANGED
@@ -1,13 +1,15 @@
1
1
  require 'rack'
2
- require 'lib/rack/raker'
2
+ $LOAD_PATH << 'lib'
3
+ require 'rack/raker'
3
4
 
4
- use Rack::Reloader, 5
5
+ use Rack::Reloader, 0
5
6
 
6
7
  rakefile = ::File.join(::File.dirname(__FILE__), 'Rakefile')
7
8
 
9
+ # Raker::Middleware
8
10
  use Rack::Raker, rakefile
9
- # To test Raker::Middleware
10
11
  require 'rack/lobster'
11
12
  run Rack::Lobster.new
12
13
 
14
+ # # Raker::App
13
15
  # run Rack::Raker.new(rakefile)
@@ -1,13 +1,11 @@
1
1
  module Rack
2
2
  module Raker
3
3
 
4
- VERSION = '0.0.1'
5
-
6
4
  autoload :App, 'rack/raker/app'
7
5
  autoload :Middleware, 'rack/raker/middleware'
8
6
  autoload :TaskManager, 'rack/raker/task_manager'
7
+ autoload :VERSION, 'rack/raker/version'
9
8
 
10
- # TODO: Add optional URL map.
11
9
  def self.new(*args)
12
10
  if args.first.class == String
13
11
  # run
@@ -1,33 +1,71 @@
1
- require 'sinatra/base'
1
+ require 'erb'
2
2
 
3
3
  module Rack
4
4
  module Raker
5
- class App < Sinatra::Base
5
+ class App
6
+ def initialize(rakefile, *args)
7
+ @rakefile = rakefile
8
+ @users = args.pop if args.last.is_a?(Hash)
9
+ @path = (args.first || '/rake').chomp('/')
10
+ @manager = TaskManager.new(@rakefile)
11
+ end
6
12
 
7
- set :root, ::File.dirname(__FILE__) + '/app'
13
+ def call(env)
14
+ request = Request.new(env)
8
15
 
9
- def initialize(*args)
10
- @args = args
11
- @rakefile = args.first
12
- @manager = TaskManager.new(@rakefile)
16
+ if request.path_info =~ /^#{@path}\/$/
17
+ process 'index', lambda { index }, env
18
+ elsif request.path_info =~ /^#{@path}\/([^\/]+)\/$/ && @manager.has?($1)
19
+ process 'show', lambda { show($1) }, env
20
+ elsif request.path_info.start_with?(@path) && request.path_info[-1] != 47
21
+ [301, {'Content-Type' => 'text/plain','Location' => "#{request.path}/"}, ['moved permanently']]
22
+ else
23
+ [404, {'Content-Type' => 'text/plain'}, ['not found']]
24
+ end
13
25
  end
14
26
 
15
- # TODO: Show task descriptions (or make an actual UI).
16
- get '/rake/?' do
27
+ def index
17
28
  @tasks = @manager.tasks
18
- erb :index
19
29
  end
20
30
 
21
- get '/rake/:task' do |task|
22
- @task = task
23
- @output = @manager.run(task)
24
- # TODO: Maybe show a helpful failure message.
25
- redirect '/' unless @output
26
- erb :show
31
+ def show(task)
32
+ @output, @error = nil, nil
33
+ begin
34
+ @output = @manager.run(task)
35
+ rescue Exception => ex
36
+ @error = ex.message
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ def process(action, block, env)
43
+ if @users.nil?
44
+ process_internal(action, block)
45
+ else
46
+ app = Rack::Auth::Digest::MD5.new(lambda { process_internal(action, block) }) do |username|
47
+ @users[username]
48
+ end
49
+ app.realm = 'Rack::Raker'
50
+ app.opaque = opaque
51
+ app.call(env)
52
+ end
53
+ end
54
+
55
+ def opaque
56
+ @opaque ||= @users.key?('opaque') ? @users.delete('opaque') : 'rack-raker'
57
+ end
58
+
59
+ def process_internal(action, block)
60
+ block.call
61
+ html = render('layout') { render(action) }
62
+ [200, {'Content-Type' => 'text/html'}, [html]]
27
63
  end
28
64
 
29
- not_found do
30
- redirect '/rake'
65
+ def render(view)
66
+ path = ::File.join(::File.dirname(__FILE__), "views/#{view}.erb")
67
+ content = ::File.open(path) { |file| file.read }
68
+ ERB.new(content).result(binding)
31
69
  end
32
70
 
33
71
  end # App
@@ -3,16 +3,14 @@ module Rack
3
3
  class Middleware
4
4
 
5
5
  def initialize(*args)
6
- @args = args
7
- @app = args.shift
8
- @rakefile = args.first
6
+ @rack = args.shift
7
+ @app = App.new(*args)
9
8
  end
10
9
 
11
10
  def call(env)
12
- request = Request.new(env)
13
- @status, @headers, @body = @app.call(env)
14
- return [@status, @headers, @body] unless request.path =~ /^\/rake/
15
- Raker::App.new(@rakefile).call(env)
11
+ res = @app.call(env)
12
+ res = @rack.call(env) if res[0] == 404
13
+ res
16
14
  end
17
15
 
18
16
  end # Middleware
@@ -1,27 +1,42 @@
1
+ require 'open3'
2
+
1
3
  module Rack
2
4
  module Raker
3
5
  class TaskManager
4
6
 
7
+ class RakefileNotFound < Exception; end
8
+
5
9
  attr_accessor :tasks
6
10
 
7
11
  def initialize(rakefile)
12
+ raise RakefileNotFound unless ::File.exists?(rakefile)
8
13
  @rakefile = rakefile
9
14
  end
10
15
 
16
+ def rake
17
+ @rake ||= %x[ whereis rake ].match(/rake: ([^\s]+)/)[1]
18
+ end
19
+
11
20
  # Return an array of Rake tasks.
12
21
  def tasks
13
- output = %x[ rake -f #{@rakefile} -s -T ]
22
+ output = %x[ #{rake} -f #{@rakefile} -s -T ]
14
23
  @tasks ||= output.split("\n").map do |task|
15
- task.match(/^rake\s([\w:]+)/)[1]
16
- end
24
+ task.match(/^rake\s([^\s]+)\s+#\s(.+)/)[1..2]
25
+ end.compact
26
+ end
27
+
28
+ def has?(task)
29
+ tasks.select { |name,desc| task == name }.size == 1
17
30
  end
18
31
 
19
32
  # Run the specified Rake +task+ and returns the (string) output, or false upon failure.
20
33
  # TODO: Maybe move the +rake_opts+ elsewhere.
21
34
  def run(task, rake_opts = ['-s'])
22
- output = %x[ rake -f #{@rakefile} #{rake_opts.join(' ')} #{task} 2>/dev/null ]
23
- output = false if output.empty?
24
- output
35
+ Open3.popen3("#{rake} -f #{@rakefile} #{rake_opts.join(' ')} #{task}") do |stdinn, stdout, stderr|
36
+ err = stderr.read.split(/\n/).delete_if { |line| /[^:]+:\d+: warning: .+/ =~ line }.join("\n")
37
+ raise err unless err.empty?
38
+ stdout.read
39
+ end
25
40
  end
26
41
 
27
42
  end # TaskManager
@@ -0,0 +1,5 @@
1
+ module Rack
2
+ module Raker
3
+ VERSION = '0.1.1'
4
+ end
5
+ end
@@ -0,0 +1,10 @@
1
+ <h3><code>$ rake -T</code></h3>
2
+
3
+ <table>
4
+ <% @tasks.each do |task, desc| %>
5
+ <tr>
6
+ <td><a href="<%= "#{@path}/#{task}/" %>"><%= task %></a></td>
7
+ <td><%= desc %></td>
8
+ </tr>
9
+ <% end %>
10
+ </table>
@@ -0,0 +1,32 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Rack::Raker</title>
5
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
6
+ <style type="text/css">
7
+ html, body { padding: 0; margin: 0; font-family: Arial,Verdana,Helvetica; font-size:14px; height:100%; }
8
+ #container { min-height:100%; position:relative; }
9
+ h1 { background: #000; margin: 0; padding: 8px; color: #FFF; }
10
+ h3 { margin: 20px; color: #900; }
11
+ h3 a { color: #900; }
12
+ .body { margin: 0 20px; padding: 0 0 80px; }
13
+ table { margin: 0; border: 1px solid #ccc; padding: 0; border-spacing: 0; border-collapse: collapse; }
14
+ table tr td { margin: 20px;border:solid 1px #ccc;padding:6px; }
15
+ div.footer { padding:20px 0;background:#efefef;margin-top:20px;border-top:solid 1px #ccc;color:#999; font-size:13px; text-indent:20px; position:absolute; bottom:0; width:100%; }
16
+ div.footer a { color:#999; }
17
+ pre { background:#ffd;padding:20px;margin:10px;border:solid 1px #fc0; }
18
+ pre.error { background:#fcc;border-color:#f00; }
19
+ a.back { color:#333; margin:20px; font-size:12px; display:block; }
20
+ </style>
21
+ </head>
22
+
23
+ <body>
24
+ <div id="container">
25
+ <h1>Rack::Raker</h1>
26
+ <div class="body">
27
+ <%= yield %>
28
+ </div>
29
+ <div class="footer">Powered by <a href="http://rubygems.org/gems/rack-raker">Rack::Raker</a> v<%= Rack::Raker::VERSION %></div>
30
+ </div>
31
+ </body>
32
+ </html>
@@ -0,0 +1,11 @@
1
+ <h3><code>$ <a href="<%= @path %>/">rake -T</a></code></h3>
2
+
3
+ <h3><code>$ rake <%= @task %></code></h3>
4
+
5
+ <% unless @output.nil? %>
6
+ <pre><%= @output %></pre>
7
+ <% else %>
8
+ <pre class="error"><%= @error %></pre>
9
+ <% end %>
10
+
11
+ <a class="back" href="<%= @path %>/">&lt; Back</a>
@@ -1,37 +1,36 @@
1
- Gem::Specification.new do |s|
2
- s.specification_version = 2 if s.respond_to? :specification_version=
3
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
1
+ require 'rake'
4
2
 
5
- s.name = 'rack-raker'
6
- s.version = '0.0.1'
7
- s.date = '2009-11-02'
8
- s.homepage = 'http://oshuma.github.com/rack-raker'
3
+ require File.expand_path("../lib/rack/raker/version", __FILE__)
9
4
 
10
- s.authors = ['Dale Campbell']
11
- s.email = 'oshuma@gmail.com'
5
+ Gem::Specification.new do |s|
6
+ s.name = 'rack-raker'
7
+ s.version = Rack::Raker::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ['Dale Campbell','Felipe Oliveira']
10
+ s.email = ['oshuma@gmail.com','felipecvo@gmail.com']
11
+ s.homepage = 'http://rubygems.org/gems/rack-raker'
12
+ s.summary = 'Rack Rake middleware/app.'
13
+ s.description = s.summary
12
14
 
13
- s.description = 'Rack Rake middleware/app.'
14
- s.summary = 'Rack Rake middleware/app.'
15
+ s.required_rubygems_version = ">= 1.3.6"
16
+ s.rubyforge_project = "rack-raker"
15
17
 
16
18
  s.add_dependency 'rack', '>= 0.4'
19
+
20
+ s.add_development_dependency "bundler", ">= 1.0.0"
21
+ s.add_development_dependency "test-spec", ">= 0.9.0"
22
+
17
23
  s.require_paths = %w[lib]
18
24
 
19
- s.files = %w[
20
- README
21
- Rakefile
22
- config.ru
23
- rack-raker.gemspec
24
- lib/rack/raker.rb
25
- lib/rack/raker/app.rb
26
- lib/rack/raker/app/views/index.erb
27
- lib/rack/raker/app/views/layout.erb
28
- lib/rack/raker/app/views/show.erb
29
- lib/rack/raker/middleware.rb
30
- lib/rack/raker/task_manager.rb
31
- test/Rakefile
32
- test/test_helper.rb
33
- test/task_manager_test.rb
34
- ]
25
+ s.files = FileList[
26
+ 'Gemfile',
27
+ 'README',
28
+ 'Rakefile',
29
+ 'config.ru',
30
+ 'rack-raker.gemspec',
31
+ 'lib/**/*',
32
+ 'test/**/*',
33
+ ].to_a
35
34
 
36
35
  s.test_files = s.files.select { |path| path =~ /^test\/.*_test.rb/ }
37
36
 
@@ -0,0 +1,69 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ describe 'App' do
4
+ include Rack::Test::Methods
5
+
6
+ before(:each) do
7
+ @tasks = [
8
+ ['raker:awesome','Namespaced awesome task'],
9
+ ['raker:util','Do some utility stuff'],
10
+ ['some_task','Some other task']
11
+ ]
12
+ @rakefile = File.join(File.dirname(__FILE__), 'Rakefile')
13
+ end
14
+
15
+ def app(raker_app = nil)
16
+ raker_app || Rack::Raker::App.new(@rakefile)
17
+ end
18
+
19
+ it 'should respond to the default index path' do
20
+ get '/rake/'
21
+ last_response.should.be.ok
22
+ end
23
+
24
+ it 'should list the tasks' do
25
+ get '/rake/'
26
+ @tasks.each do |task_name, task_desc|
27
+ last_response.body.should.include?(task_name)
28
+ last_response.body.should.include?(task_desc)
29
+ end
30
+ end
31
+
32
+ it 'should run the given task' do
33
+ task = @tasks.first.first
34
+ get "/rake/#{task}/"
35
+ last_response.should.be.ok
36
+ end
37
+
38
+ it 'should return 404 if task not found' do
39
+ get "/rake/not_a_real_task/"
40
+ last_response.should.be.not_found
41
+ end
42
+
43
+ it 'should redirect if not end with slash' do
44
+ get "/rake/task"
45
+ last_response.should.be.redirect
46
+ end
47
+
48
+ it 'should respond in different url' do
49
+ custom_app = Rack::Raker::App.new(@rakefile, '/myapp/rack-rake/')
50
+ resp = Rack::MockRequest.new(custom_app).get('/myapp/rack-rake/')
51
+ resp.should.be.ok
52
+ end
53
+
54
+ it 'should link to tasks with new path' do
55
+ custom_app = Rack::Raker::App.new(@rakefile, '/myapp/rack-rake/')
56
+ resp = Rack::MockRequest.new(custom_app).get('/myapp/rack-rake/')
57
+ resp.should.be.ok
58
+ @tasks.each do |task, desc|
59
+ resp.body.should.include?("/myapp/rack-rake/#{task}/")
60
+ end
61
+ end
62
+
63
+ it 'should link to home with new path' do
64
+ custom_app = Rack::Raker::App.new(@rakefile, '/myapp/rack-rake/')
65
+ resp = Rack::MockRequest.new(custom_app).get("/myapp/rack-rake/#{@tasks.first.first}/")
66
+ resp.should.be.ok
67
+ resp.body.should.include?('"/myapp/rack-rake/"')
68
+ end
69
+ end
@@ -0,0 +1,76 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ describe 'Raker' do
4
+ before(:each) do
5
+ @rakefile = File.join(File.dirname(__FILE__), 'Rakefile')
6
+ end
7
+
8
+ it 'should require authentication' do
9
+ app = Rack::Raker.new(@rakefile, '/rake', { 'user' => 'raker' })
10
+ res = Rack::MockRequest.new(app).get('/rake/')
11
+ res.status.should.be 401
12
+ end
13
+
14
+ it 'should authenticate user' do
15
+ app = Rack::Raker.new(@rakefile, '/rake', { 'user' => 'raker' })
16
+ @request = Rack::MockRequest.new(app)
17
+
18
+ request_with_digest_auth('GET', '/rake/', 'user', 'raker') do |response|
19
+ response.status.should.be 200
20
+ end
21
+ end
22
+ end
23
+
24
+ def request(method, path, headers = {}, &block)
25
+ response = @request.request(method, path, headers)
26
+ block.call(response) if block
27
+ return response
28
+ end
29
+
30
+ def request_with_digest_auth(method, path, username, password, options = {}, &block)
31
+ request_options = {}
32
+ request_options[:input] = options.delete(:input) if options.include? :input
33
+
34
+ response = request(method, path, request_options)
35
+
36
+ return response unless response.status == 401
37
+
38
+ if wait = options.delete(:wait)
39
+ sleep wait
40
+ end
41
+
42
+ challenge = response['WWW-Authenticate'].split(' ', 2).last
43
+
44
+ params = Rack::Auth::Digest::Params.parse(challenge)
45
+
46
+ params['username'] = username
47
+ params['nc'] = '00000001'
48
+ params['cnonce'] = 'nonsensenonce'
49
+ params['uri'] = path
50
+
51
+ params['method'] = method
52
+
53
+ params.update options
54
+
55
+ params['response'] = MockDigestRequest.new(params).response(password)
56
+
57
+ request(method, path, request_options.merge('HTTP_AUTHORIZATION' => "Digest #{params}"), &block)
58
+ end
59
+
60
+ class MockDigestRequest
61
+ def initialize(params)
62
+ @params = params
63
+ end
64
+ def method_missing(sym)
65
+ if @params.has_key? k = sym.to_s
66
+ return @params[k]
67
+ end
68
+ super
69
+ end
70
+ def method
71
+ @params['method']
72
+ end
73
+ def response(password)
74
+ Rack::Auth::Digest::MD5.new(nil).send :digest, self, password
75
+ end
76
+ end
@@ -1,8 +1,12 @@
1
1
  require File.join(File.dirname(__FILE__), 'test_helper')
2
2
 
3
- describe TaskManager do
3
+ describe 'TaskManager' do
4
4
  before(:each) do
5
- @tasks = ['raker:awesome', 'raker:util', 'some_task']
5
+ @tasks = [
6
+ ['raker:awesome','Namespaced awesome task'],
7
+ ['raker:util','Do some utility stuff'],
8
+ ['some_task','Some other task']
9
+ ]
6
10
  @rakefile = File.join(File.dirname(__FILE__), 'Rakefile')
7
11
  @manager = TaskManager.new(@rakefile)
8
12
  end
@@ -12,6 +16,20 @@ describe TaskManager do
12
16
  end
13
17
 
14
18
  it 'should run the given task' do
15
- @manager.run(@tasks.first).should.not.be false
19
+ @manager.run(@tasks.first.first).should.not.be false
20
+ end
21
+
22
+ it 'should raise RakefileNotFound' do
23
+ lambda do
24
+ TaskManager.new('/not_a_real/Rakefile')
25
+ end.should.raise TaskManager::RakefileNotFound
26
+ end
27
+
28
+ it 'should return true if the given task exists' do
29
+ @manager.has?(@tasks.first.first).should.be true
30
+ end
31
+
32
+ it 'should return false if the given task does not exists' do
33
+ @manager.has?('no_one').should.be false
16
34
  end
17
35
  end
@@ -1,5 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'test/spec'
3
- require File.expand_path("#{File.dirname(__FILE__)}/../lib/rack/raker")
3
+ require 'rack/test'
4
4
 
5
+ require File.expand_path("#{File.dirname(__FILE__)}/../lib/rack/raker")
5
6
  include Rack::Raker
metadata CHANGED
@@ -1,29 +1,75 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-raker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ hash: 25
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 1
10
+ version: 0.1.1
5
11
  platform: ruby
6
12
  authors:
7
13
  - Dale Campbell
14
+ - Felipe Oliveira
8
15
  autorequire:
9
16
  bindir: bin
10
17
  cert_chain: []
11
18
 
12
- date: 2009-11-02 00:00:00 -06:00
19
+ date: 2010-12-18 00:00:00 -05:00
13
20
  default_executable:
14
21
  dependencies:
15
22
  - !ruby/object:Gem::Dependency
16
23
  name: rack
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
20
27
  requirements:
21
28
  - - ">="
22
29
  - !ruby/object:Gem::Version
30
+ hash: 3
31
+ segments:
32
+ - 0
33
+ - 4
23
34
  version: "0.4"
24
- version:
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: bundler
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 23
46
+ segments:
47
+ - 1
48
+ - 0
49
+ - 0
50
+ version: 1.0.0
51
+ type: :development
52
+ version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ name: test-spec
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ hash: 59
62
+ segments:
63
+ - 0
64
+ - 9
65
+ - 0
66
+ version: 0.9.0
67
+ type: :development
68
+ version_requirements: *id003
25
69
  description: Rack Rake middleware/app.
26
- email: oshuma@gmail.com
70
+ email:
71
+ - oshuma@gmail.com
72
+ - felipecvo@gmail.com
27
73
  executables: []
28
74
 
29
75
  extensions: []
@@ -31,22 +77,26 @@ extensions: []
31
77
  extra_rdoc_files:
32
78
  - README
33
79
  files:
80
+ - Gemfile
34
81
  - README
35
82
  - Rakefile
36
83
  - config.ru
37
84
  - rack-raker.gemspec
38
- - lib/rack/raker.rb
39
- - lib/rack/raker/app.rb
40
- - lib/rack/raker/app/views/index.erb
41
- - lib/rack/raker/app/views/layout.erb
42
- - lib/rack/raker/app/views/show.erb
85
+ - lib/rack/raker/version.rb
43
86
  - lib/rack/raker/middleware.rb
87
+ - lib/rack/raker/app.rb
44
88
  - lib/rack/raker/task_manager.rb
45
- - test/Rakefile
46
- - test/test_helper.rb
89
+ - lib/rack/raker/views/show.erb
90
+ - lib/rack/raker/views/index.erb
91
+ - lib/rack/raker/views/layout.erb
92
+ - lib/rack/raker.rb
47
93
  - test/task_manager_test.rb
94
+ - test/app_test.rb
95
+ - test/test_helper.rb
96
+ - test/raker_test.rb
97
+ - test/Rakefile
48
98
  has_rdoc: true
49
- homepage: http://oshuma.github.com/rack-raker
99
+ homepage: http://rubygems.org/gems/rack-raker
50
100
  licenses: []
51
101
 
52
102
  post_install_message:
@@ -60,23 +110,33 @@ rdoc_options:
60
110
  require_paths:
61
111
  - lib
62
112
  required_ruby_version: !ruby/object:Gem::Requirement
113
+ none: false
63
114
  requirements:
64
115
  - - ">="
65
116
  - !ruby/object:Gem::Version
117
+ hash: 3
118
+ segments:
119
+ - 0
66
120
  version: "0"
67
- version:
68
121
  required_rubygems_version: !ruby/object:Gem::Requirement
122
+ none: false
69
123
  requirements:
70
124
  - - ">="
71
125
  - !ruby/object:Gem::Version
72
- version: "0"
73
- version:
126
+ hash: 23
127
+ segments:
128
+ - 1
129
+ - 3
130
+ - 6
131
+ version: 1.3.6
74
132
  requirements: []
75
133
 
76
- rubyforge_project:
77
- rubygems_version: 1.3.5
134
+ rubyforge_project: rack-raker
135
+ rubygems_version: 1.3.7
78
136
  signing_key:
79
- specification_version: 2
137
+ specification_version: 3
80
138
  summary: Rack Rake middleware/app.
81
139
  test_files:
82
140
  - test/task_manager_test.rb
141
+ - test/app_test.rb
142
+ - test/raker_test.rb
@@ -1,7 +0,0 @@
1
- <h3><code>$ rake -T</code></h3>
2
-
3
- <ul>
4
- <% @tasks.each do |task| %>
5
- <li><a href="/rake/<%= task %>"><%= task %></a></li>
6
- <% end %>
7
- </ul>
@@ -1,12 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>Rack::Raker</title>
5
- <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
6
- </head>
7
-
8
- <body>
9
- <h1>Rack::Raker</h1>
10
- <%= yield %>
11
- </body>
12
- </html>
@@ -1,7 +0,0 @@
1
- <h3><code>$ <a href="/rake">rake -T</a></code></h3>
2
-
3
- <h3><code>$ rake <%= @task %></code></h3>
4
-
5
- <pre>
6
- <%= @output %>
7
- </pre>