Module: Crummy::ControllerMethods::ClassMethods

Defined in:
lib/crummy.rb

Instance Method Summary collapse

Instance Method Details

#add_crumb(name, *args) ⇒ Object

Add a crumb to the crumbs array.

add_crumb("Home", "/")
add_crumb("Business") { |instance| instance.business_path }

Works like a before_filter so :only and except both work.

Raises:

  • (ArgumentError)


10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/crummy.rb', line 10

def add_crumb(name, *args)
  options = args.extract_options!
  url = args.first
  raise ArgumentError, "Need more arguments" unless name or options[:record] or block_given?
  raise ArgumentError, "Cannot pass url and use block" if url && block_given?
  before_filter(options) do |instance|
    url = yield instance if block_given?
    url = instance.send url if url.is_a? Symbol
    record = instance.instance_variable_get("@#{name}") unless url or block_given?
    if record and record.respond_to? :to_param
      name, url = record.to_s, instance.url_for(record)
    end
  
    # FIXME: url = instance.url_for(name) if name.respond_to?("to_param") && url.nil?
    # FIXME: Add ||= for the name, url above
    instance.add_crumb(name, url)
  end
end