alchemy-json_api 1.2.0 → 2.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d436e84cb2932c71c9974bc75433118852c186814c96f21114b3c6c6b390810f
4
- data.tar.gz: 4ea8ca6841fe3845c6e68fa4956c3c730de0040f2a9ced1c24e9081d17e8a80a
3
+ metadata.gz: e4da501de3e83d19a9226ed5cba95c5ee4026c0931997070daaa55aabc4357c3
4
+ data.tar.gz: 7a4c15a0d2186d2a3b62badf8817ccc2f16ffc4bd8fcea8dc2b88adfc2099b16
5
5
  SHA512:
6
- metadata.gz: af4117975a7904c5625818a0e0f8bc569e4bf3e1c9ca03a4bf4886b064903486f21d1eb3be20eb03fc1612307889f42c66bcc82b4a4404dd56a7d8b0a3ae12fc
7
- data.tar.gz: a1ecca618f3edac7de63242bdfb084eb4dcbe877df31ac5b1ebea666382391c91e4c762b96303743f41d75d011957d0ce1f0c2bf64140aebbe66cef3bd55146c
6
+ metadata.gz: 19a29387ac8c5e087bb1ad8f04e162af62c4f0c05f6481d3579fa0b415dca569517c7a3e5a763c17aff0d3f6fe0cb1bda913156b7be3b51900724af3f713516a
7
+ data.tar.gz: 7800110a1df4d98a6e96184420316be08ba8c43a25690ce6f6a29f29191505055f344cf0f80523e06221796a344f4b58bd4a1da169fc1dc2da4a384ef3085817
@@ -6,7 +6,7 @@ module Alchemy
6
6
  before_action :load_page_for_cache_key, only: :show
7
7
 
8
8
  def index
9
- allowed = [:page_layout, :urlname]
9
+ allowed = Alchemy::Page.ransackable_attributes
10
10
 
11
11
  jsonapi_filter(page_scope, allowed) do |filtered_pages|
12
12
  @pages = filtered_pages.result
@@ -79,6 +79,7 @@ module Alchemy
79
79
 
80
80
  def load_page_by_id
81
81
  return unless params[:path] =~ /\A\d+\z/
82
+
82
83
  page_scope_with_includes.find_by(id: params[:path])
83
84
  end
84
85
 
@@ -100,12 +101,11 @@ module Alchemy
100
101
  page_version_type => {
101
102
  elements: [
102
103
  :nested_elements,
103
- { contents: { essence: :ingredient_association } },
104
104
  { ingredients: :related_object },
105
105
  ],
106
106
  },
107
107
  },
108
- ]
108
+ ],
109
109
  )
110
110
  end
111
111
 
@@ -1,4 +1,10 @@
1
1
  module Alchemy
2
+ # With Ransack 4 we need to define the attributes
3
+ # that are allowed to be searched.
4
+ def Page.ransackable_attributes(_auth_object = nil)
5
+ super | %w[page_layout]
6
+ end
7
+
2
8
  module JsonApi
3
9
  class Page < SimpleDelegator
4
10
  attr_reader :page_version_type, :page_version
@@ -16,10 +16,6 @@ module Alchemy
16
16
  !!element.definition[:deprecated]
17
17
  end
18
18
 
19
- has_many :essences, polymorphic: true do |element|
20
- element.contents.map(&:essence)
21
- end
22
-
23
19
  has_many :ingredients,
24
20
  serializer: ->(record) do
25
21
  "Alchemy::JsonApi::Ingredient#{record.type.demodulize}Serializer".constantize
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  module Alchemy
3
3
  module JsonApi
4
- VERSION = "1.2.0"
4
+ VERSION = "2.0.1"
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alchemy-json_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Meyerhoff
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-01-20 00:00:00.000000000 Z
12
+ date: 2023-07-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: alchemy_cms
@@ -17,20 +17,20 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: 6.0.0
20
+ version: 7.0.0.a
21
21
  - - "<"
22
22
  - !ruby/object:Gem::Version
23
- version: '7'
23
+ version: '8'
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
27
27
  requirements:
28
28
  - - ">="
29
29
  - !ruby/object:Gem::Version
30
- version: 6.0.0
30
+ version: 7.0.0.a
31
31
  - - "<"
32
32
  - !ruby/object:Gem::Version
33
- version: '7'
33
+ version: '8'
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: jsonapi.rb
36
36
  requirement: !ruby/object:Gem::Requirement
@@ -134,20 +134,6 @@ files:
134
134
  - app/models/alchemy/json_api/page.rb
135
135
  - app/serializers/alchemy/json_api/base_serializer.rb
136
136
  - app/serializers/alchemy/json_api/element_serializer.rb
