Sha256: 4083cf651a10931a02c641267ff4d922d4be37f3c522b5659337eb2c61319346

Contents?: true

Size: 1.79 KB

Versions: 2

Compression:

Stored size: 1.79 KB

Contents

$:.unshift File.dirname(__FILE__)

# std libs
require 'yaml'
require 'date'
require 'erb'
require 'time'

# 3rd party
require 'rack'
require 'digest'
require 'rdiscount'

# baron specific
require 'baron/page_controller'
require 'baron/blog_engine'
require 'baron/config'
require 'baron/models/article'
require 'baron/models/theme'

module Baron
  def self.env      
    ENV['RACK_ENV'] || 'production'   
  end
  
  def self.env= env  
    ENV['RACK_ENV'] = env             
  end
  
  class Server
    attr_reader :config, :site

    def initialize config = {}, &block
      @config = config.is_a?(Config) ? config : Config.new(config)
      @config.instance_eval(&block) if block_given?
      @blog_engine = Baron::BlogEngine.new(@config)
    end

    def call env
      @request = Rack::Request.new env
      return [400, {}, []] unless @request.get?

      @response = Rack::Response.new
      
      path, ext = @request.path_info.split('.')
      extension = ext.to_s.empty? ? '.html' : ".#{ext}"

      redirected_url, status = @blog_engine.process_redirects(@request.path_info)

      if status
        @response.status = status
        @response['Location'] = redirected_url
      else
        baron_response = @blog_engine.process_request(@request.path_info, env)
        @response.body = [baron_response[:body]]
        @response.status = baron_response[:status]      
        @response['Content-Length'] = baron_response[:body].bytesize.to_s unless baron_response[:body].empty?
        @response['Content-Type'] = Rack::Mime.mime_type(extension)
        @response['Cache-Control'] = (Baron.env == 'production') ? "public, max-age=#{@config[:cache]}" : "no-cache, must-revalidate"
        @response['ETag'] = %("#{Digest::SHA1.hexdigest(baron_response[:body])}")
      end
      
      @response.finish
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
baron-1.0.20 lib/baron.rb
baron-1.0.18 lib/baron.rb