setsuzoku 0.15.6 → 0.15.7

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: ff8246ca48a229497f92f8c6a5742783fc02a85da6baeb3ace84cabde73805e7
4
- data.tar.gz: ddbe3e59623598c5ac438fee6a0dd5d2bacb568e5546c310cb671d2fa34e4e47
3
+ metadata.gz: 2845af66689814f88f37e06cd20516904d7000d8eb5e7b65893db42f93e47e18
4
+ data.tar.gz: d85e64ea68bf642ce3ac6dda479575d8a34b9896b15e14332072cb35692d65d5
5
5
  SHA512:
6
- metadata.gz: 24ab5631b9babbf9951d12b81e737a1fa6db5438ed5a0fd5997ebb8ddec6f4c0c016b25e2bb9cc5ac0bda87aef32660de9d722bc1adc6189e24060d38b1f0f84
7
- data.tar.gz: 9f4638fafb345772f85ce3b1dbf29cb8e5202d51c8bf58f39eed4d90ee030fea68a6d2091e7e6838e48c559e86786d311d883e700fadd89736450284b2468e2e
6
+ metadata.gz: 8409e05401d6ce653ae9704058a6a5874ffb63687d467514cb7fc69fd3c37dfd7c9a1931d843e558f4726f6a5a5355edb6a841dd888384a52959925e570575aa
7
+ data.tar.gz: d2829f923f90faccaf2afdc7449af20948fc85234a0eb257e6b3d7aece01db815c24e9360cc168c4af45b6bb84cb16e3ba43c972982c8827f02731532ed7cc1e
data/Gemfile.lock CHANGED
@@ -2,8 +2,9 @@ PATH
2
2
  remote: .
3
3
  specs:
4
4
  setsuzoku (0.15.6)
5
- activesupport (>= 5.0, < 7)
5
+ activesupport (>= 5.0, < 8)
6
6
  faraday (>= 2.7.10, < 3.0)
7
+ faraday-multipart (>= 1.0.4, < 2.0)
7
8
  nokogiri (>= 1.10, < 2.0)
8
9
  sorbet-runtime (>= 0.5, < 1.0)
9
10
 
@@ -25,13 +26,22 @@ GEM
25
26
  faraday (2.7.10)
26
27
  faraday-net_http (>= 2.0, < 3.1)
27
28
  ruby2_keywords (>= 0.0.4)
29
+ faraday-multipart (1.0.4)
30
+ multipart-post (~> 2)
28
31
  faraday-net_http (3.0.2)
29
32
  hashdiff (1.0.1)
30
33
  i18n (1.14.1)
31
34
  concurrent-ruby (~> 1.0)
35
+ mini_portile2 (2.8.5)
32
36
  minitest (5.19.0)
37
+ multipart-post (2.4.0)
38
+ nokogiri (1.15.4)
39
+ mini_portile2 (~> 2.8.2)
40
+ racc (~> 1.4)
33
41
  nokogiri (1.15.4-arm64-darwin)
34
42
  racc (~> 1.4)
43
+ nokogiri (1.15.4-x86_64-linux)
44
+ racc (~> 1.4)
35
45
  public_suffix (5.0.4)
36
46
  racc (1.7.1)
37
47
  rake (13.1.0)
@@ -54,6 +64,7 @@ GEM
54
64
  sorbet-static (= 0.5.11151)
55
65
  sorbet-runtime (0.5.10972)
56
66
  sorbet-static (0.5.11151-universal-darwin)
67
+ sorbet-static (0.5.11151-x86_64-linux)
57
68
  tzinfo (2.0.6)
58
69
  concurrent-ruby (~> 1.0)
59
70
  webmock (3.19.1)
@@ -4,6 +4,8 @@
4
4
  require 'active_support/json'
5
5
  require 'active_support/core_ext/hash/indifferent_access'
6
6
  require 'active_support/core_ext/string/access'
7
+ require 'faraday'
8
+ require 'faraday/multipart'
7
9
 
8
10
  module Setsuzoku
9
11
  module Service
@@ -35,32 +37,49 @@ module Setsuzoku
35
37
  # attachment_urls - 'Array<String>' List of attachment urls to be attached as form files.
