setsuzoku 0.15.5 → 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: d96415c7bf9bbd2ac52f72e9460277d1fceb768f85a504fc786206d823113fdc
4
- data.tar.gz: cb0d401f5f761ff2e8b83ab78924bb301e795338728f762bd699d08b8736a968
3
+ metadata.gz: 2845af66689814f88f37e06cd20516904d7000d8eb5e7b65893db42f93e47e18
4
+ data.tar.gz: d85e64ea68bf642ce3ac6dda479575d8a34b9896b15e14332072cb35692d65d5
5
5
  SHA512:
6
- metadata.gz: a4db4159146b7cc977f81d11eb4bf4bf81adfafe5f7de1ac6f25bca74d277658799b068692595ccc7c44e95ab9e089a15413782050cad2c25bd459cd0deed3ea
7
- data.tar.gz: c56da6f3d62467b6c23ec698701500823c2ae715bafd7881f4132c5658c6fd95b7cfef44154d577b7bf6a2c14661e7aaca356bad75ecf9a74c1aeb45d6ccf76e
6
+ metadata.gz: 8409e05401d6ce653ae9704058a6a5874ffb63687d467514cb7fc69fd3c37dfd7c9a1931d843e558f4726f6a5a5355edb6a841dd888384a52959925e570575aa
7
+ data.tar.gz: d2829f923f90faccaf2afdc7449af20948fc85234a0eb257e6b3d7aece01db815c24e9360cc168c4af45b6bb84cb16e3ba43c972982c8827f02731532ed7cc1e
@@ -0,0 +1,35 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Ruby
9
+
10
+ on:
11
+ push:
12
+ branches: [ "master" ]
13
+ pull_request:
14
+ branches: [ "master" ]
15
+
16
+ permissions:
17
+ contents: read
18
+
19
+ jobs:
20
+ test:
21
+
22
+ runs-on: ubuntu-latest
23
+ strategy:
24
+ matrix:
25
+ ruby-version: ['2.7.7', '3.2.2']
26
+
27
+ steps:
28
+ - uses: actions/checkout@v4
29
+ - name: Set up Ruby
30
+ uses: ruby/setup-ruby@v1
31
+ with:
32
+ ruby-version: ${{ matrix.ruby-version }}
33
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
34
+ - name: Run tests
35
+ run: bundle exec rake
data/Gemfile.lock CHANGED
@@ -1,9 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- setsuzoku (0.15.5)
5
- activesupport (>= 5.0, < 7)
4
+ setsuzoku (0.15.6)
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
 
@@ -16,27 +17,35 @@ GEM
16
17
  minitest (>= 5.1)
17
18
  tzinfo (~> 2.0)
18
19
  zeitwerk (~> 2.3)
19
- addressable (2.7.0)
20
- public_suffix (>= 2.0.2, < 5.0)
20
+ addressable (2.8.6)
21
+ public_suffix (>= 2.0.2, < 6.0)
21
22
  concurrent-ruby (1.2.2)
22
- crack (0.4.3)
23
- safe_yaml (~> 1.0.0)
23
+ crack (0.4.5)
24
+ rexml
24
25
  diff-lcs (1.4.2)
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)
32
- mini_portile2 (2.8.4)
35
+ mini_portile2 (2.8.5)
33
36
  minitest (5.19.0)
37
+ multipart-post (2.4.0)
34
38
  nokogiri (1.15.4)
35
39
  mini_portile2 (~> 2.8.2)
36
40
  racc (~> 1.4)
37
- public_suffix (4.0.5)
41
+ nokogiri (1.15.4-arm64-darwin)
42
+ racc (~> 1.4)
43
+ nokogiri (1.15.4-x86_64-linux)
44
+ racc (~> 1.4)
45
+ public_suffix (5.0.4)
38
46
  racc (1.7.1)
39
- rake (10.5.0)
47
+ rake (13.1.0)
48
+ rexml (3.2.6)
40
49
  rspec (3.8.0)
41
50
  rspec-core (~> 3.8.0)
42
51
  rspec-expectations (~> 3.8.0)
@@ -51,29 +60,31 @@ GEM
51
60
  rspec-support (~> 3.8.0)
52
61
  rspec-support (3.8.3)
53
62
  ruby2_keywords (0.0.5)
54
- safe_yaml (1.0.5)
55
- sorbet (0.5.10030)
56
- sorbet-static (= 0.5.10030)
63
+ sorbet (0.5.11151)
64
+ sorbet-static (= 0.5.11151)
57
65
  sorbet-runtime (0.5.10972)
