module Grape::DSL::Helpers

def define_boolean_in_mod(mod)

def define_boolean_in_mod(mod)
  return if defined? mod::Boolean
  mod.const_set(:Boolean, Grape::API::Boolean)
end

def helpers(*new_modules, &block)

Other tags:
    Example: Include many modules -
    Example: Define some helpers. -

Parameters:
  • block (Block) -- optional block of methods to include
  • new_modules (Array) -- optional array of modules to include
def helpers(*new_modules, &block)
  include_new_modules(new_modules)
  include_block(block)
  include_all_in_scope if !block && new_modules.empty?
end

def include_all_in_scope

def include_all_in_scope
  mod = Module.new
  namespace_stackable(:helpers).each { |mod_to_include| mod.include mod_to_include }
  change!
  mod
end

def include_block(block)

def include_block(block)
  return unless block
  mod = Module.new
  make_inclusion(mod) { mod.class_eval(&block) }
end

def include_new_modules(modules)

def include_new_modules(modules)
  return if modules.empty?
  modules.each { |mod| make_inclusion(mod) }
end

def inject_api_helpers_to_mod(mod, &block)

def inject_api_helpers_to_mod(mod, &block)
  mod.extend(BaseHelper) unless mod.is_a?(BaseHelper)
  yield if block
  warn_on_endpoint_overrides(mod) if Grape.config.warn_on_helper_overrides
  mod.api_changed(self)
end

def make_inclusion(mod, &)

def make_inclusion(mod, &)
  define_boolean_in_mod(mod)
  inject_api_helpers_to_mod(mod, &)
  inheritable_setting.namespace_stackable[:helpers] = mod
end

def warn_on_endpoint_overrides(mod)

with an existing helper name.
surprise when the framework gains a method that already collides
instance methods — usually intentional, but a common source of
singleton class and therefore take precedence over +Endpoint+
method on +Grape::Endpoint+. Helpers are mixed into the endpoint's
warning to +$stderr+ for any helper method that masks an instance
When +Grape.config.warn_on_helper_overrides+ is enabled, emit a
def warn_on_endpoint_overrides(mod)
  overridden = mod.instance_methods(false).select { |m| Grape::Endpoint.method_defined?(m) }
  return if overridden.empty?
  overridden.each do |name|
    warn(
      "Grape: helper method `#{name}` overrides Grape::Endpoint##{name}. " \
      'The helper takes precedence. To use the framework implementation, remove the helper. ' \
      'Silence this warning by setting Grape.config.warn_on_helper_overrides = false.'
    )
  end
end