wetransfer 0.4.4 → 0.9.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +5 -5
  2. data/.rspec +1 -2
  3. data/.rubocop.yml +1 -1
  4. data/.travis.yml +3 -2
  5. data/Guardfile +11 -0
  6. data/README.md +81 -38
  7. data/V2_README.md +53 -0
  8. data/examples/create_collection.rb +13 -0
  9. data/examples/create_transfer.rb +1 -1
  10. data/lib/we_transfer_client.rb +86 -120
  11. data/lib/we_transfer_client/board_builder.rb +33 -0
  12. data/lib/we_transfer_client/boards.rb +74 -0
  13. data/lib/we_transfer_client/future_board.rb +32 -0
  14. data/lib/we_transfer_client/future_file.rb +28 -0
  15. data/lib/we_transfer_client/future_link.rb +28 -0
  16. data/lib/we_transfer_client/future_transfer.rb +11 -5
  17. data/lib/we_transfer_client/remote_board.rb +47 -0
  18. data/lib/we_transfer_client/remote_file.rb +55 -0
  19. data/lib/we_transfer_client/remote_link.rb +9 -0
  20. data/lib/we_transfer_client/remote_transfer.rb +24 -1
  21. data/lib/we_transfer_client/transfer_builder.rb +3 -10
  22. data/lib/we_transfer_client/transfers.rb +73 -0
  23. data/lib/we_transfer_client/version.rb +2 -2
  24. data/spec/board_integration_spec.rb +68 -0
  25. data/spec/features/add_items_to_board_spec.rb +55 -0
  26. data/spec/features/create_board_spec.rb +46 -0
  27. data/spec/features/get_board_spec.rb +34 -0
  28. data/spec/features/transfer_spec.rb +41 -0
  29. data/spec/fixtures/Japan-01.jpg +0 -0
  30. data/spec/fixtures/Japan-02.jpg +0 -0
  31. data/spec/spec_helper.rb +20 -0
  32. data/spec/transfer_integration_spec.rb +54 -0
  33. data/spec/we_transfer_client/board_builder_spec.rb +66 -0
  34. data/spec/we_transfer_client/boards_spec.rb +56 -0
  35. data/spec/we_transfer_client/future_board_spec.rb +98 -0
  36. data/spec/we_transfer_client/future_file_spec.rb +48 -0
  37. data/spec/we_transfer_client/future_link_spec.rb +44 -0
  38. data/spec/we_transfer_client/future_transfer_spec.rb +30 -13
  39. data/spec/we_transfer_client/remote_board_spec.rb +92 -0
  40. data/spec/we_transfer_client/remote_file_spec.rb +91 -0
  41. data/spec/we_transfer_client/remote_link_spec.rb +33 -0
  42. data/spec/we_transfer_client/remote_transfer_spec.rb +101 -0
  43. data/spec/we_transfer_client/transfer_builder_spec.rb +48 -51
  44. data/spec/we_transfer_client/transfers_spec.rb +45 -0
  45. data/spec/we_transfer_client_spec.rb +51 -3
  46. data/wetransfer.gemspec +11 -5
  47. metadata +67 -27
  48. data/lib/we_transfer_client/future_file_item.rb +0 -16
  49. data/lib/we_transfer_client/future_web_item.rb +0 -18
  50. data/lib/we_transfer_client/remote_item.rb +0 -2
  51. data/spec/integration_spec.rb +0 -160
  52. data/spec/we_transfer_client/future_file_item_spec.rb +0 -39
  53. data/spec/we_transfer_client/future_web_item_spec.rb +0 -39
