Skip to content

Commit

Permalink
Merge pull request #39 from jwkoelewijn/options_from_namespace
Browse files Browse the repository at this point in the history
Look for namespace and other options to configure serializers
  • Loading branch information
siong1987 committed Jan 22, 2015
2 parents f13d008 + 6b16d22 commit ca9c8fa
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 3 deletions.
2 changes: 1 addition & 1 deletion lib/grape-active_model_serializers/formatter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ def other_options(env)
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,
Expand Down
27 changes: 25 additions & 2 deletions spec/grape-active_model_serializers/formatter_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,32 @@
describe Grape::Formatter::ActiveModelSerializers do
subject { Grape::Formatter::ActiveModelSerializers }

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 } }
Expand All @@ -37,5 +56,9 @@ def endpoint.default_serializer_options
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

1 comment on commit ca9c8fa

@jwkoelewijn
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome, any chance on updating the gem as well?

Please sign in to comment.