Невозможно автоматически загрузить сериализатор с помощью Grape Gem
Я строю API с:
- Ruby 2.2
- Рельсы 4.2.6
- виноградная жемчужина 0.16.2
- active_model_serializers-gem 0.10.2
- grape-active_model_serializers-gem (1.4 от мастера)
Мои сериализаторы JSON работают хорошо, пока я не попытаюсь представить управление версиями API, как описано здесь: https://github.com/ruby-grape/grape-active_model_serializers
Неверсионный сериализатор:
class SignupSerializer < ActiveModel::Serializer
attributes :id, :comments, :pending
end
Версионный сериализатор:
module Mobile
module V1
class SignupSerializer < ActiveModel::Serializer
attributes :id, :comments, :pending
end
end
end
Сообщение об ошибке:
LoadError (Невозможно автоматически загрузить константу RegistrationSerializer, ожидается /Users/username/GitHub/AppName/app/serializers/mobile/v1/signup_serializer.rb для ее определения):
app/api/mobile/logger.rb:16: в block in call'
app/api/mobile/logger.rb:15:in
вызов'
Организация API:
base.rb:
require 'grape-swagger'
module Mobile
class Dispatch < Grape::API
mount Mobile::V1::Root
mount Mobile::V2::Root
format :json
route :any, '*path' do
Rack::Response.new({message: 'Not found'}.to_json, 404).finish
end
add_swagger_documentation
end
Base = Rack::Builder.new do
use Mobile::Logger
run Mobile::Dispatch
end
end
v1 / root.rb:
module Mobile
module V1
class Root < Dispatch
format :json
formatter :json, Grape::Formatter::ActiveModelSerializers
version 'v1'
default_error_formatter :json
content_type :json, 'application/json'
use ::WineBouncer::OAuth2
rescue_from :all do |e|
eclass = e.class.to_s
message = "OAuth error: #{e.to_s}" if eclass.match('WineBouncer::Errors')
status = case
when eclass.match('OAuthUnauthorizedError')
401
when eclass.match('OAuthForbiddenError')
403
when eclass.match('RecordNotFound'), e.message.match(/unable to find/i).present?
404
else
(e.respond_to? :status) && e.status || 500
end
opts = { error: "#{message || e.message}" }
opts[:trace] = e.backtrace[0,10] unless Rails.env.production?
Rack::Response.new(opts.to_json, status, {
'Content-Type' => "application/json",
'Access-Control-Allow-Origin' => '*',
'Access-Control-Request-Method' => '*',
}).finish
end
mount Mobile::V1::Me
mount Mobile::V1::Events
mount Mobile::V1::Signups
route :any, '*path' do
raise StandardError, 'Unable to find endpoint'
end
end
end
end
апи / v1 / signup.rb:
module Mobile
module V1
class Signups < Mobile::V1::Root
include Mobile::V1::Defaults
resource :signups, desc: 'Operations about the signups' do
desc "Returns list of signups"
oauth2 # This endpoint requires authentication
get '/' do
Signup.where(pending: false)
end
end
end
end
end
Есть идеи?
1 ответ
Сопровождающие драгоценные камни работают над обновлением для этой проблемы. Обновление можно скачать в репозиторий:
https://github.com/ruby-grape/grape-active_model_serializers/issues/55