alchemy-json_api 0.1.0

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