Module: Ronn::Server

Defined in:
lib/ronn/server.rb

Overview

Ronn HTTP server. Serves a list of .ronn files as HTML. The options Hash is passed to Ronn::Document.new on each invocation.

Use Ronn::Server.new to create a Rack app. See the config.ru file in the root of the Ronn distribution for example usage.

Ronn::Server.run starts a server on port 1207.

Class Method Summary collapse

Class Method Details

.new(files, options = {}) ⇒ Object

Raises:

  • (ArgumentError)


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
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/ronn/server.rb', line 14

def self.new(files, options = {})
  files = Dir[files] if files.respond_to?(:to_str)
  raise ArgumentError, 'no files' if files.empty?
  Sinatra.new do
    set :show_exceptions, true
    set :public_dir, File.expand_path(__FILE__, '../templates')
    set :static, false
    set :views, File.expand_path(__FILE__, '../templates')

    get '/' do
      files.map do |f|
        base = File.basename(f, '.ronn')
        "<li><a href='./#{base}.html'>#{escape_html(base)}</a></li>"
      end
    end

    options[:styles] ||= options[:style]
    my_styles = if options[:styles].respond_to?(:to_ary)
                  options[:styles]
                elsif options[:styles]
                  options[:styles].split(/[, ]+/)
                else
                  []
                end

    files.each do |file|
      basename = File.basename(file, '.ronn')

      get "/#{basename}.html" do
        options = options.merge(styles: my_styles)
        %w[date manual organization].each do |attribute|
          next unless params[attribute]
          options[attribute] = params[attribute]
        end
        Ronn::Document.new(file, options).to_html
      end
      get "/#{basename}.roff" do
        content_type 'text/plain+roff'
        Ronn::Document.new(file, options.dup).to_roff
      end
    end
  end
end

.run(files, options = {}) ⇒ Object



58
59
60
61
62
63
64
65
# File 'lib/ronn/server.rb', line 58

def self.run(files, options = {})
  port_number = options['port'] || 1207
  new(files, options).run!(
    server:  %w[mongrel thin webrick],
    port:    port_number,
    logging: true
  )
end