setsuzoku 0.12.57 → 0.14.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: 354bcd90c475c2613cf86f61b262da5d4437e882ef35cec8f275c19dd3aa2a00
4
- data.tar.gz: 864a061588fa66caab9cf5d811bd1e437a9f3a6f58e7869c2d93f94971f68554
3
+ metadata.gz: 4233d295eb8e38d96442e9727a7325cf1b7673f41fd1575af095a4c89563213c
4
+ data.tar.gz: a25508116b564e0fdc9aaa007b56a72404b8f7116d7fe7506e008337717a649c
5
5
  SHA512:
6
- metadata.gz: 8577f822f98a0185f68d994043f5021ad375672279a93c9e148918e4a8ada56b1bfae756f2d15b4639ea5aab58223349cd31f0ce6386e5cca2b0997b56c34bbb
7
- data.tar.gz: 9f4924eb243e5c7c801325d793f6875efc2e50100c95cc271dc49edefae07793366484e7e805f432fa3a0a2461d1a3018a08bce2585c365da7fcb4e7bc79e9fc
6
+ metadata.gz: a2257bb847f9e182885aa367ac5c886517460b57f9e84fd4f043678f1767da72c6d39fc32bc5c0a9efd92b57f0e582ff1b08d9ba4b7f008959bd20b55e1eddcd
7
+ data.tar.gz: e5bd652f32e76a02e2c34e6afbec22920afc44ec9c96503d2a78b00ef5da62c1e87f013a9919ee20ce9c0788b82473f93164e770ecc3abda86ee65cee1a1ba00
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- setsuzoku (0.12.57)
5
- activesupport (~> 5.0)
4
+ setsuzoku (0.14.0)
5
+ activesupport (>= 5.0, < 7)
6
6
  faraday (~> 0.11)
7
7
  nokogiri (~> 1.10)
8
8
  sorbet-runtime (~> 0.5)
@@ -10,28 +10,31 @@ PATH
10
10
  GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
- activesupport (5.2.4.3)
13
+ activesupport (6.1.4)
14
14
  concurrent-ruby (~> 1.0, >= 1.0.2)
15
- i18n (>= 0.7, < 2)
16
- minitest (~> 5.1)
17
- tzinfo (~> 1.1)
15
+ i18n (>= 1.6, < 2)
16
+ minitest (>= 5.1)
17
+ tzinfo (~> 2.0)
18
+ zeitwerk (~> 2.3)
18
19
  addressable (2.7.0)
19
20
  public_suffix (>= 2.0.2, < 5.0)
20
- concurrent-ruby (1.1.7)
21
+ concurrent-ruby (1.1.9)
21
22
  crack (0.4.3)
22
23
  safe_yaml (~> 1.0.0)
23
24
  diff-lcs (1.4.2)
24
- faraday (0.17.3)
25
+ faraday (0.17.4)
25
26
  multipart-post (>= 1.2, < 3)
26
27
  hashdiff (1.0.1)
27
- i18n (1.8.5)
28
+ i18n (1.8.10)
28
29
  concurrent-ruby (~> 1.0)
29
- mini_portile2 (2.4.0)
30
- minitest (5.14.1)
30
+ mini_portile2 (2.5.3)
31
+ minitest (5.14.4)
31
32
  multipart-post (2.1.1)
32
- nokogiri (1.10.10)
33
- mini_portile2 (~> 2.4.0)
33
+ nokogiri (1.11.7)
34
+ mini_portile2 (~> 2.5.0)
35
+ racc (~> 1.4)
34
36
  public_suffix (4.0.5)
37
+ racc (1.5.2)
35
38
  rake (10.5.0)
36
39
  rspec (3.8.0)
37
40
  rspec-core (~> 3.8.0)
@@ -49,15 +52,15 @@ GEM
49
52
  safe_yaml (1.0.5)
50
53
  sorbet (0.5.5675)
51
54
  sorbet-static (= 0.5.5675)
52
- sorbet-runtime (0.5.5924)
55
+ sorbet-runtime (0.5.6466)
53
56
  sorbet-static (0.5.5675-universal-darwin-14)
54
- thread_safe (0.3.6)
55
- tzinfo (1.2.7)
56
- thread_safe (~> 0.1)
57
+ tzinfo (2.0.4)
58
+ concurrent-ruby (~> 1.0)
57
59
  webmock (3.8.0)
58
60
  addressable (>= 2.3.6)
59
61
  crack (>= 0.3.2)
60
62
  hashdiff (>= 0.4.0, < 2.0.0)
63
+ zeitwerk (2.4.2)
61
64
 
62
65
  PLATFORMS
63
66
  ruby
@@ -86,7 +86,7 @@ module Setsuzoku
86
86
  raw_response = self.perform_external_call(request: request, action_details: action_details, **options)
87
87
  formatted_response = self.parse_response(response: raw_response, response_type: action_details[:actions][request.action][:response_type])