137
- - app/serializers/alchemy/json_api/essence_audio_serializer.rb
138
- - app/serializers/alchemy/json_api/essence_boolean_serializer.rb
139
- - app/serializers/alchemy/json_api/essence_date_serializer.rb
140
- - app/serializers/alchemy/json_api/essence_file_serializer.rb
141
- - app/serializers/alchemy/json_api/essence_headline_serializer.rb
142
- - app/serializers/alchemy/json_api/essence_html_serializer.rb
143
- - app/serializers/alchemy/json_api/essence_link_serializer.rb
144
- - app/serializers/alchemy/json_api/essence_node_serializer.rb
145
- - app/serializers/alchemy/json_api/essence_page_serializer.rb
146
- - app/serializers/alchemy/json_api/essence_picture_serializer.rb
147
- - app/serializers/alchemy/json_api/essence_richtext_serializer.rb
148
- - app/serializers/alchemy/json_api/essence_select_serializer.rb
149
- - app/serializers/alchemy/json_api/essence_text_serializer.rb
150
- - app/serializers/alchemy/json_api/essence_video_serializer.rb
151
137
  - app/serializers/alchemy/json_api/ingredient_audio_serializer.rb
152
138
  - app/serializers/alchemy/json_api/ingredient_boolean_serializer.rb
153
139
  - app/serializers/alchemy/json_api/ingredient_datetime_serializer.rb
@@ -193,7 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
193
179
  - !ruby/object:Gem::Version
194
180
  version: '0'
195
181
  requirements: []
196
- rubygems_version: 3.3.26
182
+ rubygems_version: 3.4.15
197
183
  signing_key:
198
184
  specification_version: 4
