Module: BreadcrumbsHelper

Defined in:
app/helpers/breadcrumbs_helper.rb

Instance Method Summary collapse

Instance Method Details

#assemble_crumb_title(crumb) ⇒ Object



92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'app/helpers/breadcrumbs_helper.rb', line 92

def assemble_crumb_title(crumb)
  if crumb.title.is_a?(Hash) # We expect the name of the parameters with the code to evaluate
    i18n_params = {}
    crumb.title.each_pair do |key, value|
      i18n_params[key] = instance_eval("@#{assemble_crumb_url_parameter(value).join(".")}")
    end
    I18n.t(crumb.name, {:scope => "breadcrumbs"}.merge!(i18n_params))
  elsif crumb.title.nil?
    I18n.t(crumb.name, :scope => "breadcrumbs")
  else
    crumb.title
  end
end

#assemble_crumb_url_parameter(params) ⇒ Object



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

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



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

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{"#{assemble_crumb_title(crumb)}"})        
    else
      breadcrumb_trail << link_to(eval(%Q{"#{assemble_crumb_title(crumb)}"}), fetch_crumb_url(crumb))
    end
  end
  breadcrumb_trail.join(Breadcrumb.instance.delimiter)
end

#crumbsObject



2
3
4
5
6
7
8
9
10
11
12
13
# 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)
      breadcrumb_trails = calculate_breadcrumb_trail(trail.trail)
      breadcrumb_trails = breadcrumb_trails.html_safe if breadcrumb_trails.respond_to? :html_safe
      return breadcrumb_trails
    end
  end
  ""
end

#fetch_crumb_url(crumb) ⇒ Object



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

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



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

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



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

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