Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support more options in desc block #1791

Merged
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#### Features

* Your contribution here.
* [#1791](https://github.com/ruby-grape/grape/pull/1791): Support more options in desc block - [@darren987469](https://github.com/darren987469).
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe quote desc.

Are these just "more" options, all options, specific options? All kinds of specific options? I am nitpicking but "more" isn't telling me much.


#### Fixes

Expand Down
16 changes: 14 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -446,10 +446,13 @@ version 'v1', using: :param, parameter: 'v'

## Describing Methods

You can add a description to API methods and namespaces.
You can add a description to API methods and namespaces. The description would be used by [grape-swagger][grape-swagger] to generate swagger compliant documentation.

Note: Description block is only for documentation and won't affects API behavior.

```ruby
desc 'Returns your public timeline.' do
summary 'summary'
detail 'more details'
params API::Entities::Status.documentation
success API::Entities::Entity
Expand All @@ -463,7 +466,13 @@ desc 'Returns your public timeline.' do
description: 'Not really needed',
required: false
}

hidden false
deprecated false
is_array true
nickname 'nickname'
produces ['array', 'of', 'mime_types']
consumes ['array', 'of', 'mime_types']
tags ['tag1', 'tag2']
end
get :public_timeline do
Status.limit(20)
Expand All @@ -476,6 +485,9 @@ end
* `failure`: (former http_codes) A definition of the used failure HTTP Codes and Entities
* `named`: A helper to give a route a name and find it with this name in the documentation Hash
* `headers`: A definition of the used Headers
* Other options can be found in [grape-swagger][grape-swagger]

[grape-swagger]: https://github.com/ruby-grape/grape-swagger

## Parameters

Expand Down
10 changes: 9 additions & 1 deletion lib/grape/dsl/desc.rb
Original file line number Diff line number Diff line change
Expand Up @@ -78,13 +78,21 @@ def unset_description_field(field)
def desc_container
Module.new do
include Grape::Util::StrictHashConfiguration.module(
:summary,
:description,
:detail,
:params,
:entity,
:http_codes,
:named,
:headers
:headers,
:hidden,
:deprecated,
:is_array,
:nickname,
:produces,
:consumes,
:tags
)

def config_context.success(*args)
Expand Down
18 changes: 17 additions & 1 deletion spec/grape/dsl/desc_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ class Dummy

it 'can be set with a block' do
expected_options = {
summary: 'summary',
description: 'The description',
detail: 'more details',
params: { first: :param },
Expand All @@ -34,10 +35,18 @@ class Dummy
XOptionalHeader: {
description: 'Not really needed',
required: false
}]
}],
hidden: false,
deprecated: false,
is_array: true,
nickname: 'nickname',
produces: ['array', 'of', 'mime_types'],
consumes: ['array', 'of', 'mime_types'],
tags: ['tag1', 'tag2']
}

subject.desc 'The description' do
summary 'summary'
detail 'more details'
params(first: :param)
success Object
Expand All @@ -51,6 +60,13 @@ class Dummy
description: 'Not really needed',
required: false
}]
hidden false
deprecated false
is_array true
nickname 'nickname'
produces ['array', 'of', 'mime_types']
consumes ['array', 'of', 'mime_types']
tags ['tag1', 'tag2']
end

expect(subject.namespace_setting(:description)).to eq(expected_options)
Expand Down