36
38
  #
37
39
  # @return [Hash] the parsed response object.
38
- sig { override.params(request: RestAPIRequest, action_details: T::Hash[T.untyped, T.untyped], options: T.untyped).returns(Faraday::Response) }
40
+ sig do
41
+ override.params(request: RestAPIRequest, action_details: T::Hash[T.untyped, T.untyped],
42
+ options: T.untyped).returns(Faraday::Response)
43
+ end
39
44
  def perform_external_call(request:, action_details:, **options)
40
- request_properties = self.get_request_properties(action_name: request.action, action_details: action_details, req_params: request.body)
41
- request_options = self.request_options(request_properties[:request_format], action_details[:actions][request.action])
45
+ request_properties = get_request_properties(action_name: request.action,
46
+ action_details: action_details, req_params: request.body)
47
+ request_options = self.request_options(request_properties[:request_format],
48
+ action_details[:actions][request.action])
42
49
  authorization = request_options.delete(:authorization)
43
- full_request = self.formulate_request(request_properties, request_options)
44
-
45
- @faraday = Faraday.new(url: request_properties[:formatted_full_url], request: { params_encoder: Faraday::FlatParamsEncoder }) do |faraday|
46
- faraday.request(:multipart) if options[:attachment_urls].present?
47
- faraday.request(:url_encoded)
48
- unless request.without_headers
49
- if authorization
50
- # updated authorization with updated faraday
51
- # https://lostisland.github.io/faraday/#/middleware/included/authentication
52
- if authorization.key?(:token)
53
- faraday.request(:authorization, 'Bearer', authorization[:token])
54
- elsif authorization.key?(:basic_auth)
55
- faraday.request(:authorization, :basic, authorization[:basic_auth][:username], authorization[:basic_auth][:password])
56
- end
50
+ full_request = formulate_request(request_properties, request_options)
51
+
52
+ connection = Faraday.new(url: request_properties[:formatted_full_url],
53
+ request: { params_encoder: Faraday::FlatParamsEncoder }) do |faraday|
54
+ # Request type middle-ware
55
+ if options[:attachment_urls].present? || request_options.dig(:headers,
56
+ :'Content-Type')&.include?('multipart')
57
+ faraday.request(:multipart)
58
+ else
59
+ faraday.request(:url_encoded)
60
+ end
61
+
62
+ # Logging
63
+ faraday.response :logger, Logger.new($stdout), bodies: true if Rails.env.development?
64
+
65
+ if !request.without_headers && authorization
66
+ # updated authorization with updated faraday
67
+ # https://lostisland.github.io/faraday/#/middleware/included/authentication
68
+ if authorization.key?(:token)
69
+ faraday.request(:authorization, 'Bearer', authorization[:token])
70
+ elsif authorization.key?(:basic_auth)
71
+ faraday.request(:authorization, :basic, authorization[:basic_auth][:username],
72
+ authorization[:basic_auth][:password])
57
73
  end
58
74
  end
75
+
59
76
  faraday.adapter Faraday.default_adapter
60
77
  end
78
+
79
+ # Attachments URLs
61
80
  attachment_urls = options[:attachment_url] || options[:attachment_urls]
62
81
  if attachment_urls.present?
63
- resp = @faraday.post do |req|
82
+ resp = connection.post do |req|
64
83
  payload = {}
65
84
  # create an array to just iterate over for 1 or many urls
66
85
  attachment_urls = [attachment_urls] if options[:attachment_url]
@@ -79,24 +98,36 @@ module Setsuzoku
79
98
  end
80
99
  else
81
100
  if request.without_headers
82
- @faraday.headers = {}
101
+ connection.headers = {}
83
102
  elsif request_options[:headers]
84
- @faraday.headers = (@faraday.headers || {}).merge(request_options[:headers])
103
+ connection.headers = (connection.headers || {}).merge(request_options[:headers])
104
+ end
105
+
106
+ # TODO: !!!! this is wrong here because multipart is used for images as well not only text/plain
107
+ # TODO: What if the request params are empty?
108
+ if connection.builder.app.class <= Faraday::Multipart::Middleware
109
+ full_request = request_properties[:req_params].transform_values do |v|
110
+ Faraday::Multipart::ParamPart.new(v, 'text/plain')
111
+ end
85
112
  end
