@@ -12,151 +12,153 @@ module CommunicationHelper
1212
1313 class << self
1414 attr_accessor :logger , :api_key , :bearer_token
15- end
1615
17- def_delegator self , :minimal_faraday_config
16+ def reset_authentication!
17+ @api_key = nil
18+ @bearer_token = nil
19+ @request_as = nil
20+ end
1821
19- def self . reset_authentication!
20- @api_key = nil
21- @bearer_token = nil
22- @request_as = nil
23- end
22+ def find_transfer ( transfer_id )
23+ response = request_as . get ( "/v2/transfers/%s" % [ transfer_id ] )
24+ ensure_ok_status! ( response )
25+ response_body = remote_transfer_params ( response . body )
26+ found_transfer = Transfer . new ( message : response_body [ :message ] )
27+ setup_transfer (
28+ transfer : found_transfer ,
29+ data : response_body
30+ )
31+ end
2432
25- def self . find_transfer ( transfer_id )
26- response = request_as . get ( "/v2/transfers/%s" % [ transfer_id ] )
27- ensure_ok_status! ( response )
28- response_body = remote_transfer_params ( response . body )
29- found_transfer = Transfer . new ( message : response_body [ :message ] )
30- setup_transfer (
31- transfer : found_transfer ,
32- data : response_body
33- )
34- end
33+ def upload_url_for_chunk ( transfer_id , file_id , chunk )
34+ response = request_as . get ( "/v2/transfers/%s/files/%s/upload-url/%s" % [ transfer_id , file_id , chunk ] )
35+ ensure_ok_status! ( response )
3536
36- def self . upload_url_for_chunk ( transfer_id , file_id , chunk )
37- response = request_as . get ( "/v2/transfers/%s/files/%s/upload-url/%s" % [ transfer_id , file_id , chunk ] )
38- ensure_ok_status! ( response )
37+ JSON . parse ( response . body ) . fetch ( "url" )
38+ end
3939
40- JSON . parse ( response . body ) . fetch ( "url" )
41- end
40+ def persist_transfer ( transfer )
41+ response = request_as . post (
42+ "/v2/transfers" ,
43+ transfer . as_request_params . to_json ,
44+ )
45+ ensure_ok_status! ( response )
4246
43- def self . persist_transfer ( transfer )
44- response = request_as . post (
45- "/v2/transfers" ,
46- transfer . as_request_params . to_json ,
47- )
48- ensure_ok_status! ( response )
49-
50- handle_new_transfer_data (
51- transfer : transfer ,
52- data : remote_transfer_params ( response . body )
53- )
54- end
47+ handle_new_transfer_data (
48+ transfer : transfer ,
49+ data : remote_transfer_params ( response . body )
50+ )
51+ end
5552
56- def self . finalize_transfer ( transfer )
57- response = request_as . put ( "/v2/transfers/%s/finalize" % transfer . id )
58- ensure_ok_status! ( response )
59- handle_new_transfer_data (
60- transfer : transfer ,
61- data : remote_transfer_params ( response . body )
62- )
63- end
53+ def finalize_transfer ( transfer )
54+ response = request_as . put ( "/v2/transfers/%s/finalize" % transfer . id )
55+ ensure_ok_status! ( response )
56+ handle_new_transfer_data (
57+ transfer : transfer ,
58+ data : remote_transfer_params ( response . body )
59+ )
60+ end
6461
65- def self . remote_transfer_params ( response_body )
66- JSON . parse ( response_body , symbolize_names : true )
67- end
62+ def remote_transfer_params ( response_body )
63+ JSON . parse ( response_body , symbolize_names : true )
64+ end
6865
69- def self . upload_chunk ( put_url , chunk_contents )
70- @chunk_uploader ||= Faraday . new { |c | minimal_faraday_config ( c ) }
66+ def upload_chunk ( put_url , chunk_contents )
67+ @chunk_uploader ||= Faraday . new { |c | minimal_faraday_config ( c ) }
7168
72- @chunk_uploader . put (
73- put_url ,
74- chunk_contents . read ,
75- 'Content-Type' => 'binary/octet-stream' ,
76- 'Content-Length' => chunk_contents . size . to_s
77- )
78- end
69+ @chunk_uploader . put (
70+ put_url ,
71+ chunk_contents . read ,
72+ 'Content-Type' => 'binary/octet-stream' ,
73+ 'Content-Length' => chunk_contents . size . to_s
74+ )
75+ end
7976
80- def self . complete_file ( transfer_id , file_id , chunks )
81- response = request_as . put (
82- "/v2/transfers/%s/files/%s/upload-complete" % [ transfer_id , file_id ] ,
83- { part_numbers : chunks } . to_json
84- )
77+ def complete_file ( transfer_id , file_id , chunks )
78+ response = request_as . put (
79+ "/v2/transfers/%s/files/%s/upload-complete" % [ transfer_id , file_id ] ,
80+ { part_numbers : chunks } . to_json
81+ )
8582
86- ensure_ok_status! ( response )
87- remote_transfer_params ( response . body )
88- end
83+ ensure_ok_status! ( response )
84+ remote_transfer_params ( response . body )
85+ end
86+
87+ private
8988
90- private_class_method def self . request_as
91- @request_as ||= Faraday . new ( API_URL_BASE ) do |c |
92- minimal_faraday_config ( c )
93- c . headers = auth_headers . merge DEFAULT_HEADERS
89+ def request_as
90+ @request_as ||= Faraday . new ( API_URL_BASE ) do |c |
91+ minimal_faraday_config ( c )
92+ c . headers = auth_headers . merge DEFAULT_HEADERS
93+ end
9494 end
95- end
9695
97- private_class_method def self . setup_transfer ( transfer :, data :)
98- data [ :files ] . each do |file_params |
99- transfer . add_file (
100- name : file_params [ :name ] ,
101- size : file_params [ :size ] ,
102- )
96+ def setup_transfer ( transfer :, data :)
97+ data [ :files ] . each do |file_params |
98+ transfer . add_file (
99+ name : file_params [ :name ] ,
100+ size : file_params [ :size ] ,
101+ )
102+ end
103+
104+ handle_new_transfer_data ( transfer : transfer , data : data )
103105 end
104106
105- handle_new_transfer_data ( transfer : transfer , data : data )
106- end
107+ def handle_new_transfer_data ( transfer :, data :)
108+ %i[ id state url ] . each do |i_var |
109+ transfer . instance_variable_set "@#{ i_var } " , data [ i_var ]
110+ end
107111
108- private_class_method def self . handle_new_transfer_data ( transfer :, data :)
109- %i[ id state url ] . each do |i_var |
110- transfer . instance_variable_set "@#{ i_var } " , data [ i_var ]
112+ RemoteFile . upgrade ( files : transfer . files , files_response : data [ :files ] )
113+ transfer
111114 end
112115
113- RemoteFile . upgrade ( files : transfer . files , files_response : data [ :files ] )
114- transfer
115- end
116+ def auth_headers
117+ authorize_if_no_bearer_token!
116118
117- private_class_method def self . auth_headers
118- authorize_if_no_bearer_token!
119+ {
120+ 'X-API-Key' => api_key ,
121+ 'Authorization' => "Bearer #{ @bearer_token } "
122+ }
123+ end
119124
120- {
121- 'X-API-Key' => api_key ,
122- 'Authorization' => "Bearer #{ @bearer_token } "
123- }
124- end
125+ def ensure_ok_status! ( response )
126+ case response . status
127+ when 200 ..299
128+ true
129+ when 400 ..499
130+ logger . error response
131+ raise WeTransfer ::CommunicationError , JSON . parse ( response . body ) [ "message" ]
132+ when 500 ..504
133+ logger . error response
134+ raise WeTransfer ::CommunicationError , "Response had a #{ response . status } code, we could retry"
135+ else
136+ logger . error response
137+ raise WeTransfer ::CommunicationError , "Response had a #{ response . status } code, no idea what to do with that"
138+ end
139+ end
125140
126- private_class_method def self . ensure_ok_status! ( response )
127- case response . status
128- when 200 .. 299
129- true
130- when 400 .. 499
131- logger . error response
132- raise WeTransfer :: CommunicationError , JSON . parse ( response . body ) [ "message" ]
133- when 500 .. 504
134- logger . error response
135- raise WeTransfer :: CommunicationError , "Response had a #{ response . status } code, we could retry"
136- else
137- logger . error response
138- raise WeTransfer :: CommunicationError , "Response had a #{ response . status } code, no idea what to do with that"
141+ def authorize_if_no_bearer_token!
142+ return @bearer_token if @bearer_token
143+
144+ response = Faraday . new ( API_URL_BASE ) do | c |
145+ minimal_faraday_config ( c )
146+ c . headers = DEFAULT_HEADERS . merge ( 'X-API-Key' => api_key )
147+ end . post (
148+ '/v2/authorize' ,
149+ )
150+ ensure_ok_status! ( response )
151+ bearer_token = JSON . parse ( response . body ) [ 'token' ]
152+ raise WeTransfer :: CommunicationError , "The authorization call returned #{ response . body } and no usable :token key could be found there" if bearer_token . nil? || bearer_token . empty?
153+ @bearer_token = bearer_token
139154 end
140- end
141155
142- private_class_method def self . authorize_if_no_bearer_token!
143- return @bearer_token if @bearer_token
144-
145- response = Faraday . new ( API_URL_BASE ) do |c |
146- minimal_faraday_config ( c )
147- c . headers = DEFAULT_HEADERS . merge ( 'X-API-Key' => api_key )
148- end . post (
149- '/v2/authorize' ,
150- )
151- ensure_ok_status! ( response )
152- bearer_token = JSON . parse ( response . body ) [ 'token' ]
153- raise WeTransfer ::CommunicationError , "The authorization call returned #{ response . body } and no usable :token key could be found there" if bearer_token . nil? || bearer_token . empty?
154- @bearer_token = bearer_token
156+ def minimal_faraday_config ( config )
157+ config . response :logger , logger
158+ config . adapter Faraday . default_adapter
159+ end
155160 end
156161
157- private_class_method def self . minimal_faraday_config ( config )
158- config . response :logger , logger
159- config . adapter Faraday . default_adapter
160- end
162+ def_delegator self , :minimal_faraday_config
161163 end
162164end
0 commit comments