58
- sorbet-static (0.5.10030-universal-darwin-14)
66
+ sorbet-static (0.5.11151-universal-darwin)
67
+ sorbet-static (0.5.11151-x86_64-linux)
59
68
  tzinfo (2.0.6)
60
69
  concurrent-ruby (~> 1.0)
61
- webmock (3.8.0)
62
- addressable (>= 2.3.6)
70
+ webmock (3.19.1)
71
+ addressable (>= 2.8.0)
63
72
  crack (>= 0.3.2)
64
73
  hashdiff (>= 0.4.0, < 2.0.0)
65
74
  zeitwerk (2.6.11)
66
75
 
67
76
  PLATFORMS
77
+ arm64-darwin-23
68
78
  ruby
79
+ x86_64-linux
69
80
 
70
81
  DEPENDENCIES
71
- bundler (~> 1.17)
72
- rake (~> 10.0)
82
+ bundler (~> 2.4.22)
83
+ rake (~> 13.0)
73
84
  rspec (= 3.8)
74
85
  setsuzoku!
75
86
  sorbet (>= 0.5, < 1.0)
76
- webmock (= 3.8)
87
+ webmock (= 3.19.1)
77
88
 
78
89
  BUNDLED WITH
79
- 1.17.2
90
+ 2.4.22
@@ -87,7 +87,7 @@ module Setsuzoku
87
87
  self.registered_instance = options[:registering_instance]
88
88
  if context[:service] && context[:service][:type]
89
89
  service = AVAILABLE_SERVICES[context[:service][:type]]
90
- self.service = service.new(service_config)
90
+ self.service = service.new(**service_config)
91
91
  end
92
92
  self.config_context = context.merge(options.except(:registering_instance))
93
93
  self
@@ -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.5'
6
- end
5
+ VERSION = '0.15.7'
6
+ end
data/setsuzoku.gemspec CHANGED
@@ -36,14 +36,14 @@ Gem::Specification.new do |spec|
36
36
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
37
37
  spec.require_paths = ["lib"]
38
38
 
39
- spec.add_development_dependency "bundler", "~> 1.17"
40
- spec.add_development_dependency "rake", "~> 10.0"
39
+ spec.add_development_dependency "bundler", "~> 2.4.22"
40
+ spec.add_development_dependency "rake", "~> 13.0"
41
41
  spec.add_development_dependency "rspec", "3.8"
42
- spec.add_development_dependency "webmock", "3.8"
43
- spec.add_runtime_dependency "activesupport", ">= 5.0", '< 7'
42
+ spec.add_development_dependency "webmock", "3.19.1"
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
- #TODO: we should remove httparty if we can just use faraday
47
46
  spec.add_runtime_dependency "faraday", ">= 2.7.10", "< 3.0"
47
+ spec.add_runtime_dependency "faraday-multipart", ">= 1.0.4", "< 2.0"
48
48
  spec.add_runtime_dependency "nokogiri", ">= 1.10", "< 2.0"
49
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.5
4
+ version: 0.15.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luke Stadtler
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-08-17 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
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.17'
19
+ version: 2.4.22
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.17'
26
+ version: 2.4.22
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '13.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '13.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - '='
60
60
  - !ruby/object:Gem::Version
61
- version: '3.8'
61
+ version: 3.19.1
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - '='
67
67
  - !ruby/object:Gem::Version
68
- version: '3.8'
68
+ version: 3.19.1
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: activesupport
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -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
@@ -176,6 +196,7 @@ extensions: []
176
196
  extra_rdoc_files: []
177
197
  files:
178
198
  - ".gitattributes"
199
+ - ".github/workflows/ruby.yml"
179
200
  - ".gitignore"
180
201
  - ".rspec"
181
202
  - ".travis.yml"
@@ -251,7 +272,7 @@ homepage: https://github.com/rocketreferrals/setsuzoku
251
272
  licenses:
252
273
  - MIT
253
274
  metadata: {}
254
- post_install_message:
275
+ post_install_message:
255
276
  rdoc_options: []
256
277
  require_paths:
257
278
  - lib
@@ -266,8 +287,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
266
287
  - !ruby/object:Gem::Version
267
288
  version: '0'
268
289
  requirements: []
269
- rubygems_version: 3.4.17
270
- signing_key:
290
+ rubygems_version: 3.2.33
291
+ signing_key:
271
292
  specification_version: 4
272
293
  summary: Extensible 3rd-party interface and functionality plugins
273
294
  test_files: []