setsuzoku 0.15.7 → 0.16.0

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: 2845af66689814f88f37e06cd20516904d7000d8eb5e7b65893db42f93e47e18
4
- data.tar.gz: d85e64ea68bf642ce3ac6dda479575d8a34b9896b15e14332072cb35692d65d5
3
+ metadata.gz: dc4ead33dfa830fdd30204de17dcf9f1d91e5b46b2257ea7a9f22a5143830fd6
4
+ data.tar.gz: f86454d64fceaa197de41e01b48ec3c34ea27f1d5357b136fd963560337a70c3
5
5
  SHA512:
6
- metadata.gz: 8409e05401d6ce653ae9704058a6a5874ffb63687d467514cb7fc69fd3c37dfd7c9a1931d843e558f4726f6a5a5355edb6a841dd888384a52959925e570575aa
7
- data.tar.gz: d2829f923f90faccaf2afdc7449af20948fc85234a0eb257e6b3d7aece01db815c24e9360cc168c4af45b6bb84cb16e3ba43c972982c8827f02731532ed7cc1e
6
+ metadata.gz: ce75a4ff7eecb78d7fa98a8b944bf34012e86b0a811247aca685a9cb3efd24cb3b8db3b051fdc0c23edcc69f13ac3b4fbce386872672744b94d1be4586dbeb6c
7
+ data.tar.gz: 7e444ac7d3dd84f4d933e6c3e7cc8f5d56ce1ae0c0172f071dac80e6b43cf7354d8e1d9b629465524acaae724cbeaefa1bba66bed2230bfcc4797d07fb381e87
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.2.3
data/Gemfile.lock CHANGED
@@ -1,40 +1,49 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- setsuzoku (0.15.6)
5
- activesupport (>= 5.0, < 8)
4
+ setsuzoku (0.16.0)
5
+ activesupport (>= 8.0, < 9)
6
6
  faraday (>= 2.7.10, < 3.0)
7
- faraday-multipart (>= 1.0.4, < 2.0)
8
7
  nokogiri (>= 1.10, < 2.0)
9
8
  sorbet-runtime (>= 0.5, < 1.0)
10
9
 
11
10
  GEM
12
11
  remote: https://rubygems.org/
13
12
  specs:
14
- activesupport (6.1.7.4)
15
- concurrent-ruby (~> 1.0, >= 1.0.2)
13
+ activesupport (8.1.2)
14
+ base64
15
+ bigdecimal
16
+ concurrent-ruby (~> 1.0, >= 1.3.1)
17
+ connection_pool (>= 2.2.5)
18
+ drb
16
19
  i18n (>= 1.6, < 2)
20
+ json
21
+ logger (>= 1.4.2)
17
22
  minitest (>= 5.1)
18
- tzinfo (~> 2.0)
19
- zeitwerk (~> 2.3)
23
+ securerandom (>= 0.3)
24
+ tzinfo (~> 2.0, >= 2.0.5)
25
+ uri (>= 0.13.1)
20
26
  addressable (2.8.6)
21
27
  public_suffix (>= 2.0.2, < 6.0)
22
- concurrent-ruby (1.2.2)
28
+ base64 (0.3.0)
29
+ bigdecimal (4.0.1)
30
+ concurrent-ruby (1.3.6)
31
+ connection_pool (3.0.2)
23
32
  crack (0.4.5)
24
33
  rexml
25
- diff-lcs (1.4.2)
34
+ diff-lcs (1.6.2)
35
+ drb (2.2.3)
26
36
  faraday (2.7.10)
27
37
  faraday-net_http (>= 2.0, < 3.1)
28
38
  ruby2_keywords (>= 0.0.4)
29
- faraday-multipart (1.0.4)
30
- multipart-post (~> 2)
31
39
  faraday-net_http (3.0.2)
32
40
  hashdiff (1.0.1)
33
41
  i18n (1.14.1)
34
42
  concurrent-ruby (~> 1.0)
35
- mini_portile2 (2.8.5)
43
+ json (2.18.1)
44
+ logger (1.7.0)
45
+ mini_portile2 (2.8.9)
36
46
  minitest (5.19.0)
37
- multipart-post (2.4.0)
38
47
  nokogiri (1.15.4)
39
48
  mini_portile2 (~> 2.8.2)
40
49
  racc (~> 1.4)
@@ -46,20 +55,21 @@ GEM
46
55
  racc (1.7.1)
47
56
  rake (13.1.0)
48
57
  rexml (3.2.6)
49
- rspec (3.8.0)
50
- rspec-core (~> 3.8.0)
51
- rspec-expectations (~> 3.8.0)
52
- rspec-mocks (~> 3.8.0)
53
- rspec-core (3.8.2)
54
- rspec-support (~> 3.8.0)
55
- rspec-expectations (3.8.6)
58
+ rspec (3.13.0)
59
+ rspec-core (~> 3.13.0)
60
+ rspec-expectations (~> 3.13.0)
61
+ rspec-mocks (~> 3.13.0)
62
+ rspec-core (3.13.6)
63
+ rspec-support (~> 3.13.0)
64
+ rspec-expectations (3.13.5)
56
65
  diff-lcs (>= 1.2.0, < 2.0)
