Sha256: 1d074b6cb4343f15b5a9cff6fb6866acc6c314755034a70d10ba330856f14e8c

Contents?: true

Size: 1.35 KB

Versions: 6

Compression:

Stored size: 1.35 KB

Contents

module Gretel
  class Crumbs
    class << self
      def controller # hack because Rails.application.routes.url_helpers needs a controller method
      end
      
      def layout(&block)
        # needs to be done here because Rails.application isn't set when this file is required
        self.class.send :include, Rails.application.routes.url_helpers
        self.class.send :include, ActionView::Helpers::UrlHelper
        
        instance_eval &block
      end
      
      def all
        @crumbs ||= {}
      end

      def crumb(name, &block)
        all[name] = block
      end
      
      def get_crumb(name, object = nil)
        raise "Crumb '#{name}' not found." unless all[name]
        
        @object = object # share the object so we can call it from link() and parent()
        @link = nil
        @parent = nil
        
        all[name].call(object)
        Gretel::Crumb.new(@link, @parent)
      end
      
      def link(text, url, options = {})
        text = text.call(@object) if text.is_a?(Proc)
        url = url.call(@object) if url.is_a?(Proc)
        
        @link = Gretel::Link.new(text, url, options)
      end
      
      def parent(name, object = nil)
        name = name.call(@object) if name.is_a?(Proc)
        object = object.call(@object) if object.is_a?(Proc)

        @parent = Gretel::Parent.new(name, object)
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
gretel-1.1.1 lib/gretel/crumbs.rb
gretel-1.1.0 lib/gretel/crumbs.rb
gretel-1.0.9 lib/gretel/crumbs.rb
gretel-1.0.8 lib/gretel/crumbs.rb
gretel-1.0.7 lib/gretel/crumbs.rb
gretel-1.0.6 lib/gretel/crumbs.rb