diff --git a/README.md b/README.md index 2122ee9..c852910 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,12 @@ Or install it yourself as: ) torrents = transmission_api_client.all + # same as .all without arguments, but fetches only specified fields + torrents = transmission_api_client.all(fields: ['id', 'name', 'addedDate']) + # find with default fields torrent = transmission_api_client.find(id) + # find with custom fields + torrent = transmission_api_client.find(id, fields: ['id', 'name']) torrent = transmission_api_client.create("http://torrent.com/nice_pic.torrent") transmission_api_client.destroy(id) diff --git a/lib/transmission_api/client.rb b/lib/transmission_api/client.rb index 851923e..3b7bee9 100644 --- a/lib/transmission_api/client.rb +++ b/lib/transmission_api/client.rb @@ -25,33 +25,32 @@ def initialize(opts) @debug_mode = opts[:debug_mode] || false end - def all + def all(opts = {}) log "get_torrents" - response = - post( - :method => "torrent-get", - :arguments => { - :fields => fields - } - ) + fields = opts.fetch(:fields) { self.fields } - response["arguments"]["torrents"] + get_torrents(fields: fields) end - def find(id) + def find(id, opts = {}) log "get_torrent: #{id}" - response = - post( - :method => "torrent-get", - :arguments => { - :fields => fields, - :ids => [id] - } - ) + fields = opts.fetch(:fields) { self.fields } + + get_torrents(:fields => fields, + :ids => [id]).first + end - response["arguments"]["torrents"].first + + def get_torrents(arguments) + log "get_torrents" + + post_params = { :method => "torrent-get", arguments: arguments } + + response = post(post_params) + + response["arguments"]["torrents"] end def create(filename) @@ -76,7 +75,7 @@ def destroy(id) :method => "torrent-remove", :arguments => { :ids => [id], - :"delete-local-data" => true + :"delete-local-data" => true } ) diff --git a/test/client_test.rb b/test/client_test.rb index 20f4c57..59a9b93 100644 --- a/test/client_test.rb +++ b/test/client_test.rb @@ -108,6 +108,19 @@ def test_all assert_equal( "torrents", @client.all ) end + def test_all_accepts_list_of_fields + opts_expected = { + :method => "torrent-get", + :arguments => { :fields => ["overridden_field"] } + } + result = { "arguments" => { "torrents" => "torrents" } } + + @client.stubs(:fields).returns(["default_field"]) + @client.expects(:post).with( opts_expected ).returns( result ) + + assert_equal( "torrents", @client.all(fields: ['overridden_field']) ) + end + def test_find opts_expected = { :method => "torrent-get", @@ -121,6 +134,32 @@ def test_find assert_equal( "torrent1", @client.find(1) ) end + def test_find_accepts_fields + opts_expected = { + :method => "torrent-get", + :arguments => { :fields => ['id'], :ids => [1] } + } + result = { "arguments" => { "torrents" => ["torrent1"] } } + + @client.stubs(:fields).returns("fields") + @client.expects(:post).with( opts_expected ).returns( result ) + + assert_equal( "torrent1", @client.find(1, fields: ['id']) ) + end + + def test_get_torrents + opts_expected = { + :method => "torrent-get", + :arguments => :test_arguments + } + result = { "arguments" => { "torrents" => ["torrent1"] } } + + @client.stubs(:fields).returns("fields") + @client.expects(:post).with( opts_expected ).returns( result ) + + assert_equal( ["torrent1"], @client.get_torrents(:test_arguments) ) + end + def test_create opts_expected = { :method => "torrent-add",