auto_breadcrumbs 0.2.7 → 0.3.0
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/README.md +11 -0
- data/auto_breadcrumbs.gemspec +1 -2
- data/lib/auto_breadcrumbs/controller.rb +35 -16
- data/lib/auto_breadcrumbs/version.rb +1 -1
- data/spec/dummy/config/initializers/i18n.rb +1 -0
- data/spec/dummy/config/locales/auto_breadcrumbs.en.yml +1 -1
- data/spec/dummy/config/routes.rb +3 -1
- data/spec/features/rendering_breadcrumbs_spec.rb +48 -38
- data/spec/spec_helper.rb +1 -3
- metadata +21 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 49f9086b4ad4960dddcca1e29c99977bf0f5fdcc
|
4
|
+
data.tar.gz: 77084a18e6d528247d1ac4a8bc57886f2426cef7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9ff92bed3f963ce8c7cd33c2c632091eaa55aa7b56d499d11bc0ca697f792cbbfb25aa7a3452c2c19d05cd6f70a4c34963ae615a261faa494d6542ae1577f22a
|
7
|
+
data.tar.gz: a1e94c04dfc5c42eb1b87571c2c5ebc2314c6ae2ee983689bfc5516e09d3c85b52803bf9c052fb009aa413fd1dd2f111c792757887db0fffd735925ccdfc9a32
|
data/README.md
CHANGED
@@ -60,6 +60,17 @@ For example, if you go to `/users/1/edit` it will show breadcrums like `Home / U
|
|
60
60
|
In case when translations are absent it will try to build breadcrumbs automatically depending on resource and action names.
|
61
61
|
For example, if you visit `/countries/new` it will show breadcrums `Home / Countries / New`.
|
62
62
|
|
63
|
+
You can also use helper methods `resource_translation` and `action_translation` like this:
|
64
|
+
|
65
|
+
```erb
|
66
|
+
<!DOCTYPE html>
|
67
|
+
<html>
|
68
|
+
<head>
|
69
|
+
<title><%= [resource_translation, action_translation].compact.join(' | ') %></title>
|
70
|
+
</head>
|
71
|
+
</html>
|
72
|
+
```
|
73
|
+
|
63
74
|
## Customization
|
64
75
|
|
65
76
|
For more information about customization of breadcrumbs visit [breadcrumbs_on_rails](https://github.com/weppos/breadcrumbs_on_rails).
|
data/auto_breadcrumbs.gemspec
CHANGED
@@ -21,8 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_dependency 'breadcrumbs_on_rails'
|
22
22
|
|
23
23
|
spec.add_development_dependency 'activemodel'
|
24
|
-
|
25
24
|
spec.add_development_dependency 'rspec-rails'
|
26
25
|
spec.add_development_dependency 'capybara'
|
27
|
-
spec.add_development_dependency '
|
26
|
+
spec.add_development_dependency 'pry'
|
28
27
|
end
|
@@ -17,38 +17,57 @@ module AutoBreadcrumbs
|
|
17
17
|
add_breadcrumb breadcrumbs_t('root'), :root_path
|
18
18
|
|
19
19
|
unless request.path == root_path
|
20
|
-
|
21
|
-
|
20
|
+
# nested resources
|
21
|
+
Rails.application.routes.router.recognize(request) do |route, matches, param|
|
22
|
+
route.required_parts[0...-1].each do |required_part|
|
23
|
+
resources_name = required_part.to_s.gsub('_id', '').pluralize
|
24
|
+
resource_translation = resource_translation(resources_name)
|
25
|
+
resource_index_path = index_path(resources_name)
|
26
|
+
action_translation = action_translation(resources_name, 'show')
|
27
|
+
|
28
|
+
add_breadcrumb(resource_translation, resource_index_path) if resource_translation
|
29
|
+
add_breadcrumb(action_translation) if action_translation
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
resource_translation = resource_translation(params[:controller])
|
34
|
+
resource_index_path = index_path(params[:controller])
|
35
|
+
action_translation = action_translation(params[:controller], params[:action])
|
36
|
+
|
37
|
+
add_breadcrumb(resource_translation, resource_index_path) if resource_translation
|
38
|
+
add_breadcrumb(action_translation) if action_translation
|
22
39
|
end
|
23
40
|
end
|
24
41
|
|
25
|
-
def resource_translation
|
26
|
-
if index_path
|
27
|
-
breadcrumbs_t("controllers.#{
|
28
|
-
|
42
|
+
def resource_translation(resources_name)
|
43
|
+
if index_path(resources_name)
|
44
|
+
breadcrumbs_t("controllers.#{ resources_name }.index") ||
|
45
|
+
resources_name.humanize
|
29
46
|
end
|
30
47
|
end
|
31
48
|
|
32
|
-
def action_translation
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
49
|
+
def action_translation(resources_name, action_name)
|
50
|
+
mapped_action_name = breadcrumbs_action_name(action_name)
|
51
|
+
|
52
|
+
unless mapped_action_name == 'index'
|
53
|
+
breadcrumbs_t("controllers.#{ resources_name }.#{ mapped_action_name }") ||
|
54
|
+
breadcrumbs_t("actions.#{ mapped_action_name }") ||
|
55
|
+
mapped_action_name.humanize
|
37
56
|
end
|
38
57
|
end
|
39
58
|
|
40
|
-
def index_path
|
41
|
-
url_for(controller:
|
59
|
+
def index_path(resources_name)
|
60
|
+
url_for(controller: resources_name) rescue nil
|
42
61
|
end
|
43
62
|
|
44
|
-
def breadcrumbs_action_name
|
45
|
-
case
|
63
|
+
def breadcrumbs_action_name(action_name)
|
64
|
+
case action_name
|
46
65
|
when 'create'
|
47
66
|
'new'
|
48
67
|
when 'update'
|
49
68
|
'edit'
|
50
69
|
else
|
51
|
-
|
70
|
+
action_name
|
52
71
|
end
|
53
72
|
end
|
54
73
|
|
@@ -0,0 +1 @@
|
|
1
|
+
I18n.enforce_available_locales = false
|
data/spec/dummy/config/routes.rb
CHANGED
@@ -2,81 +2,91 @@ require 'spec_helper'
|
|
2
2
|
require 'features/pages/breadcrumb_page'
|
3
3
|
|
4
4
|
feature 'Rendering breadcrumbs' do
|
5
|
-
let(:locale)
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
let(:root_page) { BreadcrumbPage.new(index: root_path) }
|
10
|
-
let(:root_breadcrumbs) { [locale['root']] }
|
11
|
-
|
12
|
-
# Country name page -----------------------------------------------------------------------------
|
13
|
-
|
14
|
-
let(:country_name_page) { BreadcrumbPage.new(index: country_names_path) }
|
15
|
-
let(:country_name_index_breadcrumbs) { root_breadcrumbs + ['Country names'] }
|
16
|
-
|
17
|
-
# City page -------------------------------------------------------------------------------------
|
18
|
-
|
19
|
-
let(:city_page) {
|
20
|
-
BreadcrumbPage.new edit: edit_city_path('id'),
|
21
|
-
show: city_path('id')
|
22
|
-
}
|
23
|
-
let(:city_edit_breadcrumbs) { root_breadcrumbs + [locale['actions']['edit']] }
|
24
|
-
let(:city_show_breadcrumbs) { root_breadcrumbs + [locale['controllers']['cities']['show']] }
|
25
|
-
|
26
|
-
# User page -------------------------------------------------------------------------------------
|
27
|
-
|
28
|
-
let(:user_page) {
|
29
|
-
BreadcrumbPage.new index: users_path,
|
30
|
-
show: user_path('id'),
|
31
|
-
edit: edit_user_path('id'),
|
32
|
-
dup: dup_user_path('id'),
|
33
|
-
ban: ban_user_path('id'),
|
34
|
-
sync: sync_users_path
|
35
|
-
}
|
36
|
-
let(:user_index_breadcrumbs) { root_breadcrumbs + [locale['controllers']['users']['index']] }
|
37
|
-
let(:user_show_breadcrumbs) { user_index_breadcrumbs + [locale['actions']['show']] }
|
38
|
-
let(:user_edit_breadcrumbs) { user_index_breadcrumbs + [locale['controllers']['users']['edit']] }
|
39
|
-
let(:user_dup_breadcrumbs) { user_index_breadcrumbs + [locale['controllers']['users']['dup']] }
|
40
|
-
let(:user_sync_breadcrumbs) { user_index_breadcrumbs + [locale['controllers']['users']['sync']] }
|
41
|
-
let(:user_ban_breadcrumbs) { user_index_breadcrumbs + ['Ban'] }
|
5
|
+
let(:locale) do
|
6
|
+
locale_file = File.open(Rails.root.join('config/locales/auto_breadcrumbs.en.yml'))
|
7
|
+
YAML.load(locale_file)['en']['auto_breadcrumbs']
|
8
|
+
end
|
42
9
|
|
43
|
-
|
10
|
+
let(:root_breadcrumbs) { ['Home'] }
|
44
11
|
|
45
12
|
scenario 'on root page' do
|
13
|
+
root_page = BreadcrumbPage.new(index: root_path)
|
14
|
+
|
46
15
|
root_page.visit_page(:index)
|
16
|
+
|
47
17
|
expect(root_page.breadcrumbs).to eq(root_breadcrumbs)
|
48
18
|
end
|
49
19
|
|
50
20
|
scenario 'without translation' do
|
21
|
+
country_name_page = BreadcrumbPage.new(index: country_names_path)
|
22
|
+
|
51
23
|
country_name_page.visit_page(:index)
|
24
|
+
country_name_index_breadcrumbs = root_breadcrumbs + ['Country names']
|
25
|
+
|
52
26
|
expect(country_name_page.breadcrumbs).to eq(country_name_index_breadcrumbs)
|
53
27
|
end
|
54
28
|
|
55
29
|
scenario 'when resource without index action' do
|
30
|
+
city_page = BreadcrumbPage.new(edit: edit_city_path('id'), show: city_path('id'))
|
31
|
+
|
56
32
|
city_page.visit_page(:edit)
|
33
|
+
city_edit_breadcrumbs = root_breadcrumbs + ['Cities & Towns', 'Edit']
|
34
|
+
|
57
35
|
expect(city_page.breadcrumbs).to eq(city_edit_breadcrumbs)
|
58
36
|
|
59
37
|
city_page.visit_page(:show)
|
38
|
+
city_show_breadcrumbs = root_breadcrumbs + ['Cities & Towns', 'Browse']
|
39
|
+
|
60
40
|
expect(city_page.breadcrumbs).to eq(city_show_breadcrumbs)
|
61
41
|
end
|
62
42
|
|
63
43
|
scenario 'when resource with index action' do
|
44
|
+
user_page = BreadcrumbPage.new(
|
45
|
+
index: users_path,
|
46
|
+
show: user_path('id'),
|
47
|
+
edit: edit_user_path('id'),
|
48
|
+
dup: dup_user_path('id'),
|
49
|
+
ban: ban_user_path('id'),
|
50
|
+
sync: sync_users_path
|
51
|
+
)
|
52
|
+
|
64
53
|
user_page.visit_page(:index)
|
54
|
+
user_index_breadcrumbs = root_breadcrumbs + ['Users']
|
55
|
+
|
65
56
|
expect(user_page.breadcrumbs).to eq(user_index_breadcrumbs)
|
66
57
|
|
67
58
|
user_page.visit_page(:show)
|
59
|
+
user_show_breadcrumbs = user_index_breadcrumbs + ['Show']
|
60
|
+
|
68
61
|
expect(user_page.breadcrumbs).to eq(user_show_breadcrumbs)
|
69
62
|
|
70
63
|
user_page.visit_page(:edit)
|
64
|
+
user_edit_breadcrumbs = user_index_breadcrumbs + ['Settings']
|
65
|
+
|
71
66
|
expect(user_page.breadcrumbs).to eq(user_edit_breadcrumbs)
|
72
67
|
|
73
68
|
user_page.visit_page(:dup)
|
69
|
+
user_dup_breadcrumbs = user_index_breadcrumbs + ['Duplication']
|
70
|
+
|
74
71
|
expect(user_page.breadcrumbs).to eq(user_dup_breadcrumbs)
|
75
72
|
|
76
73
|
user_page.visit_page(:sync)
|
74
|
+
user_sync_breadcrumbs = user_index_breadcrumbs + ['Synchronization']
|
75
|
+
|
77
76
|
expect(user_page.breadcrumbs).to eq(user_sync_breadcrumbs)
|
78
77
|
|
79
78
|
user_page.visit_page(:ban)
|
79
|
+
user_ban_breadcrumbs = user_index_breadcrumbs + ['Ban']
|
80
|
+
|
80
81
|
expect(user_page.breadcrumbs).to eq(user_ban_breadcrumbs)
|
81
82
|
end
|
83
|
+
|
84
|
+
scenario 'nested resources' do
|
85
|
+
nested_user_page = BreadcrumbPage.new(show: city_user_path('city_id', 'id'))
|
86
|
+
|
87
|
+
nested_user_page.visit_page(:show)
|
88
|
+
nested_breadcrumbs = root_breadcrumbs + ['Cities & Towns', 'Browse', 'Users', 'Show']
|
89
|
+
|
90
|
+
expect(nested_user_page.breadcrumbs).to eq(nested_breadcrumbs)
|
91
|
+
end
|
82
92
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,83 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: auto_breadcrumbs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Evgeny Li
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-04-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: breadcrumbs_on_rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '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: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activemodel
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec-rails
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: capybara
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: pry
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
description: Automatically add breadcrumbs to each page by using locales
|
@@ -87,8 +87,8 @@ executables: []
|
|
87
87
|
extensions: []
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
|
-
- .rspec
|
91
|
-
- .travis.yml
|
90
|
+
- ".rspec"
|
91
|
+
- ".travis.yml"
|
92
92
|
- Gemfile
|
93
93
|
- LICENSE.txt
|
94
94
|
- README.md
|
@@ -113,6 +113,7 @@ files:
|
|
113
113
|
- spec/dummy/config/environments/development.rb
|
114
114
|
- spec/dummy/config/environments/production.rb
|
115
115
|
- spec/dummy/config/environments/test.rb
|
116
|
+
- spec/dummy/config/initializers/i18n.rb
|
116
117
|
- spec/dummy/config/initializers/secret_token.rb
|
117
118
|
- spec/dummy/config/locales/auto_breadcrumbs.en.yml
|
118
119
|
- spec/dummy/config/routes.rb
|
@@ -133,17 +134,17 @@ require_paths:
|
|
133
134
|
- lib
|
134
135
|
required_ruby_version: !ruby/object:Gem::Requirement
|
135
136
|
requirements:
|
136
|
-
- -
|
137
|
+
- - ">="
|
137
138
|
- !ruby/object:Gem::Version
|
138
139
|
version: '0'
|
139
140
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
140
141
|
requirements:
|
141
|
-
- -
|
142
|
+
- - ">="
|
142
143
|
- !ruby/object:Gem::Version
|
143
144
|
version: '0'
|
144
145
|
requirements: []
|
145
146
|
rubyforge_project:
|
146
|
-
rubygems_version: 2.
|
147
|
+
rubygems_version: 2.2.2
|
147
148
|
signing_key:
|
148
149
|
specification_version: 4
|
149
150
|
summary: Automatically adding breadcrumbs by using locales
|
@@ -162,6 +163,7 @@ test_files:
|
|
162
163
|
- spec/dummy/config/environments/development.rb
|
163
164
|
- spec/dummy/config/environments/production.rb
|
164
165
|
- spec/dummy/config/environments/test.rb
|
166
|
+
- spec/dummy/config/initializers/i18n.rb
|
165
167
|
- spec/dummy/config/initializers/secret_token.rb
|
166
168
|
- spec/dummy/config/locales/auto_breadcrumbs.en.yml
|
167
169
|
- spec/dummy/config/routes.rb
|
@@ -172,3 +174,4 @@ test_files:
|
|
172
174
|
- spec/features/pages/breadcrumb_page.rb
|
173
175
|
- spec/features/rendering_breadcrumbs_spec.rb
|
174
176
|
- spec/spec_helper.rb
|
177
|
+
has_rdoc:
|