57
- rspec-support (~> 3.8.0)
58
- rspec-mocks (3.8.2)
66
+ rspec-support (~> 3.13.0)
67
+ rspec-mocks (3.13.7)
59
68
  diff-lcs (>= 1.2.0, < 2.0)
60
- rspec-support (~> 3.8.0)
61
- rspec-support (3.8.3)
69
+ rspec-support (~> 3.13.0)
70
+ rspec-support (3.13.7)
62
71
  ruby2_keywords (0.0.5)
72
+ securerandom (0.4.1)
63
73
  sorbet (0.5.11151)
64
74
  sorbet-static (= 0.5.11151)
65
75
  sorbet-runtime (0.5.10972)
@@ -67,11 +77,11 @@ GEM
67
77
  sorbet-static (0.5.11151-x86_64-linux)
68
78
  tzinfo (2.0.6)
69
79
  concurrent-ruby (~> 1.0)
80
+ uri (1.1.1)
70
81
  webmock (3.19.1)
71
82
  addressable (>= 2.8.0)
72
83
  crack (>= 0.3.2)
73
84
  hashdiff (>= 0.4.0, < 2.0.0)
74
- zeitwerk (2.6.11)
75
85
 
76
86
  PLATFORMS
77
87
  arm64-darwin-23
@@ -81,7 +91,7 @@ PLATFORMS
81
91
  DEPENDENCIES
82
92
  bundler (~> 2.4.22)
83
93
  rake (~> 13.0)
84
- rspec (= 3.8)
94
+ rspec (= 3.13)
85
95
  setsuzoku!
86
96
  sorbet (>= 0.5, < 1.0)
87
97
  webmock (= 3.19.1)
@@ -4,8 +4,6 @@
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'
9
7
 
10
8
  module Setsuzoku
11
9
  module Service
@@ -37,49 +35,32 @@ module Setsuzoku
37
35
  # attachment_urls - 'Array<String>' List of attachment urls to be attached as form files.
38
36
  #
39
37
  # @return [Hash] the parsed response object.
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
38
+ sig { override.params(request: RestAPIRequest, action_details: T::Hash[T.untyped, T.untyped], options: T.untyped).returns(Faraday::Response) }
44
39
  def perform_external_call(request:, action_details:, **options)
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])
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])
49
42
  authorization = request_options.delete(:authorization)
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])
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
73
57
  end
74
58
  end
75
-
76
59
  faraday.adapter Faraday.default_adapter
77
60
  end
78
-
79
- # Attachments URLs
80
61
  attachment_urls = options[:attachment_url] || options[:attachment_urls]
81
62
  if attachment_urls.present?
82
- resp = connection.post do |req|
63
+ resp = @faraday.post do |req|
83
64
  payload = {}
84
65
  # create an array to just iterate over for 1 or many urls
85
66
  attachment_urls = [attachment_urls] if options[:attachment_url]
@@ -98,36 +79,24 @@ module Setsuzoku
98
79
  end
99
80
  else
100
81
  if request.without_headers
101
- connection.headers = {}
82
+ @faraday.headers = {}
102
83
  elsif 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
84
+ @faraday.headers = (@faraday.headers || {}).merge(request_options[:headers])
112
85
  end
113
-
114
- resp = connection.send(request_properties[:request_method], request_properties[:formatted_full_url],
115
- full_request)
86
+ resp = @faraday.send(request_properties[:request_method], request_properties[:formatted_full_url], full_request)
116
87
  end
117
-
118
88
  resp
119
89
  end
120
90
 
121
91
  sig do
122
92
  params(
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]
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]
127
97
  ).returns(T::Hash[Symbol, T.untyped])
128
98
  end
129
- def get_request_properties(action_name:, for_stub: false, req_params: {},
130
- action_details: { actions: plugin.api_actions, url: plugin.api_base_url })
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 })
131
100
  action = action_details[:actions][action_name]
132
101
  url = action.has_key?(:request_url) ? action[:request_url] : action_details[:url]
133
102
  request_method, endpoint = action.first
@@ -136,15 +105,15 @@ module Setsuzoku
136
105
  response_format = action[:response_type]
137
106
  stub_data = action[:stub_data] if for_stub
138
107
  full_url = url + endpoint
139
- formatted_full_url, req_params = replace_dynamic_vars(full_url: full_url, req_params: req_params)
108
+ formatted_full_url, req_params = self.replace_dynamic_vars(full_url: full_url, req_params: req_params)
140
109
  {
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
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,
148
117
  }
149
118
  end
150
119
 
@@ -169,27 +138,29 @@ module Setsuzoku
169
138
  else
170
139
  params # Faraday supports empty hashes for other request types...
171
140
  end
