Skip to content

Commit 2503ce8

Browse files
committed
Merge pull request #947 from dabrorius/add_parameters_use_spec
Add missing parameters specs.
2 parents 7b2f9b5 + 34f9e9f commit 2503ce8

File tree

2 files changed

+78
-13
lines changed

2 files changed

+78
-13
lines changed

lib/grape/dsl/parameters.rb

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,27 @@ module DSL
55
module Parameters
66
extend ActiveSupport::Concern
77

8+
# Include reusable params rules among current.
9+
# You can define reusable params with helpers method.
10+
#
11+
# @example
12+
#
13+
# class API < Grape::API
14+
# helpers do
15+
# params :pagination do
16+
# optional :page, type: Integer
17+
# optional :per_page, type: Integer
18+
# end
19+
# end
20+
#
21+
# desc "Get collection"
22+
# params do
23+
# use :pagination
24+
# end
25+
# get do
26+
# Collection.page(params[:page]).per(params[:per_page])
27+
# end
28+
# end
829
def use(*names)
930
named_params = Grape::DSL::Configuration.stacked_hash_to_hash(@api.namespace_stackable(:named_params)) || {}
1031
options = names.last.is_a?(Hash) ? names.pop : {}
@@ -72,9 +93,7 @@ def all_or_none_of(*attrs)
7293
validates(attrs, all_or_none_of: true)
7394
end
7495

75-
def group(*attrs, &block)
76-
requires(*attrs, &block)
77-
end
96+
alias_method :group, :requires
7897

7998
def params(params)
8099
params = @parent.params(params) if @parent

spec/grape/dsl/parameters_spec.rb

Lines changed: 56 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ module DSL
55
module ParametersSpec
66
class Dummy
77
include Grape::DSL::Parameters
8+
attr_accessor :api, :element, :parent
89

910
def validate_attributes(*args)
1011
@validate_attributes = *args
@@ -41,16 +42,33 @@ def validates_reader
4142
describe Parameters do
4243
subject { ParametersSpec::Dummy.new }
4344

44-
xdescribe '#use' do
45-
it 'does some thing'
45+
describe '#use' do
46+
before { allow(subject.api).to receive(:namespace_stackable).with(:named_params) }
47+
let(:options) { { option: 'value' } }
48+
let(:named_params) { { params_group: proc {} } }
49+
50+
it 'calls processes associated with named params' do
51+
allow(Grape::DSL::Configuration).to receive(:stacked_hash_to_hash).and_return(named_params)
52+
expect(subject).to receive(:instance_exec).with(options).and_yield
53+
subject.use :params_group, options
54+
end
55+
56+
it 'raises error when non-existent named param is called' do
57+
allow(Grape::DSL::Configuration).to receive(:stacked_hash_to_hash).and_return({})
58+
expect { subject.use :params_group }.to raise_error('Params :params_group not found!')
59+
end
4660
end
4761

48-
xdescribe '#use_scope' do
49-
it 'does some thing'
62+
describe '#use_scope' do
63+
it 'is alias to #use' do
64+
expect(subject.method(:use_scope)).to eq subject.method(:use)
65+
end
5066
end
5167

52-
xdescribe '#includes' do
53-
it 'does some thing'
68+
describe '#includes' do
69+
it 'is alias to #use' do
70+
expect(subject.method(:includes)).to eq subject.method(:use)
71+
end
5472
end
5573

5674
describe '#requires' do
@@ -103,12 +121,40 @@ def validates_reader
103121
end
104122
end
105123

106-
xdescribe '#group' do
107-
it 'does some thing'
124+
describe '#group' do
125+
it 'is alias to #requires' do
126+
expect(subject.method(:group)).to eq subject.method(:requires)
127+
end
108128
end
109129

110-
xdescribe '#params' do
111-
it 'does some thing'
130+
describe '#params' do
131+
it 'inherits params from parent' do
132+
parent_params = { foo: 'bar' }
133+
subject.parent = Object.new
134+
allow(subject.parent).to receive(:params).and_return(parent_params)
135+
expect(subject.params({})).to eq parent_params
136+
end
137+
138+
describe 'when params argument is an array of hashes' do
139+
it 'returns values of each hash for @element key' do
140+
subject.element = :foo
141+
expect(subject.params([{ foo: 'bar' }, { foo: 'baz' }])).to eq(%w(bar baz))
142+
end
143+
end
144+
145+
describe 'when params argument is a hash' do
146+
it 'returns value for @element key' do
147+
subject.element = :foo
148+
expect(subject.params(foo: 'bar')).to eq('bar')
149+
end
150+
end
151+
152+
describe 'when params argument is not a array or a hash' do
153+
it 'returns empty hash' do
154+
subject.element = Object.new
155+
expect(subject.params(Object.new)).to eq({})
156+
end
157+
end
112158
end
113159
end
114160
end

0 commit comments

Comments
 (0)