alchemy-json_api 0.2.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cf27f9f29046c7ad0e2d417d3c9cca5e0d58d59c7bc729119d76f37adeaa4b28
4
- data.tar.gz: 697deefd22185ca5df6811f9687129e34c33e445feacae02f71fd045f5e96830
3
+ metadata.gz: 117c65c9f829b02d27cc3bc000c9a9f796816c4c7d5a99fb191752d3f0a4c6d2
4
+ data.tar.gz: 1a51fb6c7d8ed4987c2393f37acbf6f4d601ffa4e2c11a9a0af415624c17e938
5
5
  SHA512:
6
- metadata.gz: 9d6fc09988a259d084f4e34440985dbe85122c191342bf7b4b722b559f1e3d9500ffd7ab3e6e4c32748a946305ca5b96fc0ff13fcb9236d73626b57116e8bf70
7
- data.tar.gz: 139fc4a4b1e17957dd1cddad50a6f26601e773adb5b83b41a0fb2234cddc58d6f9aa24f24000f00607fa64cee0d3e7304105f396204c9c72fcd50c500e1d3460
6
+ metadata.gz: 448e55aac748eda835d9341b784e28907fa5159251974ff1a2cf12d365a7f1cdcd892d8565ef4c1fcdc0fa74ab27de0273e20d7fbf1dc0955f7009fd7f73c8c2
7
+ data.tar.gz: d6ede97400574f3e02aac76adb72923dc5aae7f1979dea08302d59d2c8ec6aa2500d972b26cf39daec98deb10f1ce8e2811f2b09060939260faa4f26a4e8992e
data/Rakefile CHANGED
@@ -26,3 +26,11 @@ task :test_setup do
26
26
  exit($?.exitstatus) unless $?.success?
27
27
  end
28
28
  end
29
+
30
+ require "github_changelog_generator/task"
31
+ require "alchemy/json_api/version"
32
+ GitHubChangelogGenerator::RakeTask.new(:changelog) do |config|
33
+ config.user = "AlchemyCMS"
34
+ config.project = "alchemy-json_api"
35
+ config.future_release = "v#{Alchemy::JsonApi::VERSION}"
36
+ end
@@ -7,6 +7,23 @@ module Alchemy
7
7
  include JSONAPI::Errors
8
8
  include JSONAPI::Filtering
9
9
  include JSONAPI::Pagination
10
+
11
+ private
12
+
13
+ def render_jsonapi_internal_server_error(exception)
14
+ log_error(exception)
15
+ super
16
+ end
17
+
18
+ def log_error(exception)
19
+ logger = Rails.logger
20
+ return unless logger
21
+
22
+ message = +"\n#{exception.class} (#{exception.message}):\n"
23
+ message << exception.annotated_source_code.to_s if exception.respond_to?(:annotated_source_code)
24
+ message << " " << exception.backtrace.join("\n ")
25
+ logger.fatal("#{message}\n\n")
26
+ end
10
27
  end
11
28
  end
12
29
  end
@@ -34,12 +34,11 @@ module Alchemy
34
34
  end
35
35
 
36
36
  def load_page_by_id
37
- page_scope.find_by(id: params[:id])
37
+ page_scope.find_by(id: params[:path])
38
38
  end
39
39
 
40
40
  def load_page_by_urlname
41
- # The route param is called :id although it might be a string
42
- page_scope.find_by(urlname: params[:id])
41
+ page_scope.find_by(urlname: params[:path])
43
42
  end
44
43
 
45
44
  def page_scope
@@ -1,25 +1,28 @@
1
1
  # frozen_string_literal: true
2
- module Alchemy::JsonApi
3
- class ElementSerializer
4
- include FastJsonapi::ObjectSerializer
5
- attributes(
6
- :position,
7
- :created_at,
8
- :updated_at,
9
- )
10
- attribute :element_type, &:name
11
- belongs_to :parent_element, record_type: :element, serializer: self
2
+ module Alchemy
3
+ module JsonApi
4
+ class ElementSerializer
5
+ include FastJsonapi::ObjectSerializer
6
+ attributes(
7
+ :name,
8
+ :fixed,
9
+ :position,
10
+ :created_at,
11
+ :updated_at,
12
+ )
13
+ belongs_to :parent_element, record_type: :element, serializer: self
12
14
 
13
- belongs_to :page
14
- has_many :essences, polymorphic: true do |element|
15
- element.contents.map(&:essence)
16
- end
15
+ belongs_to :page
16
+ has_many :essences, polymorphic: true do |element|
17
+ element.contents.map(&:essence)
18
+ end
17
19
 
