diff --git a/lib/grape/api.rb b/lib/grape/api.rb index 152e6a52cc..eec25f8e88 100644 --- a/lib/grape/api.rb +++ b/lib/grape/api.rb @@ -208,9 +208,14 @@ def represent(model_class, options) # end # end # end - def helpers(mod = nil, &block) - if block_given? || mod - mod ||= settings.peek[:helpers] || Module.new + def helpers(new_mod = nil, &block) + if block_given? || new_mod + mod = settings.peek[:helpers] || Module.new + if new_mod + mod.class_eval do + include new_mod + end + end mod.class_eval &block if block_given? set(:helpers, mod) else diff --git a/spec/grape/api_spec.rb b/spec/grape/api_spec.rb index 78e9bc0f02..8cc5811a35 100644 --- a/spec/grape/api_spec.rb +++ b/spec/grape/api_spec.rb @@ -575,6 +575,28 @@ def hello get '/howdy' last_response.body.should eql 'Hello, world.' end + + it 'should allow multiple calls with modules and blocks' do + subject.helpers Module.new do + def one + 1 + end + end + subject.helpers Module.new do + def two + 2 + end + end + subject.helpers do + def three + 3 + end + end + subject.get 'howdy' do + [one, two, three] + end + lambda{get '/howdy'}.should_not raise_error + end end describe '.scope' do