Class: Breadcrumb

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/breadcrumb.rb

Defined Under Namespace

Classes: Crumb, Trail

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeBreadcrumb

Returns a new instance of Breadcrumb.



30
31
32
# File 'lib/breadcrumb.rb', line 30

def initialize
  @last_crumb_linked = true
end

Instance Attribute Details

#crumbsObject

Returns the value of attribute crumbs.



28
29
30
# File 'lib/breadcrumb.rb', line 28

def crumbs
  @crumbs
end

#delimiterObject

Returns the value of attribute delimiter.



28
29
30
# File 'lib/breadcrumb.rb', line 28

def delimiter
  @delimiter
end

#trailsObject

Returns the value of attribute trails.



28
29
30
# File 'lib/breadcrumb.rb', line 28

def trails
  @trails
end

Class Method Details

.configure(&blk) ⇒ Object



34
35
36
37
38
39
# File 'lib/breadcrumb.rb', line 34

def self.configure(&blk)
  instance.crumbs = {}
  instance.trails = []
  instance.instance_eval &blk
  instance.validate
end

Instance Method Details

#context(name) ⇒ Object



55
56
57
# File 'lib/breadcrumb.rb', line 55

def context(name)
  yield
end

#crumb(name, title, url, *params) ⇒ Object



49
50
51
52
53
# File 'lib/breadcrumb.rb', line 49

def crumb(name, title, url, *params)
  params = params.first if params.any? && params.first.is_a?(Hash)
  @crumbs ||= {}
  @crumbs[name] = Crumb.new(name, title, url, params)
end

#delimit_with(delimiter) ⇒ Object



59
60
61
# File 'lib/breadcrumb.rb', line 59

def delimit_with(delimiter)
  @delimiter = delimiter
end


63
64
65
# File 'lib/breadcrumb.rb', line 63

def dont_link_last_crumb
  @last_crumb_linked = false
end

#last_crumb_linked?Boolean

Returns:

  • (Boolean)


71
72
73
# File 'lib/breadcrumb.rb', line 71

def last_crumb_linked?
  @last_crumb_linked
end


67
68
69
# File 'lib/breadcrumb.rb', line 67

def link_last_crumb
  @last_crumb_linked = true
end

#trail(controller, actions, trail, options = {}) ⇒ Object



41
42
43
44
45
46
47
# File 'lib/breadcrumb.rb', line 41

def trail(controller, actions, trail, options = {})
  @trails ||= []
  actions = Array(actions)
  actions.each do |action|
    @trails << Trail.new(controller, action, trail, options, caller[2].split(":")[1])
  end
end

#validateObject



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/breadcrumb.rb', line 75

def validate
  invalid_trails = []
  trails.each do |trail|
    trail.trail.collect do |t|
      invalid_trails << [trail, t] if crumbs[t].nil?
    end
  end
  
  if invalid_trails.any?
    messages = []
    invalid_trails.each do |trail|
      messages << "Trail for #{trail.first.controller}/#{trail.first.action} references non-existing crumb '#{trail.last}' (configuration file line: #{trail.first.line})"
    end
    raise messages.join("\n")
  end
end