lib/grape/dsl/configuration.rb in grape-0.12.0 vs lib/grape/dsl/configuration.rb in grape-0.13.0
- old
+ new
@@ -8,19 +8,55 @@
module ClassMethods
attr_writer :logger
include Grape::DSL::Settings
+ # Set or retrive the configured logger. If none was configured, this
+ # method will create a new one, logging to stdout.
+ # @param logger [Object] the new logger to use
def logger(logger = nil)
if logger
global_setting(:logger, logger)
else
global_setting(:logger) || global_setting(:logger, Logger.new($stdout))
end
end
# Add a description to the next namespace or function.
+ # @param description [String] descriptive string for this endpoint
+ # or namespace
+ # @param options [Hash] other properties you can set to describe the
+ # endpoint or namespace. Optional.
+ # @option options :detail [String] additional detail about this endpoint
+ # @option options :params [Hash] param types and info. normally, you set
+ # these via the `params` dsl method.
+ # @option options :entity [Grape::Entity] the entity returned upon a
+ # successful call to this action
+ # @option options :http_codes [Array[Array]] possible HTTP codes this
+ # endpoint may return, with their meanings, in a 2d array
+ # @option options :named [String] a specific name to help find this route
+ # @option options :headers [Hash] HTTP headers this method can accept
+ # @yield 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.
+ #
+ # @example
+ #
+ # 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
+ #
def desc(description, options = {}, &config_block)
if block_given?
config_class = Grape::DSL::Configuration.desc_container
config_class.configure do
@@ -34,18 +70,36 @@
end
namespace_setting :description, options
route_setting :description, options
end
+
+ 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
+
+ def unset_description_field(field)
+ description = route_setting(:description)
+ description.delete(field) if description
+ end
end
module_function
+ # Merge multiple layers of settings into one hash.
def stacked_hash_to_hash(settings)
return nil if settings.nil? || settings.blank?
settings.each_with_object(ActiveSupport::OrderedHash.new) { |value, result| result.deep_merge!(value) }
end
+ # Returns an object which configures itself via an instance-context DSL.
def desc_container
Module.new do
include Grape::Util::StrictHashConfiguration.module(
:description,
:detail,