class Jekyll::Commands::Serve::Servlet

Constants

DEFAULTS

Public Class Methods

new(server, root, callbacks) click to toggle source
Calls superclass method
# File lib/jekyll/commands/serve/servlet.rb, line 134
def initialize(server, root, callbacks)
  # So we can access them easily.
  @jekyll_opts = server.config[:JekyllOptions]
  set_defaults
  super
end

Public Instance Methods

do_GET(req, res) click to toggle source

rubocop:disable Naming/MethodName

Calls superclass method
# File lib/jekyll/commands/serve/servlet.rb, line 159
def do_GET(req, res)
  rtn = super

  if @jekyll_opts["livereload"]
    return rtn if SkipAnalyzer.skip_processing?(req, res, @jekyll_opts)

    processor = BodyProcessor.new(res.body, @jekyll_opts)
    processor.process!
    res.body = processor.new_body
    res.content_length = processor.content_length.to_s

    if processor.livereload_added
      # Add a header to indicate that the page content has been modified
      res["X-Rack-LiveReload"] = "1"
    end
  end

  validate_and_ensure_charset(req, res)
  res.header.merge!(@headers)
  rtn
end
search_file(req, res, basename) click to toggle source

Add the ability to tap file.html the same way that Nginx does on our Docker images (or on GitHub Pages.) The difference is that we might end up with a different preference on which comes first.

Calls superclass method
# File lib/jekyll/commands/serve/servlet.rb, line 151
def search_file(req, res, basename)
  # /file.* > /file/index.html > /file.html
  super ||
    super(req, res, "#{basename}.html") ||
    super(req, res, "#{basename}.xhtml")
end
search_index_file(req, res) click to toggle source
Calls superclass method
# File lib/jekyll/commands/serve/servlet.rb, line 141
def search_index_file(req, res)
  super ||
    search_file(req, res, ".html") ||
    search_file(req, res, ".xhtml")
end

Private Instance Methods

set_defaults() click to toggle source
# File lib/jekyll/commands/serve/servlet.rb, line 193
def set_defaults
  hash_ = @jekyll_opts.fetch("webrick", {}).fetch("headers", {})
  DEFAULTS.each_with_object(@headers = hash_) do |(key, val), hash|
    hash[key] = val unless hash.key?(key)
  end
end
validate_and_ensure_charset(_req, res) click to toggle source

rubocop:enable Naming/MethodName

# File lib/jekyll/commands/serve/servlet.rb, line 184
def validate_and_ensure_charset(_req, res)
  key = res.header.keys.grep(%r!content-type!i).first
  typ = res.header[key]

  unless %r!;\s*charset=!.match?(typ)
    res.header[key] = "#{typ}; charset=#{@jekyll_opts["encoding"]}"
  end
end