All pastes #128652 Raw Edit

Unnamed

public text v1 · immutable
#128652 ·published 2006-08-13 04:00 UTC
rendered paste body
# Filters added to this controller will be run for all controllers in the application.
# Likewise, all the methods added will be available for all controllers.
class ApplicationController < ActionController::Base
  model :domain
  attr_writer :root_node
  attr_reader :root_node
  before_filter { |c| c.root_node = Domain.find_by_name(c.request.host) if c.root_node.nil? }     
  
  def parse_path
    
    # Set the current object to the root node for the current domain
    obj = root_node
    
    # Set the default action to index
    action = 'index'
    
    # Loop through each path element
    for path_item in params[:path]
      
      # Find the new path element in the children of the current node
      new_obj = obj.children.find_by_name(path_item)

      # If the new path element is not found
      if new_obj.nil?
        # Then set the current path element to the action
        action = path_item
        # and exit the loop
        break
      end
      
      # Make the child the current node
      obj = new_obj
    end
    
    
    node_controller = obj.class_name.to_s.underscore
    # logger.debug( node_controller )
    
    # Render the node and action
    render_component  :controller => node_controller, 
                      :action => action, :id => obj.id,
                      :obj => obj, :params => params
  end
end