Sha256: 340b3d65150910139050dfefab8121aeaab6f371d6b4920f1e4871c6a66a1d51

Contents?: true

Size: 1.73 KB

Versions: 1

Compression:

Stored size: 1.73 KB

Contents

module Crumbs
  module ActionController
    module Base
      extend ActiveSupport::Concern

      included do
        before_filter :set_crumbs
      end

      protected 

      def set_crumbs
        paths = [request.path]
        paths.unshift File.dirname(paths.first) until paths.first == '/'
        referer = { base_url: request.base_url, path: request.path, fullpath: request.fullpath }
        if session[:referers].nil? or session[:referers].last[:base_url] != request.base_url
          session[:referers] = [referer]
        elsif request.path.starts_with? "#{session[:referers].last[:path]}/".squeeze('/')
          session[:referers] << referer
        elsif index = find_referer_index(paths)
          session[:referers] = session[:referers][0...index] + [referer]
        elsif
          session[:referers] = [referer]
        end
        paths.pop unless Crumbs.config.show_last
        @crumbs = []
        paths.each do |path|
          params = Rails.application.routes.recognize_path("#{request.base_url}#{path}") rescue next
          if name = Crumbs::Definitions.find(params[:controller], params[:action], params)
            if index = find_referer_index(path)
              path = session[:referers][index][:fullpath]
            end
            @crumbs << { name: name, path: path }
          end
        end
      end

      def find_referer_index(paths)
        paths = [paths] unless paths.is_a? Array
        session[:referers].rindex do |referer|
          paths.include? referer[:path]
        end
      end

      module ClassMethods

        protected

        def crumb(action, name=nil, &block)
          Crumbs::Definitions.add controller_path, action.to_s, (block_given? ? block : name)
        end

      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
crumbs-1.2.1 lib/crumbs/action_controller/base.rb