Skip to content

Commit b79c77b

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 be8f382 commit b79c77b

File tree

5 files changed

+64
-208
lines changed

5 files changed

+64
-208
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#### Features
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).
6+
* [#2575](https://github.com/ruby-grape/grape/pull/2575): Refactor Api description class - [@ericproulx](https://github.com/ericproulx).
67
* Your contribution here.
78

89
#### Fixes

lib/grape/dsl/desc.rb

Lines changed: 7 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,6 @@ module DSL
55
module Desc
66
include Grape::DSL::Settings
77

8-
ROUTE_ATTRIBUTES = %i[
9-
body_name
10-
consumes
11-
default
12-
deprecated
13-
description
14-
detail
15-
entity
16-
headers
17-
hidden
18-
http_codes
19-
is_array
20-
named
21-
nickname
22-
params
23-
produces
24-
security
25-
summary
26-
tags
27-
].freeze
28-
298
# Add a description to the next namespace or function.
309
# @param description [String] descriptive string for this endpoint
3110
# or namespace
@@ -70,54 +49,16 @@ module Desc
7049
# # ...
7150
# end
7251
#
73-
def desc(description, options = nil, &config_block)
74-
opts =
52+
def desc(description, options = {}, &config_block)
53+
settings =
7554
if config_block
76-
desc_container(endpoint_configuration).then do |config_class|
77-
config_class.configure do
78-
description(description)
79-
end
80-
81-
config_class.configure(&config_block)
82-
config_class.settings
83-
end
55+
endpoint_config = defined?(configuration) ? configuration : nil
56+
Grape::Util::ApiDescription.new(description, endpoint_config, &config_block).settings
8457
else
85-
options&.merge(description: description) || { description: description }
86-
end
87-
88-
namespace_setting :description, opts
89-
route_setting :description, opts
90-
end
91-
92-
# Returns an object which configures itself via an instance-context DSL.
93-
def desc_container(endpoint_configuration)
94-
Module.new do
95-
include Grape::Util::StrictHashConfiguration.module(*ROUTE_ATTRIBUTES)
96-
config_context.define_singleton_method(:configuration) do
97-
endpoint_configuration
98-
end
99-
100-
def config_context.success(*args)
101-
entity(*args)
102-
end
103-
104-
def config_context.failure(*args)
105-
http_codes(*args)
58+
options.merge(description: description)
10659
end
107-
end
108-
end
109-
110-
private
111-
112-
def endpoint_configuration
113-
return {} unless defined?(configuration)
114-
115-
if configuration.respond_to?(:evaluate)
116-
configuration.evaluate
117-
# Within `given` or `mounted blocks` the configuration is already evaluated
118-
elsif configuration.is_a?(Hash)
119-
configuration
120-
end
60+
namespace_setting :description, settings
61+
route_setting :description, settings
12162
end
12263
end
12364
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)