172
- elsif request_format.include?('urlencoded')
173
- # if the header or request format include urlencoded return the body as a hash
174
- params
175
- elsif request_properties[:request_format] == :xml
176
- # return either xml or json
177
- convert_hash_to_xml(params)
178
141
  else
179
- params.to_json
142
+ # 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
180
153
  end
181
154
  end
182
155
 
183
156
  def request_options(request_format = nil, action_details = {})
184
- request_options = {
185
- headers: {}
186
- }
157
+ request_options = {}
158
+ (request_options = {})[:headers] = {}
187
159
  request_options[:headers]
188
- .merge!(auth_strategy.get_from_context(:auth_headers).except(:authorization))
189
- .merge!(get_from_context(:api_headers))
160
+ .merge!(self.auth_strategy.get_from_context(:auth_headers).except(:authorization))
161
+ .merge!(self.get_from_context(:api_headers))
190
162
  .merge!(action_details[:request_options] || {})
191
- request_options[:authorization] =
192
- action_details[:authorization] || auth_strategy.get_from_context(:auth_headers)[:authorization]
163
+ request_options[:authorization] = action_details[:authorization] || self.auth_strategy.get_from_context(:auth_headers)[:authorization]
193
164
 
194
165
  content_type = case request_format
195
166
  when :json
@@ -203,8 +174,7 @@ module Setsuzoku
203
174
  when :'x-www-form-urlencoded;charset=UTF-8'
204
175
  'application/x-www-form-urlencoded;charset=UTF-8'
205
176
  else
206
- # allow any format to be passed otherwise default to application/json
207
- request_format || 'application/json'
177
+ 'application/json'
208
178
  end
209
179
  (request_options[:headers] ||= {})[:'Content-Type'] = content_type
210
180
  request_options
@@ -217,7 +187,7 @@ module Setsuzoku
217
187
  # it in the body and the url, then you should put it in params twice with different names.
218
188
  req_params = req_params.dup
219
189
  full_url = full_url.dup
220
- dynamic_vars = plugin.dynamic_url_params.merge(req_params).with_indifferent_access
190
+ dynamic_vars = self.plugin.dynamic_url_params.merge(req_params).with_indifferent_access
221
191
  full_url.scan(/({{.*?}})/).flatten.each do |var|
222
192
  var_name = var.tr('{{ }}', '')
223
193
  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.7'
6
- end
5
+ VERSION = '0.16.0'
6
+ end
data/setsuzoku.gemspec CHANGED
@@ -38,12 +38,11 @@ Gem::Specification.new do |spec|
38
38
 
39
39
  spec.add_development_dependency "bundler", "~> 2.4.22"
40
40
  spec.add_development_dependency "rake", "~> 13.0"
41
- spec.add_development_dependency "rspec", "3.8"
41
+ spec.add_development_dependency "rspec", "3.13"
42
42
  spec.add_development_dependency "webmock", "3.19.1"
43
- spec.add_runtime_dependency "activesupport", ">= 5.0", '< 8'
43
+ spec.add_runtime_dependency "activesupport", ">= 8.0", '< 9'
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"
48
47
  spec.add_runtime_dependency "nokogiri", ">= 1.10", "< 2.0"
49
48
  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.7
4
+ version: 0.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luke Stadtler
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-04-12 00:00:00.000000000 Z
11
+ date: 2026-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - '='
46
46
  - !ruby/object:Gem::Version
47
- version: '3.8'
47
+ version: '3.13'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
- version: '3.8'
54
+ version: '3.13'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: webmock
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -72,20 +72,20 @@ dependencies:
72
72
  requirements:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '5.0'
75
+ version: '8.0'
76
76
  - - "<"
77
77
  - !ruby/object:Gem::Version
78
- version: '8'
78
+ version: '9'
79
79
  type: :runtime
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
82
82
  requirements:
83
83
  - - ">="
84
84
  - !ruby/object:Gem::Version
85
- version: '5.0'
85
+ version: '8.0'
86
86
  - - "<"
87
87
  - !ruby/object:Gem::Version
88
- version: '8'
88
+ version: '9'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: sorbet
91
91
  requirement: !ruby/object:Gem::Requirement
@@ -146,26 +146,6 @@ 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'
169
149
  - !ruby/object:Gem::Dependency
170
150
  name: nokogiri
171
151
  requirement: !ruby/object:Gem::Requirement
@@ -199,6 +179,7 @@ files:
199
179
  - ".github/workflows/ruby.yml"
200
180
  - ".gitignore"
201
181
  - ".rspec"
182
+ - ".ruby-version"
202
183
  - ".travis.yml"
203
184
  - CODE_OF_CONDUCT.md
204
185
  - Gemfile
@@ -287,7 +268,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
287
268
  - !ruby/object:Gem::Version
288
269
  version: '0'
289
270
  requirements: []
290
- rubygems_version: 3.2.33
271
+ rubygems_version: 3.4.19
291
272
  signing_key:
292
273
  specification_version: 4
293
274
  summary: Extensible 3rd-party interface and functionality plugins