File: server.rb

package info (click to toggle)
ruby-ronn 0.7.3-3
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 512 kB
  • ctags: 154
  • sloc: ruby: 1,405; makefile: 2
file content (70 lines) | stat: -rw-r--r-- 2,022 bytes parent folder | download | duplicates (3)
1
2
3
4
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
require 'ronn'
require 'rack'
require 'sinatra/base'

module Ronn

  # 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 
  module Server
    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, 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

        def styles
          params[:styles] ||= params[:style]
          case
          when params[:styles].respond_to?(:to_ary)
            params[:styles]
          when params[:styles]
            params[:styles].split(/[, ]+/)
          else
            []
          end
        end

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

          get "/#{basename}.html" do
            options = options.merge(:styles => styles)
            %w[date manual organization].each do |attribute|
              next if !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

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