Skip to content

Replace StrictHashConfiguration by simpler Grape::Util::ApiDescription #2575

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

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
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 @@ -4,6 +4,7 @@

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

#### Fixes
Expand Down
73 changes: 8 additions & 65 deletions lib/grape/dsl/desc.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,7 @@
module Grape
module DSL
module Desc
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
extend Grape::DSL::Settings

# Add a description to the next namespace or function.
# @param description [String] descriptive string for this endpoint
Expand Down Expand Up @@ -68,54 +49,16 @@ module Desc
# # ...
# end
#
def desc(description, options = nil, &config_block)
opts =
def desc(description, options = {}, &config_block)
settings =
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
endpoint_config = defined?(configuration) ? configuration : nil
Grape::Util::ApiDescription.new(description, endpoint_config, &config_block).settings
else
options&.merge(description: description) || { description: description }
end

namespace_setting :description, opts
route_setting :description, opts
end

# Returns an object which configures itself via an instance-context DSL.
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)
options.merge(description: description)
end

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

private

def endpoint_configuration
return {} unless defined?(configuration)

if configuration.respond_to?(:evaluate)
configuration.evaluate
# Within `given` or `mounted blocks` the configuration is already evaluated
elsif configuration.is_a?(Hash)
configuration
end
namespace_setting :description, settings
route_setting :description, settings
end
end
end
Expand Down
56 changes: 56 additions & 0 deletions lib/grape/util/api_description.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# frozen_string_literal: true

module Grape
module Util
class ApiDescription
def initialize(description, endpoint_configuration, &block)
@endpoint_configuration = endpoint_configuration
@attributes = { description: description }
instance_eval(&block)
end

%i[
body_name
consumes
default
deprecated
detail
entity
headers
hidden
http_codes
is_array
named
nickname
params
produces
security
summary
tags
].each do |attribute|
define_method attribute do |value|
@attributes[attribute] = value
end
end

alias success entity
alias failure http_codes

def configuration
@configuration ||= eval_endpoint_config(@endpoint_configuration)
end

def settings
@attributes
end

private

def eval_endpoint_config(configuration)
return configuration if configuration.is_a?(Hash)

configuration.evaluate
end
end
end
end
108 changes: 0 additions & 108 deletions lib/grape/util/strict_hash_configuration.rb

This file was deleted.

34 changes: 0 additions & 34 deletions spec/grape/util/strict_hash_configuration_spec.rb

This file was deleted.