setsuzoku 0.15.6 → 0.15.7

Sign up to get free protection for your applications and to get access to all the features.
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