/
RubyNetHTTPCodeGenerator.coffee
116 lines (99 loc) · 3.67 KB
/
RubyNetHTTPCodeGenerator.coffee
1
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
32
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# in API v0.2.0 and below (Paw 2.2.2 and below), require had no return value
((root) ->
if root.bundle?.minApiVersion('0.2.0')
root.Mustache = require("./mustache")
else
require("mustache.js")
)(this)
addslashes = (str) ->
("#{str}").replace(/[\\"]/g, '\\$&')
RubyNetHTTPCodeGenerator = ->
@url = (request) ->
return {
"fullpath" : request.url
"has_https_scheme" : request.url.indexOf("https://") == 0
}
@headers = (request) ->
headers = request.headers
return {
"has_headers": Object.keys(headers).length > 0
"header_list": ({
"header_name": addslashes header_name
"header_value": addslashes header_value
} for header_name, header_value of headers)
}
@body = (request) ->
json_body = request.jsonBody
if json_body
return {
"has_json_body":true
"json_body_object":@json_body_object json_body, 2
}
url_encoded_body = request.urlEncodedBody
if url_encoded_body
return {
"has_url_encoded_body":true
"url_encoded_body": ({
"name": addslashes name
"value": addslashes value
} for name, value of url_encoded_body)
}
multipart_body = request.multipartBody
if multipart_body
return {
"has_multipart_body":true
"multipart_body": ({
"name": addslashes name
"value": addslashes value
} for name, value of multipart_body)
}
raw_body = request.body
if raw_body
if raw_body.length < 5000
return {
"has_raw_body":true
"raw_body": addslashes raw_body
}
else
return {
"has_long_body":true
}
@json_body_object = (object, indent = 0) ->
if object == null
s = "nil"
else if typeof(object) == 'string'
s = "\"#{addslashes object}\""
else if typeof(object) == 'number'
s = "#{object}"
else if typeof(object) == 'boolean'
s = "#{if object then "true" else "false"}"
else if typeof(object) == 'object'
indent_str = Array(indent + 1).join(' ')
indent_str_children = Array(indent + 2).join(' ')
if object.length?
s = "[\n" +
("#{indent_str_children}#{@json_body_object(value, indent+1)}" for value in object).join(',\n') +
"\n#{indent_str}]"
else
s = "{\n" +
("#{indent_str_children}\"#{addslashes key}\" => #{@json_body_object(value, indent+1)}" for key, value of object).join(',\n') +
"\n#{indent_str}}"
return s
@generate = (context) ->
request = context.getCurrentRequest()
view =
"request": context.getCurrentRequest()
"method": request.method[0].toUpperCase() + request.method[1..-1].toLowerCase()
"url": @url request
"headers": @headers request
"body": @body request
template = readFile "ruby.mustache"
Mustache.render template, view
return
RubyNetHTTPCodeGenerator.identifier =
"com.luckymarmot.PawExtensions.RubyNetHTTPCodeGenerator"
RubyNetHTTPCodeGenerator.title =
"Ruby (Net::HTTP)"
RubyNetHTTPCodeGenerator.fileExtension = "rb"
RubyNetHTTPCodeGenerator.languageHighlighter = "ruby"
registerCodeGenerator RubyNetHTTPCodeGenerator