alchemy_cms 3.1.0 → 3.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1dd3580d83b92bb7990cc1a34e3567ebe037a409
4
- data.tar.gz: 88b2975b2529f4a9ec05a780705a8d7d3c193286
3
+ metadata.gz: da3fbeab242eee7ed6dde78b96f4a503df8168d1
4
+ data.tar.gz: 372a82e46f31f66b61776290d1c2e6a56fa340a6
5
5
  SHA512:
6
- metadata.gz: a8e7aab4bbc54ca64d74829b148921fa122db90f1a7713e4aa554807a74ccd763ac23e97bdc8cad1643c49d4f31448b4d47fc0ff0bb63be9d867534f67935676
7
- data.tar.gz: 43a18d1f7f2c31f76fccaa2f7b9afedf32ea6c5f192a65d9ff3aa71fdaeee94ff40e02b0d34e1e6015496c27ca976250ad4108edba0af319f0843e9a0eaedcf1
6
+ metadata.gz: c6d578e24ffa7c5c6dc715e9e6ce3f859e49d7acbc1d42ad2b83f64e1adb9ce91acb5c4463071b91a6e88a020bc3592cee949517fc98304f5d4a5b35ff265531
7
+ data.tar.gz: e047f4e17c7081890e7b6abe6e4707de26715b610bb11e722d7cbb695bfcce2a446ef524895cb3f4591132ec157ade16d7d2244c66661199c0ecf876405090e9
@@ -7,13 +7,13 @@ rvm:
7
7
  - 2.1
8
8
  branches:
9
9
  only:
10
- - master
10
+ - 3.1-stable
11
11
  before_script: 'bundle exec rake alchemy:spec:prepare'
12
12
  script: 'bundle exec rspec'
13
13
  env:
14
14
  - DB=mysql
15
15
  - DB=postgresql
16
- - RAILS_VERSION=4.0.12
16
+ - RAILS_VERSION=4.0.13
17
17
  notifications:
18
18
  irc:
19
19
  on_success: change
data/Gemfile CHANGED
@@ -3,7 +3,7 @@ source 'https://rubygems.org'
3
3
  gemspec
4
4
 
5
5
  if ENV['RAILS_VERSION']
6
- gem 'rails', "~> #{ENV['RAILS_VERSION']}"
6
+ gem 'rails', ENV['RAILS_VERSION']
7
7
  end
8
8
 
9
9
  gem 'sqlite3' if ENV['DB'].nil? || ENV['DB'] == 'sqlite'
@@ -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 configuration(:cache_pages) && !@page.layoutpage? %>
74
- <div class="button_with_label">
75
- <%= form_tag alchemy.publish_admin_page_path(@page), id: 'publish_page_form' do %>
76
- <button class="icon_button" title="<%= _t(:explain_publishing) %>">
77
- <%= render_icon('publish') %>
78
- </button>
79
- <label><%= _t("Publish page") %></label>
80
- <% end %>
81
- </div>
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">
@@ -145,6 +145,7 @@ module Alchemy
145
145
  :destroy,
146
146
  :flush,
147
147
  :order,
148
+ :publish,
148
149
  :sort,
149
150
  :switch_language
150
151
  ], Alchemy::Page
@@ -197,7 +198,6 @@ module Alchemy
197
198
  :fold,
198
199
  :info,
199
200
  :link,
200
- :publish,
201
201
  :read,
202
202
  :update,
203
203
  :unlock,
@@ -1,5 +1,5 @@
1
1
  module Alchemy
2
- VERSION = "3.1.0"
2
+ VERSION = "3.1.1"
3
3
 
4
4
  def self.version
5
5
  VERSION
@@ -1,6 +1,7 @@
1
1
  # This rails template installs Alchemy and all depending gems.
2
- require File.expand_path('../../../alchemy/version', __FILE__)
2
+ require File.expand_path("../../../alchemy/version", __FILE__)
3
3
 
4
- gem 'alchemy_cms', "#{Alchemy::VERSION}"
5
- gem 'alchemy-devise', '>= 2.1.0.beta3'
6
- gem 'capistrano', '~> 2.15.5', group: 'development'
4
+ gem "alchemy_cms", github: "AlchemyCMS/alchemy_cms", branch: "3.1-stable"
5
+ gem "alchemy-devise", github: "AlchemyCMS/alchemy-devise", branch: "2.1-stable"
6
+
7
+ gem "capistrano", "~> 2.15.5", group: "development"
@@ -6,6 +6,6 @@ class DummyUser < ActiveRecord::Base
6
6
  end
7
7
 
8
8
  def alchemy_roles
9
- %w(admin)
9
+ @alchemy_roles || %w(admin)
10
10
  end
11
11
  end
@@ -1,95 +1,135 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'Page editing feature' do
4
- let(:a_page) { FactoryGirl.create(:public_page, visible: true) }
4
+ let(:a_page) { create(:page) }
5
5
 
6
- before { authorize_as_admin }
6
+ context 'as author' do
7
+ before { authorize_as_admin(build(:author_user)) }
7
8
 
