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.



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

def initialize
  @last_crumb_linked = true
end

Instance Attribute Details

#crumbsObject

Returns the value of attribute crumbs.



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

def crumbs
  @crumbs
end

#delimiterObject

Returns the value of attribute delimiter.



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

def delimiter
  @delimiter
end

#trailsObject

Returns the value of attribute trails.



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

def trails
  @trails
end

Class Method Details

.configure(&blk) ⇒ Object



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

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

Instance Method Details

#context(name) ⇒ Object



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

def context(name)
  yield
end

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



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

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



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

def delimit_with(delimiter)
  @delimiter = delimiter
end


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

def dont_link_last_crumb
  @last_crumb_linked = false
end

#last_crumb_linked?Boolean

Returns:

  • (Boolean)


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

def last_crumb_linked?
  @last_crumb_linked
end


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

def link_last_crumb
  @last_crumb_linked = true
end

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



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

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



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

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