Sha256: 47b3f5cdc63ce1d1ce90b2ec2078029af1ce2589f2c61fb91ad0e752659f1f96

Contents?: true

Size: 1.34 KB

Versions: 1

Compression:

Stored size: 1.34 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)
      packet = DefaultHash.new unless packet 
      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'])
      else
        packet['reroute.to']
      end
    end
    
    def packet
      @packet
    end
  end
  
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
orange-0.0.4 lib/orange/resources/mapper.rb