8
- context "in configure overlay" do
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
- context "when editing a normal page" do
11
- it "should show all relevant input fields" do
12
- visit alchemy.configure_admin_page_path(a_page)
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
- context "with sitemaps show_flag config option set to true" do
20
- before do
21
- allow(Alchemy::Config).to receive(:get) { |arg| arg == :sitemap ? {'show_flag' => true} : Alchemy::Config.show[arg.to_s] }
22
- end
34
+ context 'as admin' do
35
+ let(:a_page) { create(:public_page, visible: true) }
23
36
 
24
- it "should show sitemap checkbox" do
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[type="checkbox"]#page_sitemap')
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
- context "with sitemaps show_flag config option set to false" do
31
- before do
32
- allow(Alchemy::Config).to receive(:get) { |arg| arg == :sitemap ? {'show_flag' => false} : Alchemy::Config.show[arg.to_s] }
49
+ context "with sitemaps show_flag config option set to true" do
50
+ before do
51
+ allow(Alchemy::Config).to receive(:get) do |arg|
52
+ arg == :sitemap ? {'show_flag' => true} : Alchemy::Config.show[arg.to_s]
53
+ end
54
+ end
55
+
56
+ it "should show sitemap checkbox" do
57
+ visit alchemy.configure_admin_page_path(a_page)
58
+ expect(page).to have_selector('input[type="checkbox"]#page_sitemap')
59
+ end
33
60
  end
34
61
 
35
- it "should show sitemap checkbox" do
36
- visit alchemy.configure_admin_page_path(a_page)
37
- expect(page).to_not have_selector('input[type="checkbox"]#page_sitemap')
62
+ context "with sitemaps show_flag config option set to false" do
63
+ before do
64
+ allow(Alchemy::Config).to receive(:get) do |arg|
65
+ arg == :sitemap ? {'show_flag' => false} : Alchemy::Config.show[arg.to_s]
66
+ end
67
+ end
68
+
69
+ it "should not show sitemap checkbox" do
70
+ visit alchemy.configure_admin_page_path(a_page)
71
+ expect(page).to_not have_selector('input[type="checkbox"]#page_sitemap')
72
+ end
38
73
  end
39
74
  end
40
- end
41
75
 
42
- context "when editing a global page" do
43
- let(:layout_page) { FactoryGirl.create(:page, layoutpage: true) }
76
+ context "when editing a global page" do
77
+ let(:layout_page) { create(:page, layoutpage: true) }
44
78
 
45
- it "should not show the input fields for normal pages" do
46
- visit alchemy.edit_admin_layoutpage_path(layout_page)
47
- expect(page).to_not have_selector('input#page_urlname')
48
- expect(page).to_not have_selector('input#page_title')
49
- expect(page).to_not have_selector('input#page_robot_index')
50
- expect(page).to_not have_selector('input#page_robot_follow')
79
+ it "should not show the input fields for normal pages" do
80
+ visit alchemy.edit_admin_layoutpage_path(layout_page)
81
+ expect(page).to_not have_selector('input#page_urlname')
82
+ expect(page).to_not have_selector('input#page_title')
83
+ expect(page).to_not have_selector('input#page_robot_index')
84
+ expect(page).to_not have_selector('input#page_robot_follow')
85
+ end
51
86
  end
52
- end
53
87
 
54
- context "when page is taggable" do
55
- before { expect_any_instance_of(Alchemy::Page).to receive(:taggable?).and_return(true) }
88
+ context "when page is taggable" do
89
+ before do
90
+ expect_any_instance_of(Alchemy::Page)
91
+ .to receive(:taggable?).and_return(true)
92
+ end
56
93
 
57
- it "should show the tag_list input field" do
58
- visit alchemy.configure_admin_page_path(a_page)
59
- expect(page).to have_selector('input#page_tag_list')
94
+ it "should show the tag_list input field" do
95
+ visit alchemy.configure_admin_page_path(a_page)
96
+ expect(page).to have_selector('input#page_tag_list')
97
+ end
60
98
  end
61
99
  end
62
- end
63
100
 
64
- context "in preview frame" do
65
- it "the menubar does not render on the page" do
66
- visit alchemy.admin_page_path(a_page)
67
- expect(page).not_to have_selector('#alchemy_menubar')
68
- end
101
+ context "in preview frame" do
102
+ it "the menubar does not render on the page" do
103
+ visit alchemy.admin_page_path(a_page)
104
+ expect(page).not_to have_selector('#alchemy_menubar')
105
+ end
69
106
 
70
- it "navigation links are not clickable" do
71
- visit alchemy.admin_page_path(a_page)
72
- within('#navigation') do
73
- expect(page).to have_selector('a[href="javascript: void(0)"]')
107
+ it "navigation links are not clickable" do
108
+ visit alchemy.admin_page_path(a_page)
109
+ within('#navigation') do
110
+ expect(page).to have_selector('a[href="javascript: void(0)"]')
111
+ end
74
112
  end
75
113
  end
76
- end
77
114
 
