Class: Jekyll::Commands::Serve
Defined Under Namespace
Classes: Servlet
Constant Summary
collapse
- COMMAND_OPTIONS =
{
"ssl_cert" => ["--ssl-cert [CERT]", "X.509 (SSL) certificate."],
"host" => ["host", "-H", "--host [HOST]", "Host to bind to"],
"open_url" => ["-o", "--open-url", "Launch your browser with your site."],
"detach" => ["-B", "--detach", "Run the server in the background (detach)"],
"ssl_key" => ["--ssl-key [KEY]", "X.509 (SSL) Private Key."],
"port" => ["-P", "--port [PORT]", "Port to listen on"],
"baseurl" => ["-b", "--baseurl [URL]", "Base URL"],
"skip_initial_build" => ["skip_initial_build", "--skip-initial-build",
"Skips the initial site build which occurs before the server is started."]
}
Class Method Summary
collapse
add_build_options, configuration_from_options, inherited, process_site, subclasses
Class Method Details
.admin ⇒ Object
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/jekyll/commands/serve.rb', line 55
def admin
Class.new WEBrick::HTTPServlet::AbstractServlet do
def do_GET request, response
WEBrick::HTTPAuth.basic_auth(request, response, 'My Realm') do |user, pass|
credentials = SafeYAML.load_file(Jekyll::Configuration::DEFAULTS['source'] + '/admin/config.yml')
user == credentials['user'] && pass == credentials['password']
end
status, content_type, body = 'hello'
body_text = IO.read(File.join(Jekyll::Configuration::DEFAULTS['source'], 'admin/posts.html'))
body_text.gsub!('% previous_post %', IO.read(Jekyll::Configuration::DEFAULTS['source'] + '/_posts/' + Dir.entries(Jekyll::Configuration::DEFAULTS['source'] + '/_posts')[-1]))
response.status = 200
response['Content-Type'] = 'text/html'
response.body = body_text
end
def do_POST request, response
puts request
File.open(Jekyll::Configuration::DEFAULTS['source'] + '/_posts/' + DateTime.now.strftime('%Y-%m-%d') + '-post' + DateTime.now.strftime('%s') + '.markdown', 'wb') do |f|
f.write(request.query['post'])
end
response.status = 200
response['Content-Type'] = 'text/html'
response.body = 'Your post has been added...'
end
end
end
|
.init_with_program(prog) ⇒ Object
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/jekyll/commands/serve.rb', line 19
def init_with_program(prog)
prog.command(:serve) do |cmd|
cmd.description "Serve your site locally"
cmd.syntax "serve [options]"
cmd.alias :server
cmd.alias :s
add_build_options(cmd)
COMMAND_OPTIONS.each do |key, val|
cmd.option key, *val
end
cmd.action do |_, opts|
opts["serving"] = true
opts["watch" ] = true unless opts.key?("watch")
Build.process(opts)
Serve.process(opts)
end
end
end
|
.process(opts) ⇒ Object
42
43
44
45
46
47
48
49
50
51
52
53
|
# File 'lib/jekyll/commands/serve.rb', line 42
def process(opts)
opts = configuration_from_options(opts)
destination = opts["destination"]
setup(destination)
server = WEBrick::HTTPServer.new(webrick_opts(opts)).tap { |o| o.unmount("") }
server.mount(opts["baseurl"], Servlet, destination, file_handler_opts)
server.mount('/admin', admin)
Jekyll.logger.info "Server address:", server_address(server, opts)
launch_browser server, opts if opts["open_url"]
boot_or_detach server, opts
end
|