Class/Module Index [+]

Quicksearch

Grape::DSL::InsideRoute

Public Instance Methods

body(value = nil) click to toggle source

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
content_type(val = nil) click to toggle source

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
cookies() click to toggle source

Set or get a cookie

@example

cookies[:mycookie] = 'mycookie val'
cookies['mycookie-string'] = 'mycookie string val'
cookies[:more] = { value: '123', expires: Time.at(0) }
cookies.delete :more
# File lib/grape/dsl/inside_route.rb, line 132
def cookies
  @cookies ||= Cookies.new
end
declared(params, options = {}, declared_params = nil) click to toggle source

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
entity_class_for_obj(object, options) click to toggle source
# 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
error!(message, status = nil, headers = nil) click to toggle source

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
header(key = nil, val = nil) click to toggle source

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
present(*args) click to toggle source

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(url, options = {}) click to toggle source

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
route() click to toggle source

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
status(status = nil) click to toggle source

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
version() click to toggle source

The API version as specified in the URL.

# File lib/grape/dsl/inside_route.rb, line 54
def version
  env['api.version']
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.