Class: HaveAPI::ClientExamples::Http
Direct Known Subclasses
Curl
Instance Attribute Summary
#action, #action_name, #base_url, #host, #resource, #resource_path, #version
Instance Method Summary
collapse
auth, clients, code, example, init, #initialize, label, order, register, #version_url
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
|
#init ⇒ Object
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
|