86
- resp = @faraday.send(request_properties[:request_method], request_properties[:formatted_full_url], full_request)
113
+
114
+ resp = connection.send(request_properties[:request_method], request_properties[:formatted_full_url],
115
+ full_request)
87
116
  end
117
+
88
118
  resp
89
119
  end
90
120
 
91
121
  sig do
92
122
  params(
93
- action_name: Symbol,
94
- for_stub: T::Boolean,
95
- req_params: T::Hash[T.untyped, T.untyped],
96
- action_details: T::Hash[Symbol, T.untyped]
123
+ action_name: Symbol,
124
+ for_stub: T::Boolean,
125
+ req_params: T::Hash[T.untyped, T.untyped],
126
+ action_details: T::Hash[Symbol, T.untyped]
97
127
  ).returns(T::Hash[Symbol, T.untyped])
98
128
  end
99
- def get_request_properties(action_name:, for_stub: false, req_params: {}, action_details: { actions: self.plugin.api_actions, url: self.plugin.api_base_url })
129
+ def get_request_properties(action_name:, for_stub: false, req_params: {},
130
+ action_details: { actions: plugin.api_actions, url: plugin.api_base_url })
100
131
  action = action_details[:actions][action_name]
101
132
  url = action.has_key?(:request_url) ? action[:request_url] : action_details[:url]
102
133
  request_method, endpoint = action.first
@@ -105,15 +136,15 @@ module Setsuzoku
105
136
  response_format = action[:response_type]
106
137
  stub_data = action[:stub_data] if for_stub
107
138
  full_url = url + endpoint
108
- formatted_full_url, req_params = self.replace_dynamic_vars(full_url: full_url, req_params: req_params)
139
+ formatted_full_url, req_params = replace_dynamic_vars(full_url: full_url, req_params: req_params)
109
140
  {
110
- request_method: request_method,
111
- endpoint: endpoint,
112
- request_format: request_format,
113
- response_format: response_format,
114
- formatted_full_url: formatted_full_url,
115
- req_params: req_params,
116
- stub_data: stub_data,
141
+ request_method: request_method,
142
+ endpoint: endpoint,
143
+ request_format: request_format,
144
+ response_format: response_format,
145
+ formatted_full_url: formatted_full_url,
146
+ req_params: req_params,
147
+ stub_data: stub_data
117
148
  }
118
149
  end
119
150
 
@@ -138,29 +169,27 @@ module Setsuzoku
138
169
  else
139
170
  params # Faraday supports empty hashes for other request types...
140
171
  end
141
- else
172
+ elsif request_format.include?('urlencoded')
142
173
  # if the header or request format include urlencoded return the body as a hash
143
- if request_format.include?('urlencoded')
144
- params
145
- else
146
- # return either xml or json
147
- if request_properties[:request_format] == :xml
148
- convert_hash_to_xml(params)
149
- else
150
- params.to_json
151
- end
152
- end
174
+ params
175
+ elsif request_properties[:request_format] == :xml
176
+ # return either xml or json
177
+ convert_hash_to_xml(params)
178
+ else
179
+ params.to_json
153
180
  end
154
181
  end
155
182
 
156
183
  def request_options(request_format = nil, action_details = {})
157
- request_options = {}
158
- (request_options = {})[:headers] = {}
184
+ request_options = {
185
+ headers: {}
186
+ }
159
187
  request_options[:headers]
160
- .merge!(self.auth_strategy.get_from_context(:auth_headers).except(:authorization))
161
- .merge!(self.get_from_context(:api_headers))
188
+ .merge!(auth_strategy.get_from_context(:auth_headers).except(:authorization))
189
+ .merge!(get_from_context(:api_headers))
162
190
  .merge!(action_details[:request_options] || {})
163
- request_options[:authorization] = action_details[:authorization] || self.auth_strategy.get_from_context(:auth_headers)[:authorization]
191
+ request_options[:authorization] =
192
+ action_details[:authorization] || auth_strategy.get_from_context(:auth_headers)[:authorization]
164
193
 
