Module: BreadcrumbsHelper

Defined in:
app/helpers/breadcrumbs_helper.rb

Instance Method Summary collapse

Instance Method Details

#assemble_crumb_url_parameter(params) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
# File 'app/helpers/breadcrumbs_helper.rb', line 78

def assemble_crumb_url_parameter(params)
  result = []
  params.to_a.flatten.collect do |step|
    result << if step.is_a?(Hash)
      assemble_crumb_url_parameter(step)
    else
      step
    end
  end
  result
end

#calculate_breadcrumb_trail(trail) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
# File 'app/helpers/breadcrumbs_helper.rb', line 13

def calculate_breadcrumb_trail(trail)
  breadcrumb_trail = []
  trail.each do |crummy|
    crumb = Breadcrumb.instance.crumbs[crummy]
    if not Breadcrumb.instance.last_crumb_linked? and crummy == trail.last
      breadcrumb_trail << eval(%Q{"#{crumb.title}"})
    else
      breadcrumb_trail << link_to(eval(%Q{"#{crumb.title}"}), fetch_crumb_url(crumb))
    end
  end
  breadcrumb_trail.join(Breadcrumb.instance.delimiter)
end

#crumbsObject



2
3
4
5
6
7
8
9
10
11
# File 'app/helpers/breadcrumbs_helper.rb', line 2

def crumbs
  (Breadcrumb.instance.trails || []).each do |trail|
    if trail.controller.to_sym == params[:controller].to_sym and
      trail.action.to_sym == params[:action].to_sym
      next unless trail.condition_met?(self)
      return calculate_breadcrumb_trail(trail.trail)
    end
  end
  ""
end

#fetch_crumb_url(crumb) ⇒ Object



52
53
54
55
56
57
58
# File 'app/helpers/breadcrumbs_helper.rb', line 52

def fetch_crumb_url(crumb)
  if crumb.params
    fetch_parameterized_crumb_url(crumb)
  else
    send(crumb.url)
  end
end

#fetch_parameterized_crumb_url(crumb) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'app/helpers/breadcrumbs_helper.rb', line 26

def fetch_parameterized_crumb_url(crumb)
  case crumb.params
  when Hash
    if crumb.params[:params]
      send(crumb.url, fetch_parameters_recursive(crumb.params[:params]))
    else
      result = instance_eval("@#{assemble_crumb_url_parameter(crumb.params).join(".")}")
      send(crumb.url, result)
    end
  else
    if crumb.url == :current
      params
    else
      prams = crumb.params.collect do |name|
        case name
        when Symbol
          instance_variable_get("@#{name}")
        when String
          instance_eval(name)
        end
      end
      send(crumb.url, *prams)
    end
  end
end

#fetch_parameters_recursive(params_hash, parent = nil) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'app/helpers/breadcrumbs_helper.rb', line 60

def fetch_parameters_recursive(params_hash, parent = nil)
  parameters = {}
  case params_hash
  when Symbol
    parameters[params_hash] = (parent || params)[params_hash]
  when Array
    params_hash.each do |pram|
      parameter = (parent || params)[pram]
      parameters[pram] = parameter unless parameter.blank?
    end
  when Hash
    params_hash.each do |pram, nested|
      parameters[pram] = fetch_parameters_recursive(nested, params[pram])
    end
  end
  parameters
end