Skip to content

Commit 16dec03

Browse files
committed
Add base page service
Add an abstract page service and a corresponding page_layout. The service is used to make the initialization of page services easier and less error prone.
1 parent 5db26ef commit 16dec03

5 files changed

Lines changed: 34 additions & 3 deletions

File tree

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# frozen_string_literal: true
2+
3+
module Alchemy
4+
class BasePageService
5+
attr_reader :page, :params, :preview_mode
6+
7+
def initialize(page, params: ActionController::Parameters.new, preview_mode: false)
8+
@page = page
9+
@params = params
10+
@preview_mode = preview_mode
11+
end
12+
13+
# entrypoint method of the page service
14+
# It can initialize and load necessary data or raise an Alchemy::PageNotFound error
15+
def call
16+
raise NotImplementedError
17+
end
18+
end
19+
end
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# frozen_string_literal: true
2+
3+
class DummyPageService < Alchemy::BasePageService
4+
def call
5+
end
6+
end

spec/dummy/config/alchemy/page_layouts.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,5 +59,9 @@
5959
- menu
6060
layoutpage: true
6161

62+
- name: with_service
63+
service: DummyPageService
64+
elements: [article]
65+
6266
- name: <%= 'erb_' + 'layout' %>
6367
unique: true

spec/libraries/alchemy/tasks/usage_spec.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@
6161
{"page_layout" => "footer", "count" => 0},
6262
{"page_layout" => "news", "count" => 0},
6363
{"page_layout" => "readonly", "count" => 0},
64-
{"page_layout" => "search", "count" => 0}
64+
{"page_layout" => "search", "count" => 0},
65+
{"page_layout" => "with_service", "count" => 0}
6566
]
6667
end
6768
end

spec/models/alchemy/site_spec.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ module Alchemy
170170

171171
it "returns all non 'layoutpage' page layout names" do
172172
allow(Site).to receive(:definitions).and_return([])
173-
expect(site.page_layout_names).to eq(%w[index readonly standard everything news search contact erb_layout])
173+
expect(site.page_layout_names).to eq(%w[index readonly standard everything news search contact with_service erb_layout])
174174
end
175175

176176
context "when layoutpages are requested" do
@@ -211,7 +211,8 @@ module Alchemy
211211
"contact",
212212
"footer",
213213
"erb_layout",
214-
"search"
214+
"search",
215+
"with_service"
215216
])
216217
end
217218
end

0 commit comments

Comments
 (0)