breadcrumble 3.0.2 → 3.0.3
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.
- data/README.md +18 -0
- data/app/views/breadcrumble/_breadcrumb_trail.html.erb +11 -0
- data/app/views/breadcrumble/_breadcrumb_trails.html.erb +15 -0
- data/lib/breadcrumble/action_controller.rb +19 -4
- data/lib/breadcrumble/action_view.rb +4 -0
- data/lib/breadcrumble/version.rb +1 -1
- data/lib/generators/breadcrumble/views_generator.rb +4 -2
- data/spec/controllers/application_controller_spec.rb +39 -14
- metadata +6 -4
data/README.md
CHANGED
@@ -37,6 +37,18 @@ Second arugment passed url_for method for convenient use, except specify nil.
|
|
37
37
|
|
38
38
|
You can use Proc object for arguments, the library calls proc with controller context as argument.
|
39
39
|
|
40
|
+
If you would like to use multiple breadcrumb, call `add_breadcrumb_to` method with breadcrumb trail index.
|
41
|
+
|
42
|
+
class SampleController
|
43
|
+
|
44
|
+
add_breadcrumb_to "level 1", "level 1 url", 0 # same as -> add_breadcrumb "level 1", "level 1 url"
|
45
|
+
add_breadcrumb_to "level 2", "level 2 url", 1
|
46
|
+
|
47
|
+
def index
|
48
|
+
add_breadcrumb "level 1 second item", "level 1 second url", 0
|
49
|
+
add_breadcrumb "level 2 second item", "level 2 second url", 1
|
50
|
+
end
|
51
|
+
|
40
52
|
### View
|
41
53
|
In your view, you can render the breadcrumb navigation with the `render_breadcrumbs` helper.
|
42
54
|
|
@@ -44,6 +56,12 @@ In your view, you can render the breadcrumb navigation with the `render_breadcru
|
|
44
56
|
<%= render_breadcrumbs %>
|
45
57
|
</body>
|
46
58
|
|
59
|
+
You can render multiple breadcrumb by `render_breadcrumb_trails` helper.
|
60
|
+
|
61
|
+
<body>
|
62
|
+
<%= render_breadcrumb_trails %>
|
63
|
+
</body>
|
64
|
+
|
47
65
|
### Customizing layout
|
48
66
|
Breadcrumble generates default partial template for your app.
|
49
67
|
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<span itemscope="child" itemtype="http://data-vocabulary.org/Breadcrumb">
|
2
|
+
<% span_title = content_tag(:span, trail[0][:name], itemprop: "title") %>
|
3
|
+
<% if trail[0][:url] == nil %>
|
4
|
+
<%= span_title %>
|
5
|
+
<% else %>
|
6
|
+
<%= link_to_unless_current span_title, trail[0][:url], itemprop: "url" %>
|
7
|
+
<% end %>
|
8
|
+
<% if trail.size > 1 %>
|
9
|
+
><%= render partial: 'breadcrumble/breadcrumb_trail', locals: { trail: trail.drop(1) } %>
|
10
|
+
<% end %>
|
11
|
+
</span>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<div>
|
2
|
+
<% breadcrumb_trails.each do |trail| %>
|
3
|
+
<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
|
4
|
+
<% span_title = content_tag(:span, trail[0][:name], itemprop: "title") %>
|
5
|
+
<% if trail[0][:url] == nil %>
|
6
|
+
<%= span_title %>
|
7
|
+
<% else %>
|
8
|
+
<%= link_to_unless_current span_title, trail[0][:url], itemprop: "url" %>
|
9
|
+
<% end %>
|
10
|
+
<% if trail.size > 1 %>
|
11
|
+
><%= render partial: 'breadcrumble/breadcrumb_trail', locals: { trail: trail.drop(1) } %>
|
12
|
+
<% end %>
|
13
|
+
</div>
|
14
|
+
<% end %>
|
15
|
+
</div>
|
@@ -3,7 +3,7 @@ module Breadcrumble
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
included do
|
6
|
-
helper_method :add_breadcrumb, :breadcrumbs
|
6
|
+
helper_method :add_breadcrumb, :breadcrumbs, :breadcrumb_trails
|
7
7
|
end
|
8
8
|
|
9
9
|
module ClassMethods
|
@@ -13,6 +13,12 @@ module Breadcrumble
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
+
def add_breadcrumb_to name, url, trail_index
|
17
|
+
before_filter do |controller|
|
18
|
+
controller.send :add_breadcrumb_to, name, url, trail_index
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
16
22
|
def add_breadcrumbs *args
|
17
23
|
before_filter do |controller|
|
18
24
|
args.each do |arg|
|
@@ -25,8 +31,13 @@ module Breadcrumble
|
|
25
31
|
protected
|
26
32
|
|
27
33
|
def add_breadcrumb name, url = nil
|
28
|
-
|
29
|
-
|
34
|
+
add_breadcrumb_to name, url, 0
|
35
|
+
end
|
36
|
+
|
37
|
+
def add_breadcrumb_to name, url, trail_index
|
38
|
+
@breadcrumb_trails ||= [[]]
|
39
|
+
@breadcrumb_trails[trail_index] ||= []
|
40
|
+
@breadcrumb_trails[trail_index] << {
|
30
41
|
name: case name
|
31
42
|
when Proc then name.call(self)
|
32
43
|
else name
|
@@ -44,8 +55,12 @@ module Breadcrumble
|
|
44
55
|
end
|
45
56
|
end
|
46
57
|
|
58
|
+
def breadcrumb_trails
|
59
|
+
@breadcrumb_trails
|
60
|
+
end
|
61
|
+
|
47
62
|
def breadcrumbs
|
48
|
-
@
|
63
|
+
@breadcrumb_trails.first
|
49
64
|
end
|
50
65
|
end
|
51
66
|
end
|
data/lib/breadcrumble/version.rb
CHANGED
@@ -5,8 +5,10 @@ module Breadcrumble
|
|
5
5
|
desc 'This generator generates breadcrumbs partial template.'
|
6
6
|
|
7
7
|
def generate_views
|
8
|
-
|
9
|
-
|
8
|
+
names = ['_breadcrumb.html.erb', '_breadcrumb_trails.html.erb', '_breadcrumb_trail.html.erb']
|
9
|
+
names.each do |name|
|
10
|
+
copy_file "#{name}", "app/views/breadcrumble/#{name}"
|
11
|
+
end
|
10
12
|
end
|
11
13
|
end
|
12
14
|
end
|
@@ -4,6 +4,8 @@ describe ApplicationController do
|
|
4
4
|
controller do
|
5
5
|
add_breadcrumbs ['root', '/'], ['nil', nil]
|
6
6
|
add_breadcrumb -> c { c.examples_url }, -> c { c.examples_path }
|
7
|
+
add_breadcrumb_to -> c { c.examples_url }, -> c { c.examples_path }, 1
|
8
|
+
add_breadcrumb_to 'multi third 1', 'multi third url 1', 2
|
7
9
|
|
8
10
|
def index
|
9
11
|
add_breadcrumb 'examples', controller: 'examples', action: 'index', only_path: true
|
@@ -11,6 +13,14 @@ describe ApplicationController do
|
|
11
13
|
add_breadcrumbs ['crumb1'], ['crumb2', -> c { example_path(1234) }]
|
12
14
|
render text: 'test'
|
13
15
|
end
|
16
|
+
|
17
|
+
def show
|
18
|
+
add_breadcrumb_to 'examples', {controller: 'examples', action: 'index', only_path: true}, 1
|
19
|
+
add_breadcrumb_to 'example', example_path(123), 1
|
20
|
+
add_breadcrumb_to 'multi third 2', 'multi third url 2', 2
|
21
|
+
add_breadcrumb_to 'multi third 3', 'multi third url 3', 2
|
22
|
+
render text: 'test'
|
23
|
+
end
|
14
24
|
end
|
15
25
|
|
16
26
|
describe '#index' do
|
@@ -21,46 +31,61 @@ describe ApplicationController do
|
|
21
31
|
context '.add_breadcrumbs' do
|
22
32
|
it 'having breadcrumbs' do
|
23
33
|
should be_success
|
24
|
-
assigns(:
|
25
|
-
assigns(:breadcrumbs)[0][:url].should eq('/')
|
34
|
+
assigns(:breadcrumb_trails)[0][0].should eq({name: 'root', url: '/'})
|
26
35
|
end
|
27
36
|
|
28
37
|
it 'url has nil value' do
|
29
38
|
should be_success
|
30
|
-
assigns(:
|
31
|
-
assigns(:breadcrumbs)[1][:url].should be_nil
|
39
|
+
assigns(:breadcrumb_trails)[0][1].should eq({name: 'nil', url: nil})
|
32
40
|
end
|
33
41
|
end
|
34
42
|
|
35
43
|
context '.add_breadcrumb' do
|
36
44
|
it 'execute lambda in controller instance context' do
|
37
45
|
should be_success
|
38
|
-
assigns(:
|
39
|
-
assigns(:breadcrumbs)[2][:url].should eq('/examples')
|
46
|
+
assigns(:breadcrumb_trails)[0][2].should eq({name: 'http://test.host/examples', url: '/examples'})
|
40
47
|
end
|
41
48
|
end
|
42
49
|
|
43
50
|
context '#add_breadcrumb' do
|
44
51
|
it 'url options' do
|
45
52
|
should be_success
|
46
|
-
assigns(:
|
47
|
-
assigns(:breadcrumbs)[3][:url].should eq('/examples')
|
53
|
+
assigns(:breadcrumb_trails)[0][3].should eq({name: 'examples', url: '/examples'})
|
48
54
|
end
|
49
55
|
|
50
56
|
it 'example_path' do
|
51
57
|
should be_success
|
52
|
-
assigns(:
|
53
|
-
assigns(:breadcrumbs)[4][:url].should eq('/examples/123')
|
58
|
+
assigns(:breadcrumb_trails)[0][4].should eq({name: 'example', url: '/examples/123'})
|
54
59
|
end
|
55
60
|
end
|
56
61
|
|
57
62
|
context '#add_breadcrumbs' do
|
58
63
|
it 'sequence is starting from first argument' do
|
59
64
|
should be_success
|
60
|
-
assigns(:
|
61
|
-
assigns(:
|
62
|
-
|
63
|
-
|
65
|
+
assigns(:breadcrumb_trails)[0][5].should eq({name: 'crumb1', url: nil})
|
66
|
+
assigns(:breadcrumb_trails)[0][6].should eq({name: 'crumb2', url: '/examples/1234'})
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe '#show' do
|
72
|
+
subject do
|
73
|
+
get :show, id: 1
|
74
|
+
end
|
75
|
+
|
76
|
+
context 'multiple breadcrumbs' do
|
77
|
+
it 'having breadcrumbs in second trail' do
|
78
|
+
should be_success
|
79
|
+
assigns(:breadcrumb_trails)[1][0].should eq({name: 'http://test.host/examples', url: '/examples'})
|
80
|
+
assigns(:breadcrumb_trails)[1][1].should eq({name: 'examples', url: '/examples'})
|
81
|
+
assigns(:breadcrumb_trails)[1][2].should eq({name: 'example', url: '/examples/123'})
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'having breadcrumbs in third trail' do
|
85
|
+
should be_success
|
86
|
+
assigns(:breadcrumb_trails)[2][0].should eq({name: 'multi third 1', url: 'multi third url 1'})
|
87
|
+
assigns(:breadcrumb_trails)[2][1].should eq({name: 'multi third 2', url: 'multi third url 2'})
|
88
|
+
assigns(:breadcrumb_trails)[2][2].should eq({name: 'multi third 3', url: 'multi third url 3'})
|
64
89
|
end
|
65
90
|
end
|
66
91
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: breadcrumble
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
12
|
+
date: 2013-05-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -73,6 +73,8 @@ files:
|
|
73
73
|
- README.md
|
74
74
|
- Rakefile
|
75
75
|
- app/views/breadcrumble/_breadcrumb.html.erb
|
76
|
+
- app/views/breadcrumble/_breadcrumb_trail.html.erb
|
77
|
+
- app/views/breadcrumble/_breadcrumb_trails.html.erb
|
76
78
|
- breadcrumble.gemspec
|
77
79
|
- lib/breadcrumble.rb
|
78
80
|
- lib/breadcrumble/action_controller.rb
|
@@ -125,7 +127,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
125
127
|
version: '0'
|
126
128
|
segments:
|
127
129
|
- 0
|
128
|
-
hash:
|
130
|
+
hash: 3137348152079154786
|
129
131
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
132
|
none: false
|
131
133
|
requirements:
|
@@ -134,7 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
134
136
|
version: '0'
|
135
137
|
segments:
|
136
138
|
- 0
|
137
|
-
hash:
|
139
|
+
hash: 3137348152079154786
|
138
140
|
requirements: []
|
139
141
|
rubyforge_project:
|
140
142
|
rubygems_version: 1.8.23
|