alchemy_cms 3.0.3 → 3.0.4
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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/app/models/alchemy/element.rb +14 -0
- data/app/views/alchemy/admin/pages/edit.html.erb +9 -9
- data/lib/alchemy/permissions.rb +1 -1
- data/lib/alchemy/version.rb +1 -1
- data/lib/rails/templates/alchemy.rb +2 -2
- data/spec/dummy/app/models/dummy_user.rb +4 -0
- data/spec/dummy/config/application.rb +1 -2
- data/spec/dummy/config/environments/test.rb +0 -2
- data/spec/features/admin/page_editing_feature_spec.rb +80 -48
- data/spec/libraries/permissions_spec.rb +8 -1
- data/spec/models/element_spec.rb +23 -0
- data/spec/models/page_spec.rb +21 -3
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a98f349ff1159991c93354c2cd40b77793ade10
|
4
|
+
data.tar.gz: a7378076e929a7fe8f80fc59256041260f3ff7dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 081d537f1cc0a4528039e2466885fbe41b072f24131d08f4757cca4e91bafa6867c6ee4b255d90db5a3fb0b07f12f4c02714d4b4c6b5915781b652ab81c7e4f8
|
7
|
+
data.tar.gz: eea901691a4b7351154098e8ff0f8635b3233381e20529ef284d463213fab9b2b9a224f78183a83fb9924df9505844c3a8a3ada02451c326b04be525df54f5c8
|
data/.travis.yml
CHANGED
@@ -421,6 +421,20 @@ module Alchemy
|
|
421
421
|
"alchemy/elements/#{name}_view"
|
422
422
|
end
|
423
423
|
|
424
|
+
# Returns the key that's taken for cache path.
|
425
|
+
#
|
426
|
+
# Uses the page's +published_at+ value that's updated when the user publishes the page.
|
427
|
+
#
|
428
|
+
# If the page is the current preview it uses the element's updated_at value as cache key.
|
429
|
+
#
|
430
|
+
def cache_key
|
431
|
+
if Page.current_preview == self.page
|
432
|
+
"alchemy/elements/#{id}-#{updated_at}"
|
433
|
+
else
|
434
|
+
"alchemy/elements/#{id}-#{page.published_at}"
|
435
|
+
end
|
436
|
+
end
|
437
|
+
|
424
438
|
private
|
425
439
|
|
426
440
|
# creates the contents for this element as described in the elements.yml
|
@@ -70,15 +70,15 @@
|
|
70
70
|
<% end %>
|
71
71
|
<label><%= _t(:page_properties) %></label>
|
72
72
|
</div>
|
73
|
-
<% if
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
73
|
+
<% if can?(:publish, @page) && !@page.layoutpage? %>
|
74
|
+
<div class="button_with_label">
|
75
|
+
<%= form_tag alchemy.publish_admin_page_path(@page), id: 'publish_page_form' do %>
|
76
|
+
<%= button_tag class: 'icon_button', title: _t(:explain_publishing) do %>
|
77
|
+
<%= render_icon('publish') %>
|
78
|
+
<% end %>
|
79
|
+
<label><%= _t("Publish page") %></label>
|
80
|
+
<% end %>
|
81
|
+
</div>
|
82
82
|
<% end %>
|
83
83
|
<div class="toolbar_spacer"></div>
|
84
84
|
<div class="select_with_label">
|
data/lib/alchemy/permissions.rb
CHANGED
@@ -130,6 +130,7 @@ module Alchemy
|
|
130
130
|
:destroy,
|
131
131
|
:flush,
|
132
132
|
:order,
|
133
|
+
:publish,
|
133
134
|
:sort,
|
134
135
|
:switch_language
|
135
136
|
], Alchemy::Page
|
@@ -182,7 +183,6 @@ module Alchemy
|
|
182
183
|
:fold,
|
183
184
|
:info,
|
184
185
|
:link,
|
185
|
-
:publish,
|
186
186
|
:read,
|
187
187
|
:update,
|
188
188
|
:unlock,
|
data/lib/alchemy/version.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# This rails template installs Alchemy and all depending gems.
|
2
2
|
require File.expand_path('../../../alchemy/version', __FILE__)
|
3
3
|
|
4
|
-
gem 'alchemy_cms', github: 'magiclabs/alchemy_cms', branch: '
|
5
|
-
gem 'alchemy-devise', github: 'magiclabs/alchemy-devise', branch: '
|
4
|
+
gem 'alchemy_cms', github: 'magiclabs/alchemy_cms', branch: '3.0-stable'
|
5
|
+
gem 'alchemy-devise', github: 'magiclabs/alchemy-devise', branch: '2.0-stable'
|
6
6
|
gem 'capistrano', '~> 2.15.5', group: 'development'
|
@@ -18,7 +18,6 @@ module Dummy
|
|
18
18
|
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
19
19
|
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
20
20
|
# config.i18n.default_locale = :de
|
21
|
-
|
22
|
-
I18n.enforce_available_locales = true
|
21
|
+
config.i18n.enforce_available_locales = false
|
23
22
|
end
|
24
23
|
end
|
@@ -1,75 +1,107 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'Page editing feature' do
|
4
|
-
let(:a_page) {
|
4
|
+
let(:a_page) { create(:page) }
|
5
5
|
|
6
|
-
|
6
|
+
context 'as author' do
|
7
|
+
before { authorize_as_admin(build(:author_user)) }
|
7
8
|
|
8
|
-
|
9
|
+
it 'cannot publish page.' do
|
10
|
+
visit alchemy.edit_admin_page_path(a_page)
|
11
|
+
expect(page).to_not have_selector('#publish_page_form')
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'as editor' do
|
16
|
+
before { authorize_as_admin(build(:editor_user)) }
|
17
|
+
|
18
|
+
it 'can publish page.' do
|
19
|
+
visit alchemy.edit_admin_page_path(a_page)
|
20
|
+
find('#publish_page_form button').click
|
21
|
+
expect(page).to have_content Alchemy::I18n.t(:page_published, name: a_page.name)
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'while editing a global page' do
|
25
|
+
let(:a_page) { create(:page, layoutpage: true) }
|
9
26
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
expect(page).to have_selector('input#page_urlname')
|
14
|
-
expect(page).to have_selector('input#page_title')
|
15
|
-
expect(page).to have_selector('input#page_robot_index')
|
16
|
-
expect(page).to have_selector('input#page_robot_follow')
|
27
|
+
it 'cannot publish page.' do
|
28
|
+
visit alchemy.edit_admin_page_path(a_page)
|
29
|
+
expect(page).to_not have_selector('#publish_page_form')
|
17
30
|
end
|
31
|
+
end
|
32
|
+
end
|
18
33
|
|
19
|
-
|
20
|
-
|
21
|
-
Alchemy::Config.stub(:get) { |arg| arg == :sitemap ? {'show_flag' => true} : Alchemy::Config.show[arg.to_s] }
|
22
|
-
end
|
34
|
+
context 'as admin' do
|
35
|
+
let(:a_page) { FactoryGirl.create(:public_page, visible: true) }
|
23
36
|
|
24
|
-
|
37
|
+
before { authorize_as_admin }
|
38
|
+
|
39
|
+
context "in configure overlay" do
|
40
|
+
context "when editing a normal page" do
|
41
|
+
it "should show all relevant input fields" do
|
25
42
|
visit alchemy.configure_admin_page_path(a_page)
|
26
|
-
expect(page).to have_selector('input
|
43
|
+
expect(page).to have_selector('input#page_urlname')
|
44
|
+
expect(page).to have_selector('input#page_title')
|
45
|
+
expect(page).to have_selector('input#page_robot_index')
|
46
|
+
expect(page).to have_selector('input#page_robot_follow')
|
27
47
|
end
|
28
|
-
end
|
29
48
|
|
30
|
-
|
31
|
-
|
32
|
-
|
49
|
+
context "with sitemaps show_flag config option set to true" do
|
50
|
+
before do
|
51
|
+
Alchemy::Config.stub(:get) { |arg| arg == :sitemap ? {'show_flag' => true} : Alchemy::Config.show[arg.to_s] }
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should show sitemap checkbox" do
|
55
|
+
visit alchemy.configure_admin_page_path(a_page)
|
56
|
+
expect(page).to have_selector('input[type="checkbox"]#page_sitemap')
|
57
|
+
end
|
33
58
|
end
|
34
59
|
|
35
|
-
|
36
|
-
|
37
|
-
|
60
|
+
context "with sitemaps show_flag config option set to false" do
|
61
|
+
before do
|
62
|
+
Alchemy::Config.stub(:get) { |arg| arg == :sitemap ? {'show_flag' => false} : Alchemy::Config.show[arg.to_s] }
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should show sitemap checkbox" do
|
66
|
+
visit alchemy.configure_admin_page_path(a_page)
|
67
|
+
expect(page).to_not have_selector('input[type="checkbox"]#page_sitemap')
|
68
|
+
end
|
38
69
|
end
|
39
70
|
end
|
40
|
-
end
|
41
71
|
|
42
|
-
|
43
|
-
|
72
|
+
context "when editing a global page" do
|
73
|
+
let(:layout_page) { FactoryGirl.create(:page, layoutpage: true) }
|
44
74
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
75
|
+
it "should not show the input fields for normal pages" do
|
76
|
+
visit alchemy.edit_admin_layoutpage_path(layout_page)
|
77
|
+
expect(page).to_not have_selector('input#page_urlname')
|
78
|
+
expect(page).to_not have_selector('input#page_title')
|
79
|
+
expect(page).to_not have_selector('input#page_robot_index')
|
80
|
+
expect(page).to_not have_selector('input#page_robot_follow')
|
81
|
+
end
|
51
82
|
end
|
52
|
-
end
|
53
83
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
84
|
+
context "when page is taggable" do
|
85
|
+
before { Alchemy::Page.any_instance.stub(:taggable?).and_return(true) }
|
86
|
+
|
87
|
+
it "should show the tag_list input field" do
|
88
|
+
visit alchemy.configure_admin_page_path(a_page)
|
89
|
+
expect(page).to have_selector('input#page_tag_list')
|
90
|
+
end
|
59
91
|
end
|
60
92
|
end
|
61
|
-
end
|
62
93
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
94
|
+
context "in preview frame" do
|
95
|
+
it "the menubar does not render on the page" do
|
96
|
+
visit alchemy.admin_page_path(a_page)
|
97
|
+
page.should_not have_selector('#alchemy_menubar')
|
98
|
+
end
|
68
99
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
100
|
+
it "navigation links are not clickable" do
|
101
|
+
visit alchemy.admin_page_path(a_page)
|
102
|
+
within('#navigation') do
|
103
|
+
page.should have_selector('a[href="javascript: void(0)"]')
|
104
|
+
end
|
73
105
|
end
|
74
106
|
end
|
75
107
|
end
|
@@ -122,7 +122,10 @@ describe Alchemy::Permissions do
|
|
122
122
|
should be_able_to(:link, Alchemy::Page)
|
123
123
|
should be_able_to(:visit, Alchemy::Page)
|
124
124
|
should be_able_to(:unlock, Alchemy::Page)
|
125
|
-
|
125
|
+
end
|
126
|
+
|
127
|
+
it "can not publish pages" do
|
128
|
+
should_not be_able_to(:publish, Alchemy::Page)
|
126
129
|
end
|
127
130
|
|
128
131
|
it "can manage elements" do
|
@@ -180,6 +183,10 @@ describe Alchemy::Permissions do
|
|
180
183
|
should be_able_to(:switch_language, Alchemy::Page)
|
181
184
|
end
|
182
185
|
|
186
|
+
it "can publish pages" do
|
187
|
+
should be_able_to(:publish, Alchemy::Page)
|
188
|
+
end
|
189
|
+
|
183
190
|
it "can not see invisible pages" do
|
184
191
|
should_not be_able_to(:see, not_visible_page)
|
185
192
|
end
|
data/spec/models/element_spec.rb
CHANGED
@@ -538,6 +538,29 @@ module Alchemy
|
|
538
538
|
end
|
539
539
|
end
|
540
540
|
|
541
|
+
describe '#cache_key' do
|
542
|
+
let(:page) { stub_model(Page, published_at: Time.now - 1.week) }
|
543
|
+
let(:element) { stub_model(Element, page: page, updated_at: Time.now) }
|
544
|
+
|
545
|
+
subject { element.cache_key }
|
546
|
+
|
547
|
+
before do
|
548
|
+
expect(Page).to receive(:current_preview).and_return(preview)
|
549
|
+
end
|
550
|
+
|
551
|
+
context "when current page rendered in preview mode" do
|
552
|
+
let(:preview) { page }
|
553
|
+
|
554
|
+
it { is_expected.to eq("alchemy/elements/#{element.id}-#{element.updated_at}") }
|
555
|
+
end
|
556
|
+
|
557
|
+
context "when current page not in preview mode" do
|
558
|
+
let(:preview) { nil }
|
559
|
+
|
560
|
+
it { is_expected.to eq("alchemy/elements/#{element.id}-#{page.published_at}") }
|
561
|
+
end
|
562
|
+
end
|
563
|
+
|
541
564
|
it_behaves_like "having a hint" do
|
542
565
|
let(:subject) { Element.new }
|
543
566
|
end
|
data/spec/models/page_spec.rb
CHANGED
@@ -715,9 +715,27 @@ module Alchemy
|
|
715
715
|
end
|
716
716
|
|
717
717
|
describe '#cache_key' do
|
718
|
-
let(:page)
|
719
|
-
|
720
|
-
|
718
|
+
let(:page) do
|
719
|
+
stub_model(Page, updated_at: Time.now, published_at: Time.now - 1.week)
|
720
|
+
end
|
721
|
+
|
722
|
+
subject { page.cache_key }
|
723
|
+
|
724
|
+
before do
|
725
|
+
expect(Page).to receive(:current_preview).and_return(preview)
|
726
|
+
end
|
727
|
+
|
728
|
+
context "when current page rendered in preview mode" do
|
729
|
+
let(:preview) { page }
|
730
|
+
|
731
|
+
it { is_expected.to eq("alchemy/pages/#{page.id}-#{page.updated_at}") }
|
732
|
+
end
|
733
|
+
|
734
|
+
context "when current page not in preview mode" do
|
735
|
+
let(:preview) { nil }
|
736
|
+
|
737
|
+
it { is_expected.to eq("alchemy/pages/#{page.id}-#{page.published_at}") }
|
738
|
+
end
|
721
739
|
end
|
722
740
|
|
723
741
|
describe '#cell_definitions' 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: 3.0.
|
4
|
+
version: 3.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas von Deyen
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date:
|
15
|
+
date: 2015-03-17 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: rails
|
@@ -1154,7 +1154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1154
1154
|
requirements:
|
1155
1155
|
- ImageMagick (libmagick), v6.6 or greater.
|
1156
1156
|
rubyforge_project:
|
1157
|
-
rubygems_version: 2.4.
|
1157
|
+
rubygems_version: 2.4.3
|
1158
1158
|
signing_key:
|
1159
1159
|
specification_version: 4
|
1160
1160
|
summary: A powerful, userfriendly and flexible CMS for Rails 4
|