Sha256: 869479872a9f96b3b2c19a51949dce4a21463d77e93f969ea90edab04eea5d4f

Contents?: true

Size: 1.35 KB

Versions: 1

Compression:

Stored size: 1.35 KB

Contents

module Loaf
  module Filters

    Crumb = Struct.new(:name, :url, :styles)

    module ClassMethods

      def add_breadcrumb(name, url, options = {})
        before_filter(options) do |instance|
          instance.send(:add_breadcrumb, _normalize_name(name), url)
        end
      end

      private

      def _normalize_name(name=nil)
        case name
        when NilClass
        when Proc
          name.call
        when Symbol
          name.to_s
        else
          name
        end
      end

      def _process_url(url)
        
      end
    end

    module InstanceMethods

      # Add collection of nested breadcrumbs.
      def add_breadcrumbs(collection=[], options={})
        return nil unless collection.is_a? Array

        attr = options[:attr].delete
        prefix = options[:prefix].delete

        collection.each do |item|
          add_breadcrumb("#{item.send(attr.to_sym)}", prefix + '(' + item + ')' )
        end
      end

      def add_breadcrumb(name, url)
        _breadcrumbs << Crumb.new(name, url)
      end

      def _breadcrumbs
        @_breadcrumbs ||= []
      end

      def clear_crumbs
        _breadcrumbs.clear
      end

    end # InstanceMethods

    def self.included(base)
      base.extend ClassMethods
      base.send :include, InstanceMethods
      base.send :helper_method, :_breadcrumbs
    end

  end # Filters
end # Loaf

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
loaf-0.1.0 lib/loaf/filters.rb