18
- has_many :nested_elements, record_type: :element, serializer: self
20
+ has_many :nested_elements, record_type: :element, serializer: self
19
21
 
20
- with_options if: ->(_, params) { params[:admin] == true } do
21
- attribute :tag_list
22
- attribute :display_name, &:display_name_with_preview_text
22
+ with_options if: ->(_, params) { params[:admin] == true } do
23
+ attribute :tag_list
24
+ attribute :display_name, &:display_name_with_preview_text
25
+ end
23
26
  end
24
27
  end
25
28
  end
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
  require "alchemy/json_api/essence_serializer"
3
3
 
4
- module Alchemy::JsonApi
5
- class EssenceBooleanSerializer
6
- include EssenceSerializer
4
+ module Alchemy
5
+ module JsonApi
6
+ class EssenceBooleanSerializer
7
+ include EssenceSerializer
8
+ end
7
9
  end
8
10
  end
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
  require "alchemy/json_api/essence_serializer"
3
3
 
4
- module Alchemy::JsonApi
5
- class EssenceDateSerializer
6
- include EssenceSerializer
4
+ module Alchemy
5
+ module JsonApi
6
+ class EssenceDateSerializer
7
+ include EssenceSerializer
8
+ end
7
9
  end
8
10
  end
@@ -1,30 +1,31 @@
1
1
  # frozen_string_literal: true
2
2
  require "alchemy/json_api/essence_serializer"
3
- require "alchemy/json_api/link_helper"
4
3
 
5
- module Alchemy::JsonApi
6
- class EssenceFileSerializer
7
- include EssenceSerializer
4
+ module Alchemy
5
+ module JsonApi
6
+ class EssenceFileSerializer
7
+ include EssenceSerializer
8
8
 
9
- attribute :link_title, &:title
9
+ attribute :link_title, &:title
10
10
 
11
- attribute :ingredient, &:attachment_url
11
+ attribute :ingredient, &:attachment_url
12
12
 
13
- with_options if: proc { |essence| essence.attachment.present? } do
14
- attribute :attachment_name do |essence|
15
- essence.attachment.name
16
- end
13
+ with_options if: proc { |essence| essence.attachment.present? } do
14
+ attribute :attachment_name do |essence|
15
+ essence.attachment.name
16
+ end
17
17
 
18
- attribute :attachment_file_name do |essence|
19
- essence.attachment.file_name
20
- end
18
+ attribute :attachment_file_name do |essence|
19
+ essence.attachment.file_name
20
+ end
21
21
 
22
- attribute :attachment_mime_type do |essence|
23
- essence.attachment.file_mime_type
24
- end
22
+ attribute :attachment_mime_type do |essence|
23
+ essence.attachment.file_mime_type
24
+ end
25
25
 
26
- attribute :attachment_file_size do |essence|
27
- essence.attachment.file_size
26
+ attribute :attachment_file_size do |essence|
27
+ essence.attachment.file_size
28
+ end
28
29
  end
29
30
  end
30
31
  end
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
  require "alchemy/json_api/essence_serializer"
3
3
 
4
- module Alchemy::JsonApi
5
- class EssenceHtmlSerializer
6
- include EssenceSerializer
4
+ module Alchemy
5
+ module JsonApi
6
+ class EssenceHtmlSerializer
7
+ include EssenceSerializer
8
+ end
7
9
  end
8
10
  end
@@ -1,12 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
  require "alchemy/json_api/essence_serializer"
3
3
 
4
- module Alchemy::JsonApi
5
- class EssenceLinkSerializer
6
- include EssenceSerializer
7
- attributes(
8
- :link_title,
9
- :link_target,
10
- )
4
+ module Alchemy
5
+ module JsonApi
6
+ class EssenceLinkSerializer
7
+ include EssenceSerializer
8
+ attributes(
9
+ :link_title,
10
+ :link_target,
11
+ )
12
+ end
11
13
  end
12
14
  end
@@ -1,32 +1,33 @@
1
1
  # frozen_string_literal: true
2
2
  require "alchemy/json_api/essence_serializer"
3
- require "alchemy/json_api/link_helper"
4
3
 
5
- module Alchemy::JsonApi
6
- class EssenceNodeSerializer
7
- include EssenceSerializer
4
+ module Alchemy
5
+ module JsonApi
6
+ class EssenceNodeSerializer
7
+ include EssenceSerializer
8
8
 
