alchemy-json_api 0.1.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.
Files changed (29) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +34 -0
  4. data/Rakefile +28 -0
  5. data/app/controllers/alchemy/json_api/base_controller.rb +11 -0
  6. data/app/controllers/alchemy/json_api/layout_pages_controller.rb +12 -0
  7. data/app/controllers/alchemy/json_api/pages_controller.rb +50 -0
  8. data/app/serializers/alchemy/json_api/element_serializer.rb +25 -0
  9. data/app/serializers/alchemy/json_api/essence_boolean_serializer.rb +8 -0
  10. data/app/serializers/alchemy/json_api/essence_date_serializer.rb +8 -0
  11. data/app/serializers/alchemy/json_api/essence_file_serializer.rb +31 -0
  12. data/app/serializers/alchemy/json_api/essence_html_serializer.rb +8 -0
  13. data/app/serializers/alchemy/json_api/essence_link_serializer.rb +12 -0
  14. data/app/serializers/alchemy/json_api/essence_node_serializer.rb +33 -0
  15. data/app/serializers/alchemy/json_api/essence_picture_serializer.rb +41 -0
  16. data/app/serializers/alchemy/json_api/essence_richtext_serializer.rb +12 -0
  17. data/app/serializers/alchemy/json_api/essence_select_serializer.rb +8 -0
  18. data/app/serializers/alchemy/json_api/essence_text_serializer.rb +14 -0
  19. data/app/serializers/alchemy/json_api/language_serializer.rb +28 -0
  20. data/app/serializers/alchemy/json_api/node_serializer.rb +17 -0
  21. data/app/serializers/alchemy/json_api/page_serializer.rb +32 -0
  22. data/config/routes.rb +5 -0
  23. data/lib/alchemy/json_api.rb +10 -0
  24. data/lib/alchemy/json_api/engine.rb +13 -0
  25. data/lib/alchemy/json_api/essence_serializer.rb +17 -0
  26. data/lib/alchemy/json_api/link_helper.rb +16 -0
  27. data/lib/alchemy/json_api/version.rb +6 -0
  28. data/lib/tasks/alchemy/json_api_tasks.rake +5 -0
  29. metadata +154 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 25ba34a50a58c59ff4aabb21089faee49c5ada8fbbf753a1515799845bea8213
