Skip to content
This repository was archived by the owner on Dec 11, 2020. It is now read-only.

Commit 6d1f239

Browse files
committed
Make Communication class safer by not storing state inside some singleton
Move specs around
1 parent f272590 commit 6d1f239

14 files changed

+979
-572
lines changed

README.md

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ Great! Now you can go to your project file and use the client.
6666
A transfer is a collection of files that can be created once, and downloaded until it expires. Once a transfer is ready for sharing, it is closed for modifications.
6767

6868
```ruby
69-
# In your proje ct file:
69+
# In your project file:
7070
require 'we_transfer'
7171

7272
client = WeTransfer::Client.new(api_key: ENV.fetch('WT_API_KEY'))
@@ -75,21 +75,28 @@ client = WeTransfer::Client.new(api_key: ENV.fetch('WT_API_KEY'))
7575
Now that you've got the client set up you can use `create_transfer_and_upload_files` to, well, create a transfer, and upload all files!
7676

7777
```ruby
78-
client.create_transfer_and_upload_files(message: 'All the Things') do |transfer|
78+
transfer = client.create_transfer_and_upload_files(message: 'All the Things') do |transfer|
79+
# Add a file using File.open. If you do it like this, :name and :io params are optional
7980
transfer.add_file(io: File.open('Gemfile'))
81+
82+
# Add a file with File.open, but give it a different name inside the transfer
8083
transfer.add_file(
8184
name: 'hello_world.rb',
8285
io: File.open('path/to/different_name.rb')
8386
)
87+
88+
# Using :name, :size and :io params.
89+
# Specifying the size is not very useful in this case, but feel free to explicitly
90+
# communicate the size of the coming io.
91+
#
92+
# The :name param is compulsory if it cannot be derived from the IO.
8493
transfer.add_file(
8594
name: 'README.txt',
8695
size: 31,
8796
io: StringIO.new("You should read All the Things!")
8897
)
8998
end
9099

91-
transfer = client.transfer
92-
93100
# To get a link to your transfer, call `url` on your transfer object:
94101
transfer.url => "https://we.tl/t-1232346"
95102

lib/we_transfer.rb

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,32 @@
55
require 'json'
66
require 'ks'
77

8-
%w[communication client transfer mini_io we_transfer_file remote_file version].each do |file|
8+
%w[
9+
logging
10+
communication
11+
client
12+
transfer
13+
mini_io
14+
we_transfer_file
15+
remote_file version
16+
].each do |file|
917
require_relative "we_transfer/#{file}"
1018
end
1119

12-
module WeTransfer; end
20+
module WeTransfer
21+
NULL_LOGGER = Logger.new(nil)
22+
23+
def self.logger
24+
@logger || NULL_LOGGER
25+
end
26+
27+
# Set the logger to your preferred logger
28+
#
29+
# @params new_logger [Logger] the logger that WeTransfer SDK should use
30+
#
31+
# example:
32+
# WeTransfer.logger = Rails.logger
33+
def self.logger=(new_logger)
34+
@logger = new_logger
35+
end
36+
end

lib/we_transfer/client.rb

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,30 @@
11
module WeTransfer
22
class Client
33
class Error < StandardError; end
4-
include Communication
5-
6-
NullLogger = Logger.new(nil)
7-
8-
attr_reader :transfer
94

105
# Initialize a WeTransfer::Client
116
#
127
# @param api_key [String] The API key you want to authenticate with
13-
# @param logger [Logger] (NullLogger) your custom logger
148
#
159
# @return [WeTransfer::Client]
16-
def initialize(api_key:, logger: NullLogger)
17-
Communication.reset_authentication!
18-
Communication.api_key = api_key
19-
Communication.logger = logger
10+
def initialize(api_key:)
11+
@communicator = Communication.new(api_key)
2012
end
2113

2214
def create_transfer(**args, &block)
23-
transfer = WeTransfer::Transfer.new(args)
15+
transfer = WeTransfer::Transfer.new(args.merge(communicator: @communicator))
2416
transfer.persist(&block)
25-
@transfer = transfer
26-
27-
self
2817
end
2918

3019
def create_transfer_and_upload_files(**args, &block)
31-
create_transfer(args, &block)
32-
@transfer.upload_files
33-
@transfer.complete_files
34-
@transfer.finalize
35-
36-
self
20+
transfer = create_transfer(args, &block)
21+
transfer.upload_files
22+
transfer.complete_files
23+
transfer.finalize
3724
end
3825

3926
def find_transfer(transfer_id)
40-
@transfer = WeTransfer::Transfer.find(transfer_id)
27+
@communicator.find_transfer(transfer_id)
4128
end
4229
end
4330
end

0 commit comments

Comments
 (0)