9
- attribute :ingredient do |essence|
10
- essence&.node&.name
11
- end
9
+ attribute :ingredient do |essence|
10
+ essence&.node&.name
11
+ end
12
12
 
13
- belongs_to :node
13
+ belongs_to :node
14
14
 
15
- with_options if: proc { |essence| essence.node.present? } do
16
- attribute :name do |essence|
17
- essence.node.name
18
- end
15
+ with_options if: proc { |essence| essence.node.present? } do
16
+ attribute :name do |essence|
17
+ essence.node.name
18
+ end
19
19
 
20
- attribute :link_url do |essence|
21
- essence.node.url
22
- end
20
+ attribute :link_url do |essence|
21
+ essence.node.url
22
+ end
23
23
 
24
- attribute :link_title do |essence|
25
- essence.node.title
26
- end
24
+ attribute :link_title do |essence|
25
+ essence.node.title
26
+ end
27
27
 
28
- attribute :link_nofollow do |essence|
29
- essence.node.nofollow
28
+ attribute :link_nofollow do |essence|
29
+ essence.node.nofollow
30
+ end
30
31
  end
31
32
  end
32
33
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+ require "alchemy/json_api/essence_serializer"
3
+
4
+ module Alchemy
5
+ module JsonApi
6
+ class EssencePageSerializer
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: PageSerializer
22
+ end
23
+ end
24
+ end
@@ -1,40 +1,41 @@
1
1
  # frozen_string_literal: true
2
2
  require "alchemy/json_api/essence_serializer"
3
- require "alchemy/json_api/link_helper"
4
3
 
5
- module Alchemy::JsonApi
6
- class EssencePictureSerializer
7
- include EssenceSerializer
4
+ module Alchemy
5
+ module JsonApi
6
+ class EssencePictureSerializer
7
+ include EssenceSerializer
8
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
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
18
 
19
- with_options if: proc { |essence| essence.picture.present? } do
20
- attribute :image_dimensions do |essence|
21
- essence.sizes_from_string(essence.render_size)
22
- end
19
+ with_options if: proc { |essence| essence.picture.present? } do
20
+ attribute :image_dimensions do |essence|
21
+ essence.sizes_from_string(essence.render_size)
22
+ end
23
23
 
24
- attribute :image_name do |essence|
25
- essence.picture.name
26
- end
24
+ attribute :image_name do |essence|
25
+ essence.picture.name
26
+ end
27
27
 
28
- attribute :image_file_name do |essence|
29
- essence.picture.image_file_name
30
- end
28
+ attribute :image_file_name do |essence|
29
+ essence.picture.image_file_name
30
+ end
31
31
 
32
- attribute :image_mime_type do |essence|
33
- "image/#{essence.picture.image_file_format}"
34
- end
32
+ attribute :image_mime_type do |essence|
33
+ "image/#{essence.picture.image_file_format}"
34
+ end
35
35
 
36
- attribute :image_file_size do |essence|
37
- essence.picture.image_file_size
36
+ attribute :image_file_size do |essence|
37
+ essence.picture.image_file_size
38
+ end
38
39
  end
39
40
  end
40
41
  end
@@ -1,12 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
  require "alchemy/json_api/essence_serializer"
3
3
 
4
- module Alchemy::JsonApi
5
- class EssenceRichtextSerializer
6
- include EssenceSerializer
7
- attributes(
8
- :body,
9
- :stripped_body,
10
- )
4
+ module Alchemy
5
+ module JsonApi
6
+ class EssenceRichtextSerializer
7
+ include EssenceSerializer
8
+ attributes(
9
+ :body,
10
+ :stripped_body,
11
+ )
12
+ end
11
13
  end
12
14
  end
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
  require "alchemy/json_api/essence_serializer"
3
3
 
4
- module Alchemy::JsonApi
5
- class EssenceSelectSerializer
6
- include EssenceSerializer
4
+ module Alchemy
5
+ module JsonApi
6
+ class EssenceSelectSerializer
7
+ include EssenceSerializer
8
+ end
7
9
  end
8
10
  end
@@ -1,14 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
  require "alchemy/json_api/essence_serializer"
3
3
 
