Refactor JSON API mime type registration [SCI-2687]

This commit is contained in:
Oleksii Kriuchykhin 2018-08-23 16:48:27 +02:00
parent 490376513b
commit 5488fc66fc
8 changed files with 18 additions and 14 deletions

View file

@ -5,12 +5,12 @@ module Api
class BaseController < ApiController
rescue_from ActionController::ParameterMissing do |e|
logger.error e.message
render json: {}, status: :bad_request
render jsonapi: {}, status: :bad_request
end
rescue_from ActiveRecord::RecordNotFound do |e|
logger.error e.message
render json: {}, status: :not_found
render jsonapi: {}, status: :not_found
end
end
end

View file

@ -9,18 +9,18 @@ module Api
def index
inventories =
@team.repositories.page(params[:page]).per(params[:page_size])
render json: inventories, each_serializer: InventorySerializer
render jsonapi: inventories, each_serializer: InventorySerializer
end
def show
render json: @inventory, serializer: InventorySerializer
render jsonapi: @inventory, serializer: InventorySerializer
end
private
def load_team
@team = Team.find(params.require(:team_id))
return render json: {}, status: :forbidden unless can_read_team?(@team)
return render jsonapi: {}, status: :forbidden unless can_read_team?(@team)
end
def load_inventory

View file

@ -15,7 +15,7 @@ module Api
repository_cells: Extends::REPOSITORY_SEARCH_INCLUDES
).page(params.dig(:page, :number))
.per(params.dig(:page, :size))
render json: items,
render jsonapi: items,
each_serializer: InventoryItemSerializer,
include: :inventory_cells
end
@ -43,7 +43,7 @@ module Api
else
item = @inventory.repository_rows.create!(attributes)
end
render json: item,
render jsonapi: item,
serializer: InventoryItemSerializer,
include: :inventory_cells,
status: :created
@ -53,7 +53,7 @@ module Api
def load_team
@team = Team.find(params.require(:team_id))
return render json: {}, status: :forbidden unless can_read_team?(@team)
return render jsonapi: {}, status: :forbidden unless can_read_team?(@team)
end
def load_inventory

View file

@ -5,18 +5,18 @@ module Api
def index
teams = current_user.teams.page(params[:page]).per(params[:page_size])
render json: teams, each_serializer: TeamSerializer
render jsonapi: teams, each_serializer: TeamSerializer
end
def show
render json: @team, serializer: TeamSerializer
render jsonapi: @team, serializer: TeamSerializer
end
private
def load_team
@team = Team.find(params.require(:id))
return render json: {}, status: :forbidden unless can_read_team?(@team)
return render jsonapi: {}, status: :forbidden unless can_read_team?(@team)
end
end
end

View file

@ -1,4 +1,6 @@
# frozen_string_literal: true
require 'active_model_serializers/register_jsonapi_renderer'
ActiveModelSerializers.config.adapter = :json_api
ActiveModelSerializers.config.key_transform = :unaltered

View file

@ -2,4 +2,3 @@
# Add new mime types for use in respond_to blocks:
# Mime::Type.register "text/richtext", :rtf
Mime::Type.register 'application/vnd.api+json', :json

View file

@ -545,7 +545,10 @@ Rails.application.routes.draw do
resources :teams, only: %i(index show) do
resources :inventories, only: %i(index show) do
get 'columns', to: 'inventory_columns#index'
resources :inventory_items, only: %i(index create), path: 'items'
resources :inventory_items,
only: %i(index create),
path: 'items',
as: :items
end
end
resources :users, only: %i(show) do

View file

@ -75,7 +75,7 @@ RSpec.describe 'Api::V1::InventoryItemsController', type: :request do
get api_v1_team_inventory_items_path(
team_id: @teams.first.id,
inventory_id: @teams.first.repositories.first.id
), params: { page_size: 100 }, headers: @valid_headers
), params: { page: { size: 100 } }, headers: @valid_headers
expect { hash_body = json }.not_to raise_exception
expect(hash_body[:data]).to match(
ActiveModelSerializers::SerializableResource