transmission-rpc-ruby 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4917b1b8a5ad7da8273c58280fac4f25996e6334
4
+ data.tar.gz: fb8415abcd21be4158c10195b2d2a2fa0ae9dc6e
5
+ SHA512:
6
+ metadata.gz: 65366f6cafbce62cd391596bcec5c5455adf8e2edb6730e92031b74e11f9c10c1984c8f258906d9c592b04433c0fde71d34e28615d56ae932cdfa43426dd5d89
7
+ data.tar.gz: 70fd3fcfe593fa9c9ae34b07fe3be75a292fd596f64f957dc036b1306fbc6b94b1cd4091242a9b53be6e0a0a4927f6abb8b9ee2b2236dd3b29ffca6340a0dade
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ .idea
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --warnings
3
+ --require spec_helper
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'faraday', '~> 0.9'
4
+
5
+ group :development, :test do
6
+
7
+ gem 'rspec', '~> 3.2'
8
+ gem 'webmock', '~> 1.20'
9
+ gem 'rake', '~> 10.4'
10
+
11
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,37 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ addressable (2.3.7)
5
+ crack (0.4.2)
6
+ safe_yaml (~> 1.0.0)
7
+ diff-lcs (1.2.5)
8
+ faraday (0.9.1)
9
+ multipart-post (>= 1.2, < 3)
10
+ multipart-post (2.0.0)
11
+ rake (10.4.2)
12
+ rspec (3.2.0)
13
+ rspec-core (~> 3.2.0)
14
+ rspec-expectations (~> 3.2.0)
15
+ rspec-mocks (~> 3.2.0)
16
+ rspec-core (3.2.1)
17
+ rspec-support (~> 3.2.0)
18
+ rspec-expectations (3.2.0)
19
+ diff-lcs (>= 1.2.0, < 2.0)
20
+ rspec-support (~> 3.2.0)
21
+ rspec-mocks (3.2.1)
22
+ diff-lcs (>= 1.2.0, < 2.0)
23
+ rspec-support (~> 3.2.0)
24
+ rspec-support (3.2.2)
25
+ safe_yaml (1.0.4)
26
+ webmock (1.20.4)
27
+ addressable (>= 2.3.6)
28
+ crack (>= 0.3.2)
29
+
30
+ PLATFORMS
31
+ ruby
32
+
33
+ DEPENDENCIES
34
+ faraday (~> 0.9)
35
+ rake (~> 10.4)
36
+ rspec (~> 3.2)
37
+ webmock (~> 1.20)
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2015 Max Hoffmann
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,78 @@
1
+ # Transmission RPC Ruby
2
+
3
+ First primitive version.
4
+
5
+ There is a couple of these RPC wrappers around already, but I am looking for a nice object oriented solution.
6
+
7
+ Main aim for this project => Object Oriented solution for Transmission RPC connection.
8
+
9
+ This Project follows the RPC spec for transmission under `https://trac.transmissionbt.com/browser/trunk/extras/rpc-spec.txt` and is planning on supporting release version >= 2.40 and RPC version >= 14
10
+
11
+ ## Examples (Currently working)
12
+
13
+ To use the `Model` classes you need to set up some configs first
14
+
15
+ Transmission::Config.set host: 'some.host', port: 9091, ssl: false, credentials: {username: 'transmission', password: '********'}
16
+
17
+ Now all models will use the globally set configs
18
+
19
+ ### Finding a torrent
20
+
21
+ torrent = Transmission::Model::Torrent.find 1
22
+
23
+ ### Getting all torrents
24
+
25
+ torrents = Transmission::Model::Torrent.all
26
+
27
+ ### Adding a torrent
28
+
29
+ torrent = Transmission::Model::Torrent.add filename: 'http://example.com/some_torrent.torrent'
30
+ # or
31
+ torrent = Transmission::Model::Torrent.add filename: 'magnet_link'
32
+
33
+ ### Deleting a torrent
34
+
35
+ torrent = Transmission::Model::Torrent.find 1
36
+ # Deletes torrents
37
+ torrent.delete!
38
+ # Deletes torrent and local data
39
+ torrent.delete! true
40
+
41
+ ### Dealing with fields
42
+
43
+ To limit the amount of fields sent around you can limit the information by passing an array of desired fields
44
+
45
+ torrent = Transmission::Model::Torrent.all fields: ['id']
46
+
47
+ ### Using different connectors
48
+
49
+ If you are planning on using this lib to connect to multiple transmission daemon instances you can pass your own `Transmission::RPC` instance
50
+
51
+ connector = Transmission::RPC.new host: 'some.host', port: 9091, ssl: false, credentials: {username: 'transmission', password: '********'}
52
+ torrents = Transmission::Model::Torrent.all connector: connector
53
+
54
+ ### Find out Transmission & RPC version
55
+
56
+ connector = Transmission::RPC.new host: 'some.host', port: 9091, ssl: false, credentials: {username: 'transmission', password: '********'}
57
+ session = connector.session
58
+ session.rpc_version #=> 14
59
+ session.version #=> "2.52"
60
+
61
+ ## Examples (Currently NOT working but desired)
62
+
63
+ ### Torrent instance methods
64
+
65
+ torrent = Transmission::Model::Torrent.find 1
66
+ torrent.move_up
67
+ torrent.move_down
68
+ torrent.move_top
69
+ torrent.move_bottom
70
+ torrent.start
71
+ torrent.start_now
72
+ torrent.stop
73
+ torrent.verify
74
+ torrent.re_announce
75
+ torrent.finished?
76
+ torrent.to_json
77
+
78
+ ### This project is still WIP!!
data/Rakefile ADDED
@@ -0,0 +1,3 @@
1
+ task :spec do
2
+ system 'rspec'
3
+ end
@@ -0,0 +1,8 @@
1
+ require File.join(File.dirname(__FILE__), 'transmission', 'rpc')
2
+ require File.join(File.dirname(__FILE__), 'transmission', 'model')
3
+ require File.join(File.dirname(__FILE__), 'transmission', 'config')
4
+ require File.join(File.dirname(__FILE__), 'transmission', 'arguments')
5
+
6
+ module Transmission
7
+ VERSION = '0.1.0'
8
+ end
@@ -0,0 +1,27 @@
1
+ require File.join(File.dirname(__FILE__), 'arguments', 'torrent_add')
2
+ require File.join(File.dirname(__FILE__), 'arguments', 'torrent_get')
3
+ require File.join(File.dirname(__FILE__), 'arguments', 'torrent_set')
4
+ require File.join(File.dirname(__FILE__), 'arguments', 'session_get')
5
+ require File.join(File.dirname(__FILE__), 'arguments', 'session_set')
6
+ require File.join(File.dirname(__FILE__), 'arguments', 'session_stats')
7
+
8
+ module Transmission
9
+ class Arguments
10
+ class InvalidArgument < StandardError; end
11
+
12
+ attr_accessor :arguments
13
+
14
+ def initialize(arguments = nil)
15
+ @arguments = arguments.inject([]) do |attributes, attribute|
16
+ raise Transmission::Arguments::InvalidArgument unless self.class::ATTRIBUTES.include? attribute
17
+ attributes << attribute
18
+ end if arguments
19
+ @arguments = self.class::ATTRIBUTES if arguments.nil?
20
+ end
21
+
22
+ def to_arguments
23
+ @arguments
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,63 @@
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
@@ -0,0 +1,58 @@
1
+ module Transmission
2
+ class Arguments
3
+ class SessionSet < 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
+ 'cache-size-mb',
17
+ 'download-dir',
18
+ 'download-queue-size',
19
+ 'download-queue-enabled',
20
+ 'dht-enabled',
21
+ 'encryption',
22
+ 'required',
23
+ 'preferred',
24
+ 'tolerated',
25
+ 'idle-seeding-limit',
26
+ 'idle-seeding-limit-enabled',
27
+ 'incomplete-dir',
28
+ 'incomplete-dir-enabled',
29
+ 'lpd-enabled',
30
+ 'peer-limit-global',
31
+ 'peer-limit-per-torrent',
32
+ 'pex-enabled',
33
+ 'peer-port',
34
+ 'peer-port-random-on-start',
35
+ 'port-forwarding-enabled',
36
+ 'queue-stalled-enabled',
37
+ 'queue-stalled-minutes',
38
+ 'rename-partial-files',
39
+ 'script-torrent-done-filename',
40
+ 'script-torrent-done-enabled',
41
+ 'done',
42
+ 'seedRatioLimit',
43
+ 'seedRatioLimited',
44
+ 'seed-queue-size',
45
+ 'seed-queue-enabled',
46
+ 'speed-limit-down',
47
+ 'speed-limit-down-enabled',
48
+ 'speed-limit-up',
49
+ 'speed-limit-up-enabled',
50
+ 'start-added-torrents',
51
+ 'trash-original-torrent-files',
52
+ 'units',
53
+ 'utp-enabled'
54
+ ]
55
+
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,17 @@
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
@@ -0,0 +1,22 @@
1
+ module Transmission
2
+ class Arguments
3
+ class TorrentAdd < Transmission::Arguments
4
+
5
+ ATTRIBUTES = [
6
+ 'cookies',
7
+ 'download-dir',
8
+ 'filename',
9
+ 'metainfo',
10
+ 'paused',
11
+ 'peer-limit',
12
+ 'bandwidthPriority',
13
+ 'files-wanted',
14
+ 'files-unwanted',
15
+ 'priority-high',
16
+ 'priority-low',
17
+ 'priority-normal'
18
+ ]
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,78 @@
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