module Restfolia::HTTP

Public: Store and execute behaviours defined by user. Behaviour is action for one or more HTTP code. See “default behaviours” below.

Examples

default behaviours
behaviours do

  # 2xx
  on(200...300) do |http_response|
    content_type = (http_response["content-type"] =~ /application\/json/)
    if !content_type
      msg_error = "Response \"content-type\" header should be \"application/json\""
      raise Restfolia::ResponseError.new(msg_error, caller, http_response)
    end

    http_body = http_response.body.to_s
    if !http_body.empty?
      json_parsed = helpers.parse_json(http_response)
      Restfolia.create_resource(json_parsed)
    elsif (location = http_response["location"])
      helpers.follow_url(location)
    else
      nil
    end
  end

  # 3xx
  on(300...400) do |http_response|
    if (location = http_response["location"])
      helpers.follow_url(location)
    else
      msg_error = "HTTP status #{http_response.code} not supported"
      raise Restfolia::ResponseError.new(msg_error, caller, http_response)
    end
  end

  # 4xx
  on(400...500) do |http_response|
    raise Restfolia::ResponseError.new("Resource not found.",
                                       caller, http_response)
  end

  # 5xx
  on(500...600) do |http_response|
    raise Restfolia::ResponseError.new("Internal Server Error",
                                       caller, http_response)
  end

end

Public Class Methods

behaviours(&block) click to toggle source

Public: It’s a nice way to define configurations for your behaves using a block.

block - Required block to customize your behaves. Below are the methods available inside block:

#on - See #on

Examples

Restfolia::HTTP.behaviours do
  on(200) { '200 behaviour' }
  on([201, 204]) { 'behaviour for 201 and 204 codes' }
  on(300...400) { '3xx range' }
end

Returns nothing.

# File lib/restfolia/http.rb, line 84
def self.behaviours(&block)
  Behaviour.store.behaviours(&block)
end
response_by_status_code(http_response) click to toggle source

Public: Execute behaviour from HTTP Response code.

http_response - Net::HTTPResponse with code attribute.

Returns value from “block behaviour”.

# File lib/restfolia/http.rb, line 64
def self.response_by_status_code(http_response)
  Behaviour.store.execute(http_response)
end