alchemy-json_api 0.13.0 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|