@@ -1,16 +0,0 @@
1
- class FutureFileItem < Ks.strict(:name, :io, :local_identifier)
2
- def initialize(**kwargs)
3
- super(local_identifier: SecureRandom.uuid, **kwargs)
4
- end
5
-
6
- def to_item_request_params
7
- # Ideally the content identifier should stay the same throughout multiple
8
- # calls if the file contents doesn't change.
9
- {
10
- content_identifier: 'file',
11
- local_identifier: local_identifier,
12
- filename: name,
13
- filesize: io.size,
14
- }
15
- end
16
- end
@@ -1,18 +0,0 @@
1
- class FutureWebItem < Ks.strict(:url, :title, :local_identifier)
2
- def initialize(**kwargs)
3
- super(local_identifier: SecureRandom.uuid, **kwargs)
4
- end
5
-
6
- def to_item_request_params
7
- # Ideally the content identifier should stay the same throughout multiple
8
- # calls if the file contents doesn't change.
9
- {
10
- content_identifier: 'web_content',
11
- local_identifier: local_identifier,
12
- url: url,
13
- meta: {
14
- title: title
15
- }
16
- }
17
- end
18
- end
@@ -1,2 +0,0 @@
1
- class RemoteItem < Ks.strict(:id, :local_identifier, :content_identifier, :name, :size, :mime_type, :url, :title)
2
- end
@@ -1,160 +0,0 @@
1
- require 'spec_helper'
2
-
3
- require_relative '../lib/we_transfer_client.rb'
4
-
5
- describe WeTransferClient do
6
- let :test_logger do
7
- Logger.new($stderr).tap { |log| log.level = Logger::WARN }
8
- end
9
-
10
- let :very_large_file do
11
- tf = Tempfile.new('test-upload')
12
- 20.times { tf << Random.new.bytes(1024 * 1024) }
13
- tf << Random.new.bytes(rand(1..512))
14
- tf.rewind
15
- tf
16
- end
17
-
18
- it 'is able to create a transfer start to finish, both with small and large files' do
19
- client = WeTransferClient.new(api_key: ENV.fetch('WT_API_KEY'), logger: test_logger)
20
- transfer = client.create_transfer(name: 'My amazing board', description: 'Hi there!') do |builder|
21
- # Upload ourselves
22
- add_result = builder.add_file(name: File.basename(__FILE__), io: File.open(__FILE__, 'rb'))
23
- expect(add_result).to eq(true)
24
-
25
- # Upload ourselves again, but using add_file_at
26
- add_result = builder.add_file_at(path: __FILE__) # Upload ourselves again, but this time via path
27
- expect(add_result).to eq(true)
28
-
29
- # Upload the large file
30
- add_result = builder.add_file(name: 'large.bin', io: very_large_file)
31
- expect(add_result).to eq(true)
32
-
33
- expect(add_result).to eq(true)
34
- end
35
-
36
- expect(transfer).to be_kind_of(RemoteTransfer)
37
- expect(transfer.id).to be_kind_of(String)
38
-
39
- # expect(transfer.version_identifier).to be_kind_of(String)
40
- expect(transfer.state).to be_kind_of(String)
41
- expect(transfer.name).to eq('My amazing board')
42
- expect(transfer.description).to eq('Hi there!')
43
- expect(transfer.items).to be_kind_of(Array)
44
- expect(transfer.items.length).to eq(3)
45
-
46
- item = transfer.items.first
47
- expect(item).to be_kind_of(RemoteItem)
48
-
49
- expect(transfer.shortened_url).to be_kind_of(String)
50
- response = Faraday.get(transfer.shortened_url)
51
- expect(response.status).to eq(302)
52
- expect(response['location']).to start_with('https://wetransfer')
53
- end
54
-
55
- it 'is able to create a transfer with no items even if passed a block' do
56
- client = WeTransferClient.new(api_key: ENV.fetch('WT_API_KEY'), logger: test_logger)
57
- response = client.create_transfer(name: 'My amazing board', description: 'Hi there!') do |builder|
58
- end
59
- expect(response[:size]).to eq(0)
60
- expect(response[:items]).to eq([])
61
- end
62
-
63
- it 'is able to create a transfer with no items without a block' do
64
- client = WeTransferClient.new(api_key: ENV.fetch('WT_API_KEY'), logger: test_logger)
65
- response = client.create_empty_transfer(name: 'My amazing board', description: 'Hi there!')
66
- expect(response[:size]).to eq(0)
67
- expect(response[:items]).to eq([])
68
- end
69
-
70
- it 'refuses to create a transfer when reading an IO raises an error' do
71
- broken = StringIO.new('hello')
72
- def broken.read(*)
73
- raise 'This failed somehow'
74
- end
75
-
76
- client = WeTransferClient.new(api_key: ENV.fetch('WT_API_KEY'), logger: test_logger)
77
- expect(client).not_to receive(:faraday) # Since we will not be doing any requests - we fail earlier
78
- expect {
79
- client.create_transfer(name: 'My amazing board', description: 'Hi there!') do |builder|
80
- builder.add_file(name: 'broken', io: broken)
81
- end
82
- }.to raise_error(/failed somehow/)
83
- end
84
-
85
- it 'refuses to create a transfer when given an IO of 0 size' do
86
- broken = StringIO.new('')
87
-
88
- client = WeTransferClient.new(api_key: ENV.fetch('WT_API_KEY'), logger: test_logger)
89
- expect {
90
- client.create_transfer(name: 'My amazing board', description: 'Hi there!') do |builder|
91
- builder.add_file(name: 'broken', io: broken)
92
- end
93
- }.to raise_error(/has a size of 0/)
94
- end
95
-
96
- it 'is able to create a transfer with only webcontent' do
97
- client = WeTransferClient.new(api_key: ENV.fetch('WT_API_KEY'), logger: test_logger)
98
- transfer = client.create_transfer(name: 'My collection of web content', description: 'link collection') do |builder|
99
- 10.times do
100
- builder.add_web_url(url: 'https://www.wetransfer.com')
101
- end
102
- end
103
- expect(transfer).to be_kind_of(RemoteTransfer)
104
- expect(transfer.id).to be_kind_of(String)
105
-
106
- # expect(transfer.version_identifier).to be_kind_of(String)
107
- expect(transfer.state).to be_kind_of(String)
108
- expect(transfer.name).to eq('My collection of web content')
109
- expect(transfer.description).to eq('link collection')
110
- expect(transfer.items).to be_kind_of(Array)
111
- expect(transfer.items.length).to eq(10)
112
-
113
- item = transfer.items.first
114
- expect(item).to be_kind_of(RemoteItem)
115
-
116
- expect(transfer.shortened_url).to be_kind_of(String)
117
- response = Faraday.get(transfer.shortened_url)
118
- expect(response.status).to eq(302)
119
- expect(response['location']).to start_with('https://wetransfer')
120
- end
121
-
122
- it 'is able to create a transfer with web_content and files' do
123
- client = WeTransferClient.new(api_key: ENV.fetch('WT_API_KEY'), logger: test_logger)
124
- transfer = client.create_transfer(name: 'Mixed Board Content', description: 'Files and Webcontent') do |builder|
125
- # Upload ourselves
126
- add_result = builder.add_file(name: File.basename(__FILE__), io: File.open(__FILE__, 'rb'))
127
- expect(add_result).to eq(true)
128
-
129
- # Upload ourselves again, but using add_file_at
130
- add_result = builder.add_file_at(path: __FILE__) # Upload ourselves again, but this time via path
131
- expect(add_result).to eq(true)
132
-
133
- # Upload the large file
134
- add_result = builder.add_file(name: 'large.bin', io: very_large_file)
135
- expect(add_result).to eq(true)
136
-
137
- # add url to transfer
138
- add_result = builder.add_web_url(url: 'http://www.wetransfer.com', title: 'website used for file transfers')
139
- expect(add_result).to eq(true)
140
- end
141
-
142
- expect(transfer).to be_kind_of(RemoteTransfer)
143
- expect(transfer.id).to be_kind_of(String)
144
-
145
- # expect(transfer.version_identifier).to be_kind_of(String)
146
- expect(transfer.state).to be_kind_of(String)
147
- expect(transfer.name).to eq('Mixed Board Content')
148
- expect(transfer.description).to eq('Files and Webcontent')
149
- expect(transfer.items).to be_kind_of(Array)
150
- expect(transfer.items.length).to eq(4)
151
-
152
- item = transfer.items.first
153
- expect(item).to be_kind_of(RemoteItem)
154
-
155
- expect(transfer.shortened_url).to be_kind_of(String)
156
- response = Faraday.get(transfer.shortened_url)
157
- expect(response.status).to eq(302)
158
- expect(response['location']).to start_with('https://wetransfer')
159
- end
160
- end
@@ -1,39 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe FutureFileItem do
4
- it 'errors if not given all required arguments' do
5
- expect {
6
- described_class.new(name: 'nope', local_identifier: 'sorry')
7
- }.to raise_error(/missing keyword: io/)
8
-
9
- expect {
10
- described_class.new(io: 'nope')
11
- }.to raise_error(/missing keyword: name/)
12
- end
13
-
14
- it 'succeeds if given all arguments' do
15
- future_file_item = described_class.new(name: 'yes', io: 'hello', local_identifier: '4815162342')
16
- expect(future_file_item).to be_kind_of(FutureFileItem)
17
- end
18
-
19
- it 'succeeds if not passed a local_identifier' do
20
- future_file_item = described_class.new(name: 'yes', io: 'hello')
21
- expect(future_file_item).to be_kind_of(FutureFileItem)
22
- end
23
-
24
- it 'generates a local_identifier' do
25
- future_file_item = described_class.new(name: 'who', io: 'ami')
26
- expect(future_file_item).to be_kind_of(FutureFileItem)
27
- expect(future_file_item.local_identifier).to_not be nil
28
- expect(future_file_item.local_identifier).to be_kind_of(String)
29
- end
30
-
31
- it 'creates params properly' do
32
- future_file_item = described_class.new(name: 'yes', io: 'hello')
33
- item_as_params = future_file_item.to_item_request_params
34
- expect(item_as_params[:content_identifier]).to eq('file')
35
- expect(item_as_params[:local_identifier]).to be_kind_of(String)
36
- expect(item_as_params[:filename]).to eq('yes')
37
- expect(item_as_params[:filesize]).to eq(5)
38
- end
39
- end
@@ -1,39 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe FutureWebItem do
4
- it 'errors if not given all required arguments' do
5
- expect {
6
- described_class.new(url: 'https://www.wetransfer.com', local_identifier: '321235151')
7
- }.to raise_error(/missing keyword: title/)
8
-
9
- expect {
10
- described_class.new(title: 'wetransfer.com')
11
- }.to raise_error(/missing keyword: url/)
12
- end
13
-
14
- it 'succeeds if given all arguments' do
15
- future_web_item = described_class.new(url: 'https://www.wetransfer.com', title: 'wetransfer.com', local_identifier: '321235151')
16
- expect(future_web_item).to be_kind_of(FutureWebItem)
17
- end
18
-
19
- it 'succeeds if not passed a local_identifier' do
20
- future_web_item = described_class.new(url: 'https://www.wetransfer.com', title: 'wetransfer.com')
21
- expect(future_web_item).to be_kind_of(FutureWebItem)
22
- end
23
-
24
- it 'generates a local_identifier' do
25
- future_web_item = described_class.new(url: 'https://www.wetransfer.com', title: 'wetransfer.com')
26
- expect(future_web_item).to be_kind_of(FutureWebItem)
27
- expect(future_web_item.local_identifier).to_not be nil
28
- expect(future_web_item.local_identifier).to be_kind_of(String)
29
- end
30
-
31
- it 'creates params properly' do
32
- future_web_item = described_class.new(url: 'https://www.wetransfer.com', title: 'wetransfer.com')
33
- item_as_params = future_web_item.to_item_request_params
34
- expect(item_as_params[:content_identifier]).to eq('web_content')
35
- expect(item_as_params[:local_identifier]).to be_kind_of(String)
36
- expect(item_as_params[:url]).to eq('https://www.wetransfer.com')
37
- expect(item_as_params[:meta][:title]).to eq('wetransfer.com')
38
- end
39
- end