gretel 3.0.5 → 3.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +2 -2
- data/gretel.gemspec +0 -1
- data/lib/gretel/crumb.rb +1 -1
- data/lib/gretel/deprecated.rb +1 -2
- data/lib/gretel/deprecated/default_style_key.rb +11 -0
- data/lib/gretel/deprecated/yield_links.rb +20 -0
- data/lib/gretel/renderer.rb +98 -62
- data/lib/gretel/version.rb +1 -1
- data/lib/gretel/view_helpers.rb +2 -6
- data/test/deprecated_test.rb +21 -1
- data/test/helper_methods_test.rb +66 -70
- metadata +13 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 31c77ef551e13b999644f0b27d782987629ae7ab
|
4
|
+
data.tar.gz: 8bdf306a5ba44daaf9bcfb6b7b5f4830cbc8dd5d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dfd56e69ce95e4fde666b9320fa5531275261804f2d74e623c3d98ca41996805aecc47907d27b64856243d79c7f123e2564c7542321a505fa6f8d47c1f49a804
|
7
|
+
data.tar.gz: ba35e16f9908e7259c01bdd9f174dfaf2e4aac45e99e2f61fbbe8b034f5e66dd52de75408733593775633ad4e257455465bc2e90c247f3c104d614fe4804225c
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## Version 3.0.6
|
4
|
+
* Pretext and posttext are now enclosed in spans with `<span class="pretext">` and `<span class="posttext">`.
|
5
|
+
* Semantic breadcrumbs are now rendered in spans instead of divs to enable easier styling.
|
6
|
+
|
3
7
|
## Version 3.0.3
|
4
8
|
* Breadcrumbs can now be rendered for use in the [Foundation 5](http://foundation.zurb.com/) framework. Use `breadcrumbs style: :foundation5`.
|
5
9
|
* Breadcrumbs are now automatically loaded from any engines' `config/breadcrumbs.rb` and `config/breadcrumbs/**/*.rb`. See the readme for details.
|
data/README.md
CHANGED
@@ -97,7 +97,7 @@ You can pass options to `<%= breadcrumbs %>`, e.g. `<%= breadcrumbs pretext: "Yo
|
|
97
97
|
|
98
98
|
Option | Description | Default
|
99
99
|
------------------------ | -------------------------------------------------------------------------------------------------------------------------- | -------
|
100
|
-
:style | How to render the breadcrumbs. Can be `:
|
100
|
+
:style | How to render the breadcrumbs. Can be `:inline`, `:ol`, `:ul`, or `:bootstrap`. See below for more info. | `:inline`
|
101
101
|
:pretext | Text to be rendered before breadcrumb, e.g. `"You are here: "`. | None
|
102
102
|
:posttext | Text to be appended after breadcrumb, e.g. `"Text after breacrumb"`, | None
|
103
103
|
:separator | Separator between links, e.g. `" › "`. | `" › "`
|
@@ -117,7 +117,7 @@ These are the styles you can use with `breadcrumbs style: :xx`.
|
|
117
117
|
|
118
118
|
Style | Description
|
119
119
|
-------------- | -----------
|
120
|
-
`:
|
120
|
+
`:inline` | Renders each link by itself with `›` as the seperator.
|
121
121
|
`:ol` | Renders the links in `<li>` elements contained in an outer `<ol>`.
|
122
122
|
`:ul` | Renders the links in `<li>` elements contained in an outer `<ul>`.
|
123
123
|
`:bootstrap` | Renders the links for use in [Twitter Bootstrap](http://getbootstrap.com/).
|
data/gretel.gemspec
CHANGED
data/lib/gretel/crumb.rb
CHANGED
data/lib/gretel/deprecated.rb
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
require "gretel/deprecated/show_root_alone"
|
1
|
+
Dir[File.dirname(__FILE__) + "/deprecated/*.rb"].each { |file| require file }
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Gretel::Renderer.class_eval do
|
2
|
+
def options_for_style_with_default_style_key(style_key)
|
3
|
+
if style_key == :default
|
4
|
+
Gretel.show_deprecation_warning "The :default style key is now called :inline. Please use `breadcrumbs style: :inline` instead or omit it, as it is the default."
|
5
|
+
style_key = :inline
|
6
|
+
end
|
7
|
+
options_for_style_without_default_style_key(style_key)
|
8
|
+
end
|
9
|
+
|
10
|
+
alias_method_chain :options_for_style, :default_style_key
|
11
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Gretel::ViewHelpers.class_eval do
|
2
|
+
def breadcrumbs_with_yield_links(options = {})
|
3
|
+
if block_given?
|
4
|
+
Gretel.show_deprecation_warning(
|
5
|
+
"Calling `breadcrumbs` with a block has been deprecated and will be removed in Gretel version 4.0. Please use `tap` instead. Example:\n" +
|
6
|
+
"\n" +
|
7
|
+
" breadcrumbs(autoroot: false).tap do |links|\n" +
|
8
|
+
" if links.any?\n" +
|
9
|
+
" # process links here\n" +
|
10
|
+
" end\n" +
|
11
|
+
" end\n"
|
12
|
+
)
|
13
|
+
yield gretel_renderer.render(options)
|
14
|
+
else
|
15
|
+
breadcrumbs_without_yield_links(options)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
alias_method_chain :breadcrumbs, :yield_links
|
20
|
+
end
|
data/lib/gretel/renderer.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Gretel
|
2
2
|
class Renderer
|
3
3
|
DEFAULT_OPTIONS = {
|
4
|
-
style: :
|
4
|
+
style: :inline,
|
5
5
|
pretext: "",
|
6
6
|
posttext: "",
|
7
7
|
separator: "",
|
@@ -15,7 +15,7 @@ module Gretel
|
|
15
15
|
}
|
16
16
|
|
17
17
|
DEFAULT_STYLES = {
|
18
|
-
|
18
|
+
inline: { container_tag: :div, separator: " › " },
|
19
19
|
ol: { container_tag: :ol, fragment_tag: :li },
|
20
20
|
ul: { container_tag: :ul, fragment_tag: :li },
|
21
21
|
bootstrap: { container_tag: :ol, fragment_tag: :li, class: "breadcrumb", current_class: "active" },
|
@@ -33,32 +33,17 @@ module Gretel
|
|
33
33
|
options = options_for_render(options)
|
34
34
|
links = links_for_render(options)
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
# Loop through all but the last (current) link and build HTML of the fragments
|
39
|
-
fragments = links[0..-2].map do |link|
|
40
|
-
render_fragment(options[:fragment_tag], link.text, link.url, options[:semantic])
|
41
|
-
end
|
42
|
-
|
43
|
-
# The current link is handled a little differently, and is only linked if specified in the options
|
44
|
-
current_link = links.last
|
45
|
-
fragments << render_fragment(options[:fragment_tag], current_link.text, (options[:link_current] ? current_link.url : nil), options[:semantic], class: options[:current_class])
|
46
|
-
|
47
|
-
# Build the final HTML
|
48
|
-
html = (options[:pretext] + fragments.join(options[:separator]) + options[:posttext]).html_safe
|
49
|
-
content_tag(options[:container_tag], html, id: options[:id], class: options[:class])
|
36
|
+
LinkCollection.new(context, links, options)
|
50
37
|
end
|
51
38
|
|
52
39
|
# Yields links with applied options.
|
53
40
|
def yield_links(options = {})
|
54
|
-
|
55
|
-
yield links_for_render(options)
|
41
|
+
yield render(options)
|
56
42
|
end
|
57
43
|
|
58
44
|
# Returns the parent breadcrumb.
|
59
45
|
def parent_breadcrumb(options = {})
|
60
|
-
|
61
|
-
links_for_render(options)[-2]
|
46
|
+
render(options)[-2]
|
62
47
|
end
|
63
48
|
|
64
49
|
# Yields the parent breadcrumb if any.
|
@@ -68,11 +53,6 @@ module Gretel
|
|
68
53
|
end
|
69
54
|
end
|
70
55
|
|
71
|
-
# Proxy for +context.link_to+ that can be overridden by plugins.
|
72
|
-
def breadcrumb_link_to(name, url, options = {})
|
73
|
-
context.link_to(name, url, options)
|
74
|
-
end
|
75
|
-
|
76
56
|
private
|
77
57
|
|
78
58
|
attr_reader :context, :breadcrumb_key, :breadcrumb_args
|
@@ -148,43 +128,7 @@ module Gretel
|
|
148
128
|
links
|
149
129
|
end
|
150
130
|
|
151
|
-
#
|
152
|
-
def render_fragment(fragment_tag, text, url, semantic, options = {})
|
153
|
-
if semantic
|
154
|
-
render_semantic_fragment(fragment_tag, text, url, options)
|
155
|
-
else
|
156
|
-
render_nonsemantic_fragment(fragment_tag, text, url, options)
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
# Renders semantic fragment HTML.
|
161
|
-
def render_semantic_fragment(fragment_tag, text, url, options = {})
|
162
|
-
if fragment_tag
|
163
|
-
text = content_tag(:span, text, itemprop: "title")
|
164
|
-
text = breadcrumb_link_to(text, url, itemprop: "url") if url.present?
|
165
|
-
content_tag(fragment_tag, text, class: options[:class], itemscope: "", itemtype: "http://data-vocabulary.org/Breadcrumb")
|
166
|
-
elsif url.present?
|
167
|
-
content_tag(:div, breadcrumb_link_to(content_tag(:span, text, itemprop: "title"), url, class: options[:class], itemprop: "url"), itemscope: "", itemtype: "http://data-vocabulary.org/Breadcrumb")
|
168
|
-
else
|
169
|
-
content_tag(:div, content_tag(:span, text, class: options[:class], itemprop: "title"), itemscope: "", itemtype: "http://data-vocabulary.org/Breadcrumb")
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
|
-
# Renders regular, non-semantic fragment HTML.
|
174
|
-
def render_nonsemantic_fragment(fragment_tag, text, url, options = {})
|
175
|
-
if fragment_tag
|
176
|
-
text = breadcrumb_link_to(text, url) if url.present?
|
177
|
-
content_tag(fragment_tag, text, class: options[:class])
|
178
|
-
elsif url.present?
|
179
|
-
breadcrumb_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
|
-
|
187
|
-
# Proxy to view context
|
131
|
+
# Proxy to view context.
|
188
132
|
def method_missing(method, *args, &block)
|
189
133
|
context.send(method, *args, &block)
|
190
134
|
end
|
@@ -204,5 +148,97 @@ module Gretel
|
|
204
148
|
@styles ||= DEFAULT_STYLES
|
205
149
|
end
|
206
150
|
end
|
151
|
+
|
152
|
+
class LinkCollection < Array
|
153
|
+
attr_reader :context, :links, :options
|
154
|
+
|
155
|
+
def initialize(context, links, options = {})
|
156
|
+
@context, @links, @options = context, links, options
|
157
|
+
concat links
|
158
|
+
end
|
159
|
+
|
160
|
+
# Helper for returning all link keys to allow for simple testing.
|
161
|
+
def keys
|
162
|
+
map(&:key)
|
163
|
+
end
|
164
|
+
|
165
|
+
# Renders the links into breadcrumbs.
|
166
|
+
def render
|
167
|
+
return "" if links.empty?
|
168
|
+
|
169
|
+
# Loop through all but the last (current) link and build HTML of the fragments
|
170
|
+
fragments = links[0..-2].map do |link|
|
171
|
+
render_fragment(options[:fragment_tag], link.text, link.url, options[:semantic])
|
172
|
+
end
|
173
|
+
|
174
|
+
# The current link is handled a little differently, and is only linked if specified in the options
|
175
|
+
current_link = links.last
|
176
|
+
fragments << render_fragment(options[:fragment_tag], current_link.text, (options[:link_current] ? current_link.url : nil), options[:semantic], class: options[:current_class])
|
177
|
+
|
178
|
+
# Build the final HTML
|
179
|
+
html_fragments = []
|
180
|
+
|
181
|
+
if options[:pretext].present?
|
182
|
+
html_fragments << content_tag(:span, options[:pretext], class: "pretext")
|
183
|
+
end
|
184
|
+
|
185
|
+
html_fragments << fragments.join(options[:separator])
|
186
|
+
|
187
|
+
if options[:posttext].present?
|
188
|
+
html_fragments << content_tag(:span, options[:posttext], class: "posttext")
|
189
|
+
end
|
190
|
+
|
191
|
+
html = html_fragments.join(" ").html_safe
|
192
|
+
content_tag(options[:container_tag], html, id: options[:id], class: options[:class])
|
193
|
+
end
|
194
|
+
|
195
|
+
alias :to_s :render
|
196
|
+
|
197
|
+
# Renders HTML for a breadcrumb fragment, i.e. a breadcrumb link.
|
198
|
+
def render_fragment(fragment_tag, text, url, semantic, options = {})
|
199
|
+
if semantic
|
200
|
+
render_semantic_fragment(fragment_tag, text, url, options)
|
201
|
+
else
|
202
|
+
render_nonsemantic_fragment(fragment_tag, text, url, options)
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
# Renders semantic fragment HTML.
|
207
|
+
def render_semantic_fragment(fragment_tag, text, url, options = {})
|
208
|
+
if fragment_tag
|
209
|
+
text = content_tag(:span, text, itemprop: "title")
|
210
|
+
text = breadcrumb_link_to(text, url, itemprop: "url") if url.present?
|
211
|
+
content_tag(fragment_tag, text, class: options[:class], itemscope: "", itemtype: "http://data-vocabulary.org/Breadcrumb")
|
212
|
+
elsif url.present?
|
213
|
+
content_tag(:span, breadcrumb_link_to(content_tag(:span, text, itemprop: "title"), url, class: options[:class], itemprop: "url"), itemscope: "", itemtype: "http://data-vocabulary.org/Breadcrumb")
|
214
|
+
else
|
215
|
+
content_tag(:span, content_tag(:span, text, class: options[:class], itemprop: "title"), itemscope: "", itemtype: "http://data-vocabulary.org/Breadcrumb")
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
# Renders regular, non-semantic fragment HTML.
|
220
|
+
def render_nonsemantic_fragment(fragment_tag, text, url, options = {})
|
221
|
+
if fragment_tag
|
222
|
+
text = breadcrumb_link_to(text, url) if url.present?
|
223
|
+
content_tag(fragment_tag, text, class: options[:class])
|
224
|
+
elsif url.present?
|
225
|
+
breadcrumb_link_to(text, url, class: options[:class])
|
226
|
+
elsif options[:class].present?
|
227
|
+
content_tag(:span, text, class: options[:class])
|
228
|
+
else
|
229
|
+
text
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
# Proxy for +context.link_to+ that can be overridden by plugins.
|
234
|
+
def breadcrumb_link_to(name, url, options = {})
|
235
|
+
context.link_to(name, url, options)
|
236
|
+
end
|
237
|
+
|
238
|
+
# Proxy to view context.
|
239
|
+
def method_missing(method, *args, &block)
|
240
|
+
context.send(method, *args, &block)
|
241
|
+
end
|
242
|
+
end
|
207
243
|
end
|
208
244
|
end
|
data/lib/gretel/version.rb
CHANGED
data/lib/gretel/view_helpers.rb
CHANGED
@@ -48,12 +48,8 @@ module Gretel
|
|
48
48
|
# <% end %>
|
49
49
|
# <% end %>
|
50
50
|
# <% end %>
|
51
|
-
def breadcrumbs(options = {}
|
52
|
-
|
53
|
-
gretel_renderer.yield_links(options, &block)
|
54
|
-
else
|
55
|
-
gretel_renderer.render(options)
|
56
|
-
end
|
51
|
+
def breadcrumbs(options = {})
|
52
|
+
gretel_renderer.render(options)
|
57
53
|
end
|
58
54
|
|
59
55
|
# Returns or yields parent breadcrumb (second-to-last in the trail) if it is present.
|
data/test/deprecated_test.rb
CHANGED
@@ -13,7 +13,7 @@ class DeprecatedTest < ActionView::TestCase
|
|
13
13
|
test "show root alone" do
|
14
14
|
breadcrumb :root
|
15
15
|
assert_equal %{<div class="breadcrumbs"><span class="current">Home</span></div>},
|
16
|
-
breadcrumbs(show_root_alone: true)
|
16
|
+
breadcrumbs(show_root_alone: true).to_s
|
17
17
|
end
|
18
18
|
|
19
19
|
test "deprecated configuration block" do
|
@@ -22,4 +22,24 @@ class DeprecatedTest < ActionView::TestCase
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
25
|
+
|
26
|
+
test ":default style key" do
|
27
|
+
breadcrumb :basic
|
28
|
+
|
29
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">About</span></div>},
|
30
|
+
breadcrumbs(style: :default).to_s
|
31
|
+
end
|
32
|
+
|
33
|
+
test "yield links" do
|
34
|
+
breadcrumb :multiple_links_with_parent
|
35
|
+
|
36
|
+
out = breadcrumbs do |links|
|
37
|
+
links.map { |link| [link.key, link.text, link.url] }
|
38
|
+
end
|
39
|
+
|
40
|
+
assert_equal [[:root, "Home", "/"],
|
41
|
+
[:basic, "About", "/about"],
|
42
|
+
[:multiple_links_with_parent, "Contact", "/about/contact"],
|
43
|
+
[:multiple_links_with_parent, "Contact form", "/about/contact/form"]], out
|
44
|
+
end
|
25
45
|
end
|
data/test/helper_methods_test.rb
CHANGED
@@ -14,142 +14,129 @@ class HelperMethodsTest < ActionView::TestCase
|
|
14
14
|
test "shows basic breadcrumb" do
|
15
15
|
breadcrumb :basic
|
16
16
|
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">About</span></div>},
|
17
|
-
breadcrumbs
|
17
|
+
breadcrumbs.to_s
|
18
18
|
end
|
19
19
|
|
20
20
|
test "shows breadcrumb with root" do
|
21
21
|
breadcrumb :with_root
|
22
22
|
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">About</span></div>},
|
23
|
-
breadcrumbs
|
23
|
+
breadcrumbs.to_s
|
24
24
|
end
|
25
25
|
|
26
26
|
test "shows breadcrumb with parent" do
|
27
27
|
breadcrumb :with_parent
|
28
28
|
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <a href="/about">About</a> › <span class="current">Contact</span></div>},
|
29
|
-
breadcrumbs
|
29
|
+
breadcrumbs.to_s
|
30
30
|
end
|
31
31
|
|
32
32
|
test "shows breadcrumb with autopath" do
|
33
33
|
breadcrumb :with_autopath, projects(:one)
|
34
34
|
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">Test Project</span></div>},
|
35
|
-
breadcrumbs
|
35
|
+
breadcrumbs.to_s
|
36
36
|
end
|
37
37
|
|
38
38
|
test "shows breadcrumb with parent object" do
|
39
39
|
breadcrumb :with_parent_object, issues(:one)
|
40
40
|
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <a href="/projects/1">Test Project</a> › <span class="current">Test Issue</span></div>},
|
41
|
-
breadcrumbs
|
41
|
+
breadcrumbs.to_s
|
42
42
|
end
|
43
43
|
|
44
44
|
test "shows multiple links" do
|
45
45
|
breadcrumb :multiple_links
|
46
46
|
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <a href="/about/contact">Contact</a> › <span class="current">Contact form</span></div>},
|
47
|
-
breadcrumbs
|
47
|
+
breadcrumbs.to_s
|
48
48
|
end
|
49
49
|
|
50
50
|
test "shows multiple links with parent" do
|
51
51
|
breadcrumb :multiple_links_with_parent
|
52
52
|
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>},
|
53
|
-
breadcrumbs
|
53
|
+
breadcrumbs.to_s
|
54
54
|
end
|
55
55
|
|
56
56
|
test "shows semantic breadcrumb" do
|
57
57
|
breadcrumb :with_root
|
58
|
-
assert_equal %{<div class="breadcrumbs"><
|
59
|
-
breadcrumbs(semantic: true)
|
58
|
+
assert_equal %{<div class="breadcrumbs"><span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="/" itemprop="url"><span itemprop="title">Home</span></a></span> › <span itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><span class="current" itemprop="title">About</span></span></div>},
|
59
|
+
breadcrumbs(semantic: true).to_s
|
60
60
|
end
|
61
61
|
|
62
62
|
test "doesn't show root alone" do
|
63
63
|
breadcrumb :root
|
64
|
-
assert_equal "", breadcrumbs
|
64
|
+
assert_equal "", breadcrumbs.to_s
|
65
65
|
end
|
66
66
|
|
67
67
|
test "displays single fragment" do
|
68
68
|
breadcrumb :root
|
69
69
|
assert_equal %{<div class="breadcrumbs"><span class="current">Home</span></div>},
|
70
|
-
breadcrumbs(display_single_fragment: true)
|
70
|
+
breadcrumbs(display_single_fragment: true).to_s
|
71
71
|
end
|
72
72
|
|
73
73
|
test "displays single non-root fragment" do
|
74
74
|
breadcrumb :basic
|
75
75
|
assert_equal %{<div class="breadcrumbs"><span class="current">About</span></div>},
|
76
|
-
breadcrumbs(autoroot: false, display_single_fragment: true)
|
76
|
+
breadcrumbs(autoroot: false, display_single_fragment: true).to_s
|
77
77
|
end
|
78
78
|
|
79
79
|
test "shows no breadcrumb" do
|
80
|
-
assert_equal "", breadcrumbs
|
80
|
+
assert_equal "", breadcrumbs.to_s
|
81
81
|
end
|
82
82
|
|
83
83
|
test "links current breadcrumb" do
|
84
84
|
breadcrumb :with_root
|
85
85
|
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <a href="/about" class="current">About</a></div>},
|
86
|
-
breadcrumbs(link_current: true)
|
86
|
+
breadcrumbs(link_current: true).to_s
|
87
87
|
end
|
88
88
|
|
89
89
|
test "shows pretext" do
|
90
90
|
breadcrumb :basic
|
91
|
-
assert_equal %{<div class="breadcrumbs">You are here
|
92
|
-
breadcrumbs(pretext: "You are here:
|
91
|
+
assert_equal %{<div class="breadcrumbs"><span class="pretext">You are here:</span> <a href="/">Home</a> › <span class="current">About</span></div>},
|
92
|
+
breadcrumbs(pretext: "You are here:").to_s
|
93
93
|
end
|
94
94
|
|
95
95
|
test "shows posttext" do
|
96
96
|
breadcrumb :basic
|
97
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">About</span>
|
98
|
-
breadcrumbs(posttext: "
|
97
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">About</span> <span class="posttext">text after breadcrumbs</span></div>},
|
98
|
+
breadcrumbs(posttext: "text after breadcrumbs").to_s
|
99
99
|
end
|
100
100
|
|
101
101
|
test "autoroot disabled" do
|
102
102
|
breadcrumb :basic
|
103
|
-
assert_equal "", breadcrumbs(autoroot: false)
|
103
|
+
assert_equal "", breadcrumbs(autoroot: false).to_s
|
104
104
|
end
|
105
105
|
|
106
106
|
test "shows separator" do
|
107
107
|
breadcrumb :with_root
|
108
108
|
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> » <span class="current">About</span></div>},
|
109
|
-
breadcrumbs(separator: " » ")
|
109
|
+
breadcrumbs(separator: " » ").to_s
|
110
110
|
end
|
111
111
|
|
112
112
|
test "shows element id" do
|
113
113
|
breadcrumb :basic
|
114
114
|
assert_equal %{<div class="breadcrumbs" id="custom_id"><a href="/">Home</a> › <span class="current">About</span></div>},
|
115
|
-
breadcrumbs(id: "custom_id")
|
115
|
+
breadcrumbs(id: "custom_id").to_s
|
116
116
|
end
|
117
117
|
|
118
118
|
test "shows custom container class" do
|
119
119
|
breadcrumb :basic
|
120
120
|
assert_equal %{<div class="custom_class"><a href="/">Home</a> › <span class="current">About</span></div>},
|
121
|
-
breadcrumbs(class: "custom_class")
|
121
|
+
breadcrumbs(class: "custom_class").to_s
|
122
122
|
end
|
123
123
|
|
124
124
|
test "shows custom current class" do
|
125
125
|
breadcrumb :basic
|
126
126
|
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="custom_current_class">About</span></div>},
|
127
|
-
breadcrumbs(current_class: "custom_current_class")
|
127
|
+
breadcrumbs(current_class: "custom_current_class").to_s
|
128
128
|
end
|
129
129
|
|
130
130
|
test "unsafe html" do
|
131
131
|
breadcrumb :with_unsafe_html
|
132
132
|
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">Test <strong>bold text</strong></span></div>},
|
133
|
-
breadcrumbs
|
133
|
+
breadcrumbs.to_s
|
134
134
|
end
|
135
135
|
|
136
136
|
test "safe html" do
|
137
137
|
breadcrumb :with_safe_html
|
138
138
|
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">Test <strong>bold text</strong></span></div>},
|
139
|
-
breadcrumbs
|
140
|
-
end
|
141
|
-
|
142
|
-
test "yields a block containing breadcrumb links array" do
|
143
|
-
breadcrumb :multiple_links_with_parent
|
144
|
-
|
145
|
-
out = breadcrumbs do |links|
|
146
|
-
links.map { |link| [link.key, link.text, link.url] }
|
147
|
-
end
|
148
|
-
|
149
|
-
assert_equal [[:root, "Home", "/"],
|
150
|
-
[:basic, "About", "/about"],
|
151
|
-
[:multiple_links_with_parent, "Contact", "/about/contact"],
|
152
|
-
[:multiple_links_with_parent, "Contact form", "/about/contact/form"]], out
|
139
|
+
breadcrumbs.to_s
|
153
140
|
end
|
154
141
|
|
155
142
|
test "parent breadcrumb" do
|
@@ -186,20 +173,29 @@ class HelperMethodsTest < ActionView::TestCase
|
|
186
173
|
assert_nil out
|
187
174
|
end
|
188
175
|
|
189
|
-
test "
|
190
|
-
breadcrumb :
|
176
|
+
test "link keys" do
|
177
|
+
breadcrumb :basic
|
178
|
+
assert_equal [:root, :basic], breadcrumbs.keys
|
179
|
+
end
|
180
|
+
|
181
|
+
test "using breadcrumbs as array" do
|
182
|
+
breadcrumb :basic
|
191
183
|
|
192
|
-
|
193
|
-
links
|
184
|
+
breadcrumbs.tap do |links|
|
185
|
+
assert_kind_of Array, links
|
186
|
+
assert_equal 2, links.count
|
194
187
|
end
|
188
|
+
end
|
195
189
|
|
196
|
-
|
190
|
+
test "sets current on last link in array" do
|
191
|
+
breadcrumb :multiple_links_with_parent
|
192
|
+
assert_equal [false, false, false, true], breadcrumbs.map(&:current?)
|
197
193
|
end
|
198
194
|
|
199
195
|
test "passing options to links" do
|
200
196
|
breadcrumb :with_link_options
|
201
197
|
|
202
|
-
breadcrumbs(autoroot: false) do |links|
|
198
|
+
breadcrumbs(autoroot: false).tap do |links|
|
203
199
|
links[0].tap do |link|
|
204
200
|
assert link.title?
|
205
201
|
assert_equal "My Title", link.title
|
@@ -218,53 +214,53 @@ class HelperMethodsTest < ActionView::TestCase
|
|
218
214
|
end
|
219
215
|
|
220
216
|
assert_equal %{<div class="breadcrumbs"><a href="/about">Test</a> › <span class="current">Other Link</span></div>},
|
221
|
-
breadcrumbs(autoroot: false)
|
217
|
+
breadcrumbs(autoroot: false).to_s
|
222
218
|
end
|
223
219
|
|
224
220
|
test "without link" do
|
225
221
|
breadcrumb :without_link
|
226
222
|
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › Also without link › <span class="current">Without link</span></div>},
|
227
|
-
breadcrumbs
|
223
|
+
breadcrumbs.to_s
|
228
224
|
end
|
229
225
|
|
230
226
|
test "view context" do
|
231
227
|
breadcrumb :using_view_helper
|
232
228
|
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">TestTest</span></div>},
|
233
|
-
breadcrumbs
|
229
|
+
breadcrumbs.to_s
|
234
230
|
end
|
235
231
|
|
236
232
|
test "multiple arguments" do
|
237
233
|
breadcrumb :with_multiple_arguments, "One", "Two", "Three"
|
238
234
|
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>},
|
239
|
-
breadcrumbs
|
235
|
+
breadcrumbs.to_s
|
240
236
|
end
|
241
237
|
|
242
238
|
test "from views folder" do
|
243
239
|
breadcrumb :from_views
|
244
240
|
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">Breadcrumb From View</span></div>},
|
245
|
-
breadcrumbs
|
241
|
+
breadcrumbs.to_s
|
246
242
|
end
|
247
243
|
|
248
244
|
test "with_breadcrumb" do
|
249
245
|
breadcrumb :basic
|
250
246
|
|
251
247
|
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">About</span></div>},
|
252
|
-
breadcrumbs
|
248
|
+
breadcrumbs.to_s
|
253
249
|
|
254
250
|
with_breadcrumb(:with_parent_object, issues(:one)) do
|
255
251
|
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <a href="/projects/1">Test Project</a> › <span class="current">Test Issue</span></div>},
|
256
|
-
breadcrumbs
|
252
|
+
breadcrumbs.to_s
|
257
253
|
end
|
258
254
|
|
259
255
|
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">About</span></div>},
|
260
|
-
breadcrumbs
|
256
|
+
breadcrumbs.to_s
|
261
257
|
end
|
262
258
|
|
263
259
|
test "calling breadcrumbs helper twice" do
|
264
260
|
breadcrumb :with_parent
|
265
261
|
2.times do
|
266
262
|
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <a href="/about">About</a> › <span class="current">Contact</span></div>},
|
267
|
-
breadcrumbs
|
263
|
+
breadcrumbs.to_s
|
268
264
|
end
|
269
265
|
end
|
270
266
|
|
@@ -279,7 +275,7 @@ class HelperMethodsTest < ActionView::TestCase
|
|
279
275
|
self.request = OpenStruct.new(fullpath: "/testpath?a=1&b=2")
|
280
276
|
|
281
277
|
breadcrumb :basic
|
282
|
-
assert_equal "/testpath?a=1&b=2", breadcrumbs
|
278
|
+
assert_equal "/testpath?a=1&b=2", breadcrumbs.last.url
|
283
279
|
end
|
284
280
|
|
285
281
|
test "calling the breadcrumb method with wrong arguments" do
|
@@ -299,7 +295,7 @@ class HelperMethodsTest < ActionView::TestCase
|
|
299
295
|
test "inferred breadcrumb" do
|
300
296
|
breadcrumb Project.first
|
301
297
|
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">Test Project</span></div>},
|
302
|
-
breadcrumbs
|
298
|
+
breadcrumbs.to_s
|
303
299
|
end
|
304
300
|
|
305
301
|
# Styles
|
@@ -307,43 +303,43 @@ class HelperMethodsTest < ActionView::TestCase
|
|
307
303
|
test "default style" do
|
308
304
|
breadcrumb :basic
|
309
305
|
assert_equal %{<div class="breadcrumbs"><a href="/">Home</a> › <span class="current">About</span></div>},
|
310
|
-
breadcrumbs
|
306
|
+
breadcrumbs.to_s
|
311
307
|
end
|
312
308
|
|
313
309
|
test "ordered list style" do
|
314
310
|
breadcrumb :basic
|
315
311
|
assert_equal %{<ol class="breadcrumbs"><li><a href="/">Home</a></li><li class="current">About</li></ol>},
|
316
|
-
breadcrumbs(style: :ol)
|
312
|
+
breadcrumbs(style: :ol).to_s
|
317
313
|
end
|
318
314
|
|
319
315
|
test "unordered list style" do
|
320
316
|
breadcrumb :basic
|
321
317
|
assert_equal %{<ul class="breadcrumbs"><li><a href="/">Home</a></li><li class="current">About</li></ul>},
|
322
|
-
breadcrumbs(style: :ul)
|
318
|
+
breadcrumbs(style: :ul).to_s
|
323
319
|
end
|
324
320
|
|
325
321
|
test "bootstrap style" do
|
326
322
|
breadcrumb :basic
|
327
323
|
assert_equal %{<ol class="breadcrumb"><li><a href="/">Home</a></li><li class="active">About</li></ol>},
|
328
|
-
breadcrumbs(style: :bootstrap)
|
324
|
+
breadcrumbs(style: :bootstrap).to_s
|
329
325
|
end
|
330
326
|
|
331
327
|
test "foundation5 style" do
|
332
328
|
breadcrumb :basic
|
333
329
|
assert_equal %{<ul class="breadcrumbs"><li><a href="/">Home</a></li><li class="current">About</li></ul>},
|
334
|
-
breadcrumbs(style: :foundation5)
|
330
|
+
breadcrumbs(style: :foundation5).to_s
|
335
331
|
end
|
336
332
|
|
337
333
|
test "custom container and fragment tags" do
|
338
334
|
breadcrumb :basic
|
339
335
|
assert_equal %{<c class="breadcrumbs"><f><a href="/">Home</a></f> › <f class="current">About</f></c>},
|
340
|
-
breadcrumbs(container_tag: :c, fragment_tag: :f)
|
336
|
+
breadcrumbs(container_tag: :c, fragment_tag: :f).to_s
|
341
337
|
end
|
342
338
|
|
343
339
|
test "custom semantic container and fragment tags" do
|
344
340
|
breadcrumb :basic
|
345
341
|
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>},
|
346
|
-
breadcrumbs(container_tag: :c, fragment_tag: :f, semantic: true)
|
342
|
+
breadcrumbs(container_tag: :c, fragment_tag: :f, semantic: true).to_s
|
347
343
|
end
|
348
344
|
|
349
345
|
test "unknown style" do
|
@@ -359,7 +355,7 @@ class HelperMethodsTest < ActionView::TestCase
|
|
359
355
|
breadcrumb :basic
|
360
356
|
|
361
357
|
assert_equal %{<one class="breadcrumbs"><two><a href="/">Home</a></two><two class="current">About</two></one>},
|
362
|
-
breadcrumbs(style: :test_style)
|
358
|
+
breadcrumbs(style: :test_style).to_s
|
363
359
|
end
|
364
360
|
|
365
361
|
# Configuration reload
|
@@ -380,7 +376,7 @@ class HelperMethodsTest < ActionView::TestCase
|
|
380
376
|
end
|
381
377
|
|
382
378
|
breadcrumb :about
|
383
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> › <span class="current">About (loaded)</span></div>}, breadcrumbs
|
379
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> › <span class="current">About (loaded)</span></div>}, breadcrumbs.to_s
|
384
380
|
|
385
381
|
sleep 1 # File change interval is 1 second
|
386
382
|
|
@@ -396,7 +392,7 @@ class HelperMethodsTest < ActionView::TestCase
|
|
396
392
|
end
|
397
393
|
|
398
394
|
breadcrumb :about
|
399
|
-
assert_equal %{<div class="breadcrumbs"><a href="/test">Home (reloaded)</a> › <span class="current">About (reloaded)</span></div>}, breadcrumbs
|
395
|
+
assert_equal %{<div class="breadcrumbs"><a href="/test">Home (reloaded)</a> › <span class="current">About (reloaded)</span></div>}, breadcrumbs.to_s
|
400
396
|
end
|
401
397
|
|
402
398
|
test "reload configuration when file is added" do
|
@@ -425,7 +421,7 @@ class HelperMethodsTest < ActionView::TestCase
|
|
425
421
|
end
|
426
422
|
|
427
423
|
breadcrumb :about
|
428
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> › <span class="current">About (loaded)</span></div>}, breadcrumbs
|
424
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> › <span class="current">About (loaded)</span></div>}, breadcrumbs.to_s
|
429
425
|
end
|
430
426
|
|
431
427
|
test "reload configuration when file is deleted" do
|
@@ -453,7 +449,7 @@ class HelperMethodsTest < ActionView::TestCase
|
|
453
449
|
end
|
454
450
|
|
455
451
|
breadcrumb :contact
|
456
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> › <a href="/about">About (loaded)</a> › <span class="current">Contact (loaded)</span></div>}, breadcrumbs
|
452
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> › <a href="/about">About (loaded)</a> › <span class="current">Contact (loaded)</span></div>}, breadcrumbs.to_s
|
457
453
|
|
458
454
|
File.delete path.join("pages.rb")
|
459
455
|
|
@@ -463,7 +459,7 @@ class HelperMethodsTest < ActionView::TestCase
|
|
463
459
|
end
|
464
460
|
|
465
461
|
breadcrumb :about
|
466
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> › <span class="current">About (loaded)</span></div>}, breadcrumbs
|
462
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> › <span class="current">About (loaded)</span></div>}, breadcrumbs.to_s
|
467
463
|
end
|
468
464
|
|
469
465
|
test "reloads only in development environment" do
|
@@ -483,7 +479,7 @@ class HelperMethodsTest < ActionView::TestCase
|
|
483
479
|
end
|
484
480
|
|
485
481
|
breadcrumb :about
|
486
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> › <span class="current">About (loaded)</span></div>}, breadcrumbs
|
482
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> › <span class="current">About (loaded)</span></div>}, breadcrumbs.to_s
|
487
483
|
|
488
484
|
sleep 1
|
489
485
|
|
@@ -499,7 +495,7 @@ class HelperMethodsTest < ActionView::TestCase
|
|
499
495
|
end
|
500
496
|
|
501
497
|
breadcrumb :about
|
502
|
-
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> › <span class="current">About (loaded)</span></div>}, breadcrumbs
|
498
|
+
assert_equal %{<div class="breadcrumbs"><a href="/">Home (loaded)</a> › <span class="current">About (loaded)</span></div>}, breadcrumbs.to_s
|
503
499
|
end
|
504
500
|
|
505
501
|
private
|
metadata
CHANGED
@@ -1,55 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gretel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lasse Bunk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-04-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 3.2.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 3.2.0
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rails
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ~>
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 3.2.13
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ~>
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 3.2.13
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: sqlite3
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
|
-
- -
|
31
|
+
- - ">="
|
46
32
|
- !ruby/object:Gem::Version
|
47
33
|
version: '0'
|
48
34
|
type: :development
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
|
-
- -
|
38
|
+
- - ">="
|
53
39
|
- !ruby/object:Gem::Version
|
54
40
|
version: '0'
|
55
41
|
description: Gretel is a Ruby on Rails plugin that makes it easy yet flexible to create
|
@@ -60,8 +46,8 @@ executables: []
|
|
60
46
|
extensions: []
|
61
47
|
extra_rdoc_files: []
|
62
48
|
files:
|
63
|
-
- .gitignore
|
64
|
-
- .travis.yml
|
49
|
+
- ".gitignore"
|
50
|
+
- ".travis.yml"
|
65
51
|
- CHANGELOG.md
|
66
52
|
- Gemfile
|
67
53
|
- LICENSE.txt
|
@@ -75,8 +61,10 @@ files:
|
|
75
61
|
- lib/gretel/crumb.rb
|
76
62
|
- lib/gretel/crumbs.rb
|
77
63
|
- lib/gretel/deprecated.rb
|
64
|
+
- lib/gretel/deprecated/default_style_key.rb
|
78
65
|
- lib/gretel/deprecated/layout.rb
|
79
66
|
- lib/gretel/deprecated/show_root_alone.rb
|
67
|
+
- lib/gretel/deprecated/yield_links.rb
|
80
68
|
- lib/gretel/link.rb
|
81
69
|
- lib/gretel/renderer.rb
|
82
70
|
- lib/gretel/resettable.rb
|
@@ -136,17 +124,17 @@ require_paths:
|
|
136
124
|
- lib
|
137
125
|
required_ruby_version: !ruby/object:Gem::Requirement
|
138
126
|
requirements:
|
139
|
-
- -
|
127
|
+
- - ">="
|
140
128
|
- !ruby/object:Gem::Version
|
141
129
|
version: '0'
|
142
130
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
131
|
requirements:
|
144
|
-
- -
|
132
|
+
- - ">="
|
145
133
|
- !ruby/object:Gem::Version
|
146
134
|
version: '0'
|
147
135
|
requirements: []
|
148
136
|
rubyforge_project:
|
149
|
-
rubygems_version: 2.1
|
137
|
+
rubygems_version: 2.2.1
|
150
138
|
signing_key:
|
151
139
|
specification_version: 4
|
152
140
|
summary: Flexible Ruby on Rails breadcrumbs plugin.
|