Allows you to define the response body as something other than the return value.
@example
get '/body' do body "Body" "Not the Body" end GET /body # => "Body"
# File lib/grape/dsl/inside_route.rb, line 146 def body(value = nil) if value @body = value else @body end end
Set response content-type
# File lib/grape/dsl/inside_route.rb, line 116 def content_type(val = nil) if val header('Content-Type', val) else header['Content-Type'] end end
A filtering method that will return a hash consisting only of keys that have been declared by a `params` statement against the current/target endpoint or parent namespaces
@param params [Hash] The initial hash to filter. Usually this will just be `params` @param options [Hash] Can pass `:include_missing`, `:stringify` and `:include_parent_namespaces` options. `:include_parent_namespaces` defaults to true, hence must be set to false if you want only to return params declared against the current/target endpoint
# File lib/grape/dsl/inside_route.rb, line 17 def declared(params, options = {}, declared_params = nil) options[:include_missing] = true unless options.key?(:include_missing) options[:include_parent_namespaces] = true unless options.key?(:include_parent_namespaces) if declared_params.nil? declared_params = !options[:include_parent_namespaces] ? settings[:declared_params] : settings.gather(:declared_params) end unless declared_params raise ArgumentError, "Tried to filter for declared parameters but none exist." end if params.is_a? Array params.map do |param| declared(param || {}, options, declared_params) end else declared_params.inject({}) do |hash, key| key = { key => nil } unless key.is_a? Hash key.each_pair do |parent, children| output_key = options[:stringify] ? parent.to_s : parent.to_sym if params.key?(parent) || options[:include_missing] hash[output_key] = if children declared(params[parent] || {}, options, Array(children)) else params[parent] end end end hash end end end
# File lib/grape/dsl/inside_route.rb, line 205 def entity_class_for_obj(object, options) entity_class = options.delete(:with) if entity_class.nil? # entity class not explicitely defined, auto-detect from relation#klass or first object in the collection object_class = if object.respond_to?(:klass) object.klass else object.respond_to?(:first) ? object.first.class : object.class end object_class.ancestors.each do |potential| entity_class ||= (settings[:representations] || {})[potential] end entity_class ||= object_class.const_get(:Entity) if object_class.const_defined?(:Entity) && object_class.const_get(:Entity).respond_to?(:represent) end entity_class end
End the request and display an error to the end user with the specified message.
@param message [String] The message to display. @param status [Integer] the HTTP Status Code. Defaults to default_error_status, 500 if not set.
# File lib/grape/dsl/inside_route.rb, line 63 def error!(message, status = nil, headers = nil) self.status(status || settings[:default_error_status]) throw :error, message: message, status: self.status, headers: headers end
Set an individual header or retrieve all headers that have been set.
# File lib/grape/dsl/inside_route.rb, line 107 def header(key = nil, val = nil) if key val ? @header[key.to_s] = val : @header.delete(key.to_s) else @header end end
Allows you to make use of Grape Entities by setting the response body to the serializable hash of the entity provided in the `:with` option. This has the added benefit of automatically passing along environment and version information to the serialization, making it very easy to do conditional exposures. See Entity docs for more info.
@example
get '/users/:id' do present User.find(params[:id]), with: API::Entities::User, admin: current_user.admin? end
# File lib/grape/dsl/inside_route.rb, line 169 def present(*args) options = args.count > 1 ? args.extract_options! : {} key, object = if args.count == 2 && args.first.is_a?(Symbol) args else [nil, args.first] end entity_class = entity_class_for_obj(object, options) root = options.delete(:root) representation = if entity_class embeds = { env: env } embeds[:version] = env['api.version'] if env['api.version'] entity_class.represent(object, embeds.merge(options)) else object end representation = { root => representation } if root representation = (@body || {}).merge(key => representation) if key body representation end
Redirect to a new url.
@param url [String] The url to be redirect. @param options [Hash] The options used when redirect.
:permanent, default false.
# File lib/grape/dsl/inside_route.rb, line 73 def redirect(url, options = {}) merged_options = { permanent: false }.merge(options) if merged_options[:permanent] status 301 else if env['HTTP_VERSION'] == 'HTTP/1.1' && request.request_method.to_s.upcase != "GET" status 303 else status 302 end end header "Location", url body "" end
Returns route information for the current request.
@example
desc "Returns the route description." get '/' do route.route_description end
# File lib/grape/dsl/inside_route.rb, line 201 def route env["rack.routing_args"][:route_info] end
Set or retrieve the HTTP status code.
@param status [Integer] The HTTP Status Code to return for this request.
# File lib/grape/dsl/inside_route.rb, line 91 def status(status = nil) if status @status = status else return @status if @status case request.request_method.to_s.upcase when 'POST' 201 else 200 end end end
The API version as specified in the URL.
# File lib/grape/dsl/inside_route.rb, line 54 def version env['api.version'] end
Generated with the Darkfish Rdoc Generator 2.