Skip to content

Commit 6b153db

Browse files
authored
Merge pull request #1 from jsonapi-suite/new_compliable
New compliable
2 parents 9649f26 + 1e47e65 commit 6b153db

20 files changed

+157
-71
lines changed

Gemfile

+6-4
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ source 'https://rubygems.org'
33
gem 'rails', '~> 5.0.0', '>= 5.0.0.1'
44
gem 'sqlite3'
55
gem 'puma', '~> 3.0'
6-
gem 'jsonapi_suite', '~> 0.1'
6+
gem 'jsonapi_suite', '~> 0.5'
7+
gem 'jsonapi-rails', '~> 0.1'
78
gem 'kaminari', '~> 0.17'
8-
gem 'active_model_serializers',
9-
git: 'https://github.com/richmolj/active_model_serializers.git',
10-
branch: 'include_data_if_sideloaded'
9+
10+
gem 'jsonapi-serializable',
11+
git: 'https://github.com/jsonapi-rb/jsonapi-serializable.git',
12+
branch: 'optim-1'
1113

1214
group :development, :test do
1315
gem 'pry'

Gemfile.lock

+32-26
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
GIT
2-
remote: https://github.com/richmolj/active_model_serializers.git
3-
revision: 8700ac6124b8685b979b4a03570f71d498a18d36
4-
branch: include_data_if_sideloaded
2+
remote: https://github.com/jsonapi-rb/jsonapi-serializable.git
3+
revision: c852bed5232c8853d62c188d4c796f2fc22b5b6c
4+
branch: optim-1
55
specs:
6-
active_model_serializers (0.10.2)
7-
actionpack (>= 4.1, < 6)
8-
activemodel (>= 4.1, < 6)
9-
jsonapi (~> 0.1.1.beta2)
6+
jsonapi-serializable (0.1.1)
7+
jsonapi-renderer (= 0.1.1)
108

119
GEM
1210
remote: https://rubygems.org/
@@ -34,6 +32,10 @@ GEM
3432
erubis (~> 2.7.0)
3533
rails-dom-testing (~> 2.0)
3634
rails-html-sanitizer (~> 1.0, >= 1.0.2)
35+
active_model_serializers (0.10.3)
36+
actionpack (>= 4.1, < 6)
37+
activemodel (>= 4.1, < 6)
38+
jsonapi (= 0.1.1.beta2)
3739
activejob (5.0.0.1)
3840
activesupport (= 5.0.0.1)
3941
globalid (>= 0.3.6)
@@ -60,31 +62,34 @@ GEM
6062
globalid (0.3.7)
6163
activesupport (>= 4.1.0)
6264
i18n (0.7.0)
63-
json (1.8.3)
65+
json (1.8.6)
6466
jsonapi (0.1.1.beta2)
6567
json (~> 1.8)
66-
jsonapi_ams_extensions (0.1.1)
67-
active_model_serializers (~> 0.10.x)
68-
jsonapi_compliable (0.3.5)
69-
active_model_serializers (~> 0.10)
70-
jsonapi (~> 0.1.1.beta2)
71-
jsonapi_ams_extensions (~> 0.1)
72-
rails (>= 4.1, < 6)
68+
jsonapi-deserializable (0.1.1)
69+
jsonapi-parser (= 0.1.1)
70+
jsonapi-parser (0.1.1)
71+
jsonapi-rails (0.1.1)
72+
jsonapi-rb (= 0.1.1)
73+
jsonapi-rb (0.1.1)
74+
jsonapi-deserializable (= 0.1.1)
75+
jsonapi-serializable (= 0.1.1)
76+
jsonapi-renderer (0.1.1)
77+
jsonapi_compliable (0.5.2)
78+
jsonapi-serializable (~> 0.1)
7379
jsonapi_errorable (0.1.1)
7480
active_model_serializers (~> 0.10)
7581
rails (>= 4.1, < 6)
76-
jsonapi_spec_helpers (0.2.1)
77-
jsonapi_suite (0.1.2)
78-
active_model_serializers (~> 0.10.x)
79-
jsonapi_ams_extensions (~> 0.1)
80-
jsonapi_compliable (~> 0.3)
82+
jsonapi_spec_helpers (0.2.3)
83+
jsonapi_suite (0.5.1)
84+
jsonapi (= 0.1.1.beta2)
85+
jsonapi_compliable (~> 0.5)
8186
jsonapi_errorable (~> 0.1)
8287
jsonapi_spec_helpers (~> 0.2)
8388
jsonapi_swagger_helpers (~> 0.1)
8489
nested_attribute_reassignable (~> 0.6)
8590
rails (>= 4.1, < 6)
8691
strong_resources (~> 0.1)
87-
jsonapi_swagger_helpers (0.1.2)
92+
jsonapi_swagger_helpers (0.1.5)
8893
swagger-blocks (~> 1.3)
8994
kaminari (0.17.0)
9095
actionpack (>= 3.0.0)
@@ -177,12 +182,12 @@ GEM
177182
activesupport (>= 4.0)
178183
sprockets (>= 3.0.0)
179184
sqlite3 (1.3.11)
180-
strong_resources (0.1.1)
185+
strong_resources (0.1.6)
181186
rails (>= 4.1, < 6.0)
182187
stronger_parameters (~> 2.6)
183188
stronger_parameters (2.6.0)
184189
actionpack (>= 3.2, < 5.1)
185-
swagger-blocks (1.3.4)
190+
swagger-blocks (1.4.0)
186191
thor (0.19.1)
187192
thread_safe (0.3.5)
188193
tzinfo (1.2.2)
@@ -195,9 +200,10 @@ PLATFORMS
195200
ruby
196201

