Sha256: 089d72ea4c1766c42293f1a15ec5baafd2bd009ee4de9f958cea54f01d008aea

Contents?: true

Size: 1.23 KB

Versions: 8

Compression:

Stored size: 1.23 KB

Contents

require 'orange/middleware/base'

module Orange::Middleware
  # This middleware handles setting orange.env['route.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
      pass packet
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
orange-0.0.13 lib/orange/middleware/route_context.rb
orange-0.0.12 lib/orange/middleware/route_context.rb
orange-0.0.10 lib/orange/middleware/route_context.rb
orange-0.0.8 lib/orange/middleware/route_context.rb
orange-0.0.7 lib/orange/middleware/route_context.rb
orange-0.0.6 lib/orange/middleware/route_context.rb
orange-0.0.5 lib/orange/middleware/route_context.rb
orange-0.0.4 lib/orange/middleware/route_context.rb