199
185
  summary: A JSONAPI compliant API for AlchemyCMS
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "alchemy/json_api/essence_serializer"
4
-
5
- module Alchemy
6
- module JsonApi
7
- class EssenceAudioSerializer < BaseSerializer
8
- include EssenceSerializer
9
-
10
- attributes(
11
- :autoplay,
12
- :controls,
13
- :muted,
14
- :loop,
15
- )
16
-
17
- attribute :ingredient do |essence|
18
- essence.attachment&.url
19
- end
20
-
21
- with_options if: ->(essence) { essence.attachment } do
22
- attribute :audio_name do |essence|
23
- essence.attachment.name
24
- end
25
-
26
- attribute :audio_file_name do |essence|
27
- essence.attachment.file_name
28
- end
29
-
30
- attribute :audio_mime_type do |essence|
31
- essence.attachment.file_mime_type
32
- end
33
-
34
- attribute :audio_file_size do |essence|
35
- essence.attachment.file_size
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
- require "alchemy/json_api/essence_serializer"
3
-
4
- module Alchemy
5
- module JsonApi
6
- class EssenceBooleanSerializer < BaseSerializer
7
- include EssenceSerializer
8
- end
9
- end
10
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
- require "alchemy/json_api/essence_serializer"
3
-
4
- module Alchemy
5
- module JsonApi
6
- class EssenceDateSerializer < BaseSerializer
7
- include EssenceSerializer
8
- end
9
- end
10
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
- require "alchemy/json_api/essence_serializer"
3
-
4
- module Alchemy
5
- module JsonApi
6
- class EssenceFileSerializer < BaseSerializer
7
- include EssenceSerializer
8
-
9
- attribute :link_title, &:title
10
-
11
- attribute :ingredient, &:attachment_url
12
-
13
- with_options if: proc { |essence| essence.attachment.present? } do
14
- attribute :attachment_name do |essence|
15
- essence.attachment.name
16
- end
17
-
18
- attribute :attachment_file_name do |essence|
19
- essence.attachment.file_name
20
- end
21
-
22
- attribute :attachment_mime_type do |essence|
23
- essence.attachment.file_mime_type
24
- end
25
-
26
- attribute :attachment_file_size do |essence|
27
- essence.attachment.file_size
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,13 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "alchemy/json_api/essence_serializer"
4
-
5
- module Alchemy
6
- module JsonApi
7
- class EssenceHeadlineSerializer < BaseSerializer
8
- include EssenceSerializer
9
-
10
- attributes :level, :size
11
- end
12
- end
13
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
- require "alchemy/json_api/essence_serializer"
3
-
4
- module Alchemy
5
- module JsonApi
6
- class EssenceHtmlSerializer < BaseSerializer
7
- include EssenceSerializer
8
- end
9
- end
10
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
- require "alchemy/json_api/essence_serializer"
3
-
4
- module Alchemy
5
- module JsonApi
6
- class EssenceLinkSerializer < BaseSerializer
7
- include EssenceSerializer
8
- attributes(
9
- :link_title,
10
- :link_target,
11
- )
12
- end
13
- end
14
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
- require "alchemy/json_api/essence_serializer"
3
-
4
- module Alchemy
5
- module JsonApi
6
- class EssenceNodeSerializer < BaseSerializer
7
- include EssenceSerializer
8
-
9
- attribute :ingredient do |essence|
10
- essence&.node&.name
11
- end
12
-
13
- belongs_to :node, record_type: :node, serializer: ::Alchemy::JsonApi::NodeSerializer
14
-
15
- with_options if: proc { |essence| essence.node.present? } do
16
- attribute :name do |essence|
17
- essence.node.name
18
- end
19
-
20
- attribute :link_url do |essence|
21
- essence.node.url
22
- end
23
-
24
- attribute :link_title do |essence|
25
- essence.node.title
26
- end
27
-
28
- attribute :link_nofollow do |essence|
29
- essence.node.nofollow
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
- require "alchemy/json_api/essence_serializer"
3
-
4
- module Alchemy
5
- module JsonApi
6
- class EssencePageSerializer < BaseSerializer
7
- include EssenceSerializer
8
-
9
- attribute :ingredient do |essence|
10
- essence.page&.url_path
11
- end
12
-
13
- attribute :page_name do |essence|
14
- essence.page&.name
15
- end
16
-
17
- attribute :page_url do |essence|
18
- essence.page&.url_path
19
- end
20
-
21
- has_one :page, record_type: :page, serializer: ::Alchemy::JsonApi::PageSerializer
22
- end
23
- end
24
- end
@@ -1,78 +0,0 @@
1
- # frozen_string_literal: true
2
- require "alchemy/json_api/essence_serializer"
3
-
4
- module Alchemy
5
- module JsonApi
6
- class EssencePictureSerializer < BaseSerializer
7
- include EssenceSerializer
8
-
9
- attributes(
10
- :title,
11
- :caption,
12
- :link_title,
13
- :link_target,
14
- )
15
- attribute :ingredient, &:picture_url
16
- attribute :alt_text, &:alt_tag
17
- attribute :link_url, &:link
18
-
19
- with_options if: proc { |essence| essence.picture.present? } do
20
- attribute :image_dimensions do |essence|
21
- sizes = essence.content.settings[:size]&.split("x", 2)&.map(&:to_i) || [
22
- essence.image_file_width,
23
- essence.image_file_height,
24
- ]
25
-
26
- ratio = essence.image_file_width.to_f / essence.image_file_height
27
- width = sizes[0].zero? ? sizes[1] * ratio : sizes[0]
28
- height = sizes[1].zero? ? sizes[0] / ratio : sizes[1]
29
-
30
- {
31
- width: width,
32
- height: height,
33
- }
34
- end
35
-
36
- attribute :srcset do |essence|
37
- essence.content.settings.fetch(:srcset, []).map do |src|
38
- case src
39
- when Hash
40
- url = essence.picture_url(src)
41
- size = src[:size]
42
- type = Mime::Type.lookup_by_extension(src[:format] || essence.picture.default_render_format)
43
- else
44
- url = essence.picture_url(size: src)
45
- size = src
46
- type = Mime::Type.lookup_by_extension(essence.picture.default_render_format)
47
- end
48
- width, height = size.split("x", 2)
49
-
50
- {
51
- url: url,
52
- desc: "#{width}w",
53
- width: width,
54
- height: height,
55
- type: type.to_s,
56
- }
57
- end
58
- end
59
-
60
- attribute :image_name do |essence|
61
- essence.picture.name
62
- end
63
-
64
- attribute :image_file_name do |essence|
65
- essence.picture.image_file_name
66
- end
67
-
68
- attribute :image_mime_type do |essence|
69
- "image/#{essence.picture.image_file_format}"
70
- end
71
-
72
- attribute :image_file_size do |essence|
73
- essence.picture.image_file_size
74
- end
75
- end
76
- end
77
- end
78
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
- require "alchemy/json_api/essence_serializer"
3
-
4
- module Alchemy
5
- module JsonApi
6
- class EssenceRichtextSerializer < BaseSerializer
7
- include EssenceSerializer
8
- attributes(
9
- :body,
10
- :sanitized_body,
11
- :stripped_body,
12
- )
13
- end
14
- end
15
- end
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
- require "alchemy/json_api/essence_serializer"
3
-
4
- module Alchemy
5
- module JsonApi
6
- class EssenceSelectSerializer < BaseSerializer
7
- include EssenceSerializer
8
- end
9
- end
10
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
- require "alchemy/json_api/essence_serializer"
3
-
4
- module Alchemy
5
- module JsonApi
6
- class EssenceTextSerializer < BaseSerializer
7
- include EssenceSerializer
8
- attributes(
9
- :body,
10
- :link_title,
11
- :link_target,
12
- )
13
- attribute :link_url, &:link
14
- end
15
- end
16
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "alchemy/json_api/essence_serializer"
4
-
5
- module Alchemy
6
- module JsonApi
7
- class EssenceVideoSerializer < BaseSerializer
8
- include EssenceSerializer
9
-
10
- attributes(
11
- :width,
12
- :height,
13
- :allow_fullscreen,
14
- :autoplay,
15
- :controls,
16
- :preload,
17
- )
18
-
19
- attribute :ingredient do |essence|
20
- essence.attachment&.url
21
- end
22
-
23
- with_options if: ->(essence) { essence.attachment } do
24
- attribute :video_name do |essence|
25
- essence.attachment.name
26
- end
27
-
28
- attribute :video_file_name do |essence|
29
- essence.attachment.file_name
30
- end
31
-
32
- attribute :video_mime_type do |essence|
33
- essence.attachment.file_mime_type
34
- end
35
-
36
- attribute :video_file_size do |essence|
37
- essence.attachment.file_size
38
- end
39
- end
40
- end
41
- end
42
- end