Sha256: 427b8b4a08d23bf15d4b5f2870f0c961861f17b7a90f6a55c06d1d06679867e2

Contents?: true

Size: 1.26 KB

Versions: 2

Compression:

Stored size: 1.26 KB

Contents

require 'orange/core'

module Orange
  class Mapper < Resource
    # Takes a packet extracts request information, then calls packet.route
    def afterLoad
      orange.add_pulp Pulp::Packet_Mapper
    end
    
    def route_to(packet, resource, *args)
      context = packet['route.context', nil]
      site = packet['route.faked_site'] ? packet['route.site_url', nil] : nil
      args.unshift(resource)
      args.unshift(context)
      args.unshift(site)
      '/'+args.compact.join('/')
    end
  end
  
  module Pulp::Packet_Mapper
    def route_to(resource, *args)
      orange[:mapper].route_to(self, resource, *args)
    end
    
    def reroute(url, type = :real)
      packet['reroute.to'] = url
      packet['reroute.type'] = type
      raise Reroute.new(self), 'Unhandled reroute'
    end
    
  end
  
  class Reroute < Exception
    def initialize(packet)
      @packet = packet
      @packet[:headers] = {"Content-Type" => 'text/html', "Location" => self.url}
      @packet[:status] = 302
    end
    
    def url
      case packet['reroute.type']
      when :real
        packet['reroute.to']
      # Parsing for orange urls or something
      when :orange
        packet.route_to(packet['reroute.to'])
      end
    end
    
    def packet
      @packet
    end
  end
  
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
orange-0.0.3 lib/orange/resources/mapper.rb
orange-0.0.2 lib/orange/resources/mapper.rb