alchemy_cms 2.1.9 → 2.1.9.1
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/app/controllers/alchemy/admin/pages_controller.rb +1 -2
- data/app/controllers/alchemy/pages_controller.rb +3 -3
- data/app/models/alchemy/page.rb +9 -5
- data/lib/alchemy/version.rb +1 -1
- data/spec/controllers/admin/pages_controller_spec.rb +31 -0
- data/spec/integration/pages_controller_spec.rb +13 -0
- data/spec/models/page_spec.rb +70 -0
- metadata +34 -34
@@ -181,8 +181,7 @@ module Alchemy
|
|
181
181
|
new_language_root = Page.copy(
|
182
182
|
original_language_root,
|
183
183
|
:language_id => params[:languages][:new_lang_id],
|
184
|
-
:language_code => session[:language_code]
|
185
|
-
:layoutpage => params[:layoutpage]
|
184
|
+
:language_code => session[:language_code]
|
186
185
|
)
|
187
186
|
new_language_root.move_to_child_of Page.root
|
188
187
|
original_language_root.copy_children_to(new_language_root)
|
@@ -17,7 +17,7 @@ module Alchemy
|
|
17
17
|
:cache_path => proc { show_page_url(:urlname => params[:urlname], :lang => multi_language? ? params[:lang] : nil) },
|
18
18
|
:if => proc {
|
19
19
|
if Alchemy::Config.get(:cache_pages)
|
20
|
-
page = Page.find_by_urlname_and_language_id_and_public(
|
20
|
+
page = Page.contentpages.find_by_urlname_and_language_id_and_public(
|
21
21
|
params[:urlname],
|
22
22
|
session[:language_id],
|
23
23
|
true,
|
@@ -70,10 +70,10 @@ module Alchemy
|
|
70
70
|
if params[:urlname].blank?
|
71
71
|
@page = Page.language_root_for(Language.get_default.id)
|
72
72
|
else
|
73
|
-
@page = Page.find_by_urlname_and_language_id(params[:urlname], session[:language_id])
|
73
|
+
@page = Page.contentpages.find_by_urlname_and_language_id(params[:urlname], session[:language_id])
|
74
74
|
# try to find the page in another language
|
75
75
|
if @page.nil?
|
76
|
-
@page = Page.find_by_urlname(params[:urlname])
|
76
|
+
@page = Page.contentpages.find_by_urlname(params[:urlname])
|
77
77
|
else
|
78
78
|
return @page
|
79
79
|
end
|
data/app/models/alchemy/page.rb
CHANGED
@@ -24,11 +24,11 @@ module Alchemy
|
|
24
24
|
attr_accessor :do_not_sweep
|
25
25
|
attr_accessor :do_not_validate_language
|
26
26
|
|
27
|
-
before_validation :set_url_name, :
|
28
|
-
before_save :set_title, :unless => proc { |page|
|
27
|
+
before_validation :set_url_name, :if => :contentpage?
|
28
|
+
before_save :set_title, :if => :contentpage?, :unless => proc { |page| !page.title.blank? }
|
29
29
|
before_save :set_language_code, :unless => :systempage?
|
30
|
-
before_save :set_restrictions_to_child_pages, :if => proc { |page|
|
31
|
-
before_save :inherit_restricted_status, :if => proc { |page|
|
30
|
+
before_save :set_restrictions_to_child_pages, :if => proc { |page| page.contentpage? && page.restricted_changed? }
|
31
|
+
before_save :inherit_restricted_status, :if => proc { |page| page.contentpage? && page.parent && page.parent.restricted? }
|
32
32
|
after_create :autogenerate_elements, :unless => proc { |page| page.systempage? || page.do_not_autogenerate }
|
33
33
|
after_create :create_cells, :unless => :systempage?
|
34
34
|
|
@@ -48,9 +48,9 @@ module Alchemy
|
|
48
48
|
scope :all_last_edited_from, lambda { |user| where(:updater_id => user.id).order('`alchemy_pages`.`updated_at` DESC').limit(5) }
|
49
49
|
# Returns all pages that have the given language_id
|
50
50
|
scope :with_language, lambda { |language_id| where(:language_id => language_id) }
|
51
|
+
scope :contentpages, where(:layoutpage => [false, nil]).where("`alchemy_pages`.`parent_id` IS NOT NULL")
|
51
52
|
# Returns all pages that are not locked and public.
|
52
53
|
# Used for flushing all page caches at once.
|
53
|
-
scope :contentpages, where("`alchemy_pages`.`layoutpage` = 0 AND `alchemy_pages`.`parent_id` IS NOT NULL")
|
54
54
|
scope :flushables, not_locked.published.contentpages
|
55
55
|
scope :searchables, not_restricted.published.contentpages
|
56
56
|
|
@@ -496,6 +496,10 @@ module Alchemy
|
|
496
496
|
rootpage? || (self.parent_id == Page.root.id && !self.language_root?)
|
497
497
|
end
|
498
498
|
|
499
|
+
def contentpage?
|
500
|
+
!systempage? && !redirects_to_external? && !layoutpage?
|
501
|
+
end
|
502
|
+
|
499
503
|
def self.rootpage
|
500
504
|
self.root
|
501
505
|
end
|
data/lib/alchemy/version.rb
CHANGED
@@ -16,4 +16,35 @@ describe Alchemy::Admin::PagesController do
|
|
16
16
|
|
17
17
|
end
|
18
18
|
|
19
|
+
describe '#copy_language_tree' do
|
20
|
+
|
21
|
+
before(:each) do
|
22
|
+
@language = Alchemy::Language.get_default
|
23
|
+
@language_root = Factory(:language_root_page, :language => @language, :name => 'Intro')
|
24
|
+
@level_1 = Factory(:public_page, :language => @language, :parent_id => @language_root.id, :visible => true, :name => 'Level 1')
|
25
|
+
@level_2 = Factory(:public_page, :language => @language, :parent_id => @level_1.id, :visible => true, :name => 'Level 2')
|
26
|
+
@level_3 = Factory(:public_page, :language => @language, :parent_id => @level_2.id, :visible => true, :name => 'Level 3')
|
27
|
+
@level_4 = Factory(:public_page, :language => @language, :parent_id => @level_3.id, :visible => true, :name => 'Level 4')
|
28
|
+
@new_language = Factory(:language)
|
29
|
+
session[:language_code] = @new_language.code
|
30
|
+
session[:language_id] = @new_language.id
|
31
|
+
post :copy_language_tree, {:languages => {:new_lang_id => @new_language.id, :old_lang_id => @language.id}}
|
32
|
+
@new_lang_root = Alchemy::Page.language_root_for(@new_language.id)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should copy all pages" do
|
36
|
+
@new_lang_root.descendants.count.should == 4
|
37
|
+
@new_lang_root.descendants.collect(&:name).should == ["Level 1 (Copy)", "Level 2 (Copy)", "Level 3 (Copy)", "Level 4 (Copy)"]
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should not set layoutpage attribute to nil" do
|
41
|
+
@new_lang_root.layoutpage.should_not be_nil
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should not set layoutpage attribute to true" do
|
45
|
+
@new_lang_root.layoutpage.should_not be_true
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
19
50
|
end
|
@@ -26,6 +26,19 @@ describe Alchemy::PagesController do
|
|
26
26
|
within('div#navigation ul') { page.should have_selector('li a[href="/alchemy/page-1"], li a[href="/alchemy/page-2"]') }
|
27
27
|
end
|
28
28
|
|
29
|
+
context "when a global page with the same urlname as the requested page exists in the language tree" do
|
30
|
+
|
31
|
+
it "should render the content page, not the global page" do
|
32
|
+
globalpage = Factory(:public_page, :layoutpage => true, :language => @default_language, :name => "samename", :urlname => "samename", :parent_id => @default_language_root.id)
|
33
|
+
contentpage = Factory(:public_page, :layoutpage => false, :language => @default_language, :name => "samename", :urlname => "samename", :parent_id => @default_language_root.id)
|
34
|
+
article = contentpage.elements.find_by_name('article')
|
35
|
+
article.content_by_name('intro').essence.update_attributes(:body => 'rendered on contentpage', :public => true)
|
36
|
+
visit("/alchemy/samename")
|
37
|
+
within('div#content div.article div.intro') { page.should have_content('rendered on contentpage') }
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
29
42
|
end
|
30
43
|
|
31
44
|
describe "fulltext search" do
|
data/spec/models/page_spec.rb
CHANGED
@@ -105,6 +105,38 @@ describe Alchemy::Page do
|
|
105
105
|
|
106
106
|
end
|
107
107
|
|
108
|
+
describe "#contentpage" do
|
109
|
+
|
110
|
+
it "should return false if its a systempage" do
|
111
|
+
@page = Factory(:page, :language => @language, :parent_id => @language_root.id)
|
112
|
+
@page.stub!(:systempage?).and_return(true)
|
113
|
+
@page.stub!(:redirects_to_external?).and_return(false)
|
114
|
+
@page.contentpage?.should be_false
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should return false if it redirects to an external website" do
|
118
|
+
@page = Factory(:page, :layoutpage => false, :language => @language, :parent_id => @language_root.id)
|
119
|
+
@page.stub!(:systempage?).and_return(false)
|
120
|
+
@page.stub!(:redirects_to_external?).and_return(true)
|
121
|
+
@page.contentpage?.should be_false
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should return false if its a layoutpage" do
|
125
|
+
@page = Factory(:page, :layoutpage => true, :language => @language, :parent_id => @language_root.id)
|
126
|
+
@page.stub!(:systempage?).and_return(false)
|
127
|
+
@page.stub!(:redirects_to_external?).and_return(false)
|
128
|
+
@page.contentpage?.should be_false
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should return true if its not a layoutpage, does not redirect to an external website and its not a systempage" do
|
132
|
+
@page = Factory(:page, :language => @language, :parent_id => @language_root.id)
|
133
|
+
@page.stub!(:systempage?).and_return(false)
|
134
|
+
@page.stub!(:redirects_to_external?).and_return(false)
|
135
|
+
@page.contentpage?.should be_true
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
|
108
140
|
describe '#create' do
|
109
141
|
|
110
142
|
context "before/after filter" do
|
@@ -134,6 +166,20 @@ describe Alchemy::Page do
|
|
134
166
|
page.urlname.should == '--a'
|
135
167
|
end
|
136
168
|
|
169
|
+
context "with attribute :layoutpage set to true (global page)" do
|
170
|
+
|
171
|
+
it "should not set the title from its name if its a global page" do
|
172
|
+
page = Factory(:page, :layoutpage => true, :name => 'Page with no title', :language => @language, :parent_id => @language_root.id)
|
173
|
+
page.title.should be_blank
|
174
|
+
end
|
175
|
+
|
176
|
+
it "should not set an urlname" do
|
177
|
+
page = Factory(:page, :layoutpage => true, :name => 'Page with no urlname', :language => @language, :parent_id => @language_root.id)
|
178
|
+
page.urlname.should be_blank
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|
182
|
+
|
137
183
|
end
|
138
184
|
|
139
185
|
end
|
@@ -180,6 +226,30 @@ describe Alchemy::Page do
|
|
180
226
|
|
181
227
|
end
|
182
228
|
|
229
|
+
context ".contentpages" do
|
230
|
+
|
231
|
+
before(:each) do
|
232
|
+
@klingonian = Factory(:language)
|
233
|
+
@layoutroot = Alchemy::Page.find_or_create_layout_root_for(@klingonian.id)
|
234
|
+
@layoutpage = Factory(:public_page, :name => 'layoutpage', :layoutpage => true, :parent_id => @layoutroot.id, :language => @klingonian)
|
235
|
+
@klingonian_lang_root = Factory(:language_root_page, :name => 'klingonian_lang_root', :layoutpage => nil, :language => @klingonian)
|
236
|
+
@contentpage = Factory(:public_page, :name => 'contentpage', :parent_id => @language_root.id, :language => @language)
|
237
|
+
end
|
238
|
+
|
239
|
+
it "should return a collection of contentpages" do
|
240
|
+
Alchemy::Page.contentpages.to_a.should == [@language_root, @klingonian_lang_root, @contentpage]
|
241
|
+
end
|
242
|
+
|
243
|
+
it "should not contain pages with attribute :layoutpage set to true" do
|
244
|
+
Alchemy::Page.contentpages.to_a.select { |p| p.layoutpage == true }.should be_empty
|
245
|
+
end
|
246
|
+
|
247
|
+
it "should contain pages with attribute :layoutpage set to nil" do
|
248
|
+
Alchemy::Page.contentpages.to_a.select { |p| p.layoutpage == nil }.should == [@klingonian_lang_root]
|
249
|
+
end
|
250
|
+
|
251
|
+
end
|
252
|
+
|
183
253
|
context ".public" do
|
184
254
|
|
185
255
|
it "should return pages that are public" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alchemy_cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.9
|
4
|
+
version: 2.1.9.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,11 +11,11 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-04-
|
14
|
+
date: 2012-04-17 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rails
|
18
|
-
requirement: &
|
18
|
+
requirement: &70284747089940 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ~>
|
@@ -23,10 +23,10 @@ dependencies:
|
|
23
23
|
version: 3.1.4
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements: *
|
26
|
+
version_requirements: *70284747089940
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: authlogic
|
29
|
-
requirement: &
|
29
|
+
requirement: &70284747092840 !ruby/object:Gem::Requirement
|
30
30
|
none: false
|
31
31
|
requirements:
|
32
32
|
- - ! '>='
|
@@ -34,10 +34,10 @@ dependencies:
|
|
34
34
|
version: '0'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
|
-
version_requirements: *
|
37
|
+
version_requirements: *70284747092840
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: awesome_nested_set
|
40
|
-
requirement: &
|
40
|
+
requirement: &70284747084300 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
43
|
- - ~>
|
@@ -45,10 +45,10 @@ dependencies:
|
|
45
45
|
version: '2.0'
|
46
46
|
type: :runtime
|
47
47
|
prerelease: false
|
48
|
-
version_requirements: *
|
48
|
+
version_requirements: *70284747084300
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: declarative_authorization
|
51
|
-
requirement: &
|
51
|
+
requirement: &70284746634060 !ruby/object:Gem::Requirement
|
52
52
|
none: false
|
53
53
|
requirements:
|
54
54
|
- - ~>
|
@@ -56,10 +56,10 @@ dependencies:
|
|
56
56
|
version: 0.5.4
|
57
57
|
type: :runtime
|
58
58
|
prerelease: false
|
59
|
-
version_requirements: *
|
59
|
+
version_requirements: *70284746634060
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: tvdeyen-fleximage
|
62
|
-
requirement: &
|
62
|
+
requirement: &70284746630840 !ruby/object:Gem::Requirement
|
63
63
|
none: false
|
64
64
|
requirements:
|
65
65
|
- - ~>
|
@@ -67,10 +67,10 @@ dependencies:
|
|
67
67
|
version: 1.2.0
|
68
68
|
type: :runtime
|
69
69
|
prerelease: false
|
70
|
-
version_requirements: *
|
70
|
+
version_requirements: *70284746630840
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: kaminari
|
73
|
-
requirement: &
|
73
|
+
requirement: &70284740758960 !ruby/object:Gem::Requirement
|
74
74
|
none: false
|
75
75
|
requirements:
|
76
76
|
- - ~>
|
@@ -78,10 +78,10 @@ dependencies:
|
|
78
78
|
version: 0.13.0
|
79
79
|
type: :runtime
|
80
80
|
prerelease: false
|
81
|
-
version_requirements: *
|
81
|
+
version_requirements: *70284740758960
|
82
82
|
- !ruby/object:Gem::Dependency
|
83
83
|
name: acts_as_ferret
|
84
|
-
requirement: &
|
84
|
+
requirement: &70284740785920 !ruby/object:Gem::Requirement
|
85
85
|
none: false
|
86
86
|
requirements:
|
87
87
|
- - ~>
|
@@ -89,10 +89,10 @@ dependencies:
|
|
89
89
|
version: '0.5'
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
|
-
version_requirements: *
|
92
|
+
version_requirements: *70284740785920
|
93
93
|
- !ruby/object:Gem::Dependency
|
94
94
|
name: acts_as_list
|
95
|
-
requirement: &
|
95
|
+
requirement: &70284740784760 !ruby/object:Gem::Requirement
|
96
96
|
none: false
|
97
97
|
requirements:
|
98
98
|
- - ~>
|
@@ -100,10 +100,10 @@ dependencies:
|
|
100
100
|
version: '0.1'
|
101
101
|
type: :runtime
|
102
102
|
prerelease: false
|
103
|
-
version_requirements: *
|
103
|
+
version_requirements: *70284740784760
|
104
104
|
- !ruby/object:Gem::Dependency
|
105
105
|
name: magiclabs-userstamp
|
106
|
-
requirement: &
|
106
|
+
requirement: &70284740782660 !ruby/object:Gem::Requirement
|
107
107
|
none: false
|
108
108
|
requirements:
|
109
109
|
- - ~>
|
@@ -111,10 +111,10 @@ dependencies:
|
|
111
111
|
version: 2.0.2
|
112
112
|
type: :runtime
|
113
113
|
prerelease: false
|
114
|
-
version_requirements: *
|
114
|
+
version_requirements: *70284740782660
|
115
115
|
- !ruby/object:Gem::Dependency
|
116
116
|
name: dynamic_form
|
117
|
-
requirement: &
|
117
|
+
requirement: &70284740797300 !ruby/object:Gem::Requirement
|
118
118
|
none: false
|
119
119
|
requirements:
|
120
120
|
- - ~>
|
@@ -122,10 +122,10 @@ dependencies:
|
|
122
122
|
version: '1.1'
|
123
123
|
type: :runtime
|
124
124
|
prerelease: false
|
125
|
-
version_requirements: *
|
125
|
+
version_requirements: *70284740797300
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: jquery-rails
|
128
|
-
requirement: &
|
128
|
+
requirement: &70284740796020 !ruby/object:Gem::Requirement
|
129
129
|
none: false
|
130
130
|
requirements:
|
131
131
|
- - ~>
|
@@ -133,10 +133,10 @@ dependencies:
|
|
133
133
|
version: 1.0.16
|
134
134
|
type: :runtime
|
135
135
|
prerelease: false
|
136
|
-
version_requirements: *
|
136
|
+
version_requirements: *70284740796020
|
137
137
|
- !ruby/object:Gem::Dependency
|
138
138
|
name: attachment_magic
|
139
|
-
requirement: &
|
139
|
+
requirement: &70284740792180 !ruby/object:Gem::Requirement
|
140
140
|
none: false
|
141
141
|
requirements:
|
142
142
|
- - ~>
|
@@ -144,10 +144,10 @@ dependencies:
|
|
144
144
|
version: 0.2.1
|
145
145
|
type: :runtime
|
146
146
|
prerelease: false
|
147
|
-
version_requirements: *
|
147
|
+
version_requirements: *70284740792180
|
148
148
|
- !ruby/object:Gem::Dependency
|
149
149
|
name: sass-rails
|
150
|
-
requirement: &
|
150
|
+
requirement: &70284740791220 !ruby/object:Gem::Requirement
|
151
151
|
none: false
|
152
152
|
requirements:
|
153
153
|
- - ~>
|
@@ -155,10 +155,10 @@ dependencies:
|
|
155
155
|
version: 3.1.4
|
156
156
|
type: :runtime
|
157
157
|
prerelease: false
|
158
|
-
version_requirements: *
|
158
|
+
version_requirements: *70284740791220
|
159
159
|
- !ruby/object:Gem::Dependency
|
160
160
|
name: rspec-rails
|
161
|
-
requirement: &
|
161
|
+
requirement: &70284740804680 !ruby/object:Gem::Requirement
|
162
162
|
none: false
|
163
163
|
requirements:
|
164
164
|
- - ~>
|
@@ -166,10 +166,10 @@ dependencies:
|
|
166
166
|
version: '2.8'
|
167
167
|
type: :development
|
168
168
|
prerelease: false
|
169
|
-
version_requirements: *
|
169
|
+
version_requirements: *70284740804680
|
170
170
|
- !ruby/object:Gem::Dependency
|
171
171
|
name: sqlite3
|
172
|
-
requirement: &
|
172
|
+
requirement: &70284740803480 !ruby/object:Gem::Requirement
|
173
173
|
none: false
|
174
174
|
requirements:
|
175
175
|
- - ! '>='
|
@@ -177,7 +177,7 @@ dependencies:
|
|
177
177
|
version: '0'
|
178
178
|
type: :development
|
179
179
|
prerelease: false
|
180
|
-
version_requirements: *
|
180
|
+
version_requirements: *70284740803480
|
181
181
|
description: Alchemy is a Rails 3 CMS with a flexible content storing architecture.
|
182
182
|
email:
|
183
183
|
- alchemy@magiclabs.de
|
@@ -816,7 +816,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
816
816
|
version: '0'
|
817
817
|
segments:
|
818
818
|
- 0
|
819
|
-
hash:
|
819
|
+
hash: 219358527196005840
|
820
820
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
821
821
|
none: false
|
822
822
|
requirements:
|
@@ -825,7 +825,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
825
825
|
version: '0'
|
826
826
|
segments:
|
827
827
|
- 0
|
828
|
-
hash:
|
828
|
+
hash: 219358527196005840
|
829
829
|
requirements:
|
830
830
|
- ImageMagick (libmagick), v6.6 or greater.
|
831
831
|
rubyforge_project:
|