xfrtuc 0.0.3 → 0.0.4
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.
- data/.ruby-version +1 -1
- data/Gemfile +2 -0
- data/Gemfile.lock +6 -8
- data/lib/xfrtuc/version.rb +3 -0
- data/lib/xfrtuc.rb +39 -10
- data/spec/spec_helper.rb +4 -0
- data/spec/xfrtuc_spec.rb +81 -3
- data/xfrtuc.gemspec +1 -1
- metadata +24 -16
- checksums.yaml +0 -7
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
1.9.3-p484
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,21 +1,19 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
xfrtuc (0.0.
|
4
|
+
xfrtuc (0.0.3)
|
5
5
|
rest-client (~> 1.6)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
10
|
diff-lcs (1.2.5)
|
11
|
-
|
12
|
-
|
11
|
+
mime-types (2.3)
|
12
|
+
netrc (0.7.7)
|
13
13
|
rack (1.5.2)
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
mime-types (~> 1.16)
|
18
|
-
rdoc (>= 2.4.2)
|
14
|
+
rest-client (1.7.2)
|
15
|
+
mime-types (>= 1.16, < 3.0)
|
16
|
+
netrc (~> 0.7)
|
19
17
|
rspec (3.0.0)
|
20
18
|
rspec-core (~> 3.0.0)
|
21
19
|
rspec-expectations (~> 3.0.0)
|
data/lib/xfrtuc.rb
CHANGED
@@ -2,12 +2,10 @@ require 'json'
|
|
2
2
|
require 'rest_client'
|
3
3
|
|
4
4
|
module Xfrtuc
|
5
|
-
VERSION = "0.0.3"
|
6
|
-
|
7
5
|
class Client
|
8
6
|
attr_reader :base_url
|
9
7
|
|
10
|
-
def initialize(username, password, base_url
|
8
|
+
def initialize(username, password, base_url='https://transferatu.heroku.com')
|
11
9
|
@base_url = base_url
|
12
10
|
@username = username
|
13
11
|
@password = password
|
@@ -31,7 +29,7 @@ module Xfrtuc
|
|
31
29
|
@group_client ||= Xfrtuc::Group.new(self)
|
32
30
|
else
|
33
31
|
self.class.new(@username, @password,
|
34
|
-
|
32
|
+
@base_url + "/groups/#{URI.encode(name)}")
|
35
33
|
end
|
36
34
|
end
|
37
35
|
|
@@ -39,7 +37,7 @@ module Xfrtuc
|
|
39
37
|
JSON.parse(@resource[path].get(params))
|
40
38
|
end
|
41
39
|
|
42
|
-
def post(path, data)
|
40
|
+
def post(path, data={})
|
43
41
|
JSON.parse(@resource[path].post(JSON.generate(data)))
|
44
42
|
end
|
45
43
|
|
@@ -81,7 +79,11 @@ module Xfrtuc
|
|
81
79
|
class Transfer < ApiEndpoint
|
82
80
|
def initialize(client); super; end
|
83
81
|
|
84
|
-
def info(id,
|
82
|
+
def info(id, opts={})
|
83
|
+
verbose = opts.delete(:verbose) || false
|
84
|
+
unless opts.empty?
|
85
|
+
raise ArgumentError, "Unsupported option(s): #{opts.keys}"
|
86
|
+
end
|
85
87
|
client.get("/transfers/#{id}", params: { verbose: verbose })
|
86
88
|
end
|
87
89
|
|
@@ -89,8 +91,18 @@ module Xfrtuc
|
|
89
91
|
client.get("/transfers")
|
90
92
|
end
|
91
93
|
|
92
|
-
def create(
|
93
|
-
|
94
|
+
def create(opts)
|
95
|
+
from_type = opts.fetch :from_type
|
96
|
+
from_url = opts.fetch :from_url
|
97
|
+
to_type = opts.fetch :to_type
|
98
|
+
to_url = opts.fetch :to_url
|
99
|
+
[ :from_type, :from_url, :to_type, :to_url ].each { |key| opts.delete key }
|
100
|
+
from_name = opts.delete :from_name
|
101
|
+
to_name = opts.delete :to_name
|
102
|
+
unless opts.empty?
|
103
|
+
raise ArgumentError, "Unsupported option(s): #{opts.keys}"
|
104
|
+
end
|
105
|
+
|
94
106
|
client.post("/transfers",
|
95
107
|
from_type: from_type,
|
96
108
|
from_url: from_url,
|
@@ -103,6 +115,14 @@ module Xfrtuc
|
|
103
115
|
def delete(id)
|
104
116
|
client.delete("/transfers/#{URI.encode(id)}")
|
105
117
|
end
|
118
|
+
|
119
|
+
def cancel(id)
|
120
|
+
client.post("/transfers/#{URI.encode(id)}/actions/cancel")
|
121
|
+
end
|
122
|
+
|
123
|
+
def public_url(id, opts={})
|
124
|
+
client.post("/transfers/#{URI.encode(id)}/actions/public-url", opts)
|
125
|
+
end
|
106
126
|
end
|
107
127
|
|
108
128
|
class Schedule < ApiEndpoint
|
@@ -116,8 +136,17 @@ module Xfrtuc
|
|
116
136
|
client.get("/schedules")
|
117
137
|
end
|
118
138
|
|
119
|
-
def create(
|
120
|
-
|
139
|
+
def create(opts)
|
140
|
+
name = opts.fetch :name
|
141
|
+
callback_url = opts.fetch :callback_url
|
142
|
+
hour = opts.fetch :hour
|
143
|
+
days = opts.fetch(:days, Date::DAYNAMES)
|
144
|
+
timezone = opts.fetch(:timezone, 'UTC')
|
145
|
+
[ :name, :callback_url, :hour, :days, :timezone ].each { |key| opts.delete key }
|
146
|
+
unless opts.empty?
|
147
|
+
raise ArgumentError, "Unsupported option(s): #{opts.keys}"
|
148
|
+
end
|
149
|
+
|
121
150
|
client.post("/schedules",
|
122
151
|
name: name,
|
123
152
|
callback_url: callback_url,
|
data/spec/spec_helper.rb
CHANGED
data/spec/xfrtuc_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'securerandom'
|
1
2
|
require 'spec_helper'
|
2
3
|
require 'sham_rack'
|
3
4
|
|
@@ -84,7 +85,7 @@ module Xfrtuc
|
|
84
85
|
end
|
85
86
|
end
|
86
87
|
|
87
|
-
def get_transfer(group_name, xfer_id, verbose
|
88
|
+
def get_transfer(group_name, xfer_id, verbose=false)
|
88
89
|
group = @groups.find { |g| g[:name] == group_name }
|
89
90
|
if group.nil?
|
90
91
|
[404, headers, []]
|
@@ -127,6 +128,33 @@ module Xfrtuc
|
|
127
128
|
end
|
128
129
|
end
|
129
130
|
|
131
|
+
def take_transfer_action(action, args, group_name, xfer_id)
|
132
|
+
unless @transfers.has_key? group_name
|
133
|
+
return [404, headers, []]
|
134
|
+
end
|
135
|
+
xfer = @transfers[group_name].find { |item| item[:uuid] == xfer_id }
|
136
|
+
if xfer.nil?
|
137
|
+
return [404, headers, []]
|
138
|
+
else
|
139
|
+
case action
|
140
|
+
when 'cancel' then
|
141
|
+
now = Time.now
|
142
|
+
xfer[:canceled_at] = now
|
143
|
+
return [201, headers, [ { canceled_at: now }.to_json ]]
|
144
|
+
when 'public-url' then
|
145
|
+
expires_at = if args.has_key? 'ttl'
|
146
|
+
Time.now + args['ttl'].to_i
|
147
|
+
else
|
148
|
+
Time.now + (10 * 60)
|
149
|
+
end
|
150
|
+
url = "https://example.com/backup/#{xfer[:uuid]}"
|
151
|
+
return [201, headers, [ { url: url, expires_at: expires_at }.to_json ]]
|
152
|
+
else
|
153
|
+
return [404, headers, []]
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
130
158
|
def add_schedule(group_name, schedule)
|
131
159
|
unless @schedules.has_key? group_name
|
132
160
|
return [404, headers, []]
|
@@ -185,6 +213,8 @@ module Xfrtuc
|
|
185
213
|
return [401, headers, ["Not authorized"]]
|
186
214
|
end
|
187
215
|
case path(env)
|
216
|
+
when %r{/groups/[^/]+/transfers/[^/]+/actions} then
|
217
|
+
transfers_actions_endpoint(env)
|
188
218
|
when %r{/groups/[^/]+/transfers} then
|
189
219
|
transfers_endpoint(env)
|
190
220
|
when %r{/groups/[^/]+/schedules} then
|
@@ -196,6 +226,20 @@ module Xfrtuc
|
|
196
226
|
end
|
197
227
|
end
|
198
228
|
|
229
|
+
def transfers_actions_endpoint(env)
|
230
|
+
path = path(env)
|
231
|
+
group_name, xfer_id, action =
|
232
|
+
path.match(%r{\A/groups/(.*)/transfers/(.*)/actions/(.*)\z}) && [$1, $2, $3]
|
233
|
+
verb = verb(env)
|
234
|
+
if verb == 'POST'
|
235
|
+
body = body(env)
|
236
|
+
args = JSON.parse(body) unless body.empty?
|
237
|
+
take_transfer_action(action, args, group_name, xfer_id)
|
238
|
+
else
|
239
|
+
[405, headers, []]
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
199
243
|
def transfers_endpoint(env)
|
200
244
|
path = path(env)
|
201
245
|
group_name, xfer_id = path.match(%r{\A/groups/(.*)/transfers(?:/(.*))?\z}) && [$1, $2]
|
@@ -216,7 +260,7 @@ module Xfrtuc
|
|
216
260
|
if xfer_id.nil?
|
217
261
|
list_transfers(group_name)
|
218
262
|
else
|
219
|
-
get_transfer(group_name, xfer_id,
|
263
|
+
get_transfer(group_name, xfer_id, params(env)['verbose'] == 'true')
|
220
264
|
end
|
221
265
|
else
|
222
266
|
[405, headers, []]
|
@@ -348,7 +392,7 @@ module Xfrtuc
|
|
348
392
|
let(:user) { User.new(username, password) }
|
349
393
|
let(:fakesferatu) { FakeTransferatu.new(user) }
|
350
394
|
let(:host) { 'transferatu.example.com' }
|
351
|
-
let(:client) { Client.new(username, password,
|
395
|
+
let(:client) { Client.new(username, password, "https://#{host}") }
|
352
396
|
|
353
397
|
before do
|
354
398
|
ShamRack.mount(fakesferatu, host, 443)
|
@@ -482,6 +526,40 @@ module Xfrtuc
|
|
482
526
|
expect(fakesferatu.last_transfer(g)).to be_nil
|
483
527
|
end
|
484
528
|
end
|
529
|
+
|
530
|
+
describe "#cancel" do
|
531
|
+
before do
|
532
|
+
fakesferatu.add_transfer(g, Hash[xfer_data.map { |k, v| [k.to_s, v] }])
|
533
|
+
end
|
534
|
+
|
535
|
+
it "cancels the given transfer" do
|
536
|
+
id = fakesferatu.last_transfer(g)[:uuid]
|
537
|
+
before = Time.now
|
538
|
+
cancel_data = client.group(g).transfer.cancel(id)
|
539
|
+
canceled_at = Time.parse(cancel_data["canceled_at"])
|
540
|
+
expect(canceled_at).to be_within(60).of(before)
|
541
|
+
end
|
542
|
+
end
|
543
|
+
|
544
|
+
describe "#public_url" do
|
545
|
+
before do
|
546
|
+
fakesferatu.add_transfer(g, Hash[xfer_data.map { |k, v| [k.to_s, v] }])
|
547
|
+
end
|
548
|
+
|
549
|
+
it "provides a public url for the given transfer" do
|
550
|
+
id = fakesferatu.last_transfer(g)[:uuid]
|
551
|
+
url_data = client.group(g).transfer.public_url(id)
|
552
|
+
expect { URI.parse(url_data["url"]) }.not_to raise_error
|
553
|
+
end
|
554
|
+
|
555
|
+
it "supports an optional ttl parameter" do
|
556
|
+
id = fakesferatu.last_transfer(g)[:uuid]
|
557
|
+
before = Time.now
|
558
|
+
url_data = client.group(g).transfer.public_url(id, ttl: 5 * 60)
|
559
|
+
expires_at = Time.parse(url_data["expires_at"])
|
560
|
+
expect(expires_at).to be_within(60).of(before + (5 * 60))
|
561
|
+
end
|
562
|
+
end
|
485
563
|
end
|
486
564
|
|
487
565
|
describe Schedule do
|
data/xfrtuc.gemspec
CHANGED
metadata
CHANGED
@@ -1,55 +1,62 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xfrtuc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Maciek Sakrejda
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2014-
|
12
|
+
date: 2014-12-17 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: rest-client
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
|
-
- -
|
19
|
+
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: '1.6'
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
|
-
- -
|
27
|
+
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: '1.6'
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: rspec
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
|
-
- -
|
35
|
+
- - ~>
|
32
36
|
- !ruby/object:Gem::Version
|
33
37
|
version: '3.0'
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
|
-
- -
|
43
|
+
- - ~>
|
39
44
|
- !ruby/object:Gem::Version
|
40
45
|
version: '3.0'
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: sham_rack
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
|
-
- -
|
51
|
+
- - ~>
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: '1.3'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
|
-
- -
|
59
|
+
- - ~>
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: '1.3'
|
55
62
|
description: Transferatu client
|
@@ -59,39 +66,40 @@ executables: []
|
|
59
66
|
extensions: []
|
60
67
|
extra_rdoc_files: []
|
61
68
|
files:
|
62
|
-
-
|
69
|
+
- .ruby-version
|
63
70
|
- Gemfile
|
64
71
|
- Gemfile.lock
|
65
72
|
- LICENSE
|
66
73
|
- lib/xfrtuc.rb
|
74
|
+
- lib/xfrtuc/version.rb
|
67
75
|
- spec/spec_helper.rb
|
68
76
|
- spec/xfrtuc_spec.rb
|
69
77
|
- xfrtuc.gemspec
|
70
78
|
homepage: https://github.com/heroku/xfrtuc
|
71
79
|
licenses:
|
72
80
|
- MIT
|
73
|
-
metadata: {}
|
74
81
|
post_install_message:
|
75
82
|
rdoc_options: []
|
76
83
|
require_paths:
|
77
84
|
- lib
|
78
85
|
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
79
87
|
requirements:
|
80
|
-
- -
|
88
|
+
- - ! '>='
|
81
89
|
- !ruby/object:Gem::Version
|
82
90
|
version: '0'
|
83
91
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
|
+
none: false
|
84
93
|
requirements:
|
85
|
-
- -
|
94
|
+
- - ! '>='
|
86
95
|
- !ruby/object:Gem::Version
|
87
96
|
version: '0'
|
88
97
|
requirements: []
|
89
98
|
rubyforge_project:
|
90
|
-
rubygems_version:
|
99
|
+
rubygems_version: 1.8.23
|
91
100
|
signing_key:
|
92
|
-
specification_version:
|
93
|
-
summary: 'Transferatu client: see https://github.com/heroku/transferatu'
|
101
|
+
specification_version: 3
|
102
|
+
summary: ! 'Transferatu client: see https://github.com/heroku/transferatu'
|
94
103
|
test_files:
|
95
104
|
- spec/spec_helper.rb
|
96
105
|
- spec/xfrtuc_spec.rb
|
97
|
-
has_rdoc:
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 8d8ad3039270c13e25ec3a1754077fa7e1bd9978
|
4
|
-
data.tar.gz: 8bd0b2b28529b16194059c6b57822a9dac24a98c
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 12eb85112d36a301c4f9a1340e4f800d1c8b86853381562ce9435d713380af313762e9b8009bd3f202bbea614424a8126f79f486c803fde7739901cc159402b8
|
7
|
-
data.tar.gz: bba43317d78bd508d9c3ecc2de3ad015eeb2e79805bf107ff467ad94fdb453f7e174418b4feaf4f52edd918100182336db3fc1a7eee09c167976c7358cbc3734
|