alchemy-json_api 0.13.0 → 0.14.0
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/app/controllers/alchemy/json_api/admin/layout_pages_controller.rb +2 -2
- data/app/controllers/alchemy/json_api/admin/pages_controller.rb +2 -6
- data/app/controllers/alchemy/json_api/pages_controller.rb +14 -6
- data/app/models/alchemy/json_api/page.rb +11 -4
- data/app/serializers/alchemy/json_api/essence_richtext_serializer.rb +1 -0
- data/app/serializers/alchemy/json_api/page_serializer.rb +6 -0
- data/lib/alchemy/json_api/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 00a9cfebbdb1f42b95a9b199bb23b5690ba65ff21b14a95e260beff9dafe1d1e
|
4
|
+
data.tar.gz: 0ce06ce3e137b56e40f5c8c08d895eb5f2eca7cc0936ed07c07cc2d6352530e5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 87723e7055f3968a0a1d75b6d133e2fc0a3a8efeb5b61e222771e91c673e9313052a3e154280a01c2beaa9f49144c90da9ecb6d05282987943ea2e9d06b0de7b
|
7
|
+
data.tar.gz: c2694da5d297f1acbbb16ed9a59858e5c84504091d430e82019e77aaae14549cb9b6e4d59ceee0a38b03e37f98162ea4881d2518e387b074cdd02e3c38bf8a1b
|
@@ -2,11 +2,11 @@
|
|
2
2
|
module Alchemy
|
3
3
|
module JsonApi
|
4
4
|
module Admin
|
5
|
-
class LayoutPagesController < PagesController
|
5
|
+
class LayoutPagesController < JsonApi::Admin::PagesController
|
6
6
|
private
|
7
7
|
|
8
8
|
def page_scope
|
9
|
-
page_scope_with_includes
|
9
|
+
page_scope_with_includes.layoutpages
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -5,14 +5,10 @@ module Alchemy
|
|
5
5
|
class PagesController < JsonApi::PagesController
|
6
6
|
prepend_before_action { authorize! :edit_content, Alchemy::Page }
|
7
7
|
|
8
|
-
def show
|
9
|
-
render jsonapi: Alchemy::JsonApi::Page.new(@page, page_version: :draft_version)
|
10
|
-
end
|
11
|
-
|
12
8
|
private
|
13
9
|
|
14
|
-
def
|
15
|
-
|
10
|
+
def page_version_type
|
11
|
+
:draft_version
|
16
12
|
end
|
17
13
|
end
|
18
14
|
end
|
@@ -10,7 +10,7 @@ module Alchemy
|
|
10
10
|
|
11
11
|
jsonapi_filter(page_scope, allowed) do |filtered|
|
12
12
|
# decorate with our page model that has a eager loaded elements collection
|
13
|
-
pages = filtered.result.map { |
|
13
|
+
pages = filtered.result.map { |page| api_page(page) }
|
14
14
|
jsonapi_paginate(pages) do |paginated|
|
15
15
|
render jsonapi: paginated
|
16
16
|
end
|
@@ -18,7 +18,7 @@ module Alchemy
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def show
|
21
|
-
render jsonapi:
|
21
|
+
render jsonapi: api_page(@page)
|
22
22
|
end
|
23
23
|
|
24
24
|
private
|
@@ -49,7 +49,7 @@ module Alchemy
|
|
49
49
|
page_scope_with_includes.contentpages
|
50
50
|
end
|
51
51
|
|
52
|
-
def page_scope_with_includes
|
52
|
+
def page_scope_with_includes
|
53
53
|
base_page_scope.
|
54
54
|
where(language: Language.current).
|
55
55
|
includes(
|
@@ -57,7 +57,7 @@ module Alchemy
|
|
57
57
|
:legacy_urls,
|
58
58
|
{ language: { nodes: [:parent, :children, { page: { language: { site: :languages } } }] } },
|
59
59
|
{
|
60
|
-
|
60
|
+
page_version_type => {
|
61
61
|
elements: [
|
62
62
|
:nested_elements,
|
63
63
|
{ contents: { essence: :ingredient_association } },
|
@@ -68,12 +68,20 @@ module Alchemy
|
|
68
68
|
)
|
69
69
|
end
|
70
70
|
|
71
|
+
def page_version_type
|
72
|
+
:public_version
|
73
|
+
end
|
74
|
+
|
75
|
+
def api_page(page)
|
76
|
+
Alchemy::JsonApi::Page.new(page, page_version_type: page_version_type)
|
77
|
+
end
|
78
|
+
|
71
79
|
def base_page_scope
|
72
80
|
# cancancan is not able to merge our complex AR scopes for logged in users
|
73
81
|
if can?(:edit_content, ::Alchemy::Page)
|
74
|
-
Alchemy::Page.all
|
82
|
+
Alchemy::Page.all.joins(page_version_type)
|
75
83
|
else
|
76
|
-
Alchemy::Page.published
|
84
|
+
Alchemy::Page.published.joins(page_version_type)
|
77
85
|
end
|
78
86
|
end
|
79
87
|
|
@@ -1,8 +1,11 @@
|
|
1
1
|
module Alchemy
|
2
2
|
module JsonApi
|
3
3
|
class Page < SimpleDelegator
|
4
|
-
|
5
|
-
|
4
|
+
attr_reader :page_version_type, :page_version
|
5
|
+
|
6
|
+
def initialize(page, page_version_type: :public_version)
|
7
|
+
@page_version_type = page_version_type
|
8
|
+
@page_version = page.public_send(page_version_type)
|
6
9
|
super(page)
|
7
10
|
end
|
8
11
|
|
@@ -33,13 +36,17 @@ module Alchemy
|
|
33
36
|
@_fixed_element_ids ||= fixed_elements.map(&:id)
|
34
37
|
end
|
35
38
|
|
39
|
+
def ancestor_ids
|
40
|
+
@_ancestor_ids ||= ancestors.map(&:id)
|
41
|
+
end
|
42
|
+
|
36
43
|
private
|
37
44
|
|
38
45
|
def element_repository
|
39
|
-
return Alchemy::ElementsRepository.none unless
|
46
|
+
return Alchemy::ElementsRepository.none unless page_version
|
40
47
|
|
41
48
|
# Need to use select here, otherwise rails would not eager load the elements correctly
|
42
|
-
Alchemy::ElementsRepository.new(
|
49
|
+
Alchemy::ElementsRepository.new(page_version.elements.select(&:public))
|
43
50
|
end
|
44
51
|
end
|
45
52
|
end
|
@@ -24,6 +24,12 @@ module Alchemy
|
|
24
24
|
|
25
25
|
belongs_to :language, record_type: :language, serializer: ::Alchemy::JsonApi::LanguageSerializer
|
26
26
|
|
27
|
+
has_many :ancestors, record_type: :page, serializer: self do |page|
|
28
|
+
page.ancestors.map do |ancestor|
|
29
|
+
Alchemy::JsonApi::Page.new(ancestor, page_version_type: page.page_version_type)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
27
33
|
# All public elements of this page regardless of if they are fixed or nested.
|
28
34
|
# Used for eager loading and should be used as the +include+ parameter of your query
|
29
35
|
has_many :all_elements, record_type: :element, serializer: ELEMENT_SERIALIZER
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alchemy-json_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Meyerhoff
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-04-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: alchemy_cms
|
@@ -156,7 +156,7 @@ homepage: https://github.com/AlchemyCMS/alchemy-json_api
|
|
156
156
|
licenses:
|
157
157
|
- MIT
|
158
158
|
metadata: {}
|
159
|
-
post_install_message:
|
159
|
+
post_install_message:
|
160
160
|
rdoc_options: []
|
161
161
|
require_paths:
|
162
162
|
- lib
|
@@ -171,8 +171,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
171
171
|
- !ruby/object:Gem::Version
|
172
172
|
version: '0'
|
173
173
|
requirements: []
|
174
|
-
rubygems_version: 3.1.
|
175
|
-
signing_key:
|
174
|
+
rubygems_version: 3.1.6
|
175
|
+
signing_key:
|
176
176
|
specification_version: 4
|
177
177
|
summary: A JSONAPI compliant API for AlchemyCMS
|
178
178
|
test_files: []
|