Sha256: cb6c02282b323a740b4bee10fa1dfc35b22867145dc1d90ff335e3a515598579

Contents?: true

Size: 1.23 KB

Versions: 2

Compression:

Stored size: 1.23 KB

Contents

require 'orange/middleware/base'

module Orange::Middleware
  # This middleware handles setting orange.env[:context] 
  # to a value based on the route, if any. The route is then 
  # trimmed before continuing on.
  class RouteContext < Base
    def initialize(app, core, *args)
      opts = args.extract_options!
      opts.with_defaults!(:contexts => [:live, :admin, :orange], 
                          :default => :live,
                          :urls => {})
      @app = app
      @core = core
      @contexts = opts[:contexts]
      @default = opts[:default]
      @urls = opts[:urls]
    end
    def packet_call(packet)
      path_info = packet['route.path'] || packet.env['PATH_INFO']
      path = path_info.split('/')
      pad = path.shift # Shift off empty first part
      if @urls[packet.request.host]
        packet['route.context'] = urls[packet.request.host]
      elsif path.empty?
        packet['route.context'] = @default
      else
        if(@contexts.include?(path.first.to_sym))
          packet['route.context'] = path.shift.to_sym
          path.unshift(pad)
          packet['route.path'] = path.join('/')
        else
          packet['route.context'] = @default
        end
      end
      @app.call(packet.env)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
orange-0.0.3 lib/orange/middleware/route_context.rb
orange-0.0.2 lib/orange/middleware/route_context.rb