Module: Grape::DSL::Desc

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

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 = {}) { ... } ⇒ 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: {})

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

Options Hash (options):

  • :detail (String)

    additional detail about 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

  • :headers (Hash)

    HTTP headers this method can accept

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.


40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/grape/dsl/desc.rb', line 40

def desc(description, options = {}, &config_block)
  if block_given?
    config_class = desc_container

    config_class.configure do
      description description
    end

    config_class.configure(&config_block)
    unless options.empty?
      warn '[DEPRECATION] Passing a options hash and a block to `desc` is deprecated. Move all hash options to block.'
    end
    options = config_class.settings
  else
    options = options.merge(description: description)
  end

  namespace_setting :description, options
  route_setting :description, options
end

#desc_containerObject

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


78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/grape/dsl/desc.rb', line 78

def desc_container
  Module.new do
    include Grape::Util::StrictHashConfiguration.module(
      :description,
      :detail,
      :params,
      :entity,
      :http_codes,
      :named,
      :headers
    )

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

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

#description_field(field, value = nil) ⇒ Object


61
62
63
64
65
66
67
68
69
70
# File 'lib/grape/dsl/desc.rb', line 61

def description_field(field, value = nil)
  if value
    description = route_setting(:description)
    description ||= route_setting(:description, {})
    description[field] = value
  else
    description = route_setting(:description)
    description[field] if description
  end
end

#unset_description_field(field) ⇒ Object


72
73
74
75
# File 'lib/grape/dsl/desc.rb', line 72

def unset_description_field(field)
  description = route_setting(:description)
  description.delete(field) if description
end