ding_sdk 0.26.36 → 0.26.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/ding_sdk/sdkconfiguration.rb +2 -2
- data/lib/ding_sdk/utils/forms.rb +186 -0
- data/lib/ding_sdk/utils/headers.rb +79 -0
- data/lib/ding_sdk/utils/query_params.rb +133 -0
- data/lib/ding_sdk/utils/request_bodies.rb +62 -0
- data/lib/ding_sdk/utils/security.rb +133 -0
- data/lib/ding_sdk/utils/url.rb +102 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a521a43aa92898dd8c347e8bb54339d1c22cd16578e68b4b5678c82ee88578a3
|
4
|
+
data.tar.gz: f8489da7ffd9657956d51b7aa8b15d3769aeda2b92fade3dc5e99f39dc805123
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 897ac6d45fc405875a80850eba1b8a9e7f690514b191182413aff24eaceb497ff7f76349a28f1c13dc06760547bd0f8d904b570f36b570d7eae48119b9e31063
|
7
|
+
data.tar.gz: 96712cce8f5b86d0a8b208398044f3a8f3690d156a9f876733b0e50a288f30ffb6fc08f0ce0c7b33ca4d9f4f4ebab4b05aae1a3bf3dfd53c2797576451d4fd2e
|
@@ -63,9 +63,9 @@ module DingSDK
|
|
63
63
|
end
|
64
64
|
@language = 'ruby'
|
65
65
|
@openapi_doc_version = '1.0.0'
|
66
|
-
@sdk_version = '0.26.
|
66
|
+
@sdk_version = '0.26.38'
|
67
67
|
@gen_version = '2.578.0'
|
68
|
-
@user_agent = 'speakeasy-sdk/ruby 0.26.
|
68
|
+
@user_agent = 'speakeasy-sdk/ruby 0.26.38 2.578.0 1.0.0 ding_sdk'
|
69
69
|
end
|
70
70
|
|
71
71
|
sig { returns([String, T::Hash[Symbol, String]]) }
|
@@ -0,0 +1,186 @@
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
2
|
+
|
3
|
+
# typed: true
|
4
|
+
# frozen_string_literal: true
|
5
|
+
|
6
|
+
require 'cgi'
|
7
|
+
require 'date'
|
8
|
+
require 'sorbet-runtime'
|
9
|
+
require 'base64'
|
10
|
+
|
11
|
+
module DingSDK
|
12
|
+
module Utils
|
13
|
+
extend T::Sig
|
14
|
+
|
15
|
+
sig do
|
16
|
+
params(field_name: String, explode: T::Boolean, obj: Object, delimiter: String,
|
17
|
+
get_field_name_lambda: T.proc.params(obj_field: ::Crystalline::MetadataFields::Field).returns(String))
|
18
|
+
.returns(T::Hash[Symbol, T::Array[String]])
|
19
|
+
end
|
20
|
+
def self._populate_form(field_name, explode, obj, delimiter, &get_field_name_lambda)
|
21
|
+
params = {}
|
22
|
+
|
23
|
+
return params if obj.nil?
|
24
|
+
|
25
|
+
if obj.respond_to? :fields
|
26
|
+
items = []
|
27
|
+
obj_fields = obj.fields
|
28
|
+
obj_fields.each do |obj_field|
|
29
|
+
obj_field_name = get_field_name_lambda.call(obj_field)
|
30
|
+
next if obj_field_name == ''
|
31
|
+
|
32
|
+
val = obj.send(obj_field.name.to_sym)
|
33
|
+
next if val.nil?
|
34
|
+
|
35
|
+
if explode
|
36
|
+
params[obj_field_name] = [val_to_string(val)]
|
37
|
+
else
|
38
|
+
items.append("#{obj_field_name}#{delimiter}#{val_to_string(val)}")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
params[field_name] = [items.join(delimiter)] if !items.empty?
|
43
|
+
elsif obj.is_a? Hash
|
44
|
+
items = []
|
45
|
+
obj.each do |key, value|
|
46
|
+
next if value.nil?
|
47
|
+
|
48
|
+
if explode
|
49
|
+
params[key] = val_to_string(value)
|
50
|
+
else
|
51
|
+
items.append("#{key}#{delimiter}#{val_to_string(value)}")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
params[field_name] = [items.join(delimiter)] if !items.empty?
|
55
|
+
|
56
|
+
elsif obj.is_a? Array
|
57
|
+
items = []
|
58
|
+
obj.each do |value|
|
59
|
+
next if value.nil?
|
60
|
+
|
61
|
+
if explode
|
62
|
+
params[field_name] = [] if !params.key? field_name
|
63
|
+
|
64
|
+
params[field_name].append(val_to_string(value))
|
65
|
+
else
|
66
|
+
items.append(val_to_string(value))
|
67
|
+
end
|
68
|
+
end
|
69
|
+
params[field_name] = items.map(&:to_s).join(delimiter) if !items.empty?
|
70
|
+
|
71
|
+
else
|
72
|
+
params[field_name] = val_to_string(obj)
|
73
|
+
end
|
74
|
+
params
|
75
|
+
end
|
76
|
+
|
77
|
+
sig { params(media_type: String, request: Object).returns([String, Object, T::Array[T::Array[Object]]]) }
|
78
|
+
def self.serialize_multipart_form(media_type, request)
|
79
|
+
form = []
|
80
|
+
request_fields = request.fields
|
81
|
+
request_fields.each do |field|
|
82
|
+
val = request.send(field.name)
|
83
|
+
next if val.nil?
|
84
|
+
|
85
|
+
field_metadata = field.metadata[:multipart_form]
|
86
|
+
next if field_metadata.nil?
|
87
|
+
|
88
|
+
if field_metadata[:file] == true
|
89
|
+
file_fields = val.fields
|
90
|
+
|
91
|
+
file_name = ''
|
92
|
+
field_name = field_metadata[:field_name]
|
93
|
+
content = nil
|
94
|
+
|
95
|
+
file_fields.each do |file_field|
|
96
|
+
file_metadata = file_field.metadata[:multipart_form]
|
97
|
+
next if file_metadata.nil?
|
98
|
+
|
99
|
+
if file_metadata[:content] == true
|
100
|
+
content = val.send(file_field.name)
|
101
|
+
else
|
102
|
+
file_name = val.send(file_field.name)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
raise StandardError, 'invalid multipart/form-data file' if file_name == '' || content == nil?
|
106
|
+
|
107
|
+
form.append([field_name, [file_name, content]])
|
108
|
+
elsif field_metadata[:json] == true
|
109
|
+
to_append = [
|
110
|
+
field_metadata.fetch(:field_name, field.name), [
|
111
|
+
nil, ::Crystalline.to_json(val), 'application/json'
|
112
|
+
]
|
113
|
+
]
|
114
|
+
form.append(to_append)
|
115
|
+
else
|
116
|
+
field_name = field_metadata.fetch(
|
117
|
+
:field_name, field.name
|
118
|
+
)
|
119
|
+
if val.is_a? Array
|
120
|
+
val.each do |value|
|
121
|
+
next if value.nil?
|
122
|
+
|
123
|
+
form.append(
|
124
|
+
["#{field_name}[]", [nil, val_to_string(value)]]
|
125
|
+
)
|
126
|
+
end
|
127
|
+
else
|
128
|
+
form.append([field_name, [nil, val_to_string(val)]])
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
[media_type, nil, form]
|
133
|
+
end
|
134
|
+
|
135
|
+
|
136
|
+
sig do
|
137
|
+
params(field_name: Symbol, data: T.any(Object, T::Hash[Symbol, String]))
|
138
|
+
.returns(T::Hash[Symbol, Object])
|
139
|
+
end
|
140
|
+
def self.serialize_form_data(field_name, data)
|
141
|
+
get_form_field_name = lambda do |obj_field|
|
142
|
+
obj_param_metadata = obj_field.metadata[:form]
|
143
|
+
|
144
|
+
return '' if obj_param_metadata.nil?
|
145
|
+
|
146
|
+
return obj_param_metadata.fetch(:field_name, obj_field.name)
|
147
|
+
end
|
148
|
+
|
149
|
+
form = {}
|
150
|
+
if data.respond_to? :fields
|
151
|
+
data.fields.each do |field|
|
152
|
+
val = data.send(field.name)
|
153
|
+
next if val.nil?
|
154
|
+
|
155
|
+
metadata = field.metadata[:form]
|
156
|
+
|
157
|
+
next if metadata.nil?
|
158
|
+
|
159
|
+
field_name = metadata.fetch(:field_name, field.name)
|
160
|
+
|
161
|
+
if metadata[:json]
|
162
|
+
form[field_name] = ::Crystalline.to_json(val)
|
163
|
+
else
|
164
|
+
if metadata.fetch(:style, 'form') == 'form'
|
165
|
+
form = form.merge(
|
166
|
+
_populate_form(
|
167
|
+
field_name, metadata.fetch(:explode, true), val, ',', &get_form_field_name
|
168
|
+
)
|
169
|
+
)
|
170
|
+
else
|
171
|
+
raise StandardError, "Invalid form style for field #{field.name}"
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
elsif data.is_a? Hash
|
176
|
+
data.each do |key, value|
|
177
|
+
form[key] = [val_to_string(value)]
|
178
|
+
end
|
179
|
+
else
|
180
|
+
raise StandardError, "Invalid request body type for field #{field_name}"
|
181
|
+
end
|
182
|
+
|
183
|
+
form
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
2
|
+
|
3
|
+
# typed: true
|
4
|
+
# frozen_string_literal: true
|
5
|
+
|
6
|
+
require 'cgi'
|
7
|
+
require 'date'
|
8
|
+
require 'sorbet-runtime'
|
9
|
+
require 'base64'
|
10
|
+
|
11
|
+
module DingSDK
|
12
|
+
module Utils
|
13
|
+
extend T::Sig
|
14
|
+
|
15
|
+
sig { params(headers_params: Object, gbls: T.nilable(T::Hash[Symbol, T::Hash[Symbol, T::Hash[Symbol, Object]]])).returns(T::Hash[Symbol, String]) }
|
16
|
+
def self.get_headers(headers_params, gbls = nil)
|
17
|
+
return {} if headers_params.nil?
|
18
|
+
|
19
|
+
headers = {}
|
20
|
+
param_fields = headers_params.fields
|
21
|
+
param_fields.each do |f|
|
22
|
+
metadata = f.metadata[:header]
|
23
|
+
next if metadata.nil?
|
24
|
+
|
25
|
+
value = _populate_from_globals(f.name, headers_params&.send(f.name), 'header', gbls)
|
26
|
+
value = _serialize_header(metadata.fetch(:explode, false), value)
|
27
|
+
headers[metadata.fetch(:field_name, f.name)] = value if !value.empty?
|
28
|
+
end
|
29
|
+
headers
|
30
|
+
end
|
31
|
+
|
32
|
+
sig { params(explode: T::Boolean, obj: Object).returns(String) }
|
33
|
+
def self._serialize_header(explode, obj)
|
34
|
+
return '' if obj.nil?
|
35
|
+
|
36
|
+
if obj.respond_to? :fields
|
37
|
+
items = []
|
38
|
+
obj_fields = obj.fields
|
39
|
+
obj_fields.each do |obj_field|
|
40
|
+
obj_param_metadata = obj_field.metadata[:header]
|
41
|
+
next if obj_param_metadata.nil?
|
42
|
+
|
43
|
+
obj_field_name = obj_param_metadata.fetch(:field_name, obj_field.name)
|
44
|
+
next if obj_field_name == ''
|
45
|
+
|
46
|
+
val = obj.send(obj_field.name)
|
47
|
+
next if val.nil?
|
48
|
+
|
49
|
+
if explode
|
50
|
+
items.append("#{obj_field_name}=#{val_to_string(val)}")
|
51
|
+
else
|
52
|
+
items.append(obj_field_name)
|
53
|
+
items.append(val_to_string(val))
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
items.join(',') if !items.empty?
|
58
|
+
elsif obj.is_a? Hash
|
59
|
+
items = []
|
60
|
+
obj.each do |key, value|
|
61
|
+
next if value.nil?
|
62
|
+
|
63
|
+
if explode
|
64
|
+
items.append("#{key}=#{val_to_string(value)}")
|
65
|
+
else
|
66
|
+
items.append(key)
|
67
|
+
items.append(val_to_string(value))
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
items.join(',') if !items.empty?
|
72
|
+
elsif obj.is_a? Array
|
73
|
+
items = obj.filter { |v| !v.nil? }.map { |v| val_to_string(v) }.join(',')
|
74
|
+
else
|
75
|
+
val_to_string(obj)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
2
|
+
|
3
|
+
# typed: true
|
4
|
+
# frozen_string_literal: true
|
5
|
+
|
6
|
+
require 'cgi'
|
7
|
+
require 'date'
|
8
|
+
require 'sorbet-runtime'
|
9
|
+
require 'base64'
|
10
|
+
|
11
|
+
module DingSDK
|
12
|
+
module Utils
|
13
|
+
extend T::Sig
|
14
|
+
|
15
|
+
sig { params(clazz: Class, query_params: Object, url_override: T.nilable(::String), gbls: T.nilable(T::Hash[Symbol, T::Hash[Symbol, T::Hash[Symbol, Object]]])).returns(T::Hash[Symbol, T::Array[String]]) }
|
16
|
+
def self.get_query_params(clazz, query_params, url_override = nil, gbls = nil)
|
17
|
+
parsed_params = {}
|
18
|
+
if !url_override.nil?
|
19
|
+
parsed_url = URI.parse url_override
|
20
|
+
parsed_params = CGI.parse parsed_url.query
|
21
|
+
end
|
22
|
+
params = {}
|
23
|
+
param_fields = clazz.fields
|
24
|
+
param_fields.each do |f|
|
25
|
+
request_metadata = f.metadata[:request]
|
26
|
+
next if !request_metadata.nil?
|
27
|
+
|
28
|
+
metadata = f.metadata[:query_param]
|
29
|
+
next if metadata.nil?
|
30
|
+
|
31
|
+
param_name = f.name
|
32
|
+
value = query_params&.send(param_name.to_sym)
|
33
|
+
value = _populate_from_globals(param_name, value, 'queryParam', gbls)
|
34
|
+
|
35
|
+
f_name = metadata[:field_name]
|
36
|
+
serialization = metadata.fetch(:serialization, '')
|
37
|
+
if serialization != ''
|
38
|
+
params = params.merge _get_serialized_params(
|
39
|
+
metadata, f_name, value
|
40
|
+
)
|
41
|
+
else
|
42
|
+
style = metadata.fetch(:style, 'form')
|
43
|
+
case style
|
44
|
+
when 'deepObject'
|
45
|
+
params = params.merge _get_deep_object_query_params(
|
46
|
+
metadata, f_name, value
|
47
|
+
)
|
48
|
+
when 'form'
|
49
|
+
params = params.merge _get_delimited_query_params(
|
50
|
+
metadata, f_name, value, ','
|
51
|
+
)
|
52
|
+
when 'pipeDelimited'
|
53
|
+
params = params.merge _get_delimited_query_params(
|
54
|
+
metadata, f_name, value, '|'
|
55
|
+
)
|
56
|
+
else
|
57
|
+
raise StandardError, 'not yet implemented'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
params.merge parsed_params
|
62
|
+
end
|
63
|
+
|
64
|
+
sig do
|
65
|
+
params(metadata: T::Hash[Symbol, String], field_name: String, obj: Object)
|
66
|
+
.returns(T::Hash[Symbol, T::Array[String]])
|
67
|
+
end
|
68
|
+
def self._get_deep_object_query_params(metadata, field_name, obj)
|
69
|
+
params = {}
|
70
|
+
|
71
|
+
return params if obj.nil?
|
72
|
+
|
73
|
+
if obj.respond_to? :fields
|
74
|
+
obj_fields = obj.fields
|
75
|
+
obj_fields.each do |obj_field|
|
76
|
+
obj_param_metadata = obj_field.metadata[:query_param]
|
77
|
+
next if obj_param_metadata.nil?
|
78
|
+
|
79
|
+
val = obj.send(obj_field.name)
|
80
|
+
next if val.nil?
|
81
|
+
|
82
|
+
key = "#{metadata.fetch(:field_name, field_name)}[#{obj_param_metadata.fetch(:field_name, obj_field.name)}]"
|
83
|
+
if val.is_a? Array
|
84
|
+
val.each do |v|
|
85
|
+
next if v.nil?
|
86
|
+
|
87
|
+
params[key] = [] if !params.include? key
|
88
|
+
|
89
|
+
params[key] << val_to_string(v)
|
90
|
+
end
|
91
|
+
else
|
92
|
+
params[key] = [val_to_string(val)]
|
93
|
+
end
|
94
|
+
end
|
95
|
+
elsif obj.is_a? Hash
|
96
|
+
obj.each do |key, value|
|
97
|
+
next if value.nil?
|
98
|
+
|
99
|
+
param_key = "#{metadata.fetch(:field_name, field_name)}[#{key}]"
|
100
|
+
if value.is_a? Array
|
101
|
+
value.each do |val|
|
102
|
+
next if val.nil?
|
103
|
+
|
104
|
+
params[param_key] = [] if !params.include? param_key
|
105
|
+
|
106
|
+
params[param_key].append(val_to_string(val))
|
107
|
+
end
|
108
|
+
else
|
109
|
+
params[param_key] = [val_to_string(value)]
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
params
|
114
|
+
end
|
115
|
+
|
116
|
+
|
117
|
+
sig do
|
118
|
+
params(metadata: T::Hash[Symbol, String], field_name: String, obj: Object, delimiter: String)
|
119
|
+
.returns(T::Hash[Symbol, T::Array[String]])
|
120
|
+
end
|
121
|
+
def self._get_delimited_query_params(metadata, field_name, obj, delimiter)
|
122
|
+
get_query_param_field_name = lambda do |obj_field|
|
123
|
+
obj_param_metadata = obj_field.metadata[:query_param]
|
124
|
+
|
125
|
+
return '' if obj_param_metadata.nil?
|
126
|
+
|
127
|
+
return obj_param_metadata.fetch(:field_name, obj_field.name)
|
128
|
+
end
|
129
|
+
|
130
|
+
_populate_form(field_name, metadata.fetch(:explode, true), obj, delimiter, &get_query_param_field_name)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
2
|
+
|
3
|
+
# typed: true
|
4
|
+
# frozen_string_literal: true
|
5
|
+
|
6
|
+
require 'cgi'
|
7
|
+
require 'date'
|
8
|
+
require 'sorbet-runtime'
|
9
|
+
require 'base64'
|
10
|
+
|
11
|
+
module DingSDK
|
12
|
+
module Utils
|
13
|
+
extend T::Sig
|
14
|
+
|
15
|
+
SERIALIZATION_METHOD_TO_CONTENT_TYPE = {
|
16
|
+
'json': 'application/json',
|
17
|
+
'form': 'application/x-www-form-urlencoded',
|
18
|
+
'multipart': 'multipart/form-data',
|
19
|
+
'raw': 'application/octet-stream',
|
20
|
+
'string': 'text/plain'
|
21
|
+
}.freeze
|
22
|
+
|
23
|
+
sig do
|
24
|
+
params(request: Object, nullable: T::Boolean, optional: T::Boolean, request_field_name: Symbol, serialization_method: Symbol)
|
25
|
+
.returns([String, Object, Object])
|
26
|
+
end
|
27
|
+
def self.serialize_request_body(request, nullable, optional, request_field_name, serialization_method)
|
28
|
+
return ['', nil, nil] if request.nil? && !nullable && optional
|
29
|
+
|
30
|
+
return serialize_content_type(request_field_name, SERIALIZATION_METHOD_TO_CONTENT_TYPE[serialization_method], request) if !request.respond_to?(:fields) || !request.respond_to?(request_field_name)
|
31
|
+
|
32
|
+
request_val = request.send(request_field_name)
|
33
|
+
|
34
|
+
request_fields = request.fields
|
35
|
+
request_metadata = nil
|
36
|
+
request_fields.each do |f|
|
37
|
+
if f.name == request_field_name
|
38
|
+
request_metadata = f.metadata[:request]
|
39
|
+
break
|
40
|
+
end
|
41
|
+
end
|
42
|
+
raise StandardError, 'invalid request type' if request_metadata.nil?
|
43
|
+
|
44
|
+
serialize_content_type(
|
45
|
+
:request, request_metadata.fetch(:media_type, 'application/octet-stream'), request_val
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
49
|
+
sig do
|
50
|
+
params(field_name: Symbol, media_type: String, request: Object)
|
51
|
+
.returns([String, Object, T.nilable(T::Array[T::Array[Object]])])
|
52
|
+
end
|
53
|
+
def self.serialize_content_type(field_name, media_type, request)
|
54
|
+
return media_type, ::Crystalline.to_json(request), nil if media_type.match('(application|text)\/.*?\+*json.*')
|
55
|
+
return serialize_multipart_form(media_type, request) if media_type.match('multipart\/.*')
|
56
|
+
return media_type, serialize_form_data(field_name, request), nil if media_type.match('application\/x-www-form-urlencoded.*')
|
57
|
+
return media_type, request, nil if request.is_a?(String) || request.is_a?(Array)
|
58
|
+
|
59
|
+
raise StandardError, "invalid request body type #{type(request)} for mediaType {metadata['media_type']}"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
2
|
+
|
3
|
+
# typed: true
|
4
|
+
# frozen_string_literal: true
|
5
|
+
|
6
|
+
require 'cgi'
|
7
|
+
require 'date'
|
8
|
+
require 'sorbet-runtime'
|
9
|
+
require 'base64'
|
10
|
+
|
11
|
+
module DingSDK
|
12
|
+
module Utils
|
13
|
+
extend T::Sig
|
14
|
+
|
15
|
+
sig { params(req: Faraday::Request, security: Object).void }
|
16
|
+
def self.configure_request_security(req, security)
|
17
|
+
return if security.nil?
|
18
|
+
sec_fields = security.fields
|
19
|
+
sec_fields.each do |sec_field|
|
20
|
+
value = security.send(sec_field.name)
|
21
|
+
next if value.nil?
|
22
|
+
|
23
|
+
metadata = sec_field.metadata[:security]
|
24
|
+
next if metadata.nil?
|
25
|
+
|
26
|
+
_parse_security_option(req, value) if metadata[:option]
|
27
|
+
|
28
|
+
if metadata[:scheme]
|
29
|
+
# Special case for basic auth which could be a flattened struct
|
30
|
+
if metadata[:sub_type] == 'basic' && !value.respond_to?(:fields)
|
31
|
+
_parse_security_scheme(req, metadata, security)
|
32
|
+
else
|
33
|
+
_parse_security_scheme(req, metadata, value)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
sig { params(req: Faraday::Request, option: Object).void }
|
40
|
+
def self._parse_security_option(req, option)
|
41
|
+
opt_fields = option.fields
|
42
|
+
opt_fields.each do |opt_field|
|
43
|
+
metadata = opt_field.metadata[:security]
|
44
|
+
next if metadata.nil? || !metadata.include?(:scheme)
|
45
|
+
|
46
|
+
_parse_security_scheme(req, metadata, option.send(opt_field.name))
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
sig { params(req: Faraday::Request, scheme_metadata: T::Hash[Symbol, String], scheme: Object).void }
|
51
|
+
def self._parse_security_scheme(req, scheme_metadata, scheme)
|
52
|
+
scheme_type = scheme_metadata[:type]
|
53
|
+
sub_type = scheme_metadata[:sub_type]
|
54
|
+
|
55
|
+
if scheme.respond_to? :fields
|
56
|
+
if scheme_type == 'http' && sub_type == 'basic'
|
57
|
+
_parse_basic_auth_scheme(req, scheme)
|
58
|
+
return
|
59
|
+
end
|
60
|
+
|
61
|
+
scheme_fields = scheme.fields
|
62
|
+
scheme_fields.each do |field|
|
63
|
+
metadata = field.metadata[:security]
|
64
|
+
next if metadata.nil? || metadata[:field_name].nil?
|
65
|
+
|
66
|
+
value = scheme.send(field.name)
|
67
|
+
_parse_security_scheme_value(req, scheme_metadata, metadata, value)
|
68
|
+
end
|
69
|
+
else
|
70
|
+
_parse_security_scheme_value(req, scheme_metadata, scheme_metadata, scheme)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
sig do
|
75
|
+
params(req: Faraday::Request, scheme_metadata: T::Hash[Symbol, String],
|
76
|
+
security_metadata: T::Hash[Symbol, String], value: Object).void
|
77
|
+
end
|
78
|
+
def self._parse_security_scheme_value(req, scheme_metadata, security_metadata, value)
|
79
|
+
scheme_type = scheme_metadata[:type]
|
80
|
+
sub_type = scheme_metadata[:sub_type]
|
81
|
+
|
82
|
+
header_name = security_metadata[:field_name]
|
83
|
+
|
84
|
+
case scheme_type
|
85
|
+
when 'apiKey'
|
86
|
+
case sub_type
|
87
|
+
when 'header'
|
88
|
+
req.headers[header_name] = value
|
89
|
+
when 'query'
|
90
|
+
req.params[header_name] = value
|
91
|
+
when 'cookie'
|
92
|
+
req.cookies[header_name] = value
|
93
|
+
else
|
94
|
+
raise StandardError, 'not supported'
|
95
|
+
end
|
96
|
+
when 'openIdConnect'
|
97
|
+
req.headers[header_name] = value.downcase.start_with?('bearer ') ? value : "Bearer #{value}"
|
98
|
+
when 'oauth2'
|
99
|
+
req.headers[header_name] = value.downcase.start_with?('bearer ') ? value : "Bearer #{value}"
|
100
|
+
when 'http'
|
101
|
+
if sub_type == 'bearer'
|
102
|
+
req.headers[header_name] = value.downcase.start_with?('bearer ') ? value : "Bearer #{value}"
|
103
|
+
elsif sub_type != 'custom'
|
104
|
+
raise StandardError, 'not supported'
|
105
|
+
end
|
106
|
+
else
|
107
|
+
raise StandardError, 'not supported'
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
sig { params(req: Faraday::Request, scheme: Object).void }
|
112
|
+
def self._parse_basic_auth_scheme(req, scheme)
|
113
|
+
username, password = ''
|
114
|
+
|
115
|
+
scheme_fields = scheme.fields
|
116
|
+
scheme_fields.each do |scheme_field|
|
117
|
+
metadata = scheme_field.metadata[:security]
|
118
|
+
next if metadata.nil? || !metadata.include?(:field_name)
|
119
|
+
|
120
|
+
field_name = metadata[:field_name]
|
121
|
+
value = scheme.send(scheme_field.name)
|
122
|
+
|
123
|
+
username = value if field_name == 'username'
|
124
|
+
password = value if field_name == 'password'
|
125
|
+
end
|
126
|
+
|
127
|
+
data = "#{username}:#{password}".encode
|
128
|
+
# Use strict_encode, because encode adds newlines after 60 chars
|
129
|
+
# https://docs.ruby-lang.org/en/3.0/Base64.html#method-i-encode64
|
130
|
+
req.headers['Authorization'] = "Basic #{Base64.strict_encode64(data)}"
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
2
|
+
|
3
|
+
# typed: true
|
4
|
+
# frozen_string_literal: true
|
5
|
+
|
6
|
+
require 'faraday/retry'
|
7
|
+
require 'sorbet-runtime'
|
8
|
+
|
9
|
+
module DingSDK
|
10
|
+
module Utils
|
11
|
+
sig { params(clazz: Class, server_url: String, path: String, path_params: Object, gbls: T.nilable(T::Hash[Symbol, T::Hash[Symbol, T::Hash[Symbol, Object]]])).returns(String) }
|
12
|
+
def self.generate_url(clazz, server_url, path, path_params, gbls = nil)
|
13
|
+
clazz.fields.each do |f|
|
14
|
+
param_metadata = f.metadata[:path_param]
|
15
|
+
next if param_metadata.nil?
|
16
|
+
|
17
|
+
if param_metadata.fetch(:style, 'simple') == 'simple'
|
18
|
+
param = path_params.send(f.name) if !path_params.nil?
|
19
|
+
param = _populate_from_globals(f.name, param, 'pathParam', gbls)
|
20
|
+
end
|
21
|
+
|
22
|
+
f_name = param_metadata.fetch(:field_name, f.name)
|
23
|
+
serialization = param_metadata.fetch(:serialization, '')
|
24
|
+
if serialization != ''
|
25
|
+
serialized_params = _get_serialized_params(param_metadata, f_name, param)
|
26
|
+
serialized_params.each do |k, v|
|
27
|
+
path = path.sub("{#{k}}", v)
|
28
|
+
end
|
29
|
+
else
|
30
|
+
if param.is_a? Array
|
31
|
+
pp_vals = []
|
32
|
+
param.each do |pp_val|
|
33
|
+
pp_vals.append(pp_val.to_s)
|
34
|
+
end
|
35
|
+
path = path.sub("{#{param_metadata.fetch(:field_name, f.name)}}", pp_vals.join(','))
|
36
|
+
elsif param.is_a? Hash
|
37
|
+
pp_vals = []
|
38
|
+
param.each do |pp_key, pp_val|
|
39
|
+
value = val_to_string(pp_val)
|
40
|
+
|
41
|
+
if param_metadata.fetch(:explode, false)
|
42
|
+
pp_vals.append("#{pp_key}=#{value}")
|
43
|
+
else
|
44
|
+
pp_vals.append("#{pp_key},#{value}")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
path = path.sub("{#{param_metadata.fetch(:field_name, f.name)}}", pp_vals.join(','))
|
48
|
+
elsif !(param.is_a?(String) || param.is_a?(Integer) ||
|
49
|
+
param.is_a?(Float) || param.is_a?(Complex) || param.is_a?(TrueClass) ||
|
50
|
+
param.is_a?(FalseClass))
|
51
|
+
pp_vals = []
|
52
|
+
attrs = param.fields.filter { |field| field.name && param.respond_to?(field.name.to_sym) }.map(&:name)
|
53
|
+
attrs.each do |attr|
|
54
|
+
field = param.field(attr)
|
55
|
+
|
56
|
+
param_value_metadata = field.metadata[:path_param]
|
57
|
+
|
58
|
+
next if param_value_metadata.nil?
|
59
|
+
|
60
|
+
parm_name = param_value_metadata.fetch(:field_name, f.name)
|
61
|
+
|
62
|
+
param_field_val = param.send(attr)
|
63
|
+
|
64
|
+
if param_field_val.is_a? T::Enum
|
65
|
+
param_field_val = param_field_val.serialize
|
66
|
+
elsif param_field_val.is_a? DateTime
|
67
|
+
param_field_val = param_field_val.strftime('%Y-%m-%dT%H:%M:%S.%NZ')
|
68
|
+
end
|
69
|
+
if !field.nil? && T::Utils::Nilable.is_union_with_nilclass(field.type) && param_field_val.nil?
|
70
|
+
next
|
71
|
+
elsif param_metadata.fetch(:explode, false)
|
72
|
+
pp_vals.append("#{parm_name}=#{param_field_val}")
|
73
|
+
else
|
74
|
+
pp_vals.append("#{parm_name},#{param_field_val}")
|
75
|
+
end
|
76
|
+
end
|
77
|
+
path = path.sub("{#{param_metadata.fetch(:field_name, f.name)}}", pp_vals.join(','))
|
78
|
+
else
|
79
|
+
path = path.sub("{#{param_metadata.fetch(:field_name, f.name)}}", param.to_s)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
server_url.delete_suffix('/') + path
|
85
|
+
end
|
86
|
+
|
87
|
+
sig { params(url_with_params: String, params: T::Hash[Symbol, String]).returns(String) }
|
88
|
+
def self.template_url(url_with_params, params)
|
89
|
+
params.each do |key, value|
|
90
|
+
if value.respond_to? :serialize
|
91
|
+
val_str = value.serialize
|
92
|
+
else
|
93
|
+
val_str = value
|
94
|
+
end
|
95
|
+
url_with_params = url_with_params.gsub("{#{key}}", val_str)
|
96
|
+
end
|
97
|
+
|
98
|
+
url_with_params
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ding_sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.26.
|
4
|
+
version: 0.26.38
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ding
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-06-
|
11
|
+
date: 2025-06-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -242,7 +242,13 @@ files:
|
|
242
242
|
- lib/ding_sdk/sdk_hooks/hooks.rb
|
243
243
|
- lib/ding_sdk/sdk_hooks/types.rb
|
244
244
|
- lib/ding_sdk/sdkconfiguration.rb
|
245
|
+
- lib/ding_sdk/utils/forms.rb
|
246
|
+
- lib/ding_sdk/utils/headers.rb
|
247
|
+
- lib/ding_sdk/utils/query_params.rb
|
248
|
+
- lib/ding_sdk/utils/request_bodies.rb
|
245
249
|
- lib/ding_sdk/utils/retries.rb
|
250
|
+
- lib/ding_sdk/utils/security.rb
|
251
|
+
- lib/ding_sdk/utils/url.rb
|
246
252
|
- lib/ding_sdk/utils/utils.rb
|
247
253
|
homepage: https://github.com/ding-live/ding-ruby.git
|
248
254
|
licenses:
|