Class: DatGretel::Crumb
- Inherits:
-
Object
- Object
- DatGretel::Crumb
- Defined in:
- lib/dat_gretel/crumb.rb
Instance Attribute Summary collapse
-
#context ⇒ Object
readonly
The current view context.
-
#key ⇒ Object
readonly
Key of the breadcrumb.
Instance Method Summary collapse
-
#initialize(context, key, *args) ⇒ Crumb
constructor
Initializes a new crumb from the given
key
. -
#link(*args) ⇒ Object
Sets link of the breadcrumb.
-
#links ⇒ Object
Holds all of the breadcrumb’s links as a breadcrumb can have multiple links.
-
#method_missing(method, *args, &block) ⇒ Object
Proxy to view context.
-
#parent(*args) ⇒ Object
Sets or gets the parent breadcrumb.
Constructor Details
#initialize(context, key, *args) ⇒ Crumb
Initializes a new crumb from the given key
. It finds the breadcrumb created in Gretel::Crumbs.layout
and renders the block using the arguments supplied in args
.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/dat_gretel/crumb.rb', line 6 def initialize(context, key, *args) if key.class.respond_to?(:model_name) # Enables calling `breadcrumb @product` instead of `breadcrumb :product, @product` args.unshift key key = key.class.model_name.to_s.underscore.to_sym end block = DatGretel::Crumbs.crumbs[key] raise ArgumentError, "Breadcrumb :#{key} not found." unless block @key = key @context = context @parent = nil instance_exec(*args, &block) end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
Proxy to view context.
66 67 68 |
# File 'lib/dat_gretel/crumb.rb', line 66 def method_missing(method, *args, &block) context.send(method, *args, &block) end |
Instance Attribute Details
#context ⇒ Object (readonly)
The current view context.
63 64 65 |
# File 'lib/dat_gretel/crumb.rb', line 63 def context @context end |
#key ⇒ Object (readonly)
Key of the breadcrumb.
60 61 62 |
# File 'lib/dat_gretel/crumb.rb', line 60 def key @key end |
Instance Method Details
#link(*args) ⇒ Object
Sets link of the breadcrumb. You can supply an optional options hash that will be available on the links so you can pass info when rendering the breadcrumbs manually.
link "My Link", my_link_path
link "Without URL"
link "With Options", my_path, title: "Test", other: "Some other value"
28 29 30 31 32 33 34 35 36 |
# File 'lib/dat_gretel/crumb.rb', line 28 def link(*args) = args. text, url = args # Transform objects to real paths. url = url_for(url) if url links << DatGretel::Link.new(key, text, url, ) end |
#links ⇒ Object
Holds all of the breadcrumb’s links as a breadcrumb can have multiple links.
39 40 41 |
# File 'lib/dat_gretel/crumb.rb', line 39 def links @links ||= [] end |
#parent(*args) ⇒ Object
Sets or gets the parent breadcrumb. If you supply a parent key and optional arguments, it will set the parent. If nothing is supplied, it will return the parent, if this has been set.
Example:
parent :category, category
Or short, which will infer the key from the model’s ‘model_name`:
parent category
52 53 54 55 56 57 |
# File 'lib/dat_gretel/crumb.rb', line 52 def parent(*args) return @parent if args.empty? key = args.shift @parent = DatGretel::Crumb.new(context, key, *args) end |