Class: HaveAPI::ClientExamples::Http

Inherits:
HaveAPI::ClientExample show all
Defined in:
lib/haveapi/client_examples/http.rb

Direct Known Subclasses

Curl

Instance Attribute Summary

Attributes inherited from HaveAPI::ClientExample

#action, #action_name, #base_url, #host, #resource, #resource_path, #version

Instance Method Summary collapse

Methods inherited from HaveAPI::ClientExample

auth, clients, code, example, init, #initialize, label, order, register, #version_url

Constructor Details

This class inherits a constructor from HaveAPI::ClientExample

Instance Method Details

#auth(method, desc) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/haveapi/client_examples/http.rb', line 20

def auth(method, desc)
  case method
  when :basic
    <<END
GET / HTTP/1.1
Host: #{host}
Authorization: Basic dXNlcjpzZWNyZXQ=

END

  when :token
    <<END
POST /_auth/token/tokens HTTP/1.1
Host: #{host}
Content-Type: application/json

#{JSON.pretty_generate({token: {user: 'user', password: 'secret', lifetime: 'fixed'}})}
END
  end
end

#initObject



12
13
14
15
16
17
18
# File 'lib/haveapi/client_examples/http.rb', line 12

def init
  <<END
OPTIONS /v#{version}/ HTTP/1.1
Host: #{host}

END
end

#request(sample) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/haveapi/client_examples/http.rb', line 41

def request(sample)
  path = resolve_path(
      action[:method],
      action[:path],
      sample[:path_params] || [],
      sample[:request]
  )

  req = "#{action[:method]} #{path} HTTP/1.1\n"
  req << "Host: #{host}\n"
  req << "Content-Type: application/json\n\n"

  if action[:method] != 'GET' && sample[:request] && !sample[:request].empty?
    req << JSON.pretty_generate({action[:input][:namespace] => sample[:request]})
  end

  req
end

#resolve_path(method, path, path_params, input_params) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/haveapi/client_examples/http.rb', line 77

def resolve_path(method, path, path_params, input_params)
  ret = path.clone

  path_params.each do |v|
    ret.sub!(/\{[a-zA-Z\-_]+\}/, v.to_s)
  end

  return ret if method != 'GET' || !input_params || input_params.empty?

  ret << '?'
  ret << input_params.map { |k, v| "#{k}=#{CGI.escape(v.to_s)}" }.join('&')

  ret
end

#response(sample) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/haveapi/client_examples/http.rb', line 60

def response(sample)
  content = JSON.pretty_generate({
      status: sample[:status],
      message: sample[:message],
      response: {action[:output][:namespace] => sample[:response]},
      errors: sample[:errors],
  })

  status_msg = Rack::Utils::HTTP_STATUS_CODES[sample[:http_status]]

  res = "HTTP/1.1 #{sample[:http_status]} #{status_msg}\n"
  res << "Content-Type: application/json;charset=utf-8\n"
  res << "Content-Length: #{content.size}\n\n"
  res << content
  res
end