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) if new_modules.any?
  include_block(block) if block_given?
  include_all_in_scope if !block_given? && new_modules.empty?
end

Protected Instance Methods

define_boolean_in_mod(mod) click to toggle source
# File lib/grape/dsl/helpers.rb, line 66
def define_boolean_in_mod(mod)
  return if defined? mod::Boolean
  mod.const_set('Boolean', Virtus::Attribute::Boolean)
end
include_all_in_scope() click to toggle source
# File lib/grape/dsl/helpers.rb, line 59
def include_all_in_scope
  Module.new.tap do |mod|
    namespace_stackable(:helpers).each { |mod_to_include| mod.send :include, mod_to_include }
    change!
  end
end
include_block(block) click to toggle source
# File lib/grape/dsl/helpers.rb, line 47
def include_block(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)
  modules.each { |mod| make_inclusion(mod) }
end
inject_api_helpers_to_mod(mod) { || ... } click to toggle source
# File lib/grape/dsl/helpers.rb, line 71
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
make_inclusion(mod, &block) click to toggle source
# File lib/grape/dsl/helpers.rb, line 53
def make_inclusion(mod, &block)
  define_boolean_in_mod(mod)
  inject_api_helpers_to_mod(mod, &block)
  namespace_stackable(:helpers, mod)
end