Skip to content

Commit 017ac62

Browse files
committed
Replace StrictHashConfiguration by Grape::Util::ApiDescription
Add Grape::Util::ApiDescription Remove options from ApiDescription Remove const Update api_description.rb FIx rubocop Renamed `to_h` by `settings`
1 parent f66492a commit 017ac62

File tree

5 files changed

+65
-207
lines changed

5 files changed

+65
-207
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
* [#2572](https://github.com/ruby-grape/grape/pull/2572): Drop support ruby 2.7 and active_support 6.1 - [@ericproulx](https://github.com/ericproulx).
66
* [#2573](https://github.com/ruby-grape/grape/pull/2573): Clean up deprecated code - [@ericproulx](https://github.com/ericproulx).
7+
* [#2575](https://github.com/ruby-grape/grape/pull/2575): Refactor Api description class - [@ericproulx](https://github.com/ericproulx).
78
* Your contribution here.
89

910
#### Fixes

lib/grape/dsl/desc.rb

Lines changed: 8 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,7 @@
33
module Grape
44
module DSL
55
module Desc
6-
ROUTE_ATTRIBUTES = %i[
7-
body_name
8-
consumes
9-
default
10-
deprecated
11-
description
12-
detail
13-
entity
14-
headers
15-
hidden
16-
http_codes
17-
is_array
18-
named
19-
nickname
20-
params
21-
produces
22-
security
23-
summary
24-
tags
25-
].freeze
6+
extend Grape::DSL::Settings
267

278
# Add a description to the next namespace or function.
289
# @param description [String] descriptive string for this endpoint
@@ -68,54 +49,16 @@ module Desc
6849
# # ...
6950
# end
7051
#
71-
def desc(description, options = nil, &config_block)
72-
opts =
52+
def desc(description, options = {}, &config_block)
53+
settings =
7354
if config_block
74-
desc_container(endpoint_configuration).then do |config_class|
75-
config_class.configure do
76-
description(description)
77-
end
78-
79-
config_class.configure(&config_block)
80-
config_class.settings
81-
end
55+
endpoint_config = defined?(configuration) ? configuration : nil
56+
Grape::Util::ApiDescription.new(description, endpoint_config, &config_block).settings
8257
else
83-
options&.merge(description: description) || { description: description }
84-
end
85-
86-
namespace_setting :description, opts
87-
route_setting :description, opts
88-
end
89-
90-
# Returns an object which configures itself via an instance-context DSL.
91-
def desc_container(endpoint_configuration)
92-
Module.new do
93-
include Grape::Util::StrictHashConfiguration.module(*ROUTE_ATTRIBUTES)
94-
config_context.define_singleton_method(:configuration) do
95-
endpoint_configuration
96-
end
97-
98-
def config_context.success(*args)
99-
entity(*args)
58+
options.merge(description: description)
10059
end
101-
102-
def config_context.failure(*args)
103-
http_codes(*args)
104-
end
105-
end
106-
end
107-
108-
private
109-
110-
def endpoint_configuration
111-
return {} unless defined?(configuration)
112-
113-
if configuration.respond_to?(:evaluate)
114-
configuration.evaluate
115-
# Within `given` or `mounted blocks` the configuration is already evaluated
116-
elsif configuration.is_a?(Hash)
117-
configuration
118-
end
60+
namespace_setting :description, settings
61+
route_setting :description, settings
11962
end
12063
end
12164
end

lib/grape/util/api_description.rb

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# frozen_string_literal: true
2+
3+
module Grape
4+
module Util
5+
class ApiDescription
6+
def initialize(description, endpoint_configuration, &block)
7+
@endpoint_configuration = endpoint_configuration
8+
@attributes = { description: description }
9+
instance_eval(&block)
10+
end
11+
12+
%i[
13+
body_name
14+
consumes
15+
default
16+
deprecated
17+
detail
18+
entity
19+
headers
20+
hidden
21+
http_codes
22+
is_array
23+
named
24+
nickname
25+
params
26+
produces
27+
security
28+
summary
29+
tags
30+
].each do |attribute|
31+
define_method attribute do |value|
32+
@attributes[attribute] = value
33+
end
34+
end
35+
36+
alias success entity
37+
alias failure http_codes
38+
39+
def configuration
40+
@configuration ||= eval_endpoint_config(@endpoint_configuration)
41+
end
42+
43+
def settings
44+
@attributes
45+
end
46+
47+
private
48+
49+
def eval_endpoint_config(configuration)
50+
return configuration if configuration.is_a?(Hash)
51+
52+
configuration.evaluate
53+
end
54+
end
55+
end
56+
end

lib/grape/util/strict_hash_configuration.rb

Lines changed: 0 additions & 108 deletions
This file was deleted.

spec/grape/util/strict_hash_configuration_spec.rb

Lines changed: 0 additions & 34 deletions
This file was deleted.

0 commit comments

Comments
 (0)