wetransfer 0.1.0 → 0.2.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 +4 -4
- data/.travis.yml +2 -3
- data/README.md +11 -35
- data/examples/create_transfer.rb +13 -0
- data/lib/we_transfer_client.rb +194 -0
- data/lib/we_transfer_client/version.rb +3 -0
- data/spec/integration_spec.rb +98 -0
- data/wetransfer.gemspec +5 -8
- metadata +15 -25
- data/lib/wetransfer.rb +0 -16
- data/lib/wetransfer/client.rb +0 -126
- data/lib/wetransfer/connection.rb +0 -77
- data/lib/wetransfer/item.rb +0 -14
- data/lib/wetransfer/item_builder.rb +0 -59
- data/lib/wetransfer/transfer.rb +0 -30
- data/lib/wetransfer/transfer_builder.rb +0 -28
- data/lib/wetransfer/version.rb +0 -3
- data/spec/client_spec.rb +0 -82
- data/spec/connection_spec.rb +0 -74
- data/spec/item_builder_spec.rb +0 -104
- data/spec/spec_helper.rb +0 -24
- data/spec/test_server.rb +0 -208
- data/spec/wetransfer_spec.rb +0 -7
data/lib/wetransfer/version.rb
DELETED
data/spec/client_spec.rb
DELETED
@@ -1,82 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe WeTransfer::Client do
|
4
|
-
describe 'Client#new' do
|
5
|
-
it 'returns a error when no api_key is given' do
|
6
|
-
expect {
|
7
|
-
described_class.new
|
8
|
-
}.to raise_error(ArgumentError, /missing keyword: api_key/)
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'on initialization a active connection object is created' do
|
12
|
-
client = described_class.new(api_key: 'api-key')
|
13
|
-
expect(client.api_connection).to be_kind_of WeTransfer::Connection
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe 'Client#create_transfer' do
|
18
|
-
let(:client) { described_class.new(api_key: 'api-key') }
|
19
|
-
|
20
|
-
it 'create transfer should return a transfer object' do
|
21
|
-
transfer = client.create_transfer
|
22
|
-
expect(transfer.shortened_url).to start_with('http://we.tl/s-')
|
23
|
-
expect(transfer).to be_kind_of WeTransfer::Transfer
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'when no name/description is send, a default name/description is generated' do
|
27
|
-
transfer = client.create_transfer
|
28
|
-
expect(transfer.name).to eq("File Transfer: #{Time.now.strftime('%d-%m-%Y')}")
|
29
|
-
expect(transfer.description).to eq('Transfer generated with WeTransfer Ruby SDK')
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'when a name/description is send, transfer has that name/description' do
|
33
|
-
transfer = client.create_transfer(
|
34
|
-
name: 'WeTransfer Test Transfer',
|
35
|
-
description: "Moving along… Good news, everyone! I've
|
36
|
-
taught the toaster to feel love! Humans dating robots is
|
37
|
-
sick. You people wonder why I'm still single? It's 'cause
|
38
|
-
all the fine robot sisters are dating humans!")
|
39
|
-
expect(transfer.name).to eq('WeTransfer Test Transfer')
|
40
|
-
expect(transfer.description).to start_with('Moving along… Good news, everyone!')
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'when no items are send, a itemless transfer is created' do
|
44
|
-
transfer = client.create_transfer
|
45
|
-
expect(transfer.items).to be_empty
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'when items are sended, the transfer has items' do
|
49
|
-
transfer = client.create_transfer(items: ["#{__dir__}/fixtures/war-and-peace.txt"])
|
50
|
-
expect(transfer).to be_kind_of WeTransfer::Transfer
|
51
|
-
expect(transfer.items.count).to eq(1)
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'returns an error when items are not sended inside an array' do
|
55
|
-
expect {
|
56
|
-
client.create_transfer(items: "#{__dir__}/war-end-peace.txt")
|
57
|
-
}.to raise_error(StandardError, 'The items field must be an array')
|
58
|
-
end
|
59
|
-
|
60
|
-
it 'completes a item after item upload' do
|
61
|
-
transfer = client.create_transfer(items: ["#{__dir__}/fixtures/war-and-peace.txt"])
|
62
|
-
expect(transfer).to be_kind_of WeTransfer::Transfer
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
describe 'Client#add_item' do
|
67
|
-
let(:client) { described_class.new(api_key: 'api-key') }
|
68
|
-
|
69
|
-
it 'add items to an already created transfer' do
|
70
|
-
transfer = client.create_transfer
|
71
|
-
expect(transfer.items.count).to eq(0)
|
72
|
-
transfer = client.add_items(transfer: transfer, items: ["#{__dir__}/fixtures/war-and-peace.txt"])
|
73
|
-
expect(transfer.items.count).to eq(1)
|
74
|
-
end
|
75
|
-
|
76
|
-
it 'raises an error when no transfer is being send to add_items_to_transfer method' do
|
77
|
-
expect {
|
78
|
-
client.add_items(items: ["#{__dir__}/fixtures/war-and-peace.txt"])
|
79
|
-
}.to raise_error(ArgumentError, 'missing keyword: transfer')
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
data/spec/connection_spec.rb
DELETED
@@ -1,74 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe WeTransfer::Connection do
|
4
|
-
describe 'Connection#new' do
|
5
|
-
it 'creates a new connection when the client is passed' do
|
6
|
-
client = OpenStruct.new(api_key: 'api-key-12345')
|
7
|
-
connection = described_class.new(client: client)
|
8
|
-
expect(connection.api_connection).to be_kind_of Faraday::Connection
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'contains the api_key inside the connection' do
|
12
|
-
client = OpenStruct.new(api_key: 'api-key-12345')
|
13
|
-
connection = described_class.new(client: client)
|
14
|
-
expect(connection.api_key).to eq(client.api_key)
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'correctly handles the connection path variable' do
|
18
|
-
ENV['WT_API_CONNECTION_PATH'] = '/this_path_does_not_exist'
|
19
|
-
client = OpenStruct.new(api_key: 'api-key-12345')
|
20
|
-
connection = described_class.new(client: client)
|
21
|
-
expect(connection.api_path).to eq('/this_path_does_not_exist')
|
22
|
-
ENV['WT_API_CONNECTION_PATH'] = '/v1'
|
23
|
-
connection = described_class.new(client: client)
|
24
|
-
expect(connection.api_path).to eq('/v1')
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
describe 'Connection#post_request' do
|
29
|
-
it 'returns with a response body when a post request is made' do
|
30
|
-
client = OpenStruct.new(api_key: 'api-key-12345')
|
31
|
-
connection = described_class.new(client: client)
|
32
|
-
response = connection.post_request(path: '/authorize')
|
33
|
-
expect(response['status']).to eq('success')
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'returns with a response body when a post request is made' do
|
37
|
-
client = OpenStruct.new(api_key: 'api-key-12345')
|
38
|
-
connection = described_class.new(client: client)
|
39
|
-
response = connection.post_request(path: '/transfers', body: {name: 'test_transfer', description: 'this is a test transfer', items: []})
|
40
|
-
expect(response['shortened_url']).to start_with('http://we.tl/s-')
|
41
|
-
expect(response['name']).to eq('test_transfer')
|
42
|
-
expect(response['description']).to eq('this is a test transfer')
|
43
|
-
expect(response['items'].count).to eq(0)
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'returns with a ApiRequestError when request is forbidden' do
|
47
|
-
client = OpenStruct.new(api_key: 'api-key-12345')
|
48
|
-
connection = described_class.new(client: client)
|
49
|
-
expect {
|
50
|
-
connection.post_request(path: '/forbidden')
|
51
|
-
}.to raise_error(WeTransfer::Connection::ApiRequestError, 'Forbidden')
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe 'Connection#get_request' do
|
56
|
-
it 'returns with a response body when a get request is made for upload urls' do
|
57
|
-
client = OpenStruct.new(api_key: 'api-key-12345')
|
58
|
-
connection = described_class.new(client: client)
|
59
|
-
response = connection.get_request(path: '/files/1337/uploads/1/7331')
|
60
|
-
expect(response['upload_url']).to include('upload')
|
61
|
-
expect(response['part_number']).to eq(1)
|
62
|
-
expect(response['upload_id']).to_not be_nil
|
63
|
-
expect(response['upload_expires_at']).to_not be_nil
|
64
|
-
end
|
65
|
-
|
66
|
-
it 'returns with a ApiRequestError when request is forbidden' do
|
67
|
-
client = OpenStruct.new(api_key: 'api-key-12345')
|
68
|
-
connection = described_class.new(client: client)
|
69
|
-
expect {
|
70
|
-
connection.get_request(path: '/forbidden')
|
71
|
-
}.to raise_error(WeTransfer::Connection::ApiRequestError, 'Forbidden')
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
data/spec/item_builder_spec.rb
DELETED
@@ -1,104 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe WeTransfer::ItemBuilder do
|
4
|
-
describe 'ItemBuilder process' do
|
5
|
-
let(:item_builder) { described_class.new }
|
6
|
-
|
7
|
-
it 'makes a new Item if no item is given on initialze' do
|
8
|
-
expect(item_builder).to be_an_instance_of(WeTransfer::ItemBuilder)
|
9
|
-
expect(item_builder.item).to be_an_instance_of(WeTransfer::Item)
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'uses the item, when a item is given to the ItemBuilder' do
|
13
|
-
builder_item = described_class.new(item: item_builder.item)
|
14
|
-
expect(builder_item).to be_an_instance_of(WeTransfer::ItemBuilder)
|
15
|
-
expect(builder_item.item).to be_an_instance_of(WeTransfer::Item)
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'sets the path when path method is called' do
|
19
|
-
item_builder.path(path: "#{__dir__}/fixtures/war-and-peace.txt")
|
20
|
-
expect(item_builder.item.path).to eq("#{__dir__}/fixtures/war-and-peace.txt")
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'sets content always to file' do
|
24
|
-
item_builder.content_identifier
|
25
|
-
expect(item_builder.item.content_identifier).to eq('file')
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'sets the local local_identifier to the first 36 characters of the file name' do
|
29
|
-
item_builder.path(path: "#{__dir__}/fixtures/war-and-peace.txt")
|
30
|
-
item_builder.local_identifier
|
31
|
-
expect(item_builder.item.local_identifier).to eq('war-and-peace.txt')
|
32
|
-
expect(item_builder.item.local_identifier.length).to be <= 36
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'sets the local local_identifier to the first 36 characters of the file name' do
|
36
|
-
item_builder.path(path: "#{__dir__}/fixtures/war-and-peace-and-peace-and-war-and-war-and-peace.txt")
|
37
|
-
item_builder.local_identifier
|
38
|
-
expect(item_builder.item.local_identifier).to eq('war-and-peace-and-peace-and-war-and-')
|
39
|
-
expect(item_builder.item.local_identifier.length).to be <= 36
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'sets the item name according to the given path' do
|
43
|
-
item_builder.path(path: "#{__dir__}/fixtures/war-and-peace.txt")
|
44
|
-
item_builder.name
|
45
|
-
expect(item_builder.item.name).to eq('war-and-peace.txt')
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'sets the filesize by reading the file' do
|
49
|
-
item_builder.path(path: "#{__dir__}/fixtures/war-and-peace.txt")
|
50
|
-
item_builder.size
|
51
|
-
expect(item_builder.item.size).to_not be_nil
|
52
|
-
expect(item_builder.item.size).to eq(485192)
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'sets the id according to the api response' do
|
56
|
-
item_builder.path(path: "#{__dir__}/fixtures/war-and-peace.txt")
|
57
|
-
item_builder.id(item: item_builder.item, id: 1234)
|
58
|
-
expect(item_builder.item.id).to eq(1234)
|
59
|
-
end
|
60
|
-
|
61
|
-
it 'sets the upload url according to the api response' do
|
62
|
-
item_builder.path(path: "#{__dir__}/fixtures/war-and-peace.txt")
|
63
|
-
item_builder.upload_url(item: item_builder.item, url: "#{ENV.fetch('WT_API_URL')}/upload/#{SecureRandom.hex(9)}")
|
64
|
-
expect(item_builder.item.upload_url).to_not be_nil
|
65
|
-
end
|
66
|
-
|
67
|
-
it 'sets the multipart_parts according to the api response' do
|
68
|
-
item_builder.path(path: "#{__dir__}/fixtures/war-and-peace.txt")
|
69
|
-
item_builder.multipart_parts(item: item_builder.item, part_count: 3)
|
70
|
-
expect(item_builder.item.multipart_parts).to eq(3)
|
71
|
-
end
|
72
|
-
|
73
|
-
it 'sets the multipart_id according to the api response' do
|
74
|
-
item_builder.path(path: "#{__dir__}/fixtures/war-and-peace.txt")
|
75
|
-
item_builder.multipart_id(item: item_builder.item, multi_id: 1234567890)
|
76
|
-
expect(item_builder.item.multipart_id).to eq(1234567890)
|
77
|
-
end
|
78
|
-
|
79
|
-
it 'sets the upload_id according to the api response' do
|
80
|
-
item_builder.path(path: "#{__dir__}/fixtures/war-and-peace.txt")
|
81
|
-
item_builder.upload_id(item: item_builder.item, upload_id: 1234567890)
|
82
|
-
expect(item_builder.item.upload_id).to eq(1234567890)
|
83
|
-
end
|
84
|
-
|
85
|
-
it 'returns the item object when ItemBuilder item method is calles' do
|
86
|
-
item_builder.path(path: "#{__dir__}/fixtures/war-and-peace.txt")
|
87
|
-
expect(item_builder.item).to be_an_instance_of(WeTransfer::Item)
|
88
|
-
end
|
89
|
-
|
90
|
-
it 'validates the file if it exists on the path given' do
|
91
|
-
expect {
|
92
|
-
item_builder.path(path: "#{__dir__}/fixtures/war-and-peace.txt")
|
93
|
-
item_builder.validate_file
|
94
|
-
}.to_not raise_error
|
95
|
-
end
|
96
|
-
|
97
|
-
it 'validates the file if it exists on the path given and returns with FileDoesNotExistError' do
|
98
|
-
expect {
|
99
|
-
item_builder.path(path: "#{__dir__}/peace-and-war.txt")
|
100
|
-
item_builder.validate_file
|
101
|
-
}.to raise_error(WeTransfer::ItemBuilder::FileDoesNotExistError, "#{item_builder.item} does not exist")
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'simplecov'
|
2
|
-
SimpleCov.start do
|
3
|
-
add_filter '/spec/'
|
4
|
-
end
|
5
|
-
|
6
|
-
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
7
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
8
|
-
|
9
|
-
require 'wetransfer'
|
10
|
-
require 'pry'
|
11
|
-
require 'rspec'
|
12
|
-
require_relative 'test_server'
|
13
|
-
|
14
|
-
RSpec.configure do |config|
|
15
|
-
config.before :suite do
|
16
|
-
TestServer.start(nil)
|
17
|
-
ENV['WT_API_URL'] = 'http://localhost:9001'
|
18
|
-
ENV['WT_API_CONNECTION_PATH'] = '/v1'
|
19
|
-
end
|
20
|
-
|
21
|
-
config.expect_with :rspec do |c|
|
22
|
-
c.syntax = :expect
|
23
|
-
end
|
24
|
-
end
|
data/spec/test_server.rb
DELETED
@@ -1,208 +0,0 @@
|
|
1
|
-
require 'webrick'
|
2
|
-
require 'securerandom'
|
3
|
-
include WEBrick
|
4
|
-
|
5
|
-
class ForbiddenServlet < HTTPServlet::AbstractServlet
|
6
|
-
def do_GET(_req, res)
|
7
|
-
res['Content-Type'] = 'application/json'
|
8
|
-
res.status = 403
|
9
|
-
end
|
10
|
-
def do_POST(_req, res)
|
11
|
-
res['Content-Type'] = 'application/json'
|
12
|
-
res.status = 403
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
class AuthServlet < HTTPServlet::AbstractServlet
|
17
|
-
def do_POST(req, res)
|
18
|
-
if req.header["x-api-key"].empty?
|
19
|
-
res['Content-Type'] = 'application/json'
|
20
|
-
res.status = 401
|
21
|
-
else
|
22
|
-
res['Content-Type'] = 'application/json'
|
23
|
-
res.status = 200
|
24
|
-
res.body = {status: 'success', token: SecureRandom.hex(4)}.to_json
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
class TransfersServlet < HTTPServlet::AbstractServlet
|
30
|
-
def self.do_POST(req, res)
|
31
|
-
content = JSON.parse(req.body)
|
32
|
-
items_count = content["items"].count || 0
|
33
|
-
res['Content-Type'] = 'application/json'
|
34
|
-
res.status = 200
|
35
|
-
res.body = {shortened_url: "http://we.tl/s-#{SecureRandom.hex(5)}",
|
36
|
-
id: SecureRandom.hex(9),
|
37
|
-
name: content["name"],
|
38
|
-
description: content["description"],
|
39
|
-
size: totalsize_calc(items: content["items"]),
|
40
|
-
total_items: content["items"].count,
|
41
|
-
version_identifier: nil,
|
42
|
-
state: 'uploading',
|
43
|
-
items: item_params(items: content["items"])}.to_json
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
|
48
|
-
def self.item_params(items:)
|
49
|
-
items_array = []
|
50
|
-
items.each do |item|
|
51
|
-
items_array << {id: SecureRandom.hex(9),
|
52
|
-
local_identifier: item['filename'][0..36],
|
53
|
-
name: item['filename'],
|
54
|
-
size: item['filesize'],
|
55
|
-
meta:{
|
56
|
-
multipart_parts: multipart_calc(item: item),
|
57
|
-
multipart_id: SecureRandom.hex(9),
|
58
|
-
},
|
59
|
-
upload_url:"#{ENV.fetch('WT_API_URL')}/upload/#{SecureRandom.hex(9)}",
|
60
|
-
upload_id: SecureRandom.hex(9),
|
61
|
-
upload_expires_at: (Time.now + 5).to_i
|
62
|
-
}
|
63
|
-
end
|
64
|
-
return items_array
|
65
|
-
end
|
66
|
-
|
67
|
-
def self.totalsize_calc(items:)
|
68
|
-
total_size = []
|
69
|
-
items.each do |item|
|
70
|
-
total_size << item['filesize']
|
71
|
-
end
|
72
|
-
total_size.reduce(0, :+)
|
73
|
-
end
|
74
|
-
|
75
|
-
def self.multipart_calc(item:)
|
76
|
-
parts = item['filesize'] / 6291456
|
77
|
-
parts == 0 ? 1 : parts
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
class UploadUrlServlet < HTTPServlet::AbstractServlet
|
82
|
-
def self.do_GET(_req, res)
|
83
|
-
part_number = res.request_uri.to_s.split('/')[-2]
|
84
|
-
res['Content-Type'] = 'application/json'
|
85
|
-
res.status = 200
|
86
|
-
res.body = { upload_url: "#{ENV.fetch('WT_API_URL')}/upload/#{SecureRandom.hex(9)}",
|
87
|
-
part_number: part_number.to_i,
|
88
|
-
upload_id: SecureRandom.hex(9),
|
89
|
-
upload_expires_at: (Time.now + 5).to_i
|
90
|
-
}.to_json
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
class UploadPartServlet < HTTPServlet::AbstractServlet
|
95
|
-
def self.do_PUT(_req, res)
|
96
|
-
res['Content-Type'] = 'application/json'
|
97
|
-
res.status = 200
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
class TransferItemServlet < HTTPServlet::AbstractServlet
|
102
|
-
# this servlet is used for add_items_to_transfer functionality
|
103
|
-
def self.do_POST(req, res)
|
104
|
-
content = JSON.parse(req.body)
|
105
|
-
res['Content-Type'] = 'application/json'
|
106
|
-
res.status = 200
|
107
|
-
res.body = item_params(items: content["items"]).to_json
|
108
|
-
end
|
109
|
-
|
110
|
-
def self.item_params(items:)
|
111
|
-
items_array = []
|
112
|
-
items.each do |item|
|
113
|
-
items_array << {id: SecureRandom.hex(9),
|
114
|
-
local_identifier: item['filename'][0..36],
|
115
|
-
name: item['filename'],
|
116
|
-
size: item['filesize'],
|
117
|
-
meta:{
|
118
|
-
multipart_parts: multipart_calc(item: item),
|
119
|
-
multipart_id: SecureRandom.hex(9),
|
120
|
-
},
|
121
|
-
upload_url:"#{ENV.fetch('WT_API_URL')}/upload/#{SecureRandom.hex(9)}",
|
122
|
-
upload_id: SecureRandom.hex(9),
|
123
|
-
upload_expires_at: (Time.now + 5).to_i
|
124
|
-
}
|
125
|
-
end
|
126
|
-
return items_array
|
127
|
-
end
|
128
|
-
def self.multipart_calc(item:)
|
129
|
-
parts = item['filesize'] / 6291456
|
130
|
-
parts == 0 ? 1 : parts
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
class UploadServlet < HTTPServlet::AbstractServlet
|
135
|
-
def do_PUT(req, res)
|
136
|
-
res['Content-Type'] = 'application/json'
|
137
|
-
res.status = 200
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
class CompleteItemServlet < HTTPServlet::AbstractServlet
|
142
|
-
def self.do_POST(_req, res)
|
143
|
-
res['Content-Type'] = 'application/json'
|
144
|
-
res.status = 202
|
145
|
-
res.body = {ok: true, message: 'File is marked as complete.'}.to_json
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
class TestServer
|
150
|
-
def self.start(log_file = nil, port = 9001)
|
151
|
-
new(log_file, port).start
|
152
|
-
end
|
153
|
-
|
154
|
-
def initialize(log_file = nil, port = 9001)
|
155
|
-
log_file ||= StringIO.new
|
156
|
-
log = WEBrick::BasicLog.new(log_file, WEBrick::BasicLog::WARN)
|
157
|
-
|
158
|
-
options = {
|
159
|
-
Port: port,
|
160
|
-
Logger: log,
|
161
|
-
AccessLog: [
|
162
|
-
[log, WEBrick::AccessLog::COMMON_LOG_FORMAT],
|
163
|
-
[log, WEBrick::AccessLog::REFERER_LOG_FORMAT]
|
164
|
-
],
|
165
|
-
DocumentRoot: File.expand_path(__dir__),
|
166
|
-
}
|
167
|
-
|
168
|
-
@server = WEBrick::HTTPServer.new(options)
|
169
|
-
@server.mount('/v1/forbidden', ForbiddenServlet)
|
170
|
-
@server.mount('/v1/authorize', AuthServlet)
|
171
|
-
@server.mount_proc('/v1/transfers') do |req, res|
|
172
|
-
if req.path =~ /^(?=.*\bv1\b)(?=.*\btransfers\b)(?=.*\bitems\b).+/
|
173
|
-
TransferItemServlet.do_POST(req, res)
|
174
|
-
else
|
175
|
-
TransfersServlet.do_POST(req, res)
|
176
|
-
end
|
177
|
-
end
|
178
|
-
@server.mount_proc('/v1/files/') do |req, res|
|
179
|
-
if req.request_method == "PUT"
|
180
|
-
UploadPartServlet.do_PUT(req, res)
|
181
|
-
elsif req.request_method == "GET"
|
182
|
-
UploadUrlServlet.do_GET(req, res)
|
183
|
-
else
|
184
|
-
CompleteItemServlet.do_POST(req,res)
|
185
|
-
end
|
186
|
-
end
|
187
|
-
@server.mount('/upload', UploadServlet)
|
188
|
-
end
|
189
|
-
|
190
|
-
def start
|
191
|
-
trap('INT') {
|
192
|
-
begin
|
193
|
-
@server.shutdown unless @server.nil?
|
194
|
-
rescue Object => e
|
195
|
-
warn "Error #{__FILE__}:#{__LINE__}\n#{e.message}"
|
196
|
-
end
|
197
|
-
}
|
198
|
-
|
199
|
-
@thread = Thread.new { @server.start }
|
200
|
-
Thread.pass
|
201
|
-
self
|
202
|
-
end
|
203
|
-
|
204
|
-
def join
|
205
|
-
@thread.join if defined? @thread and @thread
|
206
|
-
self
|
207
|
-
end
|
208
|
-
end
|