197202
DEPENDENCIES
198-
active_model_serializers!
199203
database_cleaner (~> 1.5)
200-
jsonapi_suite (~> 0.1)
204+
jsonapi-rails (~> 0.1)
205+
jsonapi-serializable!
206+
jsonapi_suite (~> 0.5)
201207
kaminari (~> 0.17)
202208
listen (~> 3.0.5)
203209
pry
@@ -211,4 +217,4 @@ DEPENDENCIES
211217
tzinfo-data
212218

213219
BUNDLED WITH
214-
1.12.5
220+
1.13.6
+7-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
class DepartmentsController < ApplicationController
2-
jsonapi { }
2+
jsonapi resource: DepartmentResource
33

44
def index
55
departments = Department.all
6-
render_ams(departments)
6+
render_jsonapi(departments)
7+
end
8+
9+
def show
10+
scope = jsonapi_scope(Department.where(id: params[:id]))
11+
render_jsonapi(scope.resolve.first, scope: false)
712
end
813
end
+7-19
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,5 @@
11
class EmployeesController < ApplicationController
2-
jsonapi do
3-
allow_filter :name
4-
allow_filter :age
5-
6-
allow_filter :name_prefix do |scope, value|
7-
scope.where(["name LIKE ?", "#{value}%"])
8-
end
9-
10-
includes whitelist: {
11-
index: :department,
12-
show: { department: :goals }
13-
}
14-
end
2+
jsonapi resource: EmployeeResource
153

164
before_action :deserialize_jsonapi!, only: [:create, :update]
175

@@ -21,19 +9,19 @@ class EmployeesController < ApplicationController
219

2210
def index
2311
employees = Employee.all
24-
render_ams(employees)
12+
render_jsonapi(employees)
2513
end
2614

2715
def show
28-
employee = jsonapi_scope(Employee.all).find(params[:id])
29-
render_ams(employee)
16+
employee = jsonapi_scope(Employee.where(id: params[:id]))
17+
render_jsonapi(employee.resolve.first, scope: false)
3018
end
3119

3220
def create
3321
employee = Employee.new(strong_resource)
3422

3523
if employee.save
36-
render_ams(employee)
24+
render_jsonapi(employee, scope: false)
3725
else
3826
render_errors_for(employee)
3927
end
@@ -43,7 +31,7 @@ def update
4331
employee = Employee.find(params[:id])
4432

4533
if employee.update_attributes(strong_resource)
46-
render_ams(employee, scope: false)
34+
render_jsonapi(employee, scope: false)
4735
else
4836
render_errors_for(employee)
4937
end
@@ -52,6 +40,6 @@ def update
5240
def destroy
5341
employee = Employee.find(params[:id])
5442
employee.destroy
55-
render_ams(employee)
43+
render_jsonapi(employee, scope: false)
5644
end
5745
end