88
88
  success = true
89
- rescue Exception => e
89
+ rescue ::Exception => e
90
90
  exception = e
91
91
  self.external_api_handler.call_external_api_exception(
92
92
  plugin: self.plugin,
@@ -65,12 +65,12 @@ module Setsuzoku
65
65
  image = open(url, 'rb')
66
66
  Faraday::UploadIO.new(image, T.must(image).content_type, File.basename(url))
67
67
  end
68
- payload[options[:attachment_url_key]] = attachments
69
68
  if request_properties[:request_format] == :json
70
69
  payload[:json] = Faraday::UploadIO.new(StringIO.new(full_request), 'application/json')
71
70
  else
72
71
  payload.merge!(full_request)
73
72
  end
73
+ payload[options[:attachment_url_key]] = attachments
74
74
  req.body = payload
75
75
  end
76
76
  else
@@ -147,7 +147,7 @@ module Setsuzoku
147
147
  .merge!(self.auth_strategy.get_from_context(:auth_headers).except(:authorization))
148
148
  .merge!(self.get_from_context(:api_headers))
149
149
  .merge!(action_details[:request_options] || {})
150
- request_options[:authorization] = self.auth_strategy.get_from_context(:auth_headers)[:authorization]
150
+ request_options[:authorization] = action_details[:authorization] || self.auth_strategy.get_from_context(:auth_headers)[:authorization]
151
151
 
152
152
  content_type = case request_format
153
153
  when :json
@@ -86,6 +86,16 @@ module Setsuzoku
86
86
  convert_xml_to_hash(response.body)
87
87
  when :html
88
88
  response.body
89
+ when :txt, :png, :jpg, :gif
90
+ # for now just return the file
91
+ response.body
92
+ # for now just put in tmp
93
+ # tmp_dir = "#{Dir.tmpdir}/setsuzoku/#{self.plugin.class.system_name.underscore}/#{self.plugin.name.underscore}"
94
+ # file_name = "#{self.plugin.class.system_name.underscore}_#{self.plugin.name.underscore}_#{Time.now.strftime("%Y_%m_%d_%T")}"
95
+ # t = Tempfile.new([file_name, ".#{options[:response_type]}"], encoding: 'ascii-8bit')
96
+ # t.write(response.body)
97
+ # t.rewind
98
+ # t
89
99
  else
90
100
  JSON.parse(response.body).deep_symbolize_keys
91
101
  end
@@ -119,7 +129,7 @@ module Setsuzoku
119
129
  key = result.root.name.underscore.to_sym
120
130
  val = xml_node_to_hash(result.root)
121
131
  { key => val }
122
- rescue Exception => e
132
+ rescue ::Exception => e
123
133
  {}
124
134
  end
125
135
  end
@@ -137,37 +137,27 @@ module Setsuzoku
137
137
  # @return void
138
138
  def get_token!(body, action)
139
139
  success = false
140
- request = self.api_strategy.request_class.new(action: action, body: body, without_headers: true)
140
+ without_headers = self.credential.auth_actions[action].has_key?(:without_headers) ? self.credential.auth_actions[action][:without_headers] : true
141
+ request = self.api_strategy.request_class.new(action: action, body: body, without_headers: without_headers)
141
142
 
142
143
  resp = self.api_strategy.call_external_api(request: request, strategy: :auth)
143
144
 
144
145
  return false unless resp.success
145
146
 
146
- attrs = self.credential.token_attributes_to_assign(resp)
147
- attrs[:status] = if attrs[:token]
148
- 'active'
149
- else
150
- 'error'
151
- end
152
-
153
- # Assign any additional attributes the plugin's credential needs to know about.
154
- # E.g. the extension for a phone_number.
155
- plugin_attrs = self.credential.additional_attributes_to_assign(resp) if self.plugin.respond_to?(:credential_fields_to_update)
156
- attrs.merge!(plugin_attrs) if plugin_attrs
157
-
158
- # Only save Setsuzoku known fields, and any additional attributes the plugin specifies
159
- # in credential_fields_to_update.
160
- if self.credential.respond_to?(:"update_columns")
161
- # we issue an update_columns instead of a save/update_attributes
162
- # so as to only mutate these attributes
163
- # and not any other fields that may have been set for the credential
164
- save = self.credential.update_columns(attrs)
165
- self.credential.touch if save && self.credential.respond_to?(:"touch")
166
- save
167
- else
168
- true
169
- end
147
+ self.credential.set_token!(resp)
170
148
  end
149
+
150
+ #
151
+ # set_token!
152
+ sig { abstract.params(resp: Setsuzoku::ApiResponse, attrs: T::Hash[Symbol, T.untyped]).void }
153
+ #
154
+ # Persist relevant token and response data after authentication.
155
+ #
156
+ # @param resp [Setsuzoku::ApiResponse] the successful response for an authentication token.
157
+ # @param attrs [Hash] additional attrs that can be set by a specific credential implementation.
158
+ #
159
+ # @return [void]
160
+ def set_token!(resp, attrs); end
171
161
  end
172
162
  end
173
163
  end
@@ -54,26 +54,6 @@ module Setsuzoku
54
54
  sig { abstract.returns(T.nilable(String)) }
55
55
  def redirect_url; end
56
56
 
57
- # The token, refresh_token, and expires_at to assign for an OAuth token request.
58
- #
59
- # @param resp [Hash] the response hash from the external api call for a token.
60
- #
61
- # @return [Hash] the attributes to assign to the credential.
62
- sig{ override.params(resp: Setsuzoku::ApiResponse).returns(T::Hash[Symbol, T.untyped]) }
63
- def token_attributes_to_assign(resp)
64
- attrs = {
65
- token: resp.data[:access_token],
66
- refresh_token: resp.data[:refresh_token]
67
- }
68
-
69
- expires_in = resp.data[:expires_in]
70
- if expires_in && (expires_in.is_a?(Integer) || expires_in.match(/^\d+$/))
71
- attrs[:expires_on] = expires_in.to_i.seconds.from_now
72
- end
73
-
74
- attrs
75
- end
76
-
77
57
  # Stub an o_auth_credential-like instance.
78
58
  #
79
59
  # @return [Struct] a stubbed o_auth_credential-like struct.
@@ -51,16 +51,16 @@ module Setsuzoku
51
51
  #
52
52
  # @return [Datetime] the time to set for the current token's expiry.
53
53
  sig{ abstract.params(val: DateTime).returns(T.nilable(DateTime)) }
54
- def expires_on=(val);
54
+ def expires_on=(val); end
55
55
 
56
- # The token fields to bet set for the custom credential.
56
+ # Alternatively, a credential can manually handle what to do with a token response.
57
+ # For instance, storing multiple tokens as sub-resources
57
58
  #
58
59
  # @param resp [Hash] the response hash from the external api call for a token.
59
60
  #
60
61
  # @return [Hash] the attributes to assign to the credential.
61
- sig{ abstract.params(resp: T::Hash[Symbol, T.untyped]).returns(T::Hash[Symbol, T.untyped]) }
62
- def token_attributes_to_assign(resp); end
63
- end
62
+ sig{ abstract.params(resp: T::Hash[Symbol, T.untyped]).void }
63
+ def set_token!; end
64
64
  end
65
65
  end
66
66
  end
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Setsuzoku
5
- VERSION = '0.12.57'
5
+ VERSION = '0.14.0'
6
6
  end
data/setsuzoku.gemspec CHANGED
@@ -40,7 +40,7 @@ Gem::Specification.new do |spec|
40
40
  spec.add_development_dependency "rake", "~> 10.0"
41
41
  spec.add_development_dependency "rspec", "3.8"
42
42
  spec.add_development_dependency "webmock", "3.8"
43
- spec.add_runtime_dependency "activesupport", "~> 5.0"
43
+ spec.add_runtime_dependency "activesupport", ">= 5.0", '< 7'
44
44
  spec.add_development_dependency "sorbet", "~> 0.5"
45
45
  spec.add_runtime_dependency "sorbet-runtime", "~> 0.5"
46
46
  #TODO: we should remove httparty if we can just use faraday
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.12.57
4
+ version: 0.14.0
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: 2020-09-29 00:00:00.000000000 Z
11
+ date: 2021-06-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -70,16 +70,22 @@ dependencies:
70
70
  name: activesupport
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '5.0'
76
+ - - "<"
77
+ - !ruby/object:Gem::Version
78
+ version: '7'
76
79
  type: :runtime
77
80
  prerelease: false
78
81
  version_requirements: !ruby/object:Gem::Requirement
79
82
  requirements:
80
- - - "~>"
83
+ - - ">="
81
84
  - !ruby/object:Gem::Version
82
85
  version: '5.0'
86
+ - - "<"
87
+ - !ruby/object:Gem::Version
88
+ version: '7'
83
89
  - !ruby/object:Gem::Dependency
84
90
  name: sorbet
85
91
  requirement: !ruby/object:Gem::Requirement
@@ -221,7 +227,7 @@ homepage: https://github.com/rocketreferrals/setsuzoku
221
227
  licenses:
222
228
  - MIT
223
229
  metadata: {}
224
- post_install_message:
230
+ post_install_message:
225
231
  rdoc_options: []
226
232
  require_paths:
227
233
  - lib
@@ -237,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
237
243
  version: '0'
238
244
  requirements: []
239
245
  rubygems_version: 3.0.1
240
- signing_key:
246
+ signing_key:
241
247
  specification_version: 4
242
248
  summary: Extensible 3rd-party interface and functionality plugins
243
249
  test_files: []