4
- module Alchemy::JsonApi
5
- class EssenceTextSerializer
6
- include EssenceSerializer
7
- attributes(
8
- :body,
9
- :link_title,
10
- :link_target,
11
- )
12
- attribute :link_url, &:link
4
+ module Alchemy
5
+ module JsonApi
6
+ class EssenceTextSerializer
7
+ include EssenceSerializer
8
+ attributes(
9
+ :body,
10
+ :link_title,
11
+ :link_target,
12
+ )
13
+ attribute :link_url, &:link
14
+ end
13
15
  end
14
16
  end
@@ -18,6 +18,7 @@ module Alchemy
18
18
  belongs_to :language
19
19
 
20
20
  has_many :elements
21
+ has_many :fixed_elements, record_type: :element, serializer: ElementSerializer
21
22
 
22
23
  has_many :all_elements, record_type: :element, serializer: ElementSerializer do |page|
23
24
  page.all_elements.select { |e| e.public? && !e.trashed? }
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  Alchemy::JsonApi::Engine.routes.draw do
3
- resources :pages, only: [:show, :index]
4
- resources :layout_pages, only: [:show, :index]
3
+ resources :pages, only: [:index]
4
+ get "pages/*path" => "pages#show", as: :page
5
+ resources :layout_pages, only: [:index]
6
+ get "layout_pages/*path" => "layout_pages#show", as: :layout_page
5
7
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+ RSpec.shared_examples "an essence serializer" do
3
+ describe "attributes" do
4
+ subject { serializer.serializable_hash[:data][:attributes] }
5
+
6
+ it "has the right keys and values" do
7
+ expect(subject).to have_key(:ingredient)
8
+ end
9
+ end
10
+
11
+ describe "relationships" do
12
+ subject { serializer.serializable_hash[:data][:relationships] }
13
+
14
+ it "has the right keys and values" do
15
+ expect(subject[:element]).to eq(data: { id: essence.element.id.to_s, type: :element })
16
+ end
17
+ end
18
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  module Alchemy
3
3
  module JsonApi
4
- VERSION = "0.2.0"
4
+ VERSION = "0.7.0"
5
5
  end
6
6
  end
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.2.0
4
+ version: 0.7.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: 2020-09-15 00:00:00.000000000 Z
11
+ date: 2020-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: alchemy_cms
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: github_changelog_generator
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: jsonapi-rspec
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -114,6 +128,7 @@ files:
114
128
  - app/serializers/alchemy/json_api/essence_html_serializer.rb
115
129
  - app/serializers/alchemy/json_api/essence_link_serializer.rb
116
130
  - app/serializers/alchemy/json_api/essence_node_serializer.rb
131
+ - app/serializers/alchemy/json_api/essence_page_serializer.rb
117
132
  - app/serializers/alchemy/json_api/essence_picture_serializer.rb
118
133
  - app/serializers/alchemy/json_api/essence_richtext_serializer.rb
119
134
  - app/serializers/alchemy/json_api/essence_select_serializer.rb
@@ -125,14 +140,14 @@ files:
125
140
  - lib/alchemy/json_api.rb
126
141
  - lib/alchemy/json_api/engine.rb
127
142
  - lib/alchemy/json_api/essence_serializer.rb
128
- - lib/alchemy/json_api/link_helper.rb
143
+ - lib/alchemy/json_api/test_support/essence_serializer_behaviour.rb
129
144
  - lib/alchemy/json_api/version.rb
130
145
  - lib/tasks/alchemy/json_api_tasks.rake
131
146
  homepage: https://github.com/AlchemyCMS/alchemy-json_api
132
147
  licenses:
133
148
  - MIT
134
149
  metadata: {}
135
- post_install_message:
150
+ post_install_message:
136
151
  rdoc_options: []
137
152
  require_paths:
138
153
  - lib
@@ -147,8 +162,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
147
162
  - !ruby/object:Gem::Version
148
163
  version: '0'
149
164
  requirements: []
150
- rubygems_version: 3.0.3
151
- signing_key:
165
+ rubygems_version: 3.1.4
166
+ signing_key:
152
167
  specification_version: 4
153
168
  summary: A JSONAPI compliant API for AlchemyCMS
154
169
  test_files: []
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
- module Alchemy
3
- module JsonApi
4
- module LinkHelper
5
- def alchemy_link(path_base, object)
6
- return unless object
7
-
8
- if Rails.application.routes.default_url_options[:host]
9
- Alchemy::Engine.routes.url_helpers.public_send("#{path_base}_url", object)
10
- else
11
- Alchemy::Engine.routes.url_helpers.public_send("#{path_base}_path", object)
12
- end
13
- end
14
- end
15
- end
16
- end