module Grape::DSL::Helpers::ClassMethods

Public Instance Methods

helpers(*new_modules, &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 [Array] new_modules optional array of modules 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

@example Include many modules

class ExampleAPI < Grape::API
  helpers Authentication, Mailer, OtherModule
end
# File lib/grape/dsl/helpers.rb, line 35
def helpers(*new_modules, &block)
  include_new_modules(new_modules)
  include_block(block)
  include_all_in_scope if !block && new_modules.empty?
end

Protected Instance Methods

define_boolean_in_mod(mod) click to toggle source
# File lib/grape/dsl/helpers.rb, line 70
def define_boolean_in_mod(mod)
  return if defined? mod::Boolean

  mod.const_set(:Boolean, Grape::API::Boolean)
end
include_all_in_scope() click to toggle source
# File lib/grape/dsl/helpers.rb, line 63
def include_all_in_scope
  Module.new.tap do |mod|
    namespace_stackable(:helpers).each { |mod_to_include| mod.include mod_to_include }
    change!
  end
end
include_block(block) click to toggle source
# File lib/grape/dsl/helpers.rb, line 49
def include_block(block)
  return unless block

  Module.new.tap do |mod|
    make_inclusion(mod) { mod.class_eval(&block) }
  end
end
include_new_modules(modules) click to toggle source
# File lib/grape/dsl/helpers.rb, line 43
def include_new_modules(modules)
  return if modules.empty?

  modules.each { |mod| make_inclusion(mod) }
end
inject_api_helpers_to_mod(mod) { || ... } click to toggle source
# File lib/grape/dsl/helpers.rb, line 76
def inject_api_helpers_to_mod(mod, &block)
  mod.extend(BaseHelper) unless mod.is_a?(BaseHelper)
  yield if block
  mod.api_changed(self)
end
make_inclusion(mod, &block) click to toggle source
# File lib/grape/dsl/helpers.rb, line 57
def make_inclusion(mod, &block)
  define_boolean_in_mod(mod)
  inject_api_helpers_to_mod(mod, &block)
  namespace_stackable(:helpers, mod)
end