ding_sdk 0.26.36 → 0.26.37

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '08d9bc5cc7d546efa59e6cf9547364e7902890a3e8eda07fef77cea8dfb2c49e'
4
- data.tar.gz: c182bb5c09c293ebbc39a9e676e538a83d83e1ab2a4503f51bf8198dfdc0906d
3
+ metadata.gz: 30b1adb998b0df2700640b6566780cf1bcad9be2a53ea5f529158b9ef0cfe441
4
+ data.tar.gz: cbae7c04eca74d11e2cfc806512085c48514a92c1ad08350a0263621b1daedb6
5
5
  SHA512:
6
- metadata.gz: 2b81a60539caa78a9d6d159eeb0f5f4bde5cbce67780c7c3361e02c3999b99202192f26d79b9b24d3b229d90665364637a81e92b6a4379edce8f27c5596cfe28
7
- data.tar.gz: fae2d6db64588fdc7bc1b0e0f8b348168551903eccffd804e51673abe67f1ddae4cd37073a9baa31343ecc4a64ca891abaddec9e80f939b61a8a52d198f07c81
6
+ metadata.gz: 6ba7ca25688fe2096e7c30370a39eeca1932310d90c989b8a2d396f3368e0fca5feaf029985a9e976bc18f36b5453929dd5a060f8909d4ba619860750707f07b
7
+ data.tar.gz: ad28e1288e16b125ff179421462ac3d5388ce8cc39cc5a044bda56ece341babb7cdf2cdf2eaae6918f69879003294d7b9fcb60c02e533b2c85f3c0d7a724fad4
@@ -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.36'
66
+ @sdk_version = '0.26.37'
67
67
  @gen_version = '2.578.0'
68
- @user_agent = 'speakeasy-sdk/ruby 0.26.36 2.578.0 1.0.0 ding_sdk'
68
+ @user_agent = 'speakeasy-sdk/ruby 0.26.37 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.36
4
+ version: 0.26.37
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-04 00:00:00.000000000 Z
11
+ date: 2025-06-05 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: