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.
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