mirror of
https://github.com/samsonjs/grape-active_model_serializers.git
synced 2026-03-25 08:45:55 +00:00
Look for namespace and other options to configure serializers
By default not all serializer options are considered (for instance the :root option, or the :each_serializer option). This potentially results in an incomplete configuration of the serializers used. Added 2 specs to test this when used as a single endpoint and when used within a namespace. At the moment it is fixed by plucking the correct settings in the .build_options_from_endpoint, but I could imagine that this is not exactly the right spot.
This commit is contained in:
parent
5bba714457
commit
906d772202
2 changed files with 26 additions and 3 deletions
|
|
@ -51,7 +51,7 @@ module Grape
|
|||
end
|
||||
|
||||
def build_options_from_endpoint(endpoint)
|
||||
[endpoint.default_serializer_options || {}, endpoint.namespace_options, endpoint.route_options].reduce(:merge)
|
||||
[endpoint.default_serializer_options || {}, endpoint.namespace_options, endpoint.route_options, endpoint.options, endpoint.options.fetch(:route_options)].reduce(:merge)
|
||||
end
|
||||
|
||||
# array root is the innermost namespace name ('space') if there is one,
|
||||
|
|
|
|||
|
|
@ -32,13 +32,32 @@ describe Grape::Formatter::ActiveModelSerializers do
|
|||
end
|
||||
end
|
||||
|
||||
describe 'serializer options from namespace' do
|
||||
let(:app){ Class.new(Grape::API) }
|
||||
|
||||
before do
|
||||
app.format :json
|
||||
app.formatter :json, Grape::Formatter::ActiveModelSerializers
|
||||
|
||||
app.namespace('space') do |ns|
|
||||
ns.get('/', root: false) do
|
||||
{ user: { first_name: 'JR', last_name: 'HE' } }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
it 'should read serializer options like "root"' do
|
||||
expect(described_class.build_options_from_endpoint(app.endpoints.first)).to include :root
|
||||
end
|
||||
end
|
||||
|
||||
describe '.fetch_serializer' do
|
||||
let(:user) { User.new(first_name: 'John') }
|
||||
|
||||
if Grape::Util.const_defined?('InheritableSetting')
|
||||
let(:endpoint) { Grape::Endpoint.new(Grape::Util::InheritableSetting.new, path: '/', method: 'foo') }
|
||||
let(:endpoint) { Grape::Endpoint.new(Grape::Util::InheritableSetting.new, path: '/', method: 'foo', root: false) }
|
||||
else
|
||||
let(:endpoint) { Grape::Endpoint.new({}, path: '/', method: 'foo') }
|
||||
let(:endpoint) { Grape::Endpoint.new({}, path: '/', method: 'foo', root: false) }
|
||||
end
|
||||
|
||||
let(:env) { { 'api.endpoint' => endpoint } }
|
||||
|
|
@ -65,5 +84,9 @@ describe Grape::Formatter::ActiveModelSerializers do
|
|||
expect(subject.instance_variable_get('@only')).to eq([:only])
|
||||
expect(subject.instance_variable_get('@except')).to eq([:except])
|
||||
end
|
||||
|
||||
it 'should read serializer options like "root"' do
|
||||
expect(described_class.build_options_from_endpoint(endpoint).keys).to include :root
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in a new issue