Module: Grape::DSL::Desc

Includes:
Settings
Included in:
Configuration::ClassMethods
Defined in:
lib/grape/dsl/desc.rb

Constant Summary collapse

ROUTE_ATTRIBUTES =
%i[
  body_name
  consumes
  default
  deprecated
  description
  detail
  entity
  headers
  hidden
  http_codes
  is_array
  named
  nickname
  params
  produces
  security
  summary
  tags
].freeze

Instance Attribute Summary

Attributes included from Settings

#inheritable_setting, #top_level_setting

Instance Method Summary collapse

Methods included from Settings

#api_class_setting, #get_or_set, #global_setting, #namespace_end, #namespace_inheritable, #namespace_inheritable_to_nil, #namespace_reverse_stackable, #namespace_reverse_stackable_with_hash, #namespace_setting, #namespace_stackable, #namespace_stackable_with_hash, #namespace_start, #route_end, #route_setting, #unset, #unset_api_class_setting, #unset_global_setting, #unset_namespace_inheritable, #unset_namespace_setting, #unset_namespace_stackable, #unset_route_setting, #within_namespace

Instance Method Details

#desc(description, options = nil) { ... } ⇒ Object

Add a description to the next namespace or function.

Examples:


desc 'create a user'
post '/users' do
  # ...
end

desc 'find a user' do
  detail 'locates the user from the given user ID'
  failure [ [404, 'Couldn\'t find the given user' ] ]
  success User::Entity
end
get '/user/:id' do
  # ...
end

Parameters:

  • description (String)

    descriptive string for this endpoint or namespace

  • options (Hash) (defaults to: nil)

    other properties you can set to describe the endpoint or namespace. Optional.

Options Hash (options):

  • :detail (String)

    additional detail about this endpoint

  • :summary (String)

    summary for this endpoint

  • :params (Hash)

    param types and info. normally, you set these via the params dsl method.

  • :entity (Grape::Entity)

    the entity returned upon a successful call to this action

  • :http_codes (Array[Array])

    possible HTTP codes this endpoint may return, with their meanings, in a 2d array

  • :named (String)

    a specific name to help find this route

  • :body_name (String)

    override the autogenerated body name param

  • :headers (Hash)

    HTTP headers this method can accept

  • :hidden (Boolean)

    hide the endpoint or not

  • :deprecated (Boolean)

    deprecate the endpoint or not

  • :is_array (Boolean)

    response entity is array or not

  • :nickname (String)

    nickname of the endpoint

  • :produces (Array[String])

    a list of MIME types the endpoint produce

  • :consumes (Array[String])

    a list of MIME types the endpoint consume

  • :security (Array[Hash])

    a list of security schemes

  • :tags (Array[String])

    a list of tags

Yields:

  • a block yielding an instance context with methods mapping to each of the above, except that :entity is also aliased as #success and :http_codes is aliased as #failure.



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/grape/dsl/desc.rb', line 73

def desc(description, options = nil, &config_block)
  opts =
    if config_block
      desc_container(endpoint_configuration).then do |config_class|
        config_class.configure do
          description(description)
        end

        config_class.configure(&config_block)
        config_class.settings
      end
    else
      options&.merge(description: description) || { description: description }
    end

  namespace_setting :description, opts
  route_setting :description, opts
end

#desc_container(endpoint_configuration) ⇒ Object

Returns an object which configures itself via an instance-context DSL.



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/grape/dsl/desc.rb', line 93

def desc_container(endpoint_configuration)
  Module.new do
    include Grape::Util::StrictHashConfiguration.module(*ROUTE_ATTRIBUTES)
    config_context.define_singleton_method(:configuration) do
      endpoint_configuration
    end

    def config_context.success(*args)
      entity(*args)
    end

    def config_context.failure(*args)
      http_codes(*args)
    end
  end
end