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
117
118
|
# File 'lib/memori_client/operation.rb', line 9
def generate_method_code(method)
module_name = method[:module]
method_name = method[:method_name]
qualified_method = [module_name, method_name].join('#')
params_list = []
(method[:params] || {}).each do |k, required|
if required
params_list << "#{k}:"
else
params_list << "#{k}: nil"
end
end
params_definition = (method[:spec]['parameters'] || []).map do |param|
{
name: param['name'],
description: param['description'],
required: param['required'] == true,
type: param['schema']['type']
}
end
payload_keys = []
payload_required_keys = []
if method[:request_body]
params_list << "payload: {}"
params_definition << {
name: 'payload',
description: 'request payload',
required: false,
type: 'Hash',
}
request_body_schema_ref = method.dig(:spec, 'requestBody', 'content', 'application/json', 'schema', '$ref')
key = request_body_schema_ref.split('/').last
schema = MemoriClient::Swagger::SchemaStore.instance.get(key)
required_keys = schema['required'] || []
schema['properties'].each do |key, value|
required = value['nullable'] == false || required_keys.include?(key)
payload_keys << key
payload_required_keys << key if required
params_definition << {
name: "payload.#{key}",
description: '',
required: required,
type: value['type']&.titleize,
indent: 2
}
end
end
payload_keys.sort!
payload_required_keys.sort!
signature = "#{method_name}(#{params_list.join(', ')})"
params_list_doc = params_definition.each_with_object([]) do |param, acc|
if param[:indent]
prefix = " " * param[:indent]
else
prefix = ""
end
acc << "#{prefix}- `#{param[:name]}`: **#{param[:type]}** #{param[:description]}. #{param[:required] ? 'required' : 'optional' }"
end.join("\n")
optional_payload_code = ''
if payload_keys.size > 0
optional_payload_code = " payload_keys = [\n \#{payload_keys.map { |k| \" '\#{k}',\" }.join(\"\\n\") }\n ]\n payload_required_keys = %w[\#{payload_required_keys.join(' ')}]\n validate_payload!(args[:payload], keys: payload_keys, required: payload_required_keys)\n EOS\n end\n \n output = <<-EOS\n## \#{method_name}\n \nSummary:\n\#{method[:summary].gsub(\"\\n\", ' ').gsub(\"\\r\", ' ')}\n \nSignature: `\#{signature}`\nInvokation: `client.\#{@version}.\#{@key.downcase}.\#{signature}`\n \nHTTP API: \#{method[:method].upcase} \#{method[:path]}`\n \n EOS\n \n if params_list_doc.size > 0\n output << <<-EOS\nParameters:\n \n\#{params_list_doc}\n EOS\n end\n \n output << \"\\n\"\n \n output\nend\n"
|