78
- context 'in element panel' do
79
- let!(:everything_page) { create(:page, page_layout: 'everything', do_not_autogenerate: false) }
80
-
81
- it "renders essence editors for all elements" do
82
- visit alchemy.admin_elements_path(page_id: everything_page.id)
83
-
84
- expect(page).to have_selector('div.content_editor.essence_boolean')
85
- expect(page).to have_selector('div.content_editor.essence_date')
86
- expect(page).to have_selector('div.content_editor.essence_file')
87
- expect(page).to have_selector('div.content_editor.essence_html_editor')
88
- expect(page).to have_selector('div.content_editor.essence_link')
89
- expect(page).to have_selector('div.content_editor.essence_picture_editor')
90
- expect(page).to have_selector('div.content_editor.essence_richtext')
91
- expect(page).to have_selector('div.content_editor.essence_select')
92
- expect(page).to have_selector('div.content_editor.essence_text')
115
+ context 'in element panel' do
116
+ let!(:everything_page) do
117
+ create(:page, page_layout: 'everything', do_not_autogenerate: false)
118
+ end
119
+
120
+ it "renders essence editors for all elements" do
121
+ visit alchemy.admin_elements_path(page_id: everything_page.id)
122
+
123
+ expect(page).to have_selector('div.content_editor.essence_boolean')
124
+ expect(page).to have_selector('div.content_editor.essence_date')
125
+ expect(page).to have_selector('div.content_editor.essence_file')
126
+ expect(page).to have_selector('div.content_editor.essence_html_editor')
127
+ expect(page).to have_selector('div.content_editor.essence_link')
128
+ expect(page).to have_selector('div.content_editor.essence_picture_editor')
129
+ expect(page).to have_selector('div.content_editor.essence_richtext')
130
+ expect(page).to have_selector('div.content_editor.essence_select')
131
+ expect(page).to have_selector('div.content_editor.essence_text')
132
+ end
93
133
  end
94
134
  end
95
135
  end
@@ -150,7 +150,10 @@ describe Alchemy::Permissions do
150
150
  is_expected.to be_able_to(:link, Alchemy::Page)
151
151
  is_expected.to be_able_to(:visit, Alchemy::Page)
152
152
  is_expected.to be_able_to(:unlock, Alchemy::Page)
153
- is_expected.to be_able_to(:publish, Alchemy::Page)
153
+ end
154
+
155
+ it "can not publish pages" do
156
+ is_expected.to_not be_able_to(:publish, Alchemy::Page)
154
157
  end
155
158
 
156
159
  it "can manage elements" do
@@ -208,6 +211,10 @@ describe Alchemy::Permissions do
208
211
  is_expected.to be_able_to(:switch_language, Alchemy::Page)
209
212
  end
210
213
 
214
+ it "can publish pages" do
215
+ is_expected.to be_able_to(:publish, Alchemy::Page)
216
+ end
217
+
211
218
  it "can not see invisible pages" do
212
219
  is_expected.not_to be_able_to(:see, not_visible_page)
213
220
  end
@@ -580,6 +580,29 @@ module Alchemy
580
580
  end
581
581
  end
582
582
 
583
+ describe '#cache_key' do
584
+ let(:page) { stub_model(Page, published_at: Time.now - 1.week) }
585
+ let(:element) { stub_model(Element, page: page, updated_at: Time.now) }
586
+
587
+ subject { element.cache_key }
588
+
589
+ before do
590
+ expect(Page).to receive(:current_preview).and_return(preview)
591
+ end
592
+
593
+ context "when current page rendered in preview mode" do
594
+ let(:preview) { page }
595
+
596
+ it { is_expected.to eq("alchemy/elements/#{element.id}-#{element.updated_at}") }
597
+ end
598
+
599
+ context "when current page not in preview mode" do
600
+ let(:preview) { nil }
601
+
602
+ it { is_expected.to eq("alchemy/elements/#{element.id}-#{page.published_at}") }
603
+ end
604
+ end
605
+
583
606
  it_behaves_like "having a hint" do
584
607
  let(:subject) { Element.new }
585
608
  end
@@ -734,12 +734,26 @@ module Alchemy
734
734
  end
735
735
 
736
736
  describe '#cache_key' do
737
- let(:page) { stub_model(Page) }
738
- subject { page }
737
+ let(:page) do
738
+ stub_model(Page, updated_at: Time.now, published_at: Time.now - 1.week)
739
+ end
740
+
741
+ subject { page.cache_key }
742
+
743
+ before do
744
+ expect(Page).to receive(:current_preview).and_return(preview)
745
+ end
746
+
747
+ context "when current page rendered in preview mode" do
748
+ let(:preview) { page }
749
+
750
+ it { is_expected.to eq("alchemy/pages/#{page.id}-#{page.updated_at}") }
751
+ end
752
+
753
+ context "when current page not in preview mode" do
754
+ let(:preview) { nil }
739
755
 
740
- describe '#cache_key' do
741
- subject { super().cache_key }
742
- it { is_expected.to match(page.id.to_s) }
756
+ it { is_expected.to eq("alchemy/pages/#{page.id}-#{page.published_at}") }
743
757
  end
744
758
  end
745
759
 
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.1.0
4
+ version: 3.1.1
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: 2015-02-24 00:00:00.000000000 Z
15
+ date: 2015-03-17 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: actionpack-page_caching