Sha256: 602a4f8441ed35081a2e38088cdfd5bcb70ed75741ec4dd44a6b3e0bfe06c2cd

Contents?: true

Size: 1.13 KB

Versions: 4

Compression:

Stored size: 1.13 KB

Contents

module Allegro

  class Server
    attr_reader :config, :site

    def initialize config = {}, &blk
      @config = config.is_a?(Config) ? config : Config.new(config)
      @config.instance_eval(&blk) if block_given?
      @site = Allegro::Site.new(@config)
    end

    def call env
      @request  = Rack::Request.new env
      @response = Rack::Response.new

      return [400, {}, []] unless @request.get?

      path, mime = @request.path_info.split('.')
      route = (path || '/').split('/').reject {|i| i.empty? }

      response = @site.go(route, *(mime ? mime : []), env)

      @response.body = [response[:body]]
      @response['Content-Length'] = response[:body].length.to_s unless response[:body].empty?
      @response['Content-Type']   = Rack::Mime.mime_type(".#{response[:type]}")

      # Set http cache headers
      @response['Cache-Control'] = if Allegro.env == 'production'
        "public, max-age=#{@config[:cache]}"
      else
        "no-cache, must-revalidate"
      end

      @response['ETag'] = %("#{Digest::SHA1.hexdigest(response[:body])}")

      @response.status = response[:status]
      @response.finish
    end
  end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
allegro-0.0.0pre3 lib/allegro/server.rb
allegro-0.0.0pre2 lib/allegro/server.rb
allegro-0.0.0pre1 lib/allegro/server.rb
allegro-0.0.0pre lib/allegro/server.rb