refinerycms-page-menus 2.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/.gitignore +2 -0
  2. data/app/controllers/refinery/admin/page_menus_controller.rb +9 -0
  3. data/app/controllers/refinery/admin/page_positions_controller.rb +51 -0
  4. data/app/models/refinery/page_menu.rb +31 -0
  5. data/app/models/refinery/page_position.rb +37 -0
  6. data/app/views/refinery/admin/page_menus/_form.html.erb +41 -0
  7. data/app/views/refinery/admin/page_menus/edit.html.erb +1 -0
  8. data/app/views/refinery/admin/page_positions/_actions.html.erb +45 -0
  9. data/app/views/refinery/admin/page_positions/_page_position.html.erb +49 -0
  10. data/app/views/refinery/admin/page_positions/_records.html.erb +14 -0
  11. data/app/views/refinery/admin/page_positions/_sortable_list.html.erb +4 -0
  12. data/app/views/refinery/admin/page_positions/index.html.erb +11 -0
  13. data/app/views/refinery/admin/pages/_actions.html.erb +40 -0
  14. data/app/views/refinery/admin/pages/_list_actions.html.erb +28 -0
  15. data/app/views/refinery/admin/pages/_list_page.html.erb +46 -0
  16. data/app/views/refinery/admin/pages/_list_records.html.erb +16 -0
  17. data/app/views/refinery/admin/pages/list.html.erb +8 -0
  18. data/app/views/refinery/admin/pages_shared/_submenu.html.erb +65 -0
  19. data/config/locales/da.yml +32 -0
  20. data/config/locales/en.yml +93 -0
  21. data/config/routes.rb +14 -0
  22. data/db/migrate/20120406121839_create_page_menus.rb +31 -0
  23. data/db/migrate/20120411133453_add_permatitle_to_page_menus.rb +9 -0
  24. data/db/migrate/20120411134419_add_menu_match_to_page_positions.rb +6 -0
  25. data/lib/generators/refinery/page_menus/page_menus_generator.rb +14 -0
  26. data/lib/generators/refinery/page_menus/templates/config/initializers/refinery/page_menus.rb.erb +3 -0
  27. data/lib/refinery/page_menus.rb +31 -0
  28. data/lib/refinery/page_menus/configuration.rb +10 -0
  29. data/lib/refinery/page_menus/controller_extension.rb +44 -0
  30. data/lib/refinery/page_menus/engine.rb +35 -0
  31. data/lib/refinery/page_menus/instance_methods.rb +16 -0
  32. data/lib/refinery/page_menus/model_extension.rb +14 -0
  33. data/lib/refinerycms-page-menus.rb +1 -0
  34. data/license.md +21 -0
  35. data/readme.md +1 -0
  36. data/refinerycms-page-menus.gemspec +25 -0
  37. data/spec/factories/pages.rb +5 -0
  38. data/spec/helpers/refinery/pages/content_pages_helper_spec.rb +44 -0
  39. data/spec/lib/generators/refinery/pages/pages_generator_spec.rb +29 -0
  40. data/spec/lib/pages/content_page_presenter_spec.rb +43 -0
  41. data/spec/lib/pages/content_presenter_spec.rb +111 -0
  42. data/spec/lib/pages/page_part_section_presenter_spec.rb +35 -0
  43. data/spec/lib/pages/section_presenter_spec.rb +86 -0
  44. data/spec/lib/pages/title_section_presenter_spec.rb +21 -0
  45. data/spec/lib/pages_spec.rb +26 -0
  46. data/spec/models/refinery/page_spec.rb +415 -0
  47. data/spec/requests/refinery/admin/pages_spec.rb +613 -0
  48. data/spec/requests/refinery/pages_spec.rb +302 -0
  49. 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