mirror of
https://github.com/samsonjs/grape-active_model_serializers.git
synced 2026-04-27 14:57:43 +00:00
Merge pull request #40 from dblock/one-meta
Use env to pass AMS meta around.
This commit is contained in:
commit
f13d008506
4 changed files with 11 additions and 53 deletions
|
|
@ -36,8 +36,7 @@ module Grape
|
||||||
end
|
end
|
||||||
|
|
||||||
def render(resources, meta = {})
|
def render(resources, meta = {})
|
||||||
Formatter::ActiveModelSerializers.meta = meta[:meta]
|
env['ams_meta'] = meta
|
||||||
Formatter::ActiveModelSerializers.meta_key = meta[:meta_key]
|
|
||||||
resources
|
resources
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,34 +22,19 @@ module Grape
|
||||||
options[:scope] = endpoint unless options.key?(:scope)
|
options[:scope] = endpoint unless options.key?(:scope)
|
||||||
# ensure we have an root to fallback on
|
# ensure we have an root to fallback on
|
||||||
options[:resource_name] = default_root(endpoint) if resource.respond_to?(:to_ary)
|
options[:resource_name] = default_root(endpoint) if resource.respond_to?(:to_ary)
|
||||||
serializer.new(resource, options.merge(other_options))
|
serializer.new(resource, options.merge(other_options(env)))
|
||||||
end
|
end
|
||||||
|
|
||||||
def other_options
|
def other_options(env)
|
||||||
options = {}
|
options = {}
|
||||||
meta = Formatter::ActiveModelSerializers.meta.delete(:meta)
|
ams_meta = env['ams_meta'] || {}
|
||||||
meta_key = Formatter::ActiveModelSerializers.meta_key.delete(:meta_key)
|
meta = ams_meta.delete(:meta)
|
||||||
|
meta_key = ams_meta.delete(:meta_key)
|
||||||
options[:meta_key] = meta_key if meta && meta_key
|
options[:meta_key] = meta_key if meta && meta_key
|
||||||
options[meta_key || :meta] = meta if meta
|
options[meta_key || :meta] = meta if meta
|
||||||
options
|
options
|
||||||
end
|
end
|
||||||
|
|
||||||
def meta
|
|
||||||
@meta || {}
|
|
||||||
end
|
|
||||||
|
|
||||||
def meta=(value)
|
|
||||||
@meta = value ? { meta: value } : nil
|
|
||||||
end
|
|
||||||
|
|
||||||
def meta_key
|
|
||||||
@meta_key || {}
|
|
||||||
end
|
|
||||||
|
|
||||||
def meta_key=(key)
|
|
||||||
@meta_key = key ? { meta_key: key } : nil
|
|
||||||
end
|
|
||||||
|
|
||||||
def build_options_from_endpoint(endpoint)
|
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].reduce(:merge)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -20,20 +20,22 @@ describe 'Grape::EndpointExtension' do
|
||||||
let(:users) { [user, user] }
|
let(:users) { [user, user] }
|
||||||
|
|
||||||
describe '#render' do
|
describe '#render' do
|
||||||
|
before do
|
||||||
|
allow(subject).to receive(:env).and_return({})
|
||||||
|
end
|
||||||
it { should respond_to(:render) }
|
it { should respond_to(:render) }
|
||||||
let(:meta_content) { { total: 2 } }
|
let(:meta_content) { { total: 2 } }
|
||||||
let(:meta_full) { { meta: meta_content } }
|
let(:meta_full) { { meta: meta_content } }
|
||||||
context 'supplying meta' do
|
context 'supplying meta' do
|
||||||
it 'passes through the Resource and uses given meta settings' do
|
it 'passes through the Resource and uses given meta settings' do
|
||||||
expect(serializer).to receive(:meta=).with(meta_content)
|
allow(subject).to receive(:env).and_return(meta: meta_full)
|
||||||
expect(subject.render(users, meta_full)).to eq(users)
|
expect(subject.render(users, meta_full)).to eq(users)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
context 'supplying meta and key' do
|
context 'supplying meta and key' do
|
||||||
let(:meta_key) { { meta_key: :custom_key_name } }
|
let(:meta_key) { { meta_key: :custom_key_name } }
|
||||||
it 'passes through the Resource and uses given meta settings' do
|
it 'passes through the Resource and uses given meta settings' do
|
||||||
expect(serializer).to receive(:meta=).with(meta_content)
|
allow(subject).to receive(:env).and_return(meta: meta_full.merge(meta_key))
|
||||||
expect(serializer).to receive(:meta_key=).with(meta_key[:meta_key])
|
|
||||||
expect(subject.render(users, meta_full.merge(meta_key))).to eq(users)
|
expect(subject.render(users, meta_full.merge(meta_key))).to eq(users)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -3,34 +3,6 @@ require 'grape-active_model_serializers/formatter'
|
||||||
|
|
||||||
describe Grape::Formatter::ActiveModelSerializers do
|
describe Grape::Formatter::ActiveModelSerializers do
|
||||||
subject { Grape::Formatter::ActiveModelSerializers }
|
subject { Grape::Formatter::ActiveModelSerializers }
|
||||||
it { should respond_to(:meta) }
|
|
||||||
it { should respond_to(:meta=) }
|
|
||||||
it { should respond_to(:meta_key) }
|
|
||||||
it { should respond_to(:meta_key=) }
|
|
||||||
|
|
||||||
context '#meta' do
|
|
||||||
it 'will silently accept falsy input but return empty Hash' do
|
|
||||||
subject.meta = nil
|
|
||||||
expect(subject.meta).to eq({})
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'will wrap valid input in the meta: {} wrapper' do
|
|
||||||
subject.meta = { total: 2 }
|
|
||||||
expect(subject.meta).to eq(meta: { total: 2 })
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context '#meta_key' do
|
|
||||||
it 'will silently accept falsy input but return empty Hash' do
|
|
||||||
subject.meta_key = nil
|
|
||||||
expect(subject.meta_key).to eq({})
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'will wrap valid input in the meta_key: {} wrapper' do
|
|
||||||
subject.meta_key = :custom_key_name
|
|
||||||
expect(subject.meta_key).to eq(meta_key: :custom_key_name)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe '.fetch_serializer' do
|
describe '.fetch_serializer' do
|
||||||
let(:user) { User.new(first_name: 'John') }
|
let(:user) { User.new(first_name: 'John') }
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue