refinerycms-pages 2.0.3 → 2.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/app/controllers/refinery/page_sweeper.rb +8 -3
- data/app/helpers/refinery/admin/pages_helper.rb +9 -0
- data/app/models/refinery/page.rb +15 -16
- data/app/views/refinery/admin/pages/_form_advanced_options.html.erb +11 -4
- data/config/locales/en.yml +3 -1
- data/config/locales/ru.yml +3 -0
- data/lib/refinery/pages/admin/instance_methods.rb +1 -1
- data/refinerycms-pages.gemspec +2 -2
- data/spec/models/refinery/page_spec.rb +19 -0
- data/spec/requests/refinery/admin/pages_spec.rb +74 -0
- metadata +9 -8
@@ -18,11 +18,16 @@ module Refinery
|
|
18
18
|
def expire_cache
|
19
19
|
# TODO: Where does page_cache_directory come from??
|
20
20
|
return unless page_cache_directory
|
21
|
-
|
21
|
+
page_cache_directory_path = Pathname.new(page_cache_directory.to_s)
|
22
22
|
|
23
23
|
# Delete the full Cache
|
24
|
-
if (cache_root =
|
25
|
-
cache_root.
|
24
|
+
if (cache_root = page_cache_directory_path.join('refinery', 'cache', 'pages')).directory?
|
25
|
+
cache_root.rmtree
|
26
|
+
end
|
27
|
+
|
28
|
+
# Delete the pages index files (/refinery/cache/pages.html*)
|
29
|
+
Pathname.glob(page_cache_directory_path.join('refinery', 'cache', 'pages.html*')).each do |cache_index|
|
30
|
+
cache_index.delete
|
26
31
|
end
|
27
32
|
end
|
28
33
|
end
|
@@ -1,6 +1,15 @@
|
|
1
1
|
module Refinery
|
2
2
|
module Admin
|
3
3
|
module PagesHelper
|
4
|
+
def parent_id_nested_set_options(current_page)
|
5
|
+
pages = []
|
6
|
+
nested_set_options(::Refinery::Page, current_page) {|page| pages << page}
|
7
|
+
# page.title needs the :translations association, doing something like
|
8
|
+
# nested_set_options(::Refinery::Page.includes(:translations), page) doesn't work, yet.
|
9
|
+
# See https://github.com/collectiveidea/awesome_nested_set/pull/123
|
10
|
+
ActiveRecord::Associations::Preloader.new(pages, :translations).run
|
11
|
+
pages.map {|page| ["#{'-' * page.level} #{page.title}", page.id]}
|
12
|
+
end
|
4
13
|
end
|
5
14
|
end
|
6
15
|
end
|
data/app/models/refinery/page.rb
CHANGED
@@ -72,8 +72,8 @@ module Refinery
|
|
72
72
|
# For example with about/example we would need to find 'about' and then its child
|
73
73
|
# called 'example' otherwise it may clash with another page called /example.
|
74
74
|
def find_by_path(path)
|
75
|
-
split_path = path.to_s.split('/')
|
76
|
-
page = ::Refinery::Page.by_slug(split_path.shift).first
|
75
|
+
split_path = path.to_s.split('/').reject(&:blank?)
|
76
|
+
page = ::Refinery::Page.by_slug(split_path.shift, :parent_id => nil).first
|
77
77
|
page = page.children.by_slug(split_path.shift).first until page.nil? || split_path.empty?
|
78
78
|
|
79
79
|
page
|
@@ -103,12 +103,9 @@ module Refinery
|
|
103
103
|
end
|
104
104
|
|
105
105
|
# Finds a page using its slug. See by_title
|
106
|
-
def by_slug(slug)
|
107
|
-
|
108
|
-
|
109
|
-
else
|
110
|
-
with_globalize(:locale => ::I18n.locale, :slug => slug)
|
111
|
-
end
|
106
|
+
def by_slug(slug, conditions={})
|
107
|
+
locales = Refinery.i18n_enabled? ? Refinery::I18n.frontend_locales : ::I18n.locale
|
108
|
+
with_globalize({ :locale => locales, :slug => slug }.merge(conditions))
|
112
109
|
end
|
113
110
|
|
114
111
|
# Shows all pages with :show_in_menu set to true, but it also
|
@@ -332,16 +329,16 @@ module Refinery
|
|
332
329
|
Rails.cache.fetch(path_cache_key) { ['', nested_url].join('/') }
|
333
330
|
end
|
334
331
|
|
335
|
-
def path_cache_key
|
336
|
-
[cache_key, 'nested_path'].join('#')
|
332
|
+
def path_cache_key(locale = Globalize.locale)
|
333
|
+
[cache_key(locale), 'nested_path'].join('#')
|
337
334
|
end
|
338
335
|
|
339
|
-
def url_cache_key
|
340
|
-
[cache_key, 'nested_url'].join('#')
|
336
|
+
def url_cache_key(locale = Globalize.locale)
|
337
|
+
[cache_key(locale), 'nested_url'].join('#')
|
341
338
|
end
|
342
339
|
|
343
|
-
def cache_key
|
344
|
-
[Refinery::Core.base_cache_key, 'page',
|
340
|
+
def cache_key(locale)
|
341
|
+
[Refinery::Core.base_cache_key, 'page', locale, id].compact.join('/')
|
345
342
|
end
|
346
343
|
|
347
344
|
# Returns true if this page is "published"
|
@@ -453,8 +450,10 @@ module Refinery
|
|
453
450
|
return true unless Refinery::Pages.marketable_urls
|
454
451
|
|
455
452
|
[self, children].flatten.each do |page|
|
456
|
-
|
457
|
-
|
453
|
+
((Refinery.i18n_enabled? && Refinery::I18n.frontend_locales) || [::I18n.locale]).each do |locale|
|
454
|
+
Rails.cache.delete(page.url_cache_key(locale))
|
455
|
+
Rails.cache.delete(page.path_cache_key(locale))
|
456
|
+
end
|
458
457
|
end
|
459
458
|
end
|
460
459
|
alias_method :invalidate_child_cached_url, :invalidate_cached_urls
|
@@ -18,8 +18,7 @@
|
|
18
18
|
<%= f.label :parent_id, t('.parent_page') %>
|
19
19
|
<%= refinery_help_tag t('.parent_page_help') %>
|
20
20
|
</span>
|
21
|
-
<%= f.select :parent_id,
|
22
|
-
:include_blank => true %>
|
21
|
+
<%= f.select :parent_id, parent_id_nested_set_options(@page), :include_blank => true %>
|
23
22
|
</div>
|
24
23
|
<% if Refinery::Pages.use_layout_templates %>
|
25
24
|
<div class='field'>
|
@@ -27,7 +26,11 @@
|
|
27
26
|
<%= f.label :layout_template, t('.layout_template') %>
|
28
27
|
<%= refinery_help_tag t('.layout_template_help') %>
|
29
28
|
</span>
|
30
|
-
|
29
|
+
<% if @page.parent_id? %>
|
30
|
+
<%= f.select(:layout_template, @valid_layout_templates, {:selected => @page.parent.layout_template}) %>
|
31
|
+
<% else %>
|
32
|
+
<%= f.select(:layout_template, @valid_layout_templates) %>
|
33
|
+
<% end %>
|
31
34
|
</div>
|
32
35
|
<% end %>
|
33
36
|
<% if Refinery::Pages.use_view_templates %>
|
@@ -36,7 +39,11 @@
|
|
36
39
|
<%= f.label :view_template, t('.view_template') %>
|
37
40
|
<%= refinery_help_tag t('.view_template_help') %>
|
38
41
|
</span>
|
39
|
-
|
42
|
+
<% if @page.parent_id? %>
|
43
|
+
<%= f.select(:view_template, @valid_view_templates.map{|t| [t.titleize, t]}, {:selected => @page.parent.view_template }) %>
|
44
|
+
<% else %>
|
45
|
+
<%= f.select(:view_template, @valid_view_templates.map{|t| [t.titleize, t]}) %>
|
46
|
+
<% end %>
|
40
47
|
</div>
|
41
48
|
<% end %>
|
42
49
|
|
data/config/locales/en.yml
CHANGED
@@ -68,8 +68,10 @@ en:
|
|
68
68
|
parent_page_help: You can put a page under another page by selecting it in the list. If you want this page to be a top-level page, just leave it blank.
|
69
69
|
menu_title_help: If you want the menu to display a different title than the one that dipsplays on the page, enter it here.
|
70
70
|
custom_slug_help: A slug is a human-readable ID used to create a page's full URL, for example 'about-us'. To override the slug that is automatically created by Refinery, enter your custom slug here.
|
71
|
+
layout_template: Layout template
|
72
|
+
layout_template_help: You can choose a different layout template for this page
|
71
73
|
view_template: View template
|
72
|
-
view_template_help: You can
|
74
|
+
view_template_help: You can choose a different view template for this page
|
73
75
|
form_advanced_options_seo:
|
74
76
|
seo: Search Engine Optimization
|
75
77
|
seo_override_title: Browser title
|
data/config/locales/ru.yml
CHANGED
@@ -43,6 +43,9 @@ ru:
|
|
43
43
|
view_live_html: Показать эту страницу вживую <br/><em>(откроется в новом окне)</em>
|
44
44
|
hidden: скрытая
|
45
45
|
draft: черновик
|
46
|
+
form:
|
47
|
+
preview: Посмотреть
|
48
|
+
preview_changes: Посмотреть свои изменения перед сохранением
|
46
49
|
form_new_page_parts:
|
47
50
|
title: Заголовок
|
48
51
|
form_page_parts:
|
data/refinerycms-pages.gemspec
CHANGED
@@ -14,14 +14,14 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.email = %q{info@refinerycms.com}
|
15
15
|
s.homepage = %q{http://refinerycms.com}
|
16
16
|
s.rubyforge_project = %q{refinerycms}
|
17
|
-
s.authors = ['Philip Arndt', 'Uģis Ozols', 'David Jones', 'Steven Heidel']
|
17
|
+
s.authors = ['Philip Arndt', 'Uģis Ozols', 'Rob Yurkowski', 'David Jones', 'Steven Heidel']
|
18
18
|
s.license = %q{MIT}
|
19
19
|
s.require_paths = %w(lib)
|
20
20
|
|
21
21
|
s.files = `git ls-files`.split("\n")
|
22
22
|
s.test_files = `git ls-files -- spec/*`.split("\n")
|
23
23
|
|
24
|
-
s.add_dependency 'awesome_nested_set', '~> 2.1.
|
24
|
+
s.add_dependency 'awesome_nested_set', '~> 2.1.3'
|
25
25
|
s.add_dependency 'seo_meta', '~> 1.3.0'
|
26
26
|
s.add_dependency 'refinerycms-core', version
|
27
27
|
s.add_dependency 'babosa', '!= 0.3.6'
|
@@ -411,5 +411,24 @@ module Refinery
|
|
411
411
|
end
|
412
412
|
end
|
413
413
|
|
414
|
+
describe '.find_by_path' do
|
415
|
+
let(:page_title) { 'team' }
|
416
|
+
let(:child_title) { 'about' }
|
417
|
+
let(:created_root_about) { subject.class.create!(:title => child_title, :deletable => true) }
|
418
|
+
|
419
|
+
before(:each) do
|
420
|
+
# Ensure pages are created.
|
421
|
+
created_child
|
422
|
+
created_root_about
|
423
|
+
end
|
424
|
+
|
425
|
+
it "should return (root) about page when looking for '/about'" do
|
426
|
+
Refinery::Page.find_by_path('/about').should == created_root_about
|
427
|
+
end
|
428
|
+
|
429
|
+
it "should return child about page when looking for '/team/about'" do
|
430
|
+
Refinery::Page.find_by_path('/team/about').should == created_child
|
431
|
+
end
|
432
|
+
end
|
414
433
|
end
|
415
434
|
end
|
@@ -506,6 +506,39 @@ module Refinery
|
|
506
506
|
end
|
507
507
|
end
|
508
508
|
end
|
509
|
+
|
510
|
+
describe 'advanced options' do
|
511
|
+
describe 'view and layout templates' do
|
512
|
+
context 'when parent page has templates set' do
|
513
|
+
before(:each) do
|
514
|
+
Refinery::Pages.stub(:use_layout_templates).and_return(true)
|
515
|
+
Refinery::Pages.stub(:use_view_templates).and_return(true)
|
516
|
+
Refinery::Pages.stub(:layout_template_whitelist).and_return(['abc', 'refinery'])
|
517
|
+
Refinery::Pages.stub(:view_template_whitelist).and_return(['abc', 'refinery'])
|
518
|
+
Refinery::Pages.stub(:valid_templates).and_return(['abc', 'refinery'])
|
519
|
+
parent_page = FactoryGirl.create(:page, :view_template => 'refinery',
|
520
|
+
:layout_template => 'refinery')
|
521
|
+
parent_page.children.create(FactoryGirl.attributes_for(:page))
|
522
|
+
end
|
523
|
+
|
524
|
+
specify 'sub page should inherit them' do
|
525
|
+
visit refinery.admin_pages_path
|
526
|
+
|
527
|
+
within '.nested' do
|
528
|
+
click_link 'Edit this page'
|
529
|
+
end
|
530
|
+
|
531
|
+
within '#page_layout_template' do
|
532
|
+
page.find('option[value=refinery]').selected?.should eq('selected')
|
533
|
+
end
|
534
|
+
|
535
|
+
within '#page_view_template' do
|
536
|
+
page.find('option[value=refinery]').selected?.should eq('selected')
|
537
|
+
end
|
538
|
+
end
|
539
|
+
end
|
540
|
+
end
|
541
|
+
end
|
509
542
|
end
|
510
543
|
|
511
544
|
describe "TranslatePages" do
|
@@ -571,6 +604,15 @@ module Refinery
|
|
571
604
|
Globalize.locale = :en
|
572
605
|
end
|
573
606
|
|
607
|
+
let(:about_page) do
|
608
|
+
page = Refinery::Page.last
|
609
|
+
# we need page parts so that there's wymeditor
|
610
|
+
Refinery::Pages.default_parts.each_with_index do |default_page_part, index|
|
611
|
+
page.parts.create(:title => default_page_part, :body => nil, :position => index)
|
612
|
+
end
|
613
|
+
page
|
614
|
+
end
|
615
|
+
|
574
616
|
describe "adding page link" do
|
575
617
|
describe "with relative urls" do
|
576
618
|
before(:each) { Refinery::Pages.absolute_page_links = false }
|
@@ -589,6 +631,7 @@ module Refinery
|
|
589
631
|
page.should have_selector("a[href='/about']")
|
590
632
|
end
|
591
633
|
end
|
634
|
+
|
592
635
|
describe "with absolute urls" do
|
593
636
|
before(:each) { Refinery::Pages.absolute_page_links = true }
|
594
637
|
|
@@ -606,6 +649,37 @@ module Refinery
|
|
606
649
|
page.should have_selector("a[href='http://www.example.com/about']")
|
607
650
|
end
|
608
651
|
end
|
652
|
+
|
653
|
+
# see https://github.com/resolve/refinerycms/pull/1583
|
654
|
+
context "when switching locales" do
|
655
|
+
specify "dialog has correct links", :js => true do
|
656
|
+
visit refinery.edit_admin_page_path(about_page)
|
657
|
+
|
658
|
+
click_link "Add Link"
|
659
|
+
|
660
|
+
page.should have_selector("iframe#dialog_frame")
|
661
|
+
|
662
|
+
page.within_frame("dialog_frame") do
|
663
|
+
page.should have_content("About")
|
664
|
+
page.should have_css("a[href$='/about']")
|
665
|
+
|
666
|
+
click_link "cancel_button"
|
667
|
+
end
|
668
|
+
|
669
|
+
within "#switch_locale_picker" do
|
670
|
+
click_link "Ru"
|
671
|
+
end
|
672
|
+
|
673
|
+
click_link "Add Link"
|
674
|
+
|
675
|
+
page.should have_selector("iframe#dialog_frame")
|
676
|
+
|
677
|
+
page.within_frame("dialog_frame") do
|
678
|
+
page.should have_content("About Ru")
|
679
|
+
page.should have_css("a[href$='/ru/about-ru']")
|
680
|
+
end
|
681
|
+
end
|
682
|
+
end
|
609
683
|
end
|
610
684
|
end
|
611
685
|
end
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: refinerycms-pages
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Philip Arndt
|
9
9
|
- Uģis Ozols
|
10
|
+
- Rob Yurkowski
|
10
11
|
- David Jones
|
11
12
|
- Steven Heidel
|
12
13
|
autorequire:
|
@@ -21,7 +22,7 @@ dependencies:
|
|
21
22
|
requirements:
|
22
23
|
- - ~>
|
23
24
|
- !ruby/object:Gem::Version
|
24
|
-
version: 2.1.
|
25
|
+
version: 2.1.3
|
25
26
|
type: :runtime
|
26
27
|
prerelease: false
|
27
28
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +30,7 @@ dependencies:
|
|
29
30
|
requirements:
|
30
31
|
- - ~>
|
31
32
|
- !ruby/object:Gem::Version
|
32
|
-
version: 2.1.
|
33
|
+
version: 2.1.3
|
33
34
|
- !ruby/object:Gem::Dependency
|
34
35
|
name: seo_meta
|
35
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,7 +54,7 @@ dependencies:
|
|
53
54
|
requirements:
|
54
55
|
- - '='
|
55
56
|
- !ruby/object:Gem::Version
|
56
|
-
version: 2.0.
|
57
|
+
version: 2.0.4
|
57
58
|
type: :runtime
|
58
59
|
prerelease: false
|
59
60
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -61,7 +62,7 @@ dependencies:
|
|
61
62
|
requirements:
|
62
63
|
- - '='
|
63
64
|
- !ruby/object:Gem::Version
|
64
|
-
version: 2.0.
|
65
|
+
version: 2.0.4
|
65
66
|
- !ruby/object:Gem::Dependency
|
66
67
|
name: babosa
|
67
68
|
requirement: !ruby/object:Gem::Requirement
|
@@ -194,7 +195,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
194
195
|
version: '0'
|
195
196
|
segments:
|
196
197
|
- 0
|
197
|
-
hash:
|
198
|
+
hash: 1077792218542240122
|
198
199
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
199
200
|
none: false
|
200
201
|
requirements:
|
@@ -203,10 +204,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
203
204
|
version: '0'
|
204
205
|
segments:
|
205
206
|
- 0
|
206
|
-
hash:
|
207
|
+
hash: 1077792218542240122
|
207
208
|
requirements: []
|
208
209
|
rubyforge_project: refinerycms
|
209
|
-
rubygems_version: 1.8.
|
210
|
+
rubygems_version: 1.8.22
|
210
211
|
signing_key:
|
211
212
|
specification_version: 3
|
212
213
|
summary: Pages extension for Refinery CMS
|