Sha256: 0e1dc3395c8e640e0c62cc27ee127670168ce2050fb78e6d07b584a9541bc0af

Contents?: true

Size: 1.74 KB

Versions: 4

Compression:

Stored size: 1.74 KB

Contents

module Mack
  module Routes
    
    private
    class ResourceProxy # :nodoc:
      
      attr_accessor :controller
      attr_accessor :routes
      attr_accessor :resources
      
      def initialize(controller, resources = [])
        self.controller = controller
        self.routes = []
        self.resources = resources
      end
      
      def method_missing(sym, *args)
        connect(sym, *args)
      end
      
      def resource(name, options = {}, &block)
        if block_given?
          proxy = Mack::Routes::ResourceProxy.new(name, [self.resources, name].flatten)
          yield proxy
          proxy.routes.each do |route|
            Mack::Routes::RouteMap.instance.connect_with_name("#{name}_#{route[:name]}", route[:path], options.merge(route[:options]))
          end
        end
        Mack::Routes::RouteMap.instance.build_resource_routes(name, compile_path(name, self.resources), name, options)
      end
      
      private
      def connect(name, path, options = {})
        route = {}
        route[:name] = name.to_s.gsub(/^#{self.controller}/, '')
        route[:options] = {:controller => self.controller, :action => route[:name].to_sym, :method => :get}.merge(options)
        paths = compile_path(self.controller, self.resources.reject{|m| m === self.resources.last}).split('/')
        paths << path.split('/')
        paths.flatten!
        paths.compact!
        paths.uniq!
        route[:path] = paths.reject{|m| m.blank?}.join('/')
        routes << route
      end
      
      def compile_path(name, res)
        x = []
        res.each do |r|
          x << r
          x << ":#{r.to_s.singular}_id"
        end
        x << name
        x.compact.join('/')
      end
      
    end # ResourceProxy
    
  end # Routes
end # Mack

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
mack-0.8.1 lib/mack/routing/resource_proxy.rb
mack-0.8.2 lib/mack/routing/resource_proxy.rb
mack-0.8.3 lib/mack/routing/resource_proxy.rb
mack-0.8.3.1 lib/mack/routing/resource_proxy.rb