gretel 2.2.0.rc2 → 3.0.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +2 -1
- data/README.md +25 -9
- data/Rakefile +1 -1
- data/lib/gretel.rb +1 -0
- data/lib/gretel/crumbs.rb +0 -3
- data/lib/gretel/deprecated.rb +4 -8
- data/lib/gretel/renderer.rb +193 -0
- data/lib/gretel/trail.rb +1 -1
- data/lib/gretel/version.rb +1 -1
- data/lib/gretel/view_helpers.rb +9 -120
- data/test/deprecated_test.rb +2 -14
- data/test/dummy/config/initializers/session_store.rb +1 -1
- data/test/dummy/config/initializers/wrap_parameters.rb +1 -1
- data/test/dummy/config/routes.rb +4 -4
- data/test/dummy/db/schema.rb +7 -7
- data/test/helper_methods_test.rb +92 -47
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b08f97b7c16a830427f2ccf1968732cfec834b6
|
4
|
+
data.tar.gz: 2cbf78c43a72b8cb525a2485287c09c123672913
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cbd0cf33abb351a39e3fa7dcb723cce2ee75e8f3c219406ceb28bcecdd693f0adeb77ab4f92553d261545a38cde87c6bd801a059eb9702cd16bdf85a99c4bafc
|
7
|
+
data.tar.gz: 5c2af9e0cd84b039965fb1389f234dd778cd994e7c056f385cd274c6384e4203c275d3572220dd6b221e9fd0a9350a4bdb4e81fcb395222b386193afdb911599
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
Changelog
|
2
2
|
=========
|
3
3
|
|
4
|
-
Version
|
4
|
+
Version 3.0
|
5
5
|
-----------
|
6
|
+
* Support for `Gretel::Crumbs.layout do ... end` in an initializer has been removed. See the readme for details on how to upgrade.
|
6
7
|
* Support for setting trails via the URL – `params[:trail]`. This makes it possible to link to a different breadcrumb trail than the one specified in your breadcrumb,
|
7
8
|
for example if you have a store with products that have a default parent to their category, but when linking from the review section, you want to link back to the reviews instead.
|
8
9
|
See the readme for more info.
|
data/README.md
CHANGED
@@ -68,8 +68,8 @@ At the top of *app/views/issues/show.html.erb*, set the current breadcrumb (assu
|
|
68
68
|
Then, in *app/views/layouts/application.html.erb*:
|
69
69
|
|
70
70
|
```erb
|
71
|
-
<%= breadcrumbs :
|
72
|
-
:
|
71
|
+
<%= breadcrumbs pretext: "You are here: ",
|
72
|
+
separator: " › " %>
|
73
73
|
```
|
74
74
|
|
75
75
|
This will generate the following HTML (indented for readability):
|
@@ -86,13 +86,14 @@ This will generate the following HTML (indented for readability):
|
|
86
86
|
Options
|
87
87
|
-------
|
88
88
|
|
89
|
-
You can pass options to `<%= breadcrumbs %>`, e.g. `<%= breadcrumbs :
|
89
|
+
You can pass options to `<%= breadcrumbs %>`, e.g. `<%= breadcrumbs pretext: "You are here: " %>`:
|
90
90
|
|
91
91
|
Option | Description | Default
|
92
92
|
---------------- | -------------------------------------------------------------------------------------------------------------------------- | -------
|
93
|
-
:
|
94
|
-
:
|
95
|
-
:
|
93
|
+
:style | How to render the breadcrumbs. Can be `:default`, `:ol`, `:ul`, or `:bootstrap`. See below for more info. | `:default`
|
94
|
+
:pretext | Text to be rendered before breadcrumb, e.g. `"You are here: "`. | None
|
95
|
+
:posttext | Text to be appended after breadcrumb, e.g. `"Text after breacrumb"`, | None
|
96
|
+
:separator | Separator between links, e.g. `" › "`. | `" › "`
|
96
97
|
:autoroot | Whether it should automatically link to the `:root` crumb if no parent is given. | True
|
97
98
|
:show_root_alone | Whether it should show `:root` if that is the only link. | False
|
98
99
|
:link_current | Whether the current crumb should be linked to. | False
|
@@ -101,6 +102,21 @@ Option | Description
|
|
101
102
|
:class | CSS class for the breadcrumbs container. | `"breadcrumbs"`
|
102
103
|
:current_class | CSS class for the current link or span. | `"current"`
|
103
104
|
|
105
|
+
### Styles
|
106
|
+
|
107
|
+
These are the styles you can use with `breadcrumb style: :xx`.
|
108
|
+
|
109
|
+
Style | Description
|
110
|
+
------------ | -----------
|
111
|
+
`:default` | Renders each link by itself with `&rsaquo` as the seperator.
|
112
|
+
`:ol` | Renders the links in `<li>` elements contained in an outer `<ol>`.
|
113
|
+
`:ul` | Renders the links in `<li>` elements contained in an outer `<ul>`.
|
114
|
+
`:bootstrap` | Renders the links for use in [Twitter Bootstrap](http://getbootstrap.com/).
|
115
|
+
|
116
|
+
Or you can build the breadcrumbs manually for full customization; see below.
|
117
|
+
|
118
|
+
If you add other widely used styles, please submit a [Pull Request](https://github.com/lassebunk/gretel/pulls) so others can use them too.
|
119
|
+
|
104
120
|
More examples
|
105
121
|
-------------
|
106
122
|
|
@@ -155,7 +171,7 @@ end
|
|
155
171
|
# match the user's actual navigation path
|
156
172
|
# URL: /products/123?q=my+search
|
157
173
|
crumb :search do |keyword|
|
158
|
-
link "Search for #{keyword}", search_path(:
|
174
|
+
link "Search for #{keyword}", search_path(q: keyword)
|
159
175
|
end
|
160
176
|
|
161
177
|
crumb :product do |product|
|
@@ -277,11 +293,11 @@ Since Gretel version 2.1.0, the breadcrumb configuration files are now reloaded
|
|
277
293
|
|
278
294
|
Upgrading from version 2.0 or below
|
279
295
|
-----------------------------------
|
296
|
+
|
280
297
|
Instead of using the initializer that in Gretel version 2.0 and below required restarting the application after breadcrumb configuration changes, the configuration of the breadcrumbs is now loaded from `config/breadcrumbs.rb` (and `config/breadcrumbs/*.rb` if you want to split your breadcrumbs configuration across multiple files).
|
281
298
|
In the Rails development environment, these files are automatically reloaded when changed.
|
282
299
|
|
283
|
-
Using the initializer (e.g. `config/initializers/breadcrumbs.rb`)
|
284
|
-
If you want to silence the deprecation warning until you upgrade, you can set `Gretel.suppress_deprecation_warnings = true` before the layout block in your initializer.
|
300
|
+
Using the initializer (e.g. `config/initializers/breadcrumbs.rb`) was deprecated in Gretel version 2.1.0 and removed in version 3.0. It raises an error if you try to use it.
|
285
301
|
|
286
302
|
To update to the latest version of Gretel, use `bundle update gretel`. Then remove the `Gretel::Crumbs.layout do ... end` block, so instead of:
|
287
303
|
|
data/Rakefile
CHANGED
data/lib/gretel.rb
CHANGED
data/lib/gretel/crumbs.rb
CHANGED
data/lib/gretel/deprecated.rb
CHANGED
@@ -2,7 +2,8 @@ module Gretel
|
|
2
2
|
module Crumbs
|
3
3
|
class << self
|
4
4
|
# Lay out the breadcrumbs.
|
5
|
-
# Deprecated since v2.1.0
|
5
|
+
# Deprecated since v2.1.0 and removed in v3.0.0.
|
6
|
+
# Put breadcrumbs in +config/breadcrumbs.rb+ instead (see https://github.com/lassebunk/gretel/blob/master/README.md for details).
|
6
7
|
#
|
7
8
|
# Example:
|
8
9
|
# Gretel::Crumbs.layout do
|
@@ -11,16 +12,11 @@ module Gretel
|
|
11
12
|
# end
|
12
13
|
# end
|
13
14
|
def layout(&block)
|
14
|
-
|
15
|
-
"Gretel::Crumbs.layout has been deprecated
|
15
|
+
raise (
|
16
|
+
"Gretel::Crumbs.layout has been deprecated was removed in Gretel version 3.0. " +
|
16
17
|
"Please put your breadcrumbs in `config/breadcrumbs.rb`. " +
|
17
18
|
"This will also automatically reload your breadcrumbs when you change them in the development environment. " +
|
18
19
|
"See https://github.com/lassebunk/gretel/blob/master/README.md for details.")
|
19
|
-
@deprecated_breadcrumbs_block = block
|
20
|
-
end
|
21
|
-
|
22
|
-
def deprecated_breadcrumbs_block
|
23
|
-
@deprecated_breadcrumbs_block ||= Proc.new {}
|
24
20
|
end
|
25
21
|
end
|
26
22
|
end
|
@@ -0,0 +1,193 @@
|
|
1
|
+
module Gretel
|
2
|
+
class Renderer
|
3
|
+
DEFAULT_OPTIONS = {
|
4
|
+
style: :default,
|
5
|
+
pretext: "",
|
6
|
+
posttext: "",
|
7
|
+
separator: "",
|
8
|
+
autoroot: true,
|
9
|
+
show_root_alone: false,
|
10
|
+
link_current: false,
|
11
|
+
semantic: false,
|
12
|
+
class: "breadcrumbs",
|
13
|
+
current_class: "current",
|
14
|
+
id: nil
|
15
|
+
}
|
16
|
+
|
17
|
+
STYLES = {
|
18
|
+
# Default style
|
19
|
+
default: { container_tag: :div, separator: " › " },
|
20
|
+
|
21
|
+
# Ordered list
|
22
|
+
ol: { container_tag: :ol, fragment_tag: :li },
|
23
|
+
|
24
|
+
# Unordered list
|
25
|
+
ul: { container_tag: :ul, fragment_tag: :li },
|
26
|
+
|
27
|
+
# Twitter Bootstrap
|
28
|
+
bootstrap: { container_tag: :ol, fragment_tag: :li, class: "breadcrumb", current_class: "active" }
|
29
|
+
}
|
30
|
+
|
31
|
+
def initialize(context, breadcrumb_key, *breadcrumb_args)
|
32
|
+
@context = context
|
33
|
+
@breadcrumb_key = breadcrumb_key
|
34
|
+
@breadcrumb_args = breadcrumb_args
|
35
|
+
end
|
36
|
+
|
37
|
+
# Renders the breadcrumbs HTML.
|
38
|
+
def render(options)
|
39
|
+
options = options_for_render(options)
|
40
|
+
links = links_for_render(options)
|
41
|
+
|
42
|
+
return "" if links.empty?
|
43
|
+
|
44
|
+
# Array to hold the HTML fragments
|
45
|
+
fragments = []
|
46
|
+
|
47
|
+
# Loop through all but the last (current) link and build HTML of the fragments
|
48
|
+
links[0..-2].each do |link|
|
49
|
+
fragments << render_fragment(options[:fragment_tag], link.text, link.url, options[:semantic])
|
50
|
+
end
|
51
|
+
|
52
|
+
# The current link is handled a little differently, and is only linked if specified in the options
|
53
|
+
current_link = links.last
|
54
|
+
fragments << render_fragment(options[:fragment_tag], current_link.text, (options[:link_current] ? current_link.url : nil), options[:semantic], class: options[:current_class])
|
55
|
+
|
56
|
+
# Build the final HTML
|
57
|
+
html = (options[:pretext] + fragments.join(options[:separator]) + options[:posttext]).html_safe
|
58
|
+
content_tag(options[:container_tag], html, id: options[:id], class: options[:class])
|
59
|
+
end
|
60
|
+
|
61
|
+
# Yields an array of links to be used in a view.
|
62
|
+
def yield_links(options = {}, &block)
|
63
|
+
options = options_for_render(options)
|
64
|
+
yield links_for_render(options)
|
65
|
+
end
|
66
|
+
|
67
|
+
# Returns encoded trail for the breadcrumb.
|
68
|
+
def trail
|
69
|
+
@trail ||= Gretel::Trail.encode(links)
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
attr_reader :context, :breadcrumb_key, :breadcrumb_args
|
75
|
+
|
76
|
+
def options_for_render(options = {})
|
77
|
+
style = options_for_style(options[:style] || DEFAULT_OPTIONS[:style])
|
78
|
+
DEFAULT_OPTIONS.merge(style).merge(options)
|
79
|
+
end
|
80
|
+
|
81
|
+
# Returns options for the given +style_key+ and raises an exception if it's not found.
|
82
|
+
def options_for_style(style_key)
|
83
|
+
if style = STYLES[style_key]
|
84
|
+
style
|
85
|
+
else
|
86
|
+
raise ArgumentError, "Breadcrumbs style #{style_key.inspect} not found. Use any of #{STYLES.keys.inspect}."
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# Array of links for the path of the breadcrumb.
|
91
|
+
# Also reloads the breadcrumb configuration if needed.
|
92
|
+
def links
|
93
|
+
return [] if @breadcrumb_key.blank?
|
94
|
+
|
95
|
+
@links ||= begin
|
96
|
+
# Reload breadcrumbs configuration if needed
|
97
|
+
Gretel::Crumbs.reload_if_needed
|
98
|
+
|
99
|
+
# Get breadcrumb set by the `breadcrumb` method
|
100
|
+
crumb = Gretel::Crumb.new(self, breadcrumb_key, *breadcrumb_args)
|
101
|
+
|
102
|
+
# Links of first crumb
|
103
|
+
links = crumb.links.dup
|
104
|
+
|
105
|
+
links.last.tap do |last|
|
106
|
+
last.url = request.try(:fullpath) || last.url
|
107
|
+
end
|
108
|
+
|
109
|
+
# Get trail
|
110
|
+
links.unshift *trail_for(crumb)
|
111
|
+
|
112
|
+
links
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
# Returns parent links for the crumb, or the trail from `params[:trail]` if it is set.
|
117
|
+
def trail_for(crumb)
|
118
|
+
if params[Gretel::Trail.trail_param].present?
|
119
|
+
# Decode trail from URL
|
120
|
+
Gretel::Trail.decode(params[Gretel::Trail.trail_param])
|
121
|
+
else
|
122
|
+
# Build parents
|
123
|
+
links = []
|
124
|
+
while crumb = crumb.parent
|
125
|
+
links.unshift *crumb.links
|
126
|
+
end
|
127
|
+
links
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
# Array of links with applied options.
|
132
|
+
def links_for_render(options = {})
|
133
|
+
out = links.dup
|
134
|
+
|
135
|
+
# Handle autoroot
|
136
|
+
if options[:autoroot] && out.map(&:key).exclude?(:root) && Gretel::Crumbs.crumb_defined?(:root)
|
137
|
+
out.unshift *Gretel::Crumb.new(self, :root).links
|
138
|
+
end
|
139
|
+
|
140
|
+
# Handle show root alone
|
141
|
+
if out.count == 1 && out.first.key == :root && !options[:show_root_alone]
|
142
|
+
out.shift
|
143
|
+
end
|
144
|
+
|
145
|
+
out
|
146
|
+
end
|
147
|
+
|
148
|
+
# Renders HTML for a breadcrumb fragment, i.e. a breadcrumb link.
|
149
|
+
def render_fragment(fragment_tag, text, url, semantic, options = {})
|
150
|
+
if semantic
|
151
|
+
render_semantic_fragment(fragment_tag, text, url, options)
|
152
|
+
else
|
153
|
+
render_nonsemantic_fragment(fragment_tag, text, url, options)
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
# Renders semantic fragment HTML.
|
158
|
+
def render_semantic_fragment(fragment_tag, text, url, options = {})
|
159
|
+
if fragment_tag
|
160
|
+
text = content_tag(:span, text, itemprop: "title")
|
161
|
+
text = link_to(text, url, itemprop: "url") if url.present?
|
162
|
+
content_tag(fragment_tag, text, class: options[:class], itemscope: "", itemtype: "http://data-vocabulary.org/Breadcrumb")
|
163
|
+
else
|
164
|
+
if url.present?
|
165
|
+
content_tag(:div, link_to(content_tag(:span, text, itemprop: "title"), url, class: options[:class], itemprop: "url"), itemscope: "", itemtype: "http://data-vocabulary.org/Breadcrumb")
|
166
|
+
else
|
167
|
+
content_tag(:div, content_tag(:span, text, class: options[:class], itemprop: "title"), itemscope: "", itemtype: "http://data-vocabulary.org/Breadcrumb")
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
# Renders regular, non-semantic fragment HTML.
|
173
|
+
def render_nonsemantic_fragment(fragment_tag, text, url, options = {})
|
174
|
+
if fragment_tag
|
175
|
+
text = link_to(text, url) if url.present?
|
176
|
+
content_tag(fragment_tag, text, class: options[:class])
|
177
|
+
else
|
178
|
+
if url.present?
|
179
|
+
link_to(text, url, class: options[:class])
|
180
|
+
elsif options[:class].present?
|
181
|
+
content_tag(:span, text, class: options[:class])
|
182
|
+
else
|
183
|
+
text
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
# Proxy to view context
|
189
|
+
def method_missing(method, *args, &block)
|
190
|
+
context.send(method, *args, &block)
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
data/lib/gretel/trail.rb
CHANGED
@@ -47,7 +47,7 @@ module Gretel
|
|
47
47
|
|
48
48
|
private
|
49
49
|
|
50
|
-
# Encodes links array to Base64, internally using
|
50
|
+
# Encodes links array to Base64, internally using JSON for serialization.
|
51
51
|
def encode_base64(links)
|
52
52
|
arr = links.map { |link| [link.key, link.text, link.url] }
|
53
53
|
Base64.urlsafe_encode64(arr.to_json)
|
data/lib/gretel/version.rb
CHANGED
data/lib/gretel/view_helpers.rb
CHANGED
@@ -4,21 +4,12 @@ module Gretel
|
|
4
4
|
# <%
|
5
5
|
# breadcrumb :category, @category
|
6
6
|
# %>
|
7
|
-
def breadcrumb(*args)
|
8
|
-
|
9
|
-
|
10
|
-
if args.any?
|
11
|
-
@_breadcrumb_key = args.shift
|
12
|
-
@_breadcrumb_args = args
|
13
|
-
@_breadcrumb_links = nil
|
14
|
-
@_breadcrumb_trail = nil
|
15
|
-
else
|
16
|
-
breadcrumbs(options)
|
17
|
-
end
|
7
|
+
def breadcrumb(key, *args)
|
8
|
+
@_gretel_renderer = Gretel::Renderer.new(self, key, *args)
|
18
9
|
end
|
19
10
|
|
20
11
|
# Renders the breadcrumbs HTML, for example in your layout. See the readme for default options.
|
21
|
-
# <%= breadcrumbs :
|
12
|
+
# <%= breadcrumbs pretext: "You are here: " %>
|
22
13
|
#
|
23
14
|
# If you supply a block, it will yield an array with the breadcrumb links so you can build the breadcrumbs HTML manually:
|
24
15
|
# <% breadcrumbs do |links| %>
|
@@ -29,124 +20,22 @@ module Gretel
|
|
29
20
|
# <% end %>
|
30
21
|
# <% end %>
|
31
22
|
# <% end %>
|
32
|
-
def breadcrumbs(options = {})
|
33
|
-
options = default_breadcrumb_options.merge(options)
|
34
|
-
links = breadcrumb_links_for_render(options)
|
23
|
+
def breadcrumbs(options = {}, &block)
|
35
24
|
if block_given?
|
36
|
-
|
25
|
+
gretel_renderer.yield_links(options, &block)
|
37
26
|
else
|
38
|
-
|
27
|
+
gretel_renderer.render(options)
|
39
28
|
end
|
40
29
|
end
|
41
30
|
|
42
31
|
def breadcrumb_trail
|
43
|
-
|
32
|
+
gretel_renderer.trail
|
44
33
|
end
|
45
34
|
|
46
35
|
private
|
47
36
|
|
48
|
-
def
|
49
|
-
@
|
50
|
-
Gretel::Crumbs.reload_if_needed
|
51
|
-
get_breadcrumb_links
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def breadcrumb_links_for_render(options = {})
|
56
|
-
links = breadcrumb_links.dup
|
57
|
-
|
58
|
-
# Handle autoroot
|
59
|
-
if options[:autoroot] && links.map(&:key).exclude?(:root) && Gretel::Crumbs.crumb_defined?(:root)
|
60
|
-
links.unshift *Gretel::Crumb.new(self, :root).links
|
61
|
-
end
|
62
|
-
|
63
|
-
# Handle show root alone
|
64
|
-
if links.count == 1 && links.first.key == :root && !options[:show_root_alone]
|
65
|
-
links.shift
|
66
|
-
end
|
67
|
-
|
68
|
-
links
|
69
|
-
end
|
70
|
-
|
71
|
-
# Returns an array of links for the path of the breadcrumb set by +breadcrumb+.
|
72
|
-
def get_breadcrumb_links
|
73
|
-
return [] if @_breadcrumb_key.blank?
|
74
|
-
|
75
|
-
# Get breadcrumb set by the `breadcrumb` method
|
76
|
-
crumb = Gretel::Crumb.new(self, @_breadcrumb_key, *@_breadcrumb_args)
|
77
|
-
|
78
|
-
# Links of first crumb
|
79
|
-
links = crumb.links.dup
|
80
|
-
|
81
|
-
links.last.tap do |last|
|
82
|
-
last.url = request.try(:fullpath) || last.url
|
83
|
-
end
|
84
|
-
|
85
|
-
if params[Gretel::Trail.trail_param].present?
|
86
|
-
# Decode trail from URL
|
87
|
-
links.unshift *Gretel::Trail.decode(params[Gretel::Trail.trail_param])
|
88
|
-
else
|
89
|
-
# Build parents
|
90
|
-
while crumb = crumb.parent
|
91
|
-
links.unshift *crumb.links
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
links
|
96
|
-
end
|
97
|
-
|
98
|
-
# Renders breadcrumbs HTML.
|
99
|
-
def render_breadcrumbs(links, options)
|
100
|
-
return "" if links.empty?
|
101
|
-
|
102
|
-
# Array to hold the HTML fragments
|
103
|
-
fragments = []
|
104
|
-
|
105
|
-
# Loop through all but the last (current) link and build HTML of the fragments
|
106
|
-
links[0..-2].each do |link|
|
107
|
-
fragments << render_breadcrumb_fragment(link.text, link.url, options[:semantic])
|
108
|
-
end
|
109
|
-
|
110
|
-
# The current link is handled a little differently, and is only linked if specified in the options
|
111
|
-
current_link = links.last
|
112
|
-
fragments << render_breadcrumb_fragment(current_link.text, (options[:link_current] ? current_link.url : nil), options[:semantic], :class => options[:current_class])
|
113
|
-
|
114
|
-
# Build the final HTML
|
115
|
-
html = (options[:pretext] + fragments.join(options[:separator]) + options[:posttext]).html_safe
|
116
|
-
content_tag(:div, html, :id => options[:id], :class => options[:class])
|
117
|
-
end
|
118
|
-
|
119
|
-
# Renders HTML for a breadcrumb fragment, i.e. a breadcrumb link.
|
120
|
-
def render_breadcrumb_fragment(text, url, semantic, options = {})
|
121
|
-
if semantic
|
122
|
-
if url.present?
|
123
|
-
content_tag(:div, link_to(content_tag(:span, text, :itemprop => "title"), url, :class => options[:class], :itemprop => "url"), :itemscope => "", :itemtype => "http://data-vocabulary.org/Breadcrumb")
|
124
|
-
else
|
125
|
-
content_tag(:div, content_tag(:span, text, :class => options[:class], :itemprop => "title"), :itemscope => "", :itemtype => "http://data-vocabulary.org/Breadcrumb")
|
126
|
-
end
|
127
|
-
else
|
128
|
-
if url.present?
|
129
|
-
link_to(text, url, :class => options[:class])
|
130
|
-
elsif options[:class]
|
131
|
-
content_tag(:span, text, :class => options[:class])
|
132
|
-
else
|
133
|
-
text
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
# Default options for the breadcrumb rendering.
|
139
|
-
def default_breadcrumb_options
|
140
|
-
{ :pretext => "",
|
141
|
-
:posttext => "",
|
142
|
-
:separator => " > ",
|
143
|
-
:autoroot => true,
|
144
|
-
:show_root_alone => false,
|
145
|
-
:link_current => false,
|
146
|
-
:semantic => false,
|
147
|
-
:class => "breadcrumbs",
|
148
|
-
:current_class => "current",
|
149
|
-
:id => nil }
|
37
|
+
def gretel_renderer
|
38
|
+
@_gretel_renderer ||= Gretel::Renderer.new(self, nil)
|
150
39
|
end
|
151
40
|
end
|
152
41
|
end
|
data/test/deprecated_test.rb
CHANGED
@@ -10,21 +10,9 @@ class DeprecatedTest < ActionView::TestCase
|
|
10
10
|
end
|
11
11
|
|
12
12
|
test "deprecated configuration block" do
|
13
|
-
|
14
|
-
|
15
|
-
Gretel::Crumbs.layout do
|
16
|
-
crumb :deprecated_parent do
|
17
|
-
link "Test deprecated", root_path
|
18
|
-
end
|
19
|
-
|
20
|
-
crumb :deprecated_child do
|
21
|
-
link "Child", about_path
|
22
|
-
parent :deprecated_parent
|
13
|
+
assert_raises RuntimeError do
|
14
|
+
Gretel::Crumbs.layout do
|
23
15
|
end
|
24
16
|
end
|
25
|
-
|
26
|
-
breadcrumb :deprecated_child
|
27
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Test deprecated</a> > <span class="current">Child</span></div>},
|
28
|
-
breadcrumbs(:autoroot => false)
|
29
17
|
end
|
30
18
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# Be sure to restart your server when you modify this file.
|
2
2
|
|
3
|
-
Dummy::Application.config.session_store :cookie_store, :
|
3
|
+
Dummy::Application.config.session_store :cookie_store, key: '_dummy_session'
|
4
4
|
|
5
5
|
# Use the database for sessions instead of the cookie-based default,
|
6
6
|
# which shouldn't be used to store highly confidential information
|
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
|
7
7
|
ActiveSupport.on_load(:action_controller) do
|
8
|
-
wrap_parameters :
|
8
|
+
wrap_parameters format: [:json]
|
9
9
|
end
|
10
10
|
|
11
11
|
# Disable root element in JSON by default.
|
data/test/dummy/config/routes.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
Dummy::Application.routes.draw do
|
2
|
-
root :
|
2
|
+
root to: "dummy#dummy"
|
3
3
|
|
4
|
-
match "about" => "dummy#dummy", :
|
5
|
-
match "about/contact" => "dummy#dummy", :
|
6
|
-
match "about/contact/form" => "dummy#dummy", :
|
4
|
+
match "about" => "dummy#dummy", as: :about
|
5
|
+
match "about/contact" => "dummy#dummy", as: :contact
|
6
|
+
match "about/contact/form" => "dummy#dummy", as: :contact_form
|
7
7
|
|
8
8
|
resources :projects do
|
9
9
|
resources :issues
|
data/test/dummy/db/schema.rb
CHANGED
@@ -11,19 +11,19 @@
|
|
11
11
|
#
|
12
12
|
# It's strongly recommended to check this file into your version control system.
|
13
13
|
|
14
|
-
ActiveRecord::Schema.define(:
|
14
|
+
ActiveRecord::Schema.define(version: 20130122163051) do
|
15
15
|
|
16
|
-
create_table "issues", :
|
16
|
+
create_table "issues", force: true do |t|
|
17
17
|
t.string "title"
|
18
18
|
t.integer "project_id"
|
19
|
-
t.datetime "created_at", :
|
20
|
-
t.datetime "updated_at", :
|
19
|
+
t.datetime "created_at", null: false
|
20
|
+
t.datetime "updated_at", null: false
|
21
21
|
end
|
22
22
|
|
23
|
-
create_table "projects", :
|
23
|
+
create_table "projects", force: true do |t|
|
24
24
|
t.string "name"
|
25
|
-
t.datetime "created_at", :
|
26
|
-
t.datetime "updated_at", :
|
25
|
+
t.datetime "created_at", null: false
|
26
|
+
t.datetime "updated_at", null: false
|
27
27
|
end
|
28
28
|
|
29
29
|
end
|
data/test/helper_methods_test.rb
CHANGED
@@ -10,52 +10,54 @@ class HelperMethodsTest < ActionView::TestCase
|
|
10
10
|
Gretel::Trail.secret = "128107d341e912db791d98bbe874a8250f784b0a0b4dbc5d5032c0fc1ca7bda9c6ece667bd18d23736ee833ea79384176faeb54d2e0d21012898dde78631cdf1"
|
11
11
|
end
|
12
12
|
|
13
|
+
# Breadcrumb generation
|
14
|
+
|
13
15
|
test "shows basic breadcrumb" do
|
14
16
|
breadcrumb :basic
|
15
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> &
|
17
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">About</span></div>},
|
16
18
|
breadcrumbs
|
17
19
|
end
|
18
20
|
|
19
21
|
test "shows breadcrumb with root" do
|
20
22
|
breadcrumb :with_root
|
21
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> &
|
23
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">About</span></div>},
|
22
24
|
breadcrumbs
|
23
25
|
end
|
24
26
|
|
25
27
|
test "shows breadcrumb with parent" do
|
26
28
|
breadcrumb :with_parent
|
27
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> &
|
29
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <a href="/about">About</a> › <span class="current">Contact</span></div>},
|
28
30
|
breadcrumbs
|
29
31
|
end
|
30
32
|
|
31
33
|
test "shows breadcrumb with autopath" do
|
32
34
|
breadcrumb :with_autopath, projects(:one)
|
33
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> &
|
35
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">Test Project</span></div>},
|
34
36
|
breadcrumbs
|
35
37
|
end
|
36
38
|
|
37
39
|
test "shows breadcrumb with parent object" do
|
38
40
|
breadcrumb :with_parent_object, issues(:one)
|
39
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> &
|
41
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <a href="/projects/1">Test Project</a> › <span class="current">Test Issue</span></div>},
|
40
42
|
breadcrumbs
|
41
43
|
end
|
42
44
|
|
43
45
|
test "shows multiple links" do
|
44
46
|
breadcrumb :multiple_links
|
45
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> &
|
47
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <a href="/about/contact">Contact</a> › <span class="current">Contact form</span></div>},
|
46
48
|
breadcrumbs
|
47
49
|
end
|
48
50
|
|
49
51
|
test "shows multiple links with parent" do
|
50
52
|
breadcrumb :multiple_links_with_parent
|
51
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> &
|
53
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <a href="/about">About</a> › <a href="/about/contact">Contact</a> › <span class="current">Contact form</span></div>},
|
52
54
|
breadcrumbs
|
53
55
|
end
|
54
56
|
|
55
57
|
test "shows semantic breadcrumb" do
|
56
58
|
breadcrumb :with_root
|
57
|
-
assert_equal %{<div class="breadcrumbs"><div itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/" itemprop="url"><span itemprop="title">Home</span></a></div> &
|
58
|
-
breadcrumbs(:
|
59
|
+
assert_equal %{<div class="breadcrumbs"><div itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/" itemprop="url"><span itemprop="title">Home</span></a></div> › <div itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><span class="current" itemprop="title">About</span></div></div>},
|
60
|
+
breadcrumbs(semantic: true)
|
59
61
|
end
|
60
62
|
|
61
63
|
test "doesn't show root alone" do
|
@@ -66,7 +68,7 @@ class HelperMethodsTest < ActionView::TestCase
|
|
66
68
|
test "shows root alone" do
|
67
69
|
breadcrumb :root
|
68
70
|
assert_equal %{<div class="breadcrumbs"><span class="current">Home</span></div>},
|
69
|
-
breadcrumbs(:
|
71
|
+
breadcrumbs(show_root_alone: true)
|
70
72
|
end
|
71
73
|
|
72
74
|
test "shows no breadcrumb" do
|
@@ -75,70 +77,64 @@ class HelperMethodsTest < ActionView::TestCase
|
|
75
77
|
|
76
78
|
test "links current breadcrumb" do
|
77
79
|
breadcrumb :with_root
|
78
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> &
|
79
|
-
breadcrumbs(:
|
80
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <a href="/about" class="current">About</a></div>},
|
81
|
+
breadcrumbs(link_current: true)
|
80
82
|
end
|
81
83
|
|
82
84
|
test "shows pretext" do
|
83
85
|
breadcrumb :basic
|
84
|
-
assert_equal %{<div class="breadcrumbs">You are here: <a href="/">Home</a> &
|
85
|
-
breadcrumbs(:
|
86
|
+
assert_equal %{<div class="breadcrumbs">You are here: <a href="/">Home</a> › <span class="current">About</span></div>},
|
87
|
+
breadcrumbs(pretext: "You are here: ")
|
86
88
|
end
|
87
89
|
|
88
90
|
test "shows posttext" do
|
89
91
|
breadcrumb :basic
|
90
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> &
|
91
|
-
breadcrumbs(:
|
92
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">About</span> - text after breadcrumbs</div>},
|
93
|
+
breadcrumbs(posttext: " - text after breadcrumbs")
|
92
94
|
end
|
93
95
|
|
94
96
|
test "autoroot disabled" do
|
95
97
|
breadcrumb :basic
|
96
98
|
assert_equal %{<div class="breadcrumbs"><span class="current">About</span></div>},
|
97
|
-
breadcrumbs(:
|
99
|
+
breadcrumbs(autoroot: false)
|
98
100
|
end
|
99
101
|
|
100
102
|
test "shows separator" do
|
101
103
|
breadcrumb :with_root
|
102
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> &
|
103
|
-
breadcrumbs(:
|
104
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> » <span class="current">About</span></div>},
|
105
|
+
breadcrumbs(separator: " » ")
|
104
106
|
end
|
105
107
|
|
106
108
|
test "shows element id" do
|
107
109
|
breadcrumb :basic
|
108
|
-
assert_equal %{<div class="breadcrumbs" id="custom_id"><a href="/">Home</a> &
|
109
|
-
breadcrumbs(:
|
110
|
+
assert_equal %{<div class="breadcrumbs" id="custom_id"><a href="/">Home</a> › <span class="current">About</span></div>},
|
111
|
+
breadcrumbs(id: "custom_id")
|
110
112
|
end
|
111
113
|
|
112
114
|
test "shows custom container class" do
|
113
115
|
breadcrumb :basic
|
114
|
-
assert_equal %{<div class="custom_class"><a href="/">Home</a> &
|
115
|
-
breadcrumbs(:
|
116
|
+
assert_equal %{<div class="custom_class"><a href="/">Home</a> › <span class="current">About</span></div>},
|
117
|
+
breadcrumbs(class: "custom_class")
|
116
118
|
end
|
117
119
|
|
118
120
|
test "shows custom current class" do
|
119
121
|
breadcrumb :basic
|
120
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> &
|
121
|
-
breadcrumbs(:
|
122
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="custom_current_class">About</span></div>},
|
123
|
+
breadcrumbs(current_class: "custom_current_class")
|
122
124
|
end
|
123
125
|
|
124
126
|
test "unsafe html" do
|
125
127
|
breadcrumb :with_unsafe_html
|
126
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> &
|
128
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">Test <strong>bold text</strong></span></div>},
|
127
129
|
breadcrumbs
|
128
130
|
end
|
129
131
|
|
130
132
|
test "safe html" do
|
131
133
|
breadcrumb :with_safe_html
|
132
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> &
|
134
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">Test <strong>bold text</strong></span></div>},
|
133
135
|
breadcrumbs
|
134
136
|
end
|
135
137
|
|
136
|
-
test "works with legacy breadcrumb rendering method" do
|
137
|
-
breadcrumb :basic
|
138
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> > <span class="current">About</span></div>},
|
139
|
-
breadcrumb
|
140
|
-
end
|
141
|
-
|
142
138
|
test "yields a block containing breadcrumb links array" do
|
143
139
|
breadcrumb :multiple_links_with_parent
|
144
140
|
|
@@ -154,30 +150,77 @@ class HelperMethodsTest < ActionView::TestCase
|
|
154
150
|
|
155
151
|
test "without link" do
|
156
152
|
breadcrumb :without_link
|
157
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> &
|
153
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › Also without link › <span class="current">Without link</span></div>},
|
158
154
|
breadcrumbs
|
159
155
|
end
|
160
156
|
|
161
157
|
test "view context" do
|
162
158
|
breadcrumb :using_view_helper
|
163
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> &
|
159
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">TestTest</span></div>},
|
164
160
|
breadcrumbs
|
165
161
|
end
|
166
162
|
|
167
163
|
test "multiple arguments" do
|
168
164
|
breadcrumb :with_multiple_arguments, "One", "Two", "Three"
|
169
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> &
|
170
|
-
|
165
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <a href="/about">First OneOne then TwoTwo then ThreeThree</a> › <span class="current">One and Two and Three</span></div>},
|
166
|
+
breadcrumbs
|
171
167
|
end
|
172
168
|
|
173
169
|
test "calling breadcrumbs helper twice" do
|
174
170
|
breadcrumb :with_parent
|
175
171
|
2.times do
|
176
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> &
|
172
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <a href="/about">About</a> › <span class="current">Contact</span></div>},
|
177
173
|
breadcrumbs
|
178
174
|
end
|
179
175
|
end
|
180
176
|
|
177
|
+
# Styles
|
178
|
+
|
179
|
+
test "default style" do
|
180
|
+
breadcrumb :basic
|
181
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">About</span></div>},
|
182
|
+
breadcrumbs
|
183
|
+
end
|
184
|
+
|
185
|
+
test "ordered list style" do
|
186
|
+
breadcrumb :basic
|
187
|
+
assert_equal %{<ol class="breadcrumbs"><li><a href="/">Home</a></li><li class="current">About</li></ol>},
|
188
|
+
breadcrumbs(style: :ol)
|
189
|
+
end
|
190
|
+
|
191
|
+
test "unordered list style" do
|
192
|
+
breadcrumb :basic
|
193
|
+
assert_equal %{<ul class="breadcrumbs"><li><a href="/">Home</a></li><li class="current">About</li></ul>},
|
194
|
+
breadcrumbs(style: :ul)
|
195
|
+
end
|
196
|
+
|
197
|
+
test "bootstrap style" do
|
198
|
+
breadcrumb :basic
|
199
|
+
assert_equal %{<ol class="breadcrumb"><li><a href="/">Home</a></li><li class="active">About</li></ol>},
|
200
|
+
breadcrumbs(style: :bootstrap)
|
201
|
+
end
|
202
|
+
|
203
|
+
test "custom container and fragment tags" do
|
204
|
+
breadcrumb :basic
|
205
|
+
assert_equal %{<c class="breadcrumbs"><f><a href="/">Home</a></f> › <f class="current">About</f></c>},
|
206
|
+
breadcrumbs(container_tag: :c, fragment_tag: :f)
|
207
|
+
end
|
208
|
+
|
209
|
+
test "custom semantic container and fragment tags" do
|
210
|
+
breadcrumb :basic
|
211
|
+
assert_equal %{<c class="breadcrumbs"><f itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/" itemprop="url"><span itemprop="title">Home</span></a></f> › <f class="current" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><span itemprop="title">About</span></f></c>},
|
212
|
+
breadcrumbs(container_tag: :c, fragment_tag: :f, semantic: true)
|
213
|
+
end
|
214
|
+
|
215
|
+
test "unknown style" do
|
216
|
+
breadcrumb :basic
|
217
|
+
assert_raises ArgumentError do
|
218
|
+
breadcrumbs(style: :nonexistent)
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
# Trails
|
223
|
+
|
181
224
|
test "trail helper" do
|
182
225
|
breadcrumb :basic
|
183
226
|
|
@@ -188,7 +231,7 @@ class HelperMethodsTest < ActionView::TestCase
|
|
188
231
|
params[:trail] = "12MoG3DY5eLzU_W1siYmFzaWMiLCJBYm91dCIsIi9hYm91dCJdXQ=="
|
189
232
|
breadcrumb :multiple_links
|
190
233
|
|
191
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> &
|
234
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <a href="/about">About</a> › <a href="/about/contact">Contact</a> › <span class="current">Contact form</span></div>},
|
192
235
|
breadcrumbs
|
193
236
|
end
|
194
237
|
|
@@ -197,10 +240,12 @@ class HelperMethodsTest < ActionView::TestCase
|
|
197
240
|
params[:mytest] = "12MoG3DY5eLzU_W1siYmFzaWMiLCJBYm91dCIsIi9hYm91dCJdXQ=="
|
198
241
|
breadcrumb :multiple_links
|
199
242
|
|
200
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> &
|
243
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <a href="/about">About</a> › <a href="/about/contact">Contact</a> › <span class="current">Contact form</span></div>},
|
201
244
|
breadcrumbs
|
202
245
|
end
|
203
246
|
|
247
|
+
# Configuration reload
|
248
|
+
|
204
249
|
test "reload configuration when file is changed" do
|
205
250
|
path = setup_loading_from_tmp_folder
|
206
251
|
Gretel.reload_environments << "test"
|
@@ -217,7 +262,7 @@ class HelperMethodsTest < ActionView::TestCase
|
|
217
262
|
end
|
218
263
|
|
219
264
|
breadcrumb :about
|
220
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> &
|
265
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> › <span class="current">About (loaded)</span></div>}, breadcrumbs
|
221
266
|
|
222
267
|
sleep 1 # File change interval is 1 second
|
223
268
|
|
@@ -233,7 +278,7 @@ class HelperMethodsTest < ActionView::TestCase
|
|
233
278
|
end
|
234
279
|
|
235
280
|
breadcrumb :about
|
236
|
-
assert_equal %{<div class="breadcrumbs"><a href="/test">Home (reloaded)</a> &
|
281
|
+
assert_equal %{<div class="breadcrumbs"><a href="/test">Home (reloaded)</a> › <span class="current">About (reloaded)</span></div>}, breadcrumbs
|
237
282
|
end
|
238
283
|
|
239
284
|
test "reload configuration when file is added" do
|
@@ -262,7 +307,7 @@ class HelperMethodsTest < ActionView::TestCase
|
|
262
307
|
end
|
263
308
|
|
264
309
|
breadcrumb :about
|
265
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> &
|
310
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> › <span class="current">About (loaded)</span></div>}, breadcrumbs
|
266
311
|
end
|
267
312
|
|
268
313
|
test "reload configuration when file is deleted" do
|
@@ -290,7 +335,7 @@ class HelperMethodsTest < ActionView::TestCase
|
|
290
335
|
end
|
291
336
|
|
292
337
|
breadcrumb :contact
|
293
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> &
|
338
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> › <a href="/about">About (loaded)</a> › <span class="current">Contact (loaded)</span></div>}, breadcrumbs
|
294
339
|
|
295
340
|
File.delete path.join("pages.rb")
|
296
341
|
|
@@ -300,7 +345,7 @@ class HelperMethodsTest < ActionView::TestCase
|
|
300
345
|
end
|
301
346
|
|
302
347
|
breadcrumb :about
|
303
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> &
|
348
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> › <span class="current">About (loaded)</span></div>}, breadcrumbs
|
304
349
|
end
|
305
350
|
|
306
351
|
test "reloads only in development environment" do
|
@@ -320,7 +365,7 @@ class HelperMethodsTest < ActionView::TestCase
|
|
320
365
|
end
|
321
366
|
|
322
367
|
breadcrumb :about
|
323
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> &
|
368
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> › <span class="current">About (loaded)</span></div>}, breadcrumbs
|
324
369
|
|
325
370
|
sleep 1
|
326
371
|
|
@@ -336,7 +381,7 @@ class HelperMethodsTest < ActionView::TestCase
|
|
336
381
|
end
|
337
382
|
|
338
383
|
breadcrumb :about
|
339
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> &
|
384
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> › <span class="current">About (loaded)</span></div>}, breadcrumbs
|
340
385
|
end
|
341
386
|
|
342
387
|
private
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gretel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lasse Bunk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-10-
|
11
|
+
date: 2013-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -62,6 +62,7 @@ files:
|
|
62
62
|
- lib/gretel/crumbs.rb
|
63
63
|
- lib/gretel/deprecated.rb
|
64
64
|
- lib/gretel/link.rb
|
65
|
+
- lib/gretel/renderer.rb
|
65
66
|
- lib/gretel/trail.rb
|
66
67
|
- lib/gretel/version.rb
|
67
68
|
- lib/gretel/view_helpers.rb
|