Convert server to external command and enhance.
This commit is contained in:
parent
d2d5993f99
commit
aa46db87a7
173
Library/Contributions/examples/brew-server
Executable file
173
Library/Contributions/examples/brew-server
Executable file
@ -0,0 +1,173 @@
|
||||
#!/usr/bin/ruby
|
||||
|
||||
## brew server: Run a local webserver for browsing available and installed brews.
|
||||
# Note: this external command is ruby, but set up as a shell script, so that it gets exec'd.
|
||||
# This is required for sinatra's run-loop to take over.
|
||||
|
||||
puts "View our tasting menu at http://localhost:4567/\nUse \"Control-C\" to exit.\n\n"
|
||||
$:.unshift(ENV['HOMEBREW_LIBRARY_PATH'])
|
||||
|
||||
require 'rubygems'
|
||||
require 'sinatra'
|
||||
|
||||
require 'cgi'
|
||||
|
||||
require 'global'
|
||||
require 'formula'
|
||||
|
||||
def link_to_formula name
|
||||
"<a href=\"/formula/#{CGI.escape(name)}\">#{name}</a>"
|
||||
end
|
||||
|
||||
def css_style
|
||||
"" # No CSS defined yet.
|
||||
end
|
||||
|
||||
def search_form
|
||||
<<-EOS
|
||||
<form action="/search">
|
||||
Search: <input name="q" type="text"> <input type="submit">
|
||||
</form>
|
||||
EOS
|
||||
end
|
||||
|
||||
def html_page
|
||||
body = <<-HTML
|
||||
<html>
|
||||
<head>
|
||||
<title>Homebrew Menu</title>
|
||||
#{css_style}
|
||||
</head>
|
||||
<body>
|
||||
<div id="wrap">
|
||||
<div id="header">
|
||||
<h1><a href="./">Homebrew</a></h1>
|
||||
<p id="subtitle"><strong>The missing package manager for OS X</strong></p>
|
||||
</div>
|
||||
|
||||
<div id="informations">
|
||||
HTML
|
||||
yield body
|
||||
body += <<-HTML
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
HTML
|
||||
return body
|
||||
end
|
||||
|
||||
get '/' do
|
||||
return html_page do |s|
|
||||
s << <<-HTML
|
||||
<div class="row">#{search_form}</div>
|
||||
<div class="row">
|
||||
<ul>
|
||||
HTML
|
||||
Formulary.read_all do |name, klass|
|
||||
s << "<li>#{link_to_formula(name)}</li>"
|
||||
end
|
||||
s << <<-HTML
|
||||
</ul>
|
||||
</div>
|
||||
HTML
|
||||
end
|
||||
end
|
||||
|
||||
get '/search' do
|
||||
q = params['q']
|
||||
|
||||
formulae = Formulary.names with_aliases=true
|
||||
|
||||
if q =~ /^\/(.*)\/$/
|
||||
results = formulae.grep(Regexp.new($1))
|
||||
else
|
||||
search_term = Regexp.escape(q || "")
|
||||
results = formulae.grep(/.*#{search_term}.*/)
|
||||
end
|
||||
s = <<-HTML
|
||||
<html>
|
||||
<head>
|
||||
<title>Search Results</title>
|
||||
#{css_style}
|
||||
</head>
|
||||
<body>
|
||||
<h1>Results</h1>
|
||||
#{search_form}
|
||||
<h4>Searched for “#{q}”</h4>
|
||||
<ul>
|
||||
HTML
|
||||
|
||||
results.each do |name|
|
||||
s << "<li>#{link_to_formula(name)}</li>"
|
||||
end
|
||||
|
||||
s += <<-HTML
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
HTML
|
||||
|
||||
return s
|
||||
end
|
||||
|
||||
get '/formula/:name' do
|
||||
# klass = Formulary.read params[:name]
|
||||
klass = Formula.factory(params[:name])
|
||||
|
||||
installed = klass.installed? ? "Installed at" : "Not installed."
|
||||
installed_dd = klass.installed? ? "<a href=\"file://#{klass.prefix}\">#{klass.prefix}</a>" : ""
|
||||
|
||||
s = ""
|
||||
s << <<-HTML
|
||||
<html>
|
||||
<head>
|
||||
<title>Formula: #{klass.name}</title>
|
||||
#{css_style}
|
||||
</head>
|
||||
<body>
|
||||
<div>← <a href="/">Back to menu</a></div>
|
||||
<h1>#{klass.name}</h1>
|
||||
<dl>
|
||||
<dt>Version</dt>
|
||||
<dd>#{klass.version}</dd>
|
||||
|
||||
<dt>Homepage</dt>
|
||||
<dd><a href="#{klass.homepage}">#{klass.homepage}</a></dd>
|
||||
|
||||
<dt>Download</dt>
|
||||
<dd><a href="#{klass.url}">#{klass.url}</a></dd>
|
||||
|
||||
<dt>#{installed}</dt>
|
||||
<dd>#{installed_dd}</dd>
|
||||
HTML
|
||||
|
||||
unless klass.deps.count == 0
|
||||
s << <<-HTML
|
||||
<dt>Depends on</td>
|
||||
HTML
|
||||
klass.deps.each do |name|
|
||||
s << "<dd>#{link_to_formula(name)}</dd>"
|
||||
end
|
||||
end
|
||||
|
||||
used_by = Formula.get_used_by()[klass.name]
|
||||
unless used_by == nil
|
||||
s << <<-HTML
|
||||
<dt>Used by</td>
|
||||
HTML
|
||||
if used_by != nil
|
||||
used_by.each do |name|
|
||||
s << "<dd>#{link_to_formula(name)}</dd>"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
s += <<-HTML
|
||||
</dl>
|
||||
</body>
|
||||
</html>
|
||||
HTML
|
||||
|
||||
return s
|
||||
end
|
||||
@ -1,31 +0,0 @@
|
||||
require 'rubygems'
|
||||
require 'sinatra'
|
||||
|
||||
$LOAD_PATH << File.join(File.dirname(__FILE__), "../Library/Homebrew")
|
||||
$LOAD_PATH << File.join(File.dirname(__FILE__), "../Library/Formula")
|
||||
|
||||
require 'global'
|
||||
require 'formula'
|
||||
|
||||
get '/' do
|
||||
body = "<ul>"
|
||||
Formulary.read_all do |name, klass|
|
||||
body << "<li><a href=\"/formula/#{name}\">#{name}</a></li>"
|
||||
end
|
||||
body << "</ul>"
|
||||
end
|
||||
|
||||
get '/formula/:name' do
|
||||
klass = Formulary.read params[:name]
|
||||
body = "<h1>#{klass.to_s}</h1>"
|
||||
body << "<dl>"
|
||||
body << "<dt>Version</dt>"
|
||||
body << "<dd>#{klass.version}</dd>"
|
||||
body << "<dt>Homepage</dt>"
|
||||
body << "<dd><a href=\"#{klass.homepage}\">#{klass.homepage}</a></dd>"
|
||||
body << "<dt>Download</dt>"
|
||||
body << "<dd><a href=\"#{klass.url}\">#{klass.url}</a></dd>"
|
||||
body << "<dt>MD5</dt>"
|
||||
body << "<dd>#{klass.md5}</dd>"
|
||||
body << "</dl>"
|
||||
end
|
||||
Loading…
x
Reference in New Issue
Block a user