class Photish::Command::Host

Public Instance Methods

run() click to toggle source
# File lib/photish/command/host.rb, line 4
def run
  log.debug "Site will be running at http://0.0.0.0:#{port}/"
  log.debug "Monitoring paths #{paths_to_monitor}"

  regenerate_entire_site
  regenerate_thread
  start_http_server_with_listener
end

Private Instance Methods

access_log() click to toggle source
# File lib/photish/command/host.rb, line 80
def access_log
  [
    [Photish::Log::IO.new(log, :debug),
     WEBrick::AccessLog::COMBINED_LOG_FORMAT]
  ]
end
changes_as_hash(mod, add, del) click to toggle source
# File lib/photish/command/host.rb, line 69
def changes_as_hash(mod, add, del)
  { modified: mod,
    added:    add,
    removed:  del, }
end
handle_change(mod, add, del) click to toggle source
# File lib/photish/command/host.rb, line 63
def handle_change(mod, add, del)
  changes = changes_as_hash(mod, add, del)
  log.debug "File change detected: #{changes}}"
  queue.push(changes)
end
listener() click to toggle source
# File lib/photish/command/host.rb, line 55
def listener
  @listener ||= Listen.to(*paths_to_monitor) do |mod, add, del|
    handle_errors('File Change Listener') do
      handle_change(mod, add, del)
    end
  end
end
paths_to_monitor() click to toggle source
# File lib/photish/command/host.rb, line 75
def paths_to_monitor
  [site_dir,
   photo_dir]
end
queue() click to toggle source
# File lib/photish/command/host.rb, line 98
def queue
  @queue ||= Queue.new
end
regenerate_entire_site() click to toggle source
# File lib/photish/command/host.rb, line 87
def regenerate_entire_site
  log.debug "Regenerating site"
  Photish::Command::Generate.new(regenerate_runtime_config)
                            .execute
end
regenerate_loop() click to toggle source
# File lib/photish/command/host.rb, line 40
def regenerate_loop
  loop do
    queue.pop
    queue.clear
    regenerate_entire_site
  end
end
regenerate_runtime_config() click to toggle source
# File lib/photish/command/host.rb, line 93
def regenerate_runtime_config
  runtime_config.merge(url: { type: 'absolute_relative' },
                       soft_failure: true)
end
regenerate_thread() click to toggle source
# File lib/photish/command/host.rb, line 32
def regenerate_thread
  @regenerate_thread ||= Thread.new do
    handle_errors('Regenerate Thread') do
      regenerate_loop
    end
  end
end
server() click to toggle source
# File lib/photish/command/host.rb, line 48
def server
  @server ||= WEBrick::HTTPServer.new(Port: port,
                                      DocumentRoot: output_dir,
                                      AccessLog: access_log,
                                      Logger: log)
end
start_http_server_with_listener() click to toggle source
# File lib/photish/command/host.rb, line 22
def start_http_server_with_listener
  trap 'INT' do server.shutdown end
  listener.start
  server.start
  log.debug "Photish host has shutdown"
ensure
  regenerate_thread.exit if @regenerate_thread
  listener.stop if @listener
end