Class: Amber::Switch

Inherits:
Object
  • Object
show all
Defined in:
lib/amber/switch.rb

Defined Under Namespace

Modules: ContentDelegate Classes: Content, Request, Response

Instance Method Summary collapse

Instance Method Details

#query(request) ⇒ Object



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/amber/switch.rb', line 2

def query(request)
  if request.is_a? Amber::Switch::Request
    result = nil
    case request
    when Amber::Switch::Request::Get
      result = self.request(request.url, request.method, request.header)
    when Amber::Switch::Request::Post
      body = request.content.is_a?(Amber::Switch::Content) ? request.content.body : nil
      result = self.request(request.url, request.method, request.header, body)
    end
    if result
      response = Amber::Switch::Response.new
      response.status = result["status"]
      response.header = result["header"]
      response_content_type = result["content_type"].is_a?(Array) ? result["content_type"].first : result["content_type"].to_s
      case response_content_type
      when Amber::Switch::Content::JSON_CONTENT
        response.content = Amber::Switch::Content::Json.new
        response.content.body = result["body"]
      else
        response.content = Amber::Switch::Content::Text.new
        response.content.body = result["body"]
      end
      return response
    end
  end

  p "#{request} should be an instance of Amber::Switch::Request"
  return
end

#request(url, method, header = {}, body = nil) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/amber/switch.rb', line 33

def request(url, method, header = {}, body = nil)
  request = nil
  uri = URI(url)
  response = {
    "status" => false,
    "code" => 400,
    "content_type" => nil,
    "header" => {},
    "body" => nil
  }
  case method
  when Amber::Switch::Request::GET_METHOD
    request = Net::HTTP::Get.new uri
  when Amber::Switch::Request::POST_METHOD
    request = Net::HTTP::Post.new uri
  end
  if request
    header.each do |key, value|
      request[key] = value
    end
    request.body = body if body
    result = Net::HTTP.start(uri.hostname, uri.port) do |http|
      http.request(request)
    end

    case result
    when Net::HTTPSuccess
      response["status"] = true
      response["code"] = result.code.to_i
      response["content_type"] = result.content_type
      response["header"] = result.to_hash
      response["body"] = result.body
    end
  end
  response
end