165
194
  content_type = case request_format
166
195
  when :json
@@ -174,7 +203,8 @@ module Setsuzoku
174
203
  when :'x-www-form-urlencoded;charset=UTF-8'
175
204
  'application/x-www-form-urlencoded;charset=UTF-8'
176
205
  else
177
- 'application/json'
206
+ # allow any format to be passed otherwise default to application/json
207
+ request_format || 'application/json'
178
208
  end
179
209
  (request_options[:headers] ||= {})[:'Content-Type'] = content_type
180
210
  request_options
@@ -187,7 +217,7 @@ module Setsuzoku
187
217
  # it in the body and the url, then you should put it in params twice with different names.
188
218
  req_params = req_params.dup
189
219
  full_url = full_url.dup
190
- dynamic_vars = self.plugin.dynamic_url_params.merge(req_params).with_indifferent_access
220
+ dynamic_vars = plugin.dynamic_url_params.merge(req_params).with_indifferent_access
191
221
  full_url.scan(/({{.*?}})/).flatten.each do |var|
192
222
  var_name = var.tr('{{ }}', '')
193
223
  next unless dynamic_vars[var_name]
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Setsuzoku
5
- VERSION = '0.15.6'
6
- end
5
+ VERSION = '0.15.7'
6
+ end
data/setsuzoku.gemspec CHANGED
@@ -40,9 +40,10 @@ Gem::Specification.new do |spec|
40
40
  spec.add_development_dependency "rake", "~> 13.0"
41
41
  spec.add_development_dependency "rspec", "3.8"
42
42
  spec.add_development_dependency "webmock", "3.19.1"
43
- spec.add_runtime_dependency "activesupport", ">= 5.0", '< 7'
43
+ spec.add_runtime_dependency "activesupport", ">= 5.0", '< 8'
44
44
  spec.add_development_dependency "sorbet", ">= 0.5", '< 1.0'
45
45
  spec.add_runtime_dependency "sorbet-runtime", ">= 0.5", '< 1.0'
46
46
  spec.add_runtime_dependency "faraday", ">= 2.7.10", "< 3.0"
47
+ spec.add_runtime_dependency "faraday-multipart", ">= 1.0.4", "< 2.0"
47
48
  spec.add_runtime_dependency "nokogiri", ">= 1.10", "< 2.0"
48
49
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: setsuzoku
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.6
4
+ version: 0.15.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luke Stadtler
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-14 00:00:00.000000000 Z
11
+ date: 2024-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -75,7 +75,7 @@ dependencies:
75
75
  version: '5.0'
76
76
  - - "<"
77
77
  - !ruby/object:Gem::Version
78
- version: '7'
78
+ version: '8'
79
79
  type: :runtime
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
@@ -85,7 +85,7 @@ dependencies:
85
85
  version: '5.0'
86
86
  - - "<"
87
87
  - !ruby/object:Gem::Version
88
- version: '7'
88
+ version: '8'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: sorbet
91
91
  requirement: !ruby/object:Gem::Requirement
@@ -146,6 +146,26 @@ dependencies:
146
146
  - - "<"
147
147
  - !ruby/object:Gem::Version
148
148
  version: '3.0'
149
+ - !ruby/object:Gem::Dependency
150
+ name: faraday-multipart
151
+ requirement: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: 1.0.4
156
+ - - "<"
157
+ - !ruby/object:Gem::Version
158
+ version: '2.0'
159
+ type: :runtime
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: 1.0.4
166
+ - - "<"
167
+ - !ruby/object:Gem::Version
168
+ version: '2.0'
149
169
  - !ruby/object:Gem::Dependency
150
170
  name: nokogiri
151
171
  requirement: !ruby/object:Gem::Requirement
@@ -267,7 +287,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
267
287
  - !ruby/object:Gem::Version
268
288
  version: '0'
269
289
  requirements: []
270
- rubygems_version: 3.1.6
290
+ rubygems_version: 3.2.33
271
291
  signing_key:
272
292
  specification_version: 4
273
293
  summary: Extensible 3rd-party interface and functionality plugins