Skip to content

Commit 7bca84b

Browse files
committed
Add no_index page
This page gets displayed when there is no homepage or the homepage is not published yet.
1 parent ae74399 commit 7bca84b

9 files changed

Lines changed: 169 additions & 114 deletions

File tree

app/assets/builds/alchemy/welcome.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/assets/builds/alchemy/welcome.css.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/controllers/alchemy/pages_controller.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,12 @@ def locale_prefix_not_allowed?
106106
def load_index_page
107107
@page ||= Language.current_root_page
108108
Current.page = @page
109-
render template: "alchemy/welcome", layout: false if signup_required?
109+
110+
if signup_required? && @page.nil?
111+
render template: "alchemy/welcome", layout: false
112+
elsif !@page&.public?
113+
render template: "alchemy/no_index", layout: false
114+
end
110115
end
111116

112117
# == Loads page by urlname
@@ -192,7 +197,7 @@ def set_expiration_headers
192197

193198
def signup_required?
194199
if Alchemy.user_class.respond_to?(:admins)
195-
Alchemy.user_class.admins.empty? && @page.nil?
200+
Alchemy.user_class.admins.empty?
196201
end
197202
end
198203

app/stylesheets/alchemy/welcome.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ h3 {
2828

2929
img {
3030
height: 75px;
31+
margin-left: -0.35em;
3132
}
3233
}
3334

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="utf-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1">
6+
<title><%= Alchemy.t("Welcome to Alchemy") %></title>
7+
<%= stylesheet_link_tag("alchemy/welcome", media: "all") %>
8+
</head>
9+
<body>
10+
<div class="container">
11+
<%= image_tag("alchemy/alchemy-logo.svg") %>
12+
<% if @page.nil? %>
13+
<h3>
14+
<%= Alchemy.t("There are no pages yet") %>
15+
</h3>
16+
<p>
17+
<%= link_to Alchemy.t("Create your first page"),
18+
alchemy.admin_pages_path, class: "button" %>
19+
</p>
20+
<% else %>
21+
<h3>
22+
<%= Alchemy.t("There are no published pages yet") %>
23+
</h3>
24+
<p>
25+
<%= link_to Alchemy.t("Publish your homepage"),
26+
alchemy.edit_admin_page_path(@page), class: "button" %>
27+
</p>
28+
<% end %>
29+
</div>
30+
</body>
31+
</html>

lib/alchemy/test_support/factories/page_factory.rb

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
parent do
1414
Alchemy::Page.find_by(language_root: true, language: language) ||
15-
FactoryBot.create(:alchemy_page, :language_root, language: language)
15+
FactoryBot.create(:alchemy_page, :public, :language_root, language: language)
1616
end
1717

1818
# This speeds up creating of pages dramatically.
@@ -23,7 +23,6 @@
2323
name { language&.frontpage_name || "Intro" }
2424
page_layout { language&.page_layout || "index" }
2525
language_root { true }
26-
public_on { Time.current }
2726
parent { nil }
2827
end
2928

spec/controllers/alchemy/on_page_layout_mixin_spec.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
context "for index action" do
3535
%w[standard news].each do |page_layout|
3636
it "runs callback on #{page_layout} layout" do
37-
create(:alchemy_page, :language_root, page_layout: page_layout)
37+
create(:alchemy_page, :public, :language_root, page_layout: page_layout)
3838

3939
get :index
4040
expect(assigns(:on_all_layouts)).to eq(page_layout)
@@ -63,7 +63,7 @@
6363
end
6464

6565
context "for index action" do
66-
let!(:page) { create(:alchemy_page, :language_root, page_layout: "standard") }
66+
let!(:page) { create(:alchemy_page, :public, :language_root, page_layout: "standard") }
6767

6868
it "runs the callback" do
6969
get :index
@@ -132,7 +132,7 @@
132132

133133
%w[standard news].each do |page_layout|
134134
it "runs both callbacks on #{page_layout} layout" do
135-
create(:alchemy_page, :language_root, page_layout: page_layout)
135+
create(:alchemy_page, :public, :language_root, page_layout: page_layout)
136136

137137
get :index
138138
expect(assigns(:page_layout)).to eq(page_layout)
@@ -163,7 +163,7 @@
163163
end
164164

165165
context "for index action" do
166-
let!(:page) { create(:alchemy_page, :language_root, page_layout: "standard") }
166+
let!(:page) { create(:alchemy_page, :public, :language_root, page_layout: "standard") }
167167

168168
it "runs both callbacks" do
169169
get :index
@@ -190,7 +190,7 @@
190190
end
191191

192192
context "for index action" do
193-
let!(:page) { create(:alchemy_page, :language_root, page_layout: "standard") }
193+
let!(:page) { create(:alchemy_page, :public, :language_root, page_layout: "standard") }
194194

195195
it "evaluates the given block" do
196196
get :index
@@ -218,7 +218,7 @@ def run_method
218218
end
219219

220220
context "for index action" do
221-
let!(:page) { create(:alchemy_page, :language_root, page_layout: "standard") }
221+
let!(:page) { create(:alchemy_page, :public, :language_root, page_layout: "standard") }
222222

223223
it "runs the given callback method" do
224224
get :index
@@ -257,7 +257,7 @@ def run_method
257257

258258
%w[standard news].each do |page_layout|
259259
it "evaluates the given callback on both page_layouts for index action" do
260-
create(:alchemy_page, :language_root, page_layout: page_layout)
260+
create(:alchemy_page, :public, :language_root, page_layout: page_layout)
261261

262262
get :index
263263
expect(assigns(:successful)).to eq(page_layout)

spec/controllers/alchemy/pages_controller_spec.rb

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ module Alchemy
1010
let(:default_language) { create(:alchemy_language) }
1111

1212
let(:default_language_root) do
13-
create(:alchemy_page, :language_root, language: default_language, name: "Home")
13+
create(:alchemy_page, :public, :language_root, language: default_language, name: "Home")
1414
end
1515

1616
let(:page) do
@@ -29,11 +29,8 @@ module Alchemy
2929

3030
describe "#index" do
3131
context "without a site or language present" do
32-
it "returns a 404" do
33-
expect { get(:index) }.to raise_exception(
34-
ActionController::RoutingError,
35-
'Alchemy::Page not found "/"'
36-
)
32+
it "returns a no_index page" do
33+
expect(get(:index)).to render_template("alchemy/no_index")
3734
end
3835
end
3936

@@ -57,10 +54,8 @@ module Alchemy
5754
create(:alchemy_page, :language_root, public_on: nil, language: default_language, name: "Home")
5855
end
5956

60-
it "raises routing error (404)" do
61-
expect {
62-
get :index
63-
}.to raise_error(ActionController::RoutingError)
57+
it "returns a no_index page" do
58+
expect(get(:index)).to render_template("alchemy/no_index")
6459
end
6560

6661
context "when a page layout callback is set" do
@@ -71,10 +66,8 @@ module Alchemy
7166
end
7267
end
7368

74-
it 'raises routing error (404) and no "undefined method for nil" error' do
75-
expect {
76-
get :index
77-
}.to raise_error(ActionController::RoutingError)
69+
it 'does not raise "undefined method for nil" error' do
70+
expect { get :index }.to_not raise_error
7871
end
7972
end
8073
end

0 commit comments

Comments
 (0)