refinerycms-page-menus 2.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/.gitignore +2 -0
- data/app/controllers/refinery/admin/page_menus_controller.rb +9 -0
- data/app/controllers/refinery/admin/page_positions_controller.rb +51 -0
- data/app/models/refinery/page_menu.rb +31 -0
- data/app/models/refinery/page_position.rb +37 -0
- data/app/views/refinery/admin/page_menus/_form.html.erb +41 -0
- data/app/views/refinery/admin/page_menus/edit.html.erb +1 -0
- data/app/views/refinery/admin/page_positions/_actions.html.erb +45 -0
- data/app/views/refinery/admin/page_positions/_page_position.html.erb +49 -0
- data/app/views/refinery/admin/page_positions/_records.html.erb +14 -0
- data/app/views/refinery/admin/page_positions/_sortable_list.html.erb +4 -0
- data/app/views/refinery/admin/page_positions/index.html.erb +11 -0
- data/app/views/refinery/admin/pages/_actions.html.erb +40 -0
- data/app/views/refinery/admin/pages/_list_actions.html.erb +28 -0
- data/app/views/refinery/admin/pages/_list_page.html.erb +46 -0
- data/app/views/refinery/admin/pages/_list_records.html.erb +16 -0
- data/app/views/refinery/admin/pages/list.html.erb +8 -0
- data/app/views/refinery/admin/pages_shared/_submenu.html.erb +65 -0
- data/config/locales/da.yml +32 -0
- data/config/locales/en.yml +93 -0
- data/config/routes.rb +14 -0
- data/db/migrate/20120406121839_create_page_menus.rb +31 -0
- data/db/migrate/20120411133453_add_permatitle_to_page_menus.rb +9 -0
- data/db/migrate/20120411134419_add_menu_match_to_page_positions.rb +6 -0
- data/lib/generators/refinery/page_menus/page_menus_generator.rb +14 -0
- data/lib/generators/refinery/page_menus/templates/config/initializers/refinery/page_menus.rb.erb +3 -0
- data/lib/refinery/page_menus.rb +31 -0
- data/lib/refinery/page_menus/configuration.rb +10 -0
- data/lib/refinery/page_menus/controller_extension.rb +44 -0
- data/lib/refinery/page_menus/engine.rb +35 -0
- data/lib/refinery/page_menus/instance_methods.rb +16 -0
- data/lib/refinery/page_menus/model_extension.rb +14 -0
- data/lib/refinerycms-page-menus.rb +1 -0
- data/license.md +21 -0
- data/readme.md +1 -0
- data/refinerycms-page-menus.gemspec +25 -0
- data/spec/factories/pages.rb +5 -0
- data/spec/helpers/refinery/pages/content_pages_helper_spec.rb +44 -0
- data/spec/lib/generators/refinery/pages/pages_generator_spec.rb +29 -0
- data/spec/lib/pages/content_page_presenter_spec.rb +43 -0
- data/spec/lib/pages/content_presenter_spec.rb +111 -0
- data/spec/lib/pages/page_part_section_presenter_spec.rb +35 -0
- data/spec/lib/pages/section_presenter_spec.rb +86 -0
- data/spec/lib/pages/title_section_presenter_spec.rb +21 -0
- data/spec/lib/pages_spec.rb +26 -0
- data/spec/models/refinery/page_spec.rb +415 -0
- data/spec/requests/refinery/admin/pages_spec.rb +613 -0
- data/spec/requests/refinery/pages_spec.rb +302 -0
- metadata +127 -0
@@ -0,0 +1,302 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
module Refinery
|
5
|
+
describe 'page frontend' do
|
6
|
+
let(:home_page) { FactoryGirl.create(:page, :title => 'Home', :link_url => '/') }
|
7
|
+
let(:about_page) { FactoryGirl.create(:page, :title => 'About') }
|
8
|
+
let(:draft_page) { FactoryGirl.create(:page, :title => 'Draft', :draft => true) }
|
9
|
+
before(:each) do
|
10
|
+
# So that we can use Refinery.
|
11
|
+
Refinery::PagesController.any_instance.stub(:refinery_user_required?).and_return(false)
|
12
|
+
|
13
|
+
# Stub the menu pages we're expecting
|
14
|
+
Refinery::Page.stub(:fast_menu).and_return([home_page, about_page])
|
15
|
+
end
|
16
|
+
|
17
|
+
def standard_page_menu_items_exist?
|
18
|
+
within('.menu') do
|
19
|
+
page.should have_content(home_page.title)
|
20
|
+
page.should have_content(about_page.title)
|
21
|
+
page.should_not have_content(draft_page.title)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'when marketable urls are' do
|
26
|
+
describe 'enabled' do
|
27
|
+
before { Refinery::Pages.stub(:marketable_urls).and_return(true) }
|
28
|
+
|
29
|
+
it 'shows the homepage' do
|
30
|
+
Refinery::PagesController.any_instance.stub(:find_page).and_return(:home_page)
|
31
|
+
visit '/'
|
32
|
+
|
33
|
+
standard_page_menu_items_exist?
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'shows a show page' do
|
37
|
+
Refinery::PagesController.any_instance.stub(:find_page).and_return(:about_page)
|
38
|
+
visit refinery.page_path(about_page)
|
39
|
+
|
40
|
+
standard_page_menu_items_exist?
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe 'disabled' do
|
45
|
+
before { Refinery::Pages.stub(:marketable_urls).and_return(false) }
|
46
|
+
|
47
|
+
it 'shows the homepage' do
|
48
|
+
Refinery::PagesController.any_instance.stub(:find_page).and_return(:home_page)
|
49
|
+
visit '/'
|
50
|
+
|
51
|
+
standard_page_menu_items_exist?
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'does not route to /about for About page' do
|
55
|
+
refinery.page_path(about_page).should =~ %r{/pages/about$}
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'shows the about page' do
|
59
|
+
Refinery::PagesController.any_instance.stub(:find_page).and_return(:about_page)
|
60
|
+
visit refinery.page_path(about_page)
|
61
|
+
|
62
|
+
standard_page_menu_items_exist?
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe 'title set (without menu title or browser title)' do
|
68
|
+
before(:each) { visit '/about' }
|
69
|
+
|
70
|
+
it "shows title at the top of the page" do
|
71
|
+
find("#body_content_title").text.should == about_page.title
|
72
|
+
end
|
73
|
+
|
74
|
+
it "uses title in the menu" do
|
75
|
+
find(".selected").text.strip.should == about_page.title
|
76
|
+
end
|
77
|
+
|
78
|
+
it "uses title in browser title" do
|
79
|
+
find("title").should have_content(about_page.title)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
describe 'when menu_title is' do
|
84
|
+
let(:page_mt) { FactoryGirl.create(:page, :title => 'Company News') }
|
85
|
+
|
86
|
+
before(:each) do
|
87
|
+
Refinery::Page.stub(:fast_menu).and_return([page_mt])
|
88
|
+
end
|
89
|
+
|
90
|
+
describe 'set' do
|
91
|
+
before do
|
92
|
+
page_mt.menu_title = "News"
|
93
|
+
page_mt.save
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'shows the menu_title in the menu' do
|
97
|
+
visit '/news'
|
98
|
+
|
99
|
+
find(".selected").text.strip.should == page_mt.menu_title
|
100
|
+
end
|
101
|
+
|
102
|
+
it "does not effect browser title and page title" do
|
103
|
+
visit "/news"
|
104
|
+
|
105
|
+
find("title").should have_content(page_mt.title)
|
106
|
+
find("#body_content_title").text.should == page_mt.title
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe 'set and then unset' do
|
111
|
+
before do
|
112
|
+
page_mt.menu_title = "News"
|
113
|
+
page_mt.save
|
114
|
+
page_mt.menu_title = ""
|
115
|
+
page_mt.save
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'the friendly_id and menu are reverted to match the title' do
|
119
|
+
visit '/company-news'
|
120
|
+
|
121
|
+
current_path.should == '/company-news'
|
122
|
+
find(".selected").text.strip.should == page_mt.title
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
describe 'when browser_title is set' do
|
128
|
+
let(:page_bt) { FactoryGirl.create(:page, :title => 'About Us', :browser_title => 'About Our Company') }
|
129
|
+
before(:each) do
|
130
|
+
Refinery::Page.stub(:fast_menu).and_return([page_bt])
|
131
|
+
end
|
132
|
+
it 'should have the browser_title in the title tag' do
|
133
|
+
visit '/about-us'
|
134
|
+
|
135
|
+
page.find("title").text == page_bt.title
|
136
|
+
end
|
137
|
+
|
138
|
+
it 'should not effect page title and menu title' do
|
139
|
+
visit '/about-us'
|
140
|
+
|
141
|
+
find("#body_content_title").text.should == page_bt.title
|
142
|
+
find(".selected").text.strip.should == page_bt.title
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
describe 'custom_slug' do
|
147
|
+
let(:page_cs) { FactoryGirl.create(:page, :title => 'About Us') }
|
148
|
+
before(:each) do
|
149
|
+
Refinery::Page.stub(:fast_menu).and_return([page_cs])
|
150
|
+
end
|
151
|
+
|
152
|
+
describe 'not set' do
|
153
|
+
it 'makes friendly_id from title' do
|
154
|
+
visit '/about-us'
|
155
|
+
|
156
|
+
current_path.should == '/about-us'
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
describe 'set' do
|
161
|
+
before do
|
162
|
+
page_cs.custom_slug = "about-custom"
|
163
|
+
page_cs.save
|
164
|
+
end
|
165
|
+
|
166
|
+
it 'should make and use a new friendly_id' do
|
167
|
+
visit '/about-custom'
|
168
|
+
|
169
|
+
current_path.should == '/about-custom'
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
describe 'set and unset' do
|
174
|
+
before do
|
175
|
+
page_cs.custom_slug = "about-custom"
|
176
|
+
page_cs.save
|
177
|
+
page_cs.custom_slug = ""
|
178
|
+
page_cs.save
|
179
|
+
page_cs.reload
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
# Following specs are converted from one of the cucumber features.
|
185
|
+
# Maybe we should clean up this spec file a bit...
|
186
|
+
describe "home page" do
|
187
|
+
it "succeeds" do
|
188
|
+
visit "/"
|
189
|
+
|
190
|
+
within ".selected" do
|
191
|
+
page.should have_content(home_page.title)
|
192
|
+
end
|
193
|
+
page.should have_content(about_page.title)
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
describe "content page" do
|
198
|
+
it "succeeds" do
|
199
|
+
visit "/about"
|
200
|
+
|
201
|
+
page.should have_content(home_page.title)
|
202
|
+
within ".selected > a" do
|
203
|
+
page.should have_content(about_page.title)
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
describe "submenu page" do
|
209
|
+
let(:submenu_page) {
|
210
|
+
FactoryGirl.create(:page, :title => 'Sample Submenu', :parent_id => about_page.id)
|
211
|
+
}
|
212
|
+
|
213
|
+
before(:each) do
|
214
|
+
Refinery::Page.stub(:fast_menu).and_return([home_page, submenu_page, about_page.reload].sort_by(&:lft))
|
215
|
+
end
|
216
|
+
|
217
|
+
it "succeeds" do
|
218
|
+
visit refinery.url_for(submenu_page.url)
|
219
|
+
page.should have_content(home_page.title)
|
220
|
+
page.should have_content(about_page.title)
|
221
|
+
within ".selected * > .selected a" do
|
222
|
+
page.should have_content(submenu_page.title)
|
223
|
+
end
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
describe "special characters title" do
|
228
|
+
let(:special_page) { FactoryGirl.create(:page, :title => 'ä ö ü spéciål chåråctÉrs') }
|
229
|
+
before(:each) do
|
230
|
+
Refinery::Page.stub(:fast_menu).and_return([home_page, about_page, special_page])
|
231
|
+
end
|
232
|
+
|
233
|
+
it "succeeds" do
|
234
|
+
visit refinery.url_for(special_page.url)
|
235
|
+
|
236
|
+
page.should have_content(home_page.title)
|
237
|
+
page.should have_content(about_page.title)
|
238
|
+
within ".selected > a" do
|
239
|
+
page.should have_content(special_page.title)
|
240
|
+
end
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
describe "special characters title as submenu page" do
|
245
|
+
let(:special_page) { FactoryGirl.create(:page, :title => 'ä ö ü spéciål chåråctÉrs',
|
246
|
+
:parent_id => about_page.id) }
|
247
|
+
|
248
|
+
before(:each) do
|
249
|
+
Refinery::Page.stub(:fast_menu).and_return([home_page, special_page, about_page.reload].sort_by(&:lft))
|
250
|
+
end
|
251
|
+
|
252
|
+
it "succeeds" do
|
253
|
+
visit refinery.url_for(special_page.url)
|
254
|
+
|
255
|
+
page.should have_content(home_page.title)
|
256
|
+
page.should have_content(about_page.title)
|
257
|
+
within ".selected * > .selected a" do
|
258
|
+
page.should have_content(special_page.title)
|
259
|
+
end
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
describe "hidden page" do
|
264
|
+
let(:hidden_page) { FactoryGirl.create(:page, :title => "Hidden", :show_in_menu => false) }
|
265
|
+
|
266
|
+
before(:each) do
|
267
|
+
Refinery::Page.stub(:fast_menu).and_return([home_page, about_page])
|
268
|
+
end
|
269
|
+
|
270
|
+
it "succeeds" do
|
271
|
+
visit refinery.page_path(hidden_page)
|
272
|
+
|
273
|
+
page.should have_content(home_page.title)
|
274
|
+
page.should have_content(about_page.title)
|
275
|
+
page.should have_content(hidden_page.title)
|
276
|
+
within "nav" do
|
277
|
+
page.should have_no_content(hidden_page.title)
|
278
|
+
end
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
282
|
+
describe "skip to first child" do
|
283
|
+
let(:child_page) { FactoryGirl.create(:page, :title => "Child Page", :parent_id => about_page.id)}
|
284
|
+
before(:each) do
|
285
|
+
child_page
|
286
|
+
about = about_page.reload
|
287
|
+
about.skip_to_first_child = true
|
288
|
+
about.save!
|
289
|
+
|
290
|
+
Refinery::Page.stub(:fast_menu).and_return([home_page, about, child_page].sort_by(&:lft))
|
291
|
+
end
|
292
|
+
|
293
|
+
it "succeeds" do
|
294
|
+
visit "/about"
|
295
|
+
|
296
|
+
within ".selected * > .selected a" do
|
297
|
+
page.should have_content(child_page.title)
|
298
|
+
end
|
299
|
+
end
|
300
|
+
end
|
301
|
+
end
|
302
|
+
end
|
metadata
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: refinerycms-page-menus
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.0.3
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Johan Frølich
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-04-20 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: awesome_nested_set
|
16
|
+
requirement: &70203803567920 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.1.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70203803567920
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: refinerycms-pages
|
27
|
+
requirement: &70203803567080 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.0.3
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70203803567080
|
36
|
+
description: Add custom menus to pages
|
37
|
+
email: johan@pylonweb.dk
|
38
|
+
executables: []
|
39
|
+
extensions: []
|
40
|
+
extra_rdoc_files: []
|
41
|
+
files:
|
42
|
+
- .gitignore
|
43
|
+
- app/controllers/refinery/admin/page_menus_controller.rb
|
44
|
+
- app/controllers/refinery/admin/page_positions_controller.rb
|
45
|
+
- app/models/refinery/page_menu.rb
|
46
|
+
- app/models/refinery/page_position.rb
|
47
|
+
- app/views/refinery/admin/page_menus/_form.html.erb
|
48
|
+
- app/views/refinery/admin/page_menus/edit.html.erb
|
49
|
+
- app/views/refinery/admin/page_positions/_actions.html.erb
|
50
|
+
- app/views/refinery/admin/page_positions/_page_position.html.erb
|
51
|
+
- app/views/refinery/admin/page_positions/_records.html.erb
|
52
|
+
- app/views/refinery/admin/page_positions/_sortable_list.html.erb
|
53
|
+
- app/views/refinery/admin/page_positions/index.html.erb
|
54
|
+
- app/views/refinery/admin/pages/_actions.html.erb
|
55
|
+
- app/views/refinery/admin/pages/_list_actions.html.erb
|
56
|
+
- app/views/refinery/admin/pages/_list_page.html.erb
|
57
|
+
- app/views/refinery/admin/pages/_list_records.html.erb
|
58
|
+
- app/views/refinery/admin/pages/list.html.erb
|
59
|
+
- app/views/refinery/admin/pages_shared/_submenu.html.erb
|
60
|
+
- config/locales/da.yml
|
61
|
+
- config/locales/en.yml
|
62
|
+
- config/routes.rb
|
63
|
+
- db/migrate/20120406121839_create_page_menus.rb
|
64
|
+
- db/migrate/20120411133453_add_permatitle_to_page_menus.rb
|
65
|
+
- db/migrate/20120411134419_add_menu_match_to_page_positions.rb
|
66
|
+
- lib/generators/refinery/page_menus/page_menus_generator.rb
|
67
|
+
- lib/generators/refinery/page_menus/templates/config/initializers/refinery/page_menus.rb.erb
|
68
|
+
- lib/refinery/page_menus.rb
|
69
|
+
- lib/refinery/page_menus/configuration.rb
|
70
|
+
- lib/refinery/page_menus/controller_extension.rb
|
71
|
+
- lib/refinery/page_menus/engine.rb
|
72
|
+
- lib/refinery/page_menus/instance_methods.rb
|
73
|
+
- lib/refinery/page_menus/model_extension.rb
|
74
|
+
- lib/refinerycms-page-menus.rb
|
75
|
+
- license.md
|
76
|
+
- readme.md
|
77
|
+
- refinerycms-page-menus.gemspec
|
78
|
+
- spec/factories/pages.rb
|
79
|
+
- spec/helpers/refinery/pages/content_pages_helper_spec.rb
|
80
|
+
- spec/lib/generators/refinery/pages/pages_generator_spec.rb
|
81
|
+
- spec/lib/pages/content_page_presenter_spec.rb
|
82
|
+
- spec/lib/pages/content_presenter_spec.rb
|
83
|
+
- spec/lib/pages/page_part_section_presenter_spec.rb
|
84
|
+
- spec/lib/pages/section_presenter_spec.rb
|
85
|
+
- spec/lib/pages/title_section_presenter_spec.rb
|
86
|
+
- spec/lib/pages_spec.rb
|
87
|
+
- spec/models/refinery/page_spec.rb
|
88
|
+
- spec/requests/refinery/admin/pages_spec.rb
|
89
|
+
- spec/requests/refinery/pages_spec.rb
|
90
|
+
homepage: http://github.com/pylonweb/refinerycms-page-menus
|
91
|
+
licenses:
|
92
|
+
- MIT
|
93
|
+
post_install_message:
|
94
|
+
rdoc_options: []
|
95
|
+
require_paths:
|
96
|
+
- lib
|
97
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ! '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
|
+
none: false
|
105
|
+
requirements:
|
106
|
+
- - ! '>='
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
requirements: []
|
110
|
+
rubyforge_project:
|
111
|
+
rubygems_version: 1.8.10
|
112
|
+
signing_key:
|
113
|
+
specification_version: 3
|
114
|
+
summary: Pages Menus extension for Refinery CMS
|
115
|
+
test_files:
|
116
|
+
- spec/factories/pages.rb
|
117
|
+
- spec/helpers/refinery/pages/content_pages_helper_spec.rb
|
118
|
+
- spec/lib/generators/refinery/pages/pages_generator_spec.rb
|
119
|
+
- spec/lib/pages/content_page_presenter_spec.rb
|
120
|
+
- spec/lib/pages/content_presenter_spec.rb
|
121
|
+
- spec/lib/pages/page_part_section_presenter_spec.rb
|
122
|
+
- spec/lib/pages/section_presenter_spec.rb
|
123
|
+
- spec/lib/pages/title_section_presenter_spec.rb
|
124
|
+
- spec/lib/pages_spec.rb
|
125
|
+
- spec/models/refinery/page_spec.rb
|
126
|
+
- spec/requests/refinery/admin/pages_spec.rb
|
127
|
+
- spec/requests/refinery/pages_spec.rb
|