rack-raker 0.0.1 → 0.1.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/Gemfile +8 -0
- data/Rakefile +8 -5
- data/config.ru +5 -3
- data/lib/rack/raker.rb +1 -3
- data/lib/rack/raker/app.rb +56 -18
- data/lib/rack/raker/middleware.rb +5 -7
- data/lib/rack/raker/task_manager.rb +21 -6
- data/lib/rack/raker/version.rb +5 -0
- data/lib/rack/raker/views/index.erb +10 -0
- data/lib/rack/raker/views/layout.erb +32 -0
- data/lib/rack/raker/views/show.erb +11 -0
- data/rack-raker.gemspec +26 -27
- data/test/app_test.rb +69 -0
- data/test/raker_test.rb +76 -0
- data/test/task_manager_test.rb +21 -3
- data/test/test_helper.rb +2 -1
- metadata +81 -21
- data/lib/rack/raker/app/views/index.erb +0 -7
- data/lib/rack/raker/app/views/layout.erb +0 -12
- data/lib/rack/raker/app/views/show.erb +0 -7
data/Gemfile
ADDED
data/Rakefile
CHANGED
@@ -1,10 +1,13 @@
|
|
1
|
-
require '
|
1
|
+
require 'bundler'
|
2
2
|
require 'rake/testtask'
|
3
3
|
|
4
|
+
Bundler::GemHelper.install_tasks
|
5
|
+
|
4
6
|
task :default => :test
|
5
7
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
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
|
-
|
2
|
+
$LOAD_PATH << 'lib'
|
3
|
+
require 'rack/raker'
|
3
4
|
|
4
|
-
use Rack::Reloader,
|
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)
|
data/lib/rack/raker.rb
CHANGED
@@ -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
|
data/lib/rack/raker/app.rb
CHANGED
@@ -1,33 +1,71 @@
|
|
1
|
-
require '
|
1
|
+
require 'erb'
|
2
2
|
|
3
3
|
module Rack
|
4
4
|
module Raker
|
5
|
-
class App
|
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
|
-
|
13
|
+
def call(env)
|
14
|
+
request = Request.new(env)
|
8
15
|
|
9
|
-
|
10
|
-
|
11
|
-
@
|
12
|
-
|
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
|
-
|
16
|
-
get '/rake/?' do
|
27
|
+
def index
|
17
28
|
@tasks = @manager.tasks
|
18
|
-
erb :index
|
19
29
|
end
|
20
30
|
|
21
|
-
|
22
|
-
@
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
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
|
-
|
30
|
-
|
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
|
-
@
|
7
|
-
@app
|
8
|
-
@rakefile = args.first
|
6
|
+
@rack = args.shift
|
7
|
+
@app = App.new(*args)
|
9
8
|
end
|
10
9
|
|
11
10
|
def call(env)
|
12
|
-
|
13
|
-
|
14
|
-
|
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([
|
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
|
-
|
23
|
-
|
24
|
-
|
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,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 %>/">< Back</a>
|
data/rack-raker.gemspec
CHANGED
@@ -1,37 +1,36 @@
|
|
1
|
-
|
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
|
-
|
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
|
-
|
11
|
-
s.
|
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.
|
14
|
-
s.
|
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 =
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
lib
|
26
|
-
|
27
|
-
|
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
|
|
data/test/app_test.rb
ADDED
@@ -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
|
data/test/raker_test.rb
ADDED
@@ -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
|
data/test/task_manager_test.rb
CHANGED
@@ -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 = [
|
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
|
data/test/test_helper.rb
CHANGED
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
|
-
|
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:
|
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
|
-
|
18
|
-
|
19
|
-
|
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
|
-
|
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:
|
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
|
-
-
|
46
|
-
-
|
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://
|
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
|
-
|
73
|
-
|
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.
|
134
|
+
rubyforge_project: rack-raker
|
135
|
+
rubygems_version: 1.3.7
|
78
136
|
signing_key:
|
79
|
-
specification_version:
|
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
|