transmission-rpc-ruby 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/.rspec +0 -1
- data/.travis.yml +3 -0
- data/Gemfile +2 -1
- data/Gemfile.lock +34 -3
- data/README.md +141 -47
- data/Rakefile +2 -0
- data/lib/transmission.rb +3 -1
- data/lib/transmission/arguments.rb +29 -6
- data/lib/transmission/arguments/session_set.rb +48 -48
- data/lib/transmission/arguments/torrent_add.rb +16 -12
- data/lib/transmission/arguments/torrent_set.rb +24 -24
- data/lib/transmission/fields.rb +42 -0
- data/lib/transmission/fields/session_get.rb +63 -0
- data/lib/transmission/fields/session_stats.rb +17 -0
- data/lib/transmission/fields/torrent_get.rb +78 -0
- data/lib/transmission/model/session.rb +19 -10
- data/lib/transmission/model/session_stats.rb +25 -0
- data/lib/transmission/model/torrent.rb +42 -27
- data/lib/transmission/rpc.rb +48 -44
- data/lib/transmission/rpc/connector.rb +3 -4
- data/lib/transmission/utils.rb +28 -0
- data/spec/helpers/stubs.rb +15 -1
- data/spec/spec_helper.rb +2 -0
- data/spec/transmission/arguments_spec.rb +54 -7
- data/spec/transmission/fields_spec.rb +63 -0
- data/spec/transmission/model/session_spec.rb +84 -0
- data/spec/transmission/model/torrent_spec.rb +82 -0
- data/spec/transmission/rpc/connector_spec.rb +4 -3
- data/spec/transmission/rpc_spec.rb +3 -8
- data/spec/transmission/utils_spec.rb +70 -0
- data/transmission-rpc-ruby.gemspec +2 -2
- metadata +13 -6
- data/lib/transmission/arguments/session_get.rb +0 -63
- data/lib/transmission/arguments/session_stats.rb +0 -17
- data/lib/transmission/arguments/torrent_get.rb +0 -78
@@ -143,4 +143,86 @@ describe Transmission::Model::Torrent do
|
|
143
143
|
|
144
144
|
end
|
145
145
|
|
146
|
+
describe '#method_missing' do
|
147
|
+
let(:torrent) { Transmission::Model::Torrent.new({'id' => 1, 'name' => 'some name', 'some-key' => 'some-value'}, nil) }
|
148
|
+
|
149
|
+
before :each do
|
150
|
+
stub_const("Transmission::Fields::TorrentGet::ATTRIBUTES", [{field: 'id'}, {field: 'name'}, {field: 'some-key'}])
|
151
|
+
stub_const("Transmission::Arguments::TorrentSet::ATTRIBUTES", [{field: 'name'}])
|
152
|
+
end
|
153
|
+
|
154
|
+
describe 'with existing attributes' do
|
155
|
+
it 'should return the correct values' do
|
156
|
+
expect(torrent.id).to eq(1)
|
157
|
+
expect(torrent.name).to eq('some name')
|
158
|
+
expect(torrent.some_key).to eq('some-value')
|
159
|
+
end
|
160
|
+
|
161
|
+
it 'should set the correct values' do
|
162
|
+
torrent.name = 'ok'
|
163
|
+
expect(torrent.name).to eq('ok')
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
describe 'with none existing attributes' do
|
168
|
+
it 'should raise error' do
|
169
|
+
expect {
|
170
|
+
torrent.i_dont_exist
|
171
|
+
}.to raise_error(NoMethodError)
|
172
|
+
end
|
173
|
+
|
174
|
+
it 'should raise error' do
|
175
|
+
expect {
|
176
|
+
torrent.i_dont_exist = 'some value'
|
177
|
+
}.to raise_error(NoMethodError)
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
describe '#save!' do
|
183
|
+
let(:rpc) {Transmission::RPC.new}
|
184
|
+
|
185
|
+
before :each do
|
186
|
+
stub_const("Transmission::Arguments::TorrentSet::ATTRIBUTES", [{field: 'name'}, {field: 'ids'}])
|
187
|
+
stub_get_torrent({ids: [1]}, [{id: 1, name: 'test', comment: 'comment'}])
|
188
|
+
stub_rpc_request
|
189
|
+
.with(body: torrent_set_body({name: 'new value', ids: [1]}))
|
190
|
+
.to_return(successful_response)
|
191
|
+
end
|
192
|
+
|
193
|
+
it 'should send the right parameters' do
|
194
|
+
torrent = Transmission::Model::Torrent.find 1, connector: rpc
|
195
|
+
torrent.name = 'new value'
|
196
|
+
torrent.save!
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
[
|
201
|
+
{method: 'start!', rpc_method: 'torrent-start'},
|
202
|
+
{method: 'start_now!', rpc_method: 'torrent-start-now'},
|
203
|
+
{method: 'stop!', rpc_method: 'torrent-stop'},
|
204
|
+
{method: 'verify!', rpc_method: 'torrent-verify'},
|
205
|
+
{method: 're_announce!', rpc_method: 'torrent-reannounce'},
|
206
|
+
{method: 'move_up!', rpc_method: 'queue-move-up'},
|
207
|
+
{method: 'move_down!', rpc_method: 'queue-move-down'},
|
208
|
+
{method: 'move_top!', rpc_method: 'queue-move-top'},
|
209
|
+
{method: 'move_bottom!', rpc_method: 'queue-move-bottom'}
|
210
|
+
].each do |object|
|
211
|
+
describe "##{object[:method]}" do
|
212
|
+
let(:rpc) {Transmission::RPC.new}
|
213
|
+
|
214
|
+
before :each do
|
215
|
+
stub_get_torrent({ids: [1]}, [{id: 1}])
|
216
|
+
stub_rpc_request
|
217
|
+
.with(body: torrent_method_body(object[:rpc_method], {ids: [1]}))
|
218
|
+
.to_return(successful_response)
|
219
|
+
end
|
220
|
+
|
221
|
+
it "should #{object[:method]} torrent" do
|
222
|
+
torrent = Transmission::Model::Torrent.find 1, connector: rpc
|
223
|
+
torrent.send object[:method].to_sym
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
146
228
|
end
|
@@ -39,12 +39,13 @@ describe Transmission::RPC::Connector do
|
|
39
39
|
@connector = Transmission::RPC::Connector.new
|
40
40
|
stub_rpc_request
|
41
41
|
.to_return(conflict_response({headers: {'x-transmission-session-id' => 'abc'}}))
|
42
|
+
stub_rpc_request
|
43
|
+
.with(headers: {'x-transmission-session-id' => 'abc'})
|
44
|
+
.to_return(successful_response)
|
42
45
|
end
|
43
46
|
|
44
47
|
it 'should save the transmission session ID' do
|
45
|
-
|
46
|
-
@connector.post
|
47
|
-
}.to raise_error(Transmission::RPC::Connector::InvalidSessionError)
|
48
|
+
@connector.post
|
48
49
|
expect(@connector.session_id).to eq('abc')
|
49
50
|
end
|
50
51
|
end
|
@@ -1,29 +1,26 @@
|
|
1
1
|
describe Transmission::RPC do
|
2
2
|
|
3
3
|
describe '#get_session' do
|
4
|
-
|
5
4
|
describe 'with fields' do
|
6
|
-
|
7
5
|
before :each do
|
8
6
|
@rpc = Transmission::RPC.new
|
9
|
-
fields = Transmission::
|
7
|
+
fields = Transmission::Fields::SessionGet.new(['version']).to_fields
|
10
8
|
stub_rpc_request
|
11
9
|
.with({body: session_get_body({fields: fields})})
|
12
10
|
.to_return(successful_response)
|
13
11
|
end
|
14
12
|
|
15
13
|
it 'should send the proper arguments' do
|
16
|
-
@rpc.get_session
|
14
|
+
@rpc.get_session ['version']
|
17
15
|
expect(@rpc.connector.response.status).to eq(200)
|
18
16
|
end
|
19
17
|
|
20
18
|
end
|
21
19
|
|
22
20
|
describe 'without fields' do
|
23
|
-
|
24
21
|
before :each do
|
25
22
|
@rpc = Transmission::RPC.new
|
26
|
-
fields = Transmission::
|
23
|
+
fields = Transmission::Fields::SessionGet.new.to_fields
|
27
24
|
stub_rpc_request
|
28
25
|
.with({body: session_get_body({fields: fields})})
|
29
26
|
.to_return(successful_response)
|
@@ -33,9 +30,7 @@ describe Transmission::RPC do
|
|
33
30
|
@rpc.get_session
|
34
31
|
expect(@rpc.connector.response.status).to eq(200)
|
35
32
|
end
|
36
|
-
|
37
33
|
end
|
38
|
-
|
39
34
|
end
|
40
35
|
|
41
36
|
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
describe Transmission::Utils do
|
2
|
+
let(:utils) {
|
3
|
+
Class.new do
|
4
|
+
include Transmission::Utils
|
5
|
+
end
|
6
|
+
}
|
7
|
+
|
8
|
+
subject { utils.new }
|
9
|
+
|
10
|
+
describe '.is_valid_key?' do
|
11
|
+
describe 'with dashes' do
|
12
|
+
let(:arguments) {[{field: 'test-me'}]}
|
13
|
+
|
14
|
+
it 'should find valid key' do
|
15
|
+
expect(subject.is_valid_key?('test_me', arguments)).to eq(true)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe 'with camelcase' do
|
20
|
+
let(:arguments) {[{field: 'testMe'}]}
|
21
|
+
|
22
|
+
it 'should find valid key' do
|
23
|
+
expect(subject.is_valid_key?('test_me', arguments)).to eq(true)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'with invalid key' do
|
28
|
+
let(:arguments) {[{field: 'testMe'}]}
|
29
|
+
|
30
|
+
it 'should not find any key' do
|
31
|
+
expect(subject.is_valid_key?('i_dont_exit', arguments)).to eq(false)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '.option_keys' do
|
37
|
+
it 'should return the right option keys' do
|
38
|
+
options = subject.option_keys('test_me')
|
39
|
+
expect(options.include?('testMe')).to eq(true)
|
40
|
+
expect(options.include?('test-me')).to eq(true)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe '.option_key' do
|
45
|
+
describe 'with dashes' do
|
46
|
+
let(:arguments) {[{field: 'test-me'}]}
|
47
|
+
|
48
|
+
it 'should return the correct key' do
|
49
|
+
expect(subject.option_key('test_me', arguments)).to eq('test-me')
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe 'with camelcase' do
|
54
|
+
let(:arguments) {[{field: 'testMe'}]}
|
55
|
+
|
56
|
+
it 'should return the correct key' do
|
57
|
+
expect(subject.option_key('test_me', arguments)).to eq('testMe')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe 'with invalid key' do
|
62
|
+
let(:arguments) {[{field: 'testMe'}]}
|
63
|
+
|
64
|
+
it 'should return nil' do
|
65
|
+
expect(subject.option_key('i_dont_exit', arguments)).to eq(nil)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'transmission-rpc-ruby'
|
3
|
-
s.version = '0.
|
3
|
+
s.version = '0.2.0'
|
4
4
|
s.date = '2015-03-27'
|
5
5
|
s.summary = "Transmission RPC wrapper in Ruby"
|
6
6
|
s.description = "A new transmission RPC wrapper for Ruby. All object oriented for controlling remote transmission daemons."
|
@@ -13,5 +13,5 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.add_dependency "faraday", "~> 0.9"
|
14
14
|
s.add_development_dependency "rake", "~> 10.4"
|
15
15
|
s.add_development_dependency "rspec", "~> 3.2"
|
16
|
-
s.add_development_dependency "webmock", "~> 1.
|
16
|
+
s.add_development_dependency "webmock", "~> 1.21"
|
17
17
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: transmission-rpc-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Max Hoffmann
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '1.
|
61
|
+
version: '1.21'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '1.
|
68
|
+
version: '1.21'
|
69
69
|
description: A new transmission RPC wrapper for Ruby. All object oriented for controlling
|
70
70
|
remote transmission daemons.
|
71
71
|
email: tsov@me.com
|
@@ -75,6 +75,7 @@ extra_rdoc_files: []
|
|
75
75
|
files:
|
76
76
|
- ".gitignore"
|
77
77
|
- ".rspec"
|
78
|
+
- ".travis.yml"
|
78
79
|
- Gemfile
|
79
80
|
- Gemfile.lock
|
80
81
|
- LICENSE
|
@@ -82,24 +83,30 @@ files:
|
|
82
83
|
- Rakefile
|
83
84
|
- lib/transmission.rb
|
84
85
|
- lib/transmission/arguments.rb
|
85
|
-
- lib/transmission/arguments/session_get.rb
|
86
86
|
- lib/transmission/arguments/session_set.rb
|
87
|
-
- lib/transmission/arguments/session_stats.rb
|
88
87
|
- lib/transmission/arguments/torrent_add.rb
|
89
|
-
- lib/transmission/arguments/torrent_get.rb
|
90
88
|
- lib/transmission/arguments/torrent_set.rb
|
91
89
|
- lib/transmission/config.rb
|
90
|
+
- lib/transmission/fields.rb
|
91
|
+
- lib/transmission/fields/session_get.rb
|
92
|
+
- lib/transmission/fields/session_stats.rb
|
93
|
+
- lib/transmission/fields/torrent_get.rb
|
92
94
|
- lib/transmission/model.rb
|
93
95
|
- lib/transmission/model/session.rb
|
96
|
+
- lib/transmission/model/session_stats.rb
|
94
97
|
- lib/transmission/model/torrent.rb
|
95
98
|
- lib/transmission/rpc.rb
|
96
99
|
- lib/transmission/rpc/connector.rb
|
100
|
+
- lib/transmission/utils.rb
|
97
101
|
- spec/helpers/stubs.rb
|
98
102
|
- spec/spec_helper.rb
|
99
103
|
- spec/transmission/arguments_spec.rb
|
104
|
+
- spec/transmission/fields_spec.rb
|
105
|
+
- spec/transmission/model/session_spec.rb
|
100
106
|
- spec/transmission/model/torrent_spec.rb
|
101
107
|
- spec/transmission/rpc/connector_spec.rb
|
102
108
|
- spec/transmission/rpc_spec.rb
|
109
|
+
- spec/transmission/utils_spec.rb
|
103
110
|
- transmission-rpc-ruby.gemspec
|
104
111
|
homepage: https://github.com/transmission-rails/transmission-rpc-ruby
|
105
112
|
licenses:
|
@@ -1,63 +0,0 @@
|
|
1
|
-
module Transmission
|
2
|
-
class Arguments
|
3
|
-
class SessionGet < Transmission::Arguments
|
4
|
-
|
5
|
-
ATTRIBUTES = [
|
6
|
-
'alt-speed-down',
|
7
|
-
'alt-speed-enabled',
|
8
|
-
'alt-speed-time-begin',
|
9
|
-
'alt-speed-time-enabled',
|
10
|
-
'alt-speed-time-end',
|
11
|
-
'alt-speed-time-day',
|
12
|
-
'alt-speed-up',
|
13
|
-
'blocklist-url',
|
14
|
-
'blocklist-update',
|
15
|
-
'blocklist-enabled',
|
16
|
-
'blocklist-size',
|
17
|
-
'cache-size-mb',
|
18
|
-
'config-dir',
|
19
|
-
'download-dir',
|
20
|
-
'download-queue-size',
|
21
|
-
'download-queue-enabled',
|
22
|
-
'dht-enabled',
|
23
|
-
'encryption',
|
24
|
-
'required',
|
25
|
-
'preferred',
|
26
|
-
'tolerated',
|
27
|
-
'idle-seeding-limit',
|
28
|
-
'idle-seeding-limit-enabled',
|
29
|
-
'incomplete-dir',
|
30
|
-
'incomplete-dir-enabled',
|
31
|
-
'lpd-enabled',
|
32
|
-
'peer-limit-global',
|
33
|
-
'peer-limit-per-torrent',
|
34
|
-
'pex-enabled',
|
35
|
-
'peer-port',
|
36
|
-
'peer-port-random-on-start',
|
37
|
-
'port-forwarding-enabled',
|
38
|
-
'queue-stalled-enabled',
|
39
|
-
'queue-stalled-minutes',
|
40
|
-
'rename-partial-files',
|
41
|
-
'rpc-version',
|
42
|
-
'rpc-version-minimum',
|
43
|
-
'script-torrent-done-filename',
|
44
|
-
'script-torrent-done-enabled',
|
45
|
-
'done',
|
46
|
-
'seedRatioLimit',
|
47
|
-
'seedRatioLimited',
|
48
|
-
'seed-queue-size',
|
49
|
-
'seed-queue-enabled',
|
50
|
-
'speed-limit-down',
|
51
|
-
'speed-limit-down-enabled',
|
52
|
-
'speed-limit-up',
|
53
|
-
'speed-limit-up-enabled',
|
54
|
-
'start-added-torrents',
|
55
|
-
'trash-original-torrent-files',
|
56
|
-
'units',
|
57
|
-
'utp-enabled',
|
58
|
-
'version'
|
59
|
-
]
|
60
|
-
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module Transmission
|
2
|
-
class Arguments
|
3
|
-
class SessionStats < Transmission::Arguments
|
4
|
-
|
5
|
-
ATTRIBUTES = [
|
6
|
-
'activeTorrentCount',
|
7
|
-
'downloadSpeed',
|
8
|
-
'pausedTorrentCount',
|
9
|
-
'torrentCount',
|
10
|
-
'uploadSpeed',
|
11
|
-
'cumulative-stats',
|
12
|
-
'current-stats'
|
13
|
-
]
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,78 +0,0 @@
|
|
1
|
-
module Transmission
|
2
|
-
class Arguments
|
3
|
-
class TorrentGet < Transmission::Arguments
|
4
|
-
|
5
|
-
ATTRIBUTES = [
|
6
|
-
'id',
|
7
|
-
'activityDate',
|
8
|
-
'addedDate',
|
9
|
-
'bandwidthPriority',
|
10
|
-
'comment',
|
11
|
-
'corruptEver',
|
12
|
-
'creator',
|
13
|
-
'dateCreated',
|
14
|
-
'desiredAvailable',
|
15
|
-
'doneDate',
|
16
|
-
'downloadDir',
|
17
|
-
'downloadedEver',
|
18
|
-
'downloadLimit',
|
19
|
-
'downloadLimited',
|
20
|
-
'error',
|
21
|
-
'errorString',
|
22
|
-
'eta',
|
23
|
-
'etaIdle',
|
24
|
-
'files',
|
25
|
-
'fileStats',
|
26
|
-
'hashString',
|
27
|
-
'haveUnchecked',
|
28
|
-
'haveValid',
|
29
|
-
'honorsSessionLimits',
|
30
|
-
'isFinished',
|
31
|
-
'isPrivate',
|
32
|
-
'isStalled',
|
33
|
-
'leftUntilDone',
|
34
|
-
'magnetLink',
|
35
|
-
'manualAnnounceTime',
|
36
|
-
'maxConnectedPeers',
|
37
|
-
'metadataPercentComplete',
|
38
|
-
'name',
|
39
|
-
'peer-limit',
|
40
|
-
'peers',
|
41
|
-
'peersConnected',
|
42
|
-
'peersFrom',
|
43
|
-
'peersGettingFromUs',
|
44
|
-
'peersSendingToUs',
|
45
|
-
'percentDone',
|
46
|
-
'pieces',
|
47
|
-
'pieceCount',
|
48
|
-
'pieceSize',
|
49
|
-
'priorities',
|
50
|
-
'queuePosition',
|
51
|
-
'rateDownload',
|
52
|
-
'rateUpload',
|
53
|
-
'recheckProgress',
|
54
|
-
'secondsDownloading',
|
55
|
-
'secondsSeeding',
|
56
|
-
'seedIdleLimit',
|
57
|
-
'seedIdleMode',
|
58
|
-
'seedRatioLimit',
|
59
|
-
'seedRatioMode',
|
60
|
-
'sizeWhenDone',
|
61
|
-
'startDate',
|
62
|
-
'status',
|
63
|
-
'trackers',
|
64
|
-
'trackerStats',
|
65
|
-
'totalSize',
|
66
|
-
'torrentFile',
|
67
|
-
'uploadedEver',
|
68
|
-
'uploadLimit',
|
69
|
-
'uploadLimited',
|
70
|
-
'uploadRatio',
|
71
|
-
'wanted',
|
72
|
-
'webseeds',
|
73
|
-
'webseedsSendingToUs'
|
74
|
-
]
|
75
|
-
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|