4
+ data.tar.gz: 247cf1d183feda62cec526e9a7ceec96716ff1ed97589a473ba86193cfd54065
5
+ SHA512:
6
+ metadata.gz: 1facc4daccad62f6b80c8c7494c644621713ed048e8dcc8cfb55abdeb2b3fb115f519c835febd7ebb509b6dab3d9a0e43ea2837ed6aa71d863d7b6942de001ec
7
+ data.tar.gz: 57c7d49f5214edbc140303a7be3a4286b6649eff07905f3eba4fa74531e27444ab24b8976a983855d1a70adaf961a639c246f12a0737e269872213f454e402cc
@@ -0,0 +1,20 @@
1
+ Copyright 2020 Martin Meyerhoff
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,34 @@
1
+ # Alchemy::JsonApi
2
+
3
+ A JSON-API based API for AlchemyCMS
4
+
5
+ ## Usage
6
+
7
+ Mount the engine in your `config/routes.rb` file where you want, like this:
8
+
9
+ ```rb
10
+ mount Alchemy::JsonApi::Engine => "/jsonapi/"
11
+ ```
12
+
13
+ ## Installation
14
+ Add this line to your application's Gemfile:
15
+
16
+ ```ruby
17
+ gem 'alchemy-json_api'
18
+ ```
19
+
20
+ And then execute:
21
+ ```bash
22
+ $ bundle
23
+ ```
24
+
25
+ Or install it yourself as:
26
+ ```bash
27
+ $ gem install alchemy-json_api
28
+ ```
29
+
30
+ ## Contributing
31
+ Contribution directions go here.
32
+
33
+ ## License
34
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require "bundler/setup"
4
+ rescue LoadError
5
+ puts "You must `gem install bundler` and `bundle install` to run rake tasks"
6
+ end
7
+ Bundler::GemHelper.install_tasks
8
+
9
+ require "rspec/core"
10
+ require "rspec/core/rake_task"
11
+ RSpec::Core::RakeTask.new(:spec)
12
+
13
+ task default: [:test_setup, :spec]
14
+
15
+ require "active_support/core_ext/string"
16
+
17
+ desc "Setup test app"
18
+ task :test_setup do
19
+ Dir.chdir("spec/dummy") do
20
+ system <<-SETUP.strip_heredoc
21
+ export RAILS_ENV=test && \
22
+ bin/rake db:environment:set db:drop && \
23
+ bin/rake railties:install:migrations && \
24
+ bin/rake db:migrate
25
+ SETUP
26
+ exit($?.exitstatus) unless $?.success?
27
+ end
28
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+ module Alchemy
3
+ module JsonApi
4
+ class BaseController < ::ApplicationController
5
+ include Alchemy::ControllerActions
6
+ include JSONAPI::Fetching
7
+ include JSONAPI::Errors
8
+ include JSONAPI::Filtering
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+ module Alchemy
3
+ module JsonApi
4
+ class LayoutPagesController < JsonApi::PagesController
5
+ private
6
+
7
+ def page_scope
8
+ base_page_scope.layoutpages
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+ module Alchemy
3
+ module JsonApi
4
+ class PagesController < JsonApi::BaseController
5
+ before_action :load_page, only: :show
6
+
7
+ def index
8
+ allowed = [:page_layout]
9
+
10
+ jsonapi_filter(page_scope, allowed) do |filtered|
11
+ render jsonapi: filtered.result
12
+ end
13
+ end
14
+
15
+ def show
16
+ render jsonapi: @page
17
+ end
18
+
19
+ private
20
+
21
+ def load_page
22
+ @page = load_page_by_id || load_page_by_urlname || raise(ActiveRecord::RecordNotFound)
23
+ end
24
+
25
+ def load_page_by_id
26
+ page_scope.find_by(id: params[:id])
27
+ end
28
+
29
+ def load_page_by_urlname
30
+ # The route param is called :id although it might be a string
31
+ page_scope.find_by(urlname: params[:id])
32
+ end
33
+
34
+ def page_scope
35
+ base_page_scope.contentpages
36
+ end
37
+
38
+ def base_page_scope
39
+ ::Alchemy::Page.
40
+ with_language(Language.current).
41
+ published.
42
+ preload(language: {nodes: [:parent, :page]}, all_elements: [:parent_element, :nested_elements, { contents: { essence: :ingredient_association } }])
43
+ end
44
+
45
+ def jsonapi_serializer_class(_resource, _is_collection)
46
+ ::Alchemy::JsonApi::PageSerializer
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,25 @@
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
12
+
13
+ belongs_to :page
14
+ has_many :essences, polymorphic: true do |element|
15
+ element.contents.map(&:essence)
16
+ end
17
+
18
+ has_many :nested_elements, record_type: :element, serializer: self
19
+
20
+ with_options if: ->(_, params) { params[:admin] == true } do
21
+ attribute :tag_list
22
+ attribute :display_name, &:display_name_with_preview_text
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+ require "alchemy/json_api/essence_serializer"
3
+
4
+ module Alchemy::JsonApi
5
+ class EssenceBooleanSerializer
6
+ include EssenceSerializer
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+ require "alchemy/json_api/essence_serializer"
3
+
4
+ module Alchemy::JsonApi
5
+ class EssenceDateSerializer
6
+ include EssenceSerializer
7
+ end
8
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+ require "alchemy/json_api/essence_serializer"
3
+ require "alchemy/json_api/link_helper"
4
+
5
+ module Alchemy::JsonApi
6
+ class EssenceFileSerializer
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
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+ require "alchemy/json_api/essence_serializer"
3
+
4
+ module Alchemy::JsonApi
5
+ class EssenceHtmlSerializer
6
+ include EssenceSerializer
7
+ end
8
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+ require "alchemy/json_api/essence_serializer"
3
+
4
+ module Alchemy::JsonApi
5
+ class EssenceLinkSerializer
6
+ include EssenceSerializer
7
+ attributes(
8
+ :link_title,
9
+ :link_target,
10
+ )
11
+ end
12
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+ require "alchemy/json_api/essence_serializer"
3
+ require "alchemy/json_api/link_helper"
4
+
5
+ module Alchemy::JsonApi
6
+ class EssenceNodeSerializer
7
+ include EssenceSerializer
8
+
9
+ attribute :ingredient do |essence|
10
+ essence&.node&.name
11
+ end
12
+
13
+ belongs_to :node
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
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+ require "alchemy/json_api/essence_serializer"
3
+ require "alchemy/json_api/link_helper"
4
+
5
+ module Alchemy::JsonApi
6
+ class EssencePictureSerializer
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
+ essence.sizes_from_string(essence.render_size)
22
+ end
23
+
24
+ attribute :image_name do |essence|
25
+ essence.picture.name
26
+ end
27
+
28
+ attribute :image_file_name do |essence|
29
+ essence.picture.image_file_name
30
+ end
31
+
32
+ attribute :image_mime_type do |essence|
33
+ "image/#{essence.picture.image_file_format}"
34
+ end
35
+
36
+ attribute :image_file_size do |essence|
37
+ essence.picture.image_file_size
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+ require "alchemy/json_api/essence_serializer"
3
+
4
+ module Alchemy::JsonApi
5
+ class EssenceRichtextSerializer
6
+ include EssenceSerializer
7
+ attributes(
8
+ :body,
9
+ :stripped_body,
10
+ )
11
+ end
12
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+ require "alchemy/json_api/essence_serializer"
3
+
4
+ module Alchemy::JsonApi
5
+ class EssenceSelectSerializer
6
+ include EssenceSerializer
7
+ end
8
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+ require "alchemy/json_api/essence_serializer"
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
13
+ end
14
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+ module Alchemy
3
+ module JsonApi
4
+ class LanguageSerializer
5
+ include FastJsonapi::ObjectSerializer
6
+ attributes(
7
+ :name,
8
+ :language_code,
9
+ :country_code,
10
+ :locale,
11
+ )
12
+
13
+ has_many :menu_items, record_type: :node, serializer: NodeSerializer, object_method_name: :nodes, id_method_name: :node_ids
14
+
15
+ has_many :menus, record_type: :node, serializer: NodeSerializer do |language|
16
+ language.nodes.select { |n| n.parent.nil? }
17
+ end
18
+ has_many :pages
19
+ has_one :root_page, record_type: :page, serializer: PageSerializer
20
+
21
+ with_options if: ->(_, params) { params[:admin] == true } do
22
+ attribute :created_at
23
+ attribute :updated_at
24
+ attribute :public
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+ module Alchemy
3
+ module JsonApi
4
+ class NodeSerializer
5
+ include FastJsonapi::ObjectSerializer
6
+
7
+ attributes :name
8
+ attribute :link_url, &:url
9
+ attribute :link_title, &:title
10
+ attribute :link_nofollow, &:nofollow
11
+
12
+ belongs_to :parent, record_type: :node
13
+
14
+ has_many :children, record_type: :node, serializer: self
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+ module Alchemy
3
+ module JsonApi
4
+ class PageSerializer
5
+ include FastJsonapi::ObjectSerializer
6
+ attributes(
7
+ :name,
8
+ :urlname,
9
+ :page_layout,
10
+ :title,
11
+ :language_code,
12
+ :meta_keywords,
13
+ :meta_description,
14
+ :created_at,
15
+ :updated_at,
16
+ )
17
+
18
+ belongs_to :language
19
+
20
+ has_many :elements
21
+
22
+ has_many :all_elements, record_type: :element, serializer: ElementSerializer do |page|
23
+ page.all_elements.select { |e| e.public? && !e.trashed? }
24
+ end
25
+
26
+ with_options if: ->(_, params) { params[:admin] == true } do
27
+ attribute :tag_list
28
+ attribute :status
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ Alchemy::JsonApi::Engine.routes.draw do
3
+ resources :pages, only: [:show, :index]
4
+ resources :layout_pages, only: [:show, :index]
5
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+ require "fast_jsonapi"
3
+ require "alchemy_cms"
4
+ require "alchemy/json_api/engine"
5
+
6
+ module Alchemy
7
+ module JsonApi
8
+ # Your code goes here...
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+ require "jsonapi"
3
+
4
+ module Alchemy
5
+ module JsonApi
6
+ class Engine < ::Rails::Engine
7
+ isolate_namespace Alchemy::JsonApi
8
+ config.generators.api_only = true
9
+
10
+ JSONAPI::Rails.install!
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+ module Alchemy
3
+ module JsonApi
4
+ module EssenceSerializer
5
+ def self.included(klass)
6
+ klass.include FastJsonapi::ObjectSerializer
7
+ klass.has_one :element, record_type: :element, serializer: ElementSerializer do |essence|
8
+ essence.content.element
9
+ end
10
+ klass.attributes :ingredient
11
+ klass.attribute :role do |essence|
12
+ essence.content.name
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
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
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ module Alchemy
3
+ module JsonApi
4
+ VERSION = "0.1.0"
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+ # desc "Explaining what the task does"
3
+ # task :alchemy_json_api do
4
+ # # Task goes here
5
+ # end
metadata ADDED
@@ -0,0 +1,154 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: alchemy-json_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Martin Meyerhoff
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-05-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: alchemy_cms
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: fast_jsonapi
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.5'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: jsonapi.rb
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: factory_bot
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: jsonapi-rspec
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'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec-rails
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: A JSONAPI compliant API for AlchemyCMS
98
+ email:
99
+ - mamhoff@gmail.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - MIT-LICENSE
105
+ - README.md
106
+ - Rakefile
107
+ - app/controllers/alchemy/json_api/base_controller.rb
108
+ - app/controllers/alchemy/json_api/layout_pages_controller.rb
109
+ - app/controllers/alchemy/json_api/pages_controller.rb
110
+ - app/serializers/alchemy/json_api/element_serializer.rb
111
+ - app/serializers/alchemy/json_api/essence_boolean_serializer.rb
112
+ - app/serializers/alchemy/json_api/essence_date_serializer.rb
113
+ - app/serializers/alchemy/json_api/essence_file_serializer.rb
114
+ - app/serializers/alchemy/json_api/essence_html_serializer.rb
115
+ - app/serializers/alchemy/json_api/essence_link_serializer.rb
116
+ - app/serializers/alchemy/json_api/essence_node_serializer.rb
117
+ - app/serializers/alchemy/json_api/essence_picture_serializer.rb
118
+ - app/serializers/alchemy/json_api/essence_richtext_serializer.rb
119
+ - app/serializers/alchemy/json_api/essence_select_serializer.rb
120
+ - app/serializers/alchemy/json_api/essence_text_serializer.rb
121
+ - app/serializers/alchemy/json_api/language_serializer.rb
122
+ - app/serializers/alchemy/json_api/node_serializer.rb
123
+ - app/serializers/alchemy/json_api/page_serializer.rb
124
+ - config/routes.rb
125
+ - lib/alchemy/json_api.rb
126
+ - lib/alchemy/json_api/engine.rb
127
+ - lib/alchemy/json_api/essence_serializer.rb
128
+ - lib/alchemy/json_api/link_helper.rb
129
+ - lib/alchemy/json_api/version.rb
130
+ - lib/tasks/alchemy/json_api_tasks.rake
131
+ homepage: https://github.com/AlchemyCMS/alchemy-json_api
132
+ licenses:
133
+ - MIT
134
+ metadata: {}
135
+ post_install_message:
136
+ rdoc_options: []
137
+ require_paths:
138
+ - lib
139
+ required_ruby_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ required_rubygems_version: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ version: '0'
149
+ requirements: []
150
+ rubygems_version: 3.0.3
151
+ signing_key:
152
+ specification_version: 4
153
+ summary: A JSONAPI compliant API for AlchemyCMS
154
+ test_files: []