app/controllers/goals_controller.rb

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class GoalsController < ApplicationController
2+
jsonapi resource: GoalResource
3+
4+
def index
5+
departments = Goal.all
6+
render_jsonapi(departments)
7+
end
8+
9+
def show
10+
scope = jsonapi_scope(Goal.where(id: params[:id]))
11+
render_jsonapi(scope.resolve.first, scope: false)
12+
end
13+
end

app/resources/application_resource.rb

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class ApplicationResource < JsonapiCompliable::Resource
2+
use_adapter JsonapiCompliable::Adapters::ActiveRecord
3+
end

app/resources/department_resource.rb

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class DepartmentResource < ApplicationResource
2+
type :departments
3+
4+
allow_filter :id
5+
allow_filter :name
6+
7+
has_many :employees,
8+
foreign_key: :department_id,
9+
scope: -> { Employee.all },
10+
resource: EmployeeResource
11+
has_many :goals,
12+
foreign_key: :department_id,
13+
scope: -> { Goal.all },
14+
resource: GoalResource
15+
end

app/resources/employee_resource.rb

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class EmployeeResource < ApplicationResource
2+
type :employees
3+
4+
allow_filter :id
5+
allow_filter :department_id
6+
allow_filter :name
7+
allow_filter :age
8+
9+
allow_filter :name_prefix do |scope, value|
10+
scope.where(["name LIKE ?", "#{value}%"])
11+
end
12+
13+
belongs_to :department,
14+
scope: -> { Department.all },
15+
foreign_key: :department_id,
16+
resource: DepartmentResource
17+
end

app/resources/goal_resource.rb

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class GoalResource < ApplicationResource
2+
type :goals
3+
4+
allow_filter :department_id
5+
6+
belongs_to :department,
7+
scope: -> { Department.all },
8+
foreign_key: :department_id,
9+
resource: DepartmentResource
10+
end

app/serializers/application_serializer.rb

-3
This file was deleted.

app/serializers/department_serializer.rb

-6
This file was deleted.

app/serializers/employee_serializer.rb

-5
This file was deleted.

app/serializers/goal_serializer.rb

-5
This file was deleted.
+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class SerializableDepartment < JSONAPI::Serializable::Resource
2+
type 'departments'
3+
4+
attribute :name
5+
6+
has_many :employees do
7+
link :related do
8+
@url_helpers.employees_url(filter: { department_id: @object.id })
9+
end
10+
end
11+
12+
has_many :goals do
13+
link :related do
14+
@url_helpers.goals_url(filter: { department_id: @object.id })
15+
end
16+
end
17+
end
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class SerializableEmployee < JSONAPI::Serializable::Resource
2+
type 'employees'
3+
4+
attributes :name, :age, :created_at, :updated_at
5+
6+
belongs_to :department do
7+
link :related do
8+
@url_helpers.department_url(@object.department_id)
9+
end
10+
end
11+
end

app/serializers/serializable_goal.rb

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class SerializableGoal < JSONAPI::Serializable::Resource
2+
type 'goals'
3+
4+
attribute :description
5+
6+
belongs_to :department do
7+
link :related do
8+
@url_helpers.department_url(@object.department_id)
9+
end
10+
end
11+
end

config/environments/development.rb

+4
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,8 @@
4444
# Use an evented file watcher to asynchronously detect changes in source code,
4545
# routes, locales, etc. This feature depends on the listen gem.
4646
config.file_watcher = ActiveSupport::EventedFileUpdateChecker
47+
48+
routes.default_url_options = {
49+
host: 'localhost:3000'
50+
}
4751
end

config/initializers/jsonapi.rb

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
require 'jsonapi_compliable/adapters/active_record'

config/routes.rb

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
Rails.application.routes.draw do
22
scope path: '/api' do
33
resources :employees
4-
resources :departments, only: [:index]
4+
resources :departments, only: [:index, :show]
5+
resources :goals, only: [:index, :show]
56
end
67
end

spec/api/employees/destroy_spec.rb

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
delete "/api/employees/#{employee.id}"
99
}.to change { Employee.count }.from(1).to(0)
1010
expect(response.status).to eq(200)
11+
1112
assert_payload(:employee, employee, json_item)
1213
end
1314
end

0 commit comments

Comments
 (0)