Sha256: aaad78d0d019b9834d3fa0149caeb504709957bc1d5cf8aa302886b12b3d5d2f

Contents?: true

Size: 1.34 KB

Versions: 5

Compression:

Stored size: 1.34 KB

Contents

require "rack"

module Guides
  class App
    def initialize
      @local  = Rack::File.new(local_assets)
      @source = Rack::File.new(source_assets)
      @output = Rack::File.new(File.join(Guides.root, "output"))
    end

    def local_assets
      File.expand_path("../templates/assets", __FILE__)
    end

    def source_assets
      File.join(Guides.root, "assets")
    end

    def source_templates
      File.join(Guides.root, "source")
    end

    def call(env)
      path = env["PATH_INFO"]

      case path
      when "/"
        env["PATH_INFO"] = "/index.html"
        return call(env)
      when /\/(.*).html/
        name = $1
        generator = Guides::Generator.new({})
        source_file = Dir["#{source_templates}/#{name}.{html.erb,textile}"].first

        unless source_file
          return [404, {"Content-Type" => "text/html"}, ["#{name} not found in #{source_templates}: #{Guides.root}"]]
        end

        generator.send(:generate_guide, File.basename(source_file), "#{name}.html")
        return @output.call(env)
      else
        source = @source.call(env)
        return source if source.first == 200
        return @local.call(env)
      end
    end
  end

  class Preview < Rack::Server
    def self.start(*)
      super :host => '0.0.0.0', :Port => 9292, :server => "thin"
    end

    def app
      @app ||= App.new
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
guides-0.6.6 lib/guides/preview.rb
guides-0.6.5 lib/guides/preview.rb
guides-0.6.4 lib/guides/preview.rb
guides-0.6.3 lib/guides/preview.rb
guides-0.6.2 lib/guides/preview.rb