Class: Hyla::Commands::Serve

Inherits:
Hyla::Command show all
Defined in:
lib/hyla/commands/serve.rb

Class Method Summary collapse

Methods inherited from Hyla::Command

check_mandatory_option?

Class Method Details

.mime_typesObject



52
53
54
55
# File 'lib/hyla/commands/serve.rb', line 52

def self.mime_types
  mime_types_file = File.expand_path('../../../data/mime.types', File.dirname(__FILE__))
  WEBrick::HTTPUtils::load_mime_types(mime_types_file)
end

.process(args, options) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/hyla/commands/serve.rb', line 5

def self.process(args, options)
  include WEBrick

  my_opts = {}

  destination = options[:destination]  if self.check_mandatory_option?('-d / --destination', options[:destination])

  my_opts[:Port] = options[:port]
  my_opts[:BindAddress] = options[:host]
  my_opts[:baseurl] = options[:baseurl]
  my_opts[:MimeTypes] = self.mime_types
  my_opts[:DoNotReverseLookupmy_opts] = true
  my_opts[:StartCallback] = start_callback(options[:detach])
  my_opts[:AccessLog] = []
  my_opts[:Logger] = Log::new([], Log::WARN)

  # recreate NondisclosureName under utf-8 circumstance
  fh_option = WEBrick::Config::FileHandler
  fh_option[:NondisclosureName] = ['.ht*','~*']
  # Option added to allow to navigate into the directories
  fh_option[:FancyIndexing] = true

  #s = HTTPServer.new(webrick_options(my_opts))
  s = HTTPServer.new(my_opts)

  s.mount(my_opts[:baseurl],HTTPServlet::FileHandler, destination, fh_option)

  Hyla.logger.info "Server address:", "http://#{s.config[:BindAddress]}:#{s.config[:Port]}"

  if options[:detach] # detach the server
    pid = Process.fork { s.start }
    Process.detach(pid)
    Hyla.logger.info "Server detached with pid '#{pid}'.", "Run `kill -9 #{pid}' to stop the server."
  else # create a new server thread, then join it with current terminal
    t = Thread.new { s.start }
    trap("INT") { s.shutdown }
    t.join()
  end
end

.start_callback(detached) ⇒ Object



46
47
48
49
50
# File 'lib/hyla/commands/serve.rb', line 46

def self.start_callback(detached)
  unless detached
    Proc.new { Hyla.logger.info "Server running...", "press ctrl-c to stop." }
  end
end