module Grape::DSL::Helpers::ClassMethods

Public Instance Methods

helpers(new_mod = nil, &block) click to toggle source

Add helper methods that will be accessible from any endpoint within this namespace (and child namespaces).

When called without a block, all known helpers within this scope are included.

@param [Module] new_mod optional module of methods to include @param [Block] block optional block of methods to include

@example Define some helpers.

class ExampleAPI < Grape::API
  helpers do
    def current_user
      User.find_by_id(params[:token])
    end
  end
end
# File lib/grape/dsl/helpers.rb, line 29
def helpers(new_mod = nil, &block)
  if block_given? || new_mod
    mod = new_mod || Module.new
    define_boolean_in_mod(mod)
    inject_api_helpers_to_mod(mod) if new_mod
    inject_api_helpers_to_mod(mod) do
      mod.class_eval(&block)
    end if block_given?

    namespace_stackable(:helpers, mod)
  else
    mod = Module.new
    namespace_stackable(:helpers).each do |mod_to_include|
      mod.send :include, mod_to_include
    end
    change!
    mod
  end
end

Protected Instance Methods

define_boolean_in_mod(mod) click to toggle source
# File lib/grape/dsl/helpers.rb, line 51
def define_boolean_in_mod(mod)
  return if defined? mod::Boolean
  mod.const_set('Boolean', Virtus::Attribute::Boolean)
end
inject_api_helpers_to_mod(mod) { || ... } click to toggle source
# File lib/grape/dsl/helpers.rb, line 56
def inject_api_helpers_to_mod(mod, &_block)
  mod.extend(BaseHelper) unless mod.is_a?(BaseHelper)
  yield if block_given?
  mod.api_changed(self)
end