putio-ruby 0.1.1

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.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ODNiNWNkNjIxZWI1NmY3ZWEyMmQzNDhlNDVjNGMwNmZkNDFmMjdjMA==
5
+ data.tar.gz: !binary |-
6
+ MTI4MDUxOTgxN2JkYTFmOTE0ODlkNDY5NGJjZWNhYWI2ODIwODUzMw==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ OTRhZDE3MWY3YTJhMmRmMjU4NWMyODBhNjkxNjUyYWRiMjk4NTU1YmU3NWRm
10
+ OTBjYzA0ZmVlYzUwZTcxMDJkMzZkYmM5Y2U1YTlhNTBlMTA3OTRlMTA0Yjgx
11
+ YjFlYTc1YjJjMDU0ZDJhODk1NjNjMDVlOTE5YTAyM2ZiOTM5NmU=
12
+ data.tar.gz: !binary |-
13
+ MzgzNjMyMzUyYTNkOGNlYWUwMTljZDE4ODlhYjJhOWU3ZGM0ZDBhNzE3NjU4
14
+ NTM1Mjg4Y2Y0MGJmNDAyOTQyODVkOTFjYmUxYmU0YmE2MmQ2ZjM3M2M0ZDM3
15
+ ODlhZTE5NzcwYzU3MTc0YWZhYWZhZDJiNzdiZTllYjkxZjliNWM=
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.gem
11
+ *.rbc
12
+ *.vim
13
+ .bundle
14
+ .config
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ script: bundle exec rspec spec
5
+ before_install: gem install bundler -v '1.8'
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in putio-ruby.gemspec
4
+ gemspec
@@ -0,0 +1,42 @@
1
+ # putio-ruby
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/putio-ruby.svg)](http://badge.fury.io/rb/putio-ruby)
4
+ [![Build Status](https://travis-ci.org/bloxsom/putio-ruby.svg?branch=master)](https://travis-ci.org/bloxsom/putio-ruby)
5
+ [![Code Climate](https://codeclimate.com/github/bloxsom/putio-ruby/badges/gpa.svg)](https://codeclimate.com/github/bloxsom/putio-ruby)
6
+ [![Test Coverage](https://codeclimate.com/github/bloxsom/putio-ruby/badges/coverage.svg)](https://codeclimate.com/github/bloxsom/putio-ruby/coverage)
7
+
8
+ putio-ruby is a simple gem for communicating with the Put.io REST API. Currently supports just a handful of endpoints for Files and Transfers.
9
+
10
+
11
+ ## Installation
12
+
13
+ Add the gem to your Gemfile:
14
+
15
+ ```
16
+ gem 'putio-ruby'
17
+ ```
18
+
19
+ And then
20
+
21
+ $ bundle install
22
+
23
+ Or install it yourself as:
24
+
25
+ $ gem install putio-ruby
26
+
27
+ ## Usage
28
+
29
+ First configure the gem to use your oauth token (See [instructions](https://put.io/v2/docs/gettingstarted.html#sign-up) for generating a token)
30
+
31
+ Putio.configure :oauth_token => YOUR_OAUTH_TOKEN
32
+
33
+ Then use it to query Put.io
34
+
35
+ Putio::File.list
36
+ Putio::File.get(1234)
37
+ Putio::File.get(1234).delete
38
+ Putio::File.get(1234).download_url
39
+
40
+ Putio::Transfer.list
41
+ Putio::Transfer.get(1234)
42
+ Putio::Transfer.add("http://some_url.com")
@@ -0,0 +1,15 @@
1
+ require "bundler/gem_tasks"
2
+
3
+
4
+ task :console do
5
+ require 'pry'
6
+ require 'putio'
7
+
8
+ def reload!
9
+ Dir.glob("lib/**/*").reject { |fn| File.directory?(fn) }.each { |fn| load fn }
10
+ end
11
+
12
+ #Putio.configure
13
+ Pry.start
14
+ end
15
+
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "putio/ruby"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,29 @@
1
+ require "putio-ruby/version"
2
+
3
+ require "multi_json"
4
+ require "faraday"
5
+ require "active_support"
6
+ require "active_support/inflector"
7
+ require "active_support/core_ext/hash"
8
+
9
+ require "putio-ruby/middleware/parse"
10
+ require "putio-ruby/middleware/oauth_token"
11
+
12
+ require "putio-ruby/api/client"
13
+ require "putio-ruby/api/object"
14
+
15
+ require "putio-ruby/file"
16
+ require "putio-ruby/transfer"
17
+
18
+ require "putio-ruby/errors"
19
+
20
+ module Putio
21
+ def self.configure(args)
22
+ @oauth_token = args[:oauth_token]
23
+ end
24
+
25
+ def self.oauth_token
26
+ @oauth_token
27
+ end
28
+ end
29
+
@@ -0,0 +1,17 @@
1
+ module Putio
2
+ module Api
3
+ module Client
4
+ def client
5
+ @client ||= Faraday.new :url => "https://api.put.io/v2/" do |connection|
6
+ # Request
7
+ connection.use Putio::Middleware::OauthToken
8
+ connection.request :url_encoded
9
+
10
+ # Response
11
+ connection.use Putio::Middleware::Parse
12
+ connection.adapter :net_http
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,45 @@
1
+ module Putio
2
+ module Api
3
+ class Object
4
+ extend Putio::Api::Client
5
+
6
+ def self.plural_name
7
+ singular_name.pluralize
8
+ end
9
+
10
+ def self.singular_name
11
+ self.name.demodulize.underscore.downcase
12
+ end
13
+
14
+ def self.parse_collection(hash)
15
+ objects = hash[plural_name.to_sym]
16
+ objects.map do |obj|
17
+ instantiate_object obj
18
+ end
19
+ end
20
+
21
+ def self.parse_object(hash)
22
+ object = hash[singular_name.to_sym]
23
+ instantiate_object object
24
+ end
25
+
26
+ def self.instantiate_object(hash)
27
+ obj = self.new
28
+ hash.each do |k,v|
29
+ obj.set_attribute(k.to_s, v)
30
+ end
31
+ obj
32
+ end
33
+
34
+ def client
35
+ self.class.client
36
+ end
37
+
38
+ def set_attribute(attr, value)
39
+ return unless attr.present?
40
+ self.singleton_class.instance_eval { attr_reader "#{attr}".to_sym }
41
+ self.instance_variable_set("@#{attr}", value)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,6 @@
1
+ module Putio
2
+ module Errors
3
+ class AuthorizationError < StandardError
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,22 @@
1
+ module Putio
2
+ class File < Putio::Api::Object
3
+ def self.list(parent_id=nil)
4
+ res = client.get "files/list", ( parent_id ? {:parent_id => parent_id} : nil )
5
+ parse_collection res.body if res.success?
6
+ end
7
+
8
+ def self.get(id)
9
+ res = client.get "files/#{id}"
10
+ parse_object res.body if res.success?
11
+ end
12
+
13
+ def download_url
14
+ res = client.get "files/#{id}/download"
15
+ res.headers[:location] if res.success?
16
+ end
17
+
18
+ def delete
19
+ client.post "files/delete", :file_ids => id
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,13 @@
1
+ module Putio
2
+ module Middleware
3
+ class OauthToken < Faraday::Response::Middleware
4
+ def call(env)
5
+ raise Putio::Errors::AuthorizationError, "No OAuth token provided" unless Putio.oauth_token
6
+ oauth_string = "oauth_token=#{Putio.oauth_token}"
7
+ query = env[:url].query
8
+ env[:url].query = query ? "#{query}&#{oauth_string}" : oauth_string
9
+ @app.call(env)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ module Putio
2
+ module Middleware
3
+ class Parse < Faraday::Response::Middleware
4
+ def parse(body)
5
+ begin
6
+ return MultiJson.load(body, :symbolize_keys => true)
7
+ rescue MultiJson::ParseError
8
+ return body
9
+ end
10
+ end
11
+
12
+ def on_complete(env)
13
+ env[:body] = parse(env[:body])
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,22 @@
1
+ module Putio
2
+ class Transfer < Putio::Api::Object
3
+ def self.list
4
+ res = client.get "transfers/list"
5
+ parse_collection res.body if res.success?
6
+ end
7
+
8
+ def self.get(id)
9
+ res = client.get "transfers/#{id}"
10
+ parse_object res.body if res.success?
11
+ end
12
+
13
+ def self.add(url)
14
+ res = client.post "transfers/add", :url => url
15
+ parse_object res.body
16
+ end
17
+
18
+ def fetch
19
+ self.class.find(id)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,3 @@
1
+ module Putio
2
+ VERSION = "0.1.1"
3
+ end
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'putio-ruby/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "putio-ruby"
8
+ spec.version = Putio::VERSION
9
+ spec.authors = ["Brandon Bloxsom"]
10
+ spec.email = ["bloxsom@umich.edu"]
11
+
12
+ spec.summary = 'A simple library for communicating with the Put.io REST API'
13
+ spec.description = 'A simple library for communicating with the Put.io REST API'
14
+ spec.homepage = "https://github.com/bloxsom/putio-ruby"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = "exe"
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.8"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "pry", "~> 0.10"
24
+ spec.add_development_dependency "rspec", "~> 3.0"
25
+ spec.add_development_dependency "codeclimate-test-reporter", "~> 0.4"
26
+
27
+ spec.add_runtime_dependency "faraday", "~> 0.9"
28
+ spec.add_runtime_dependency "activesupport", ">= 3.0.0", "<= 4.3.0"
29
+ spec.add_runtime_dependency "multi_json", "~> 1.7"
30
+ end
metadata ADDED
@@ -0,0 +1,179 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: putio-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Brandon Bloxsom
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-08-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.8'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.8'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '0.10'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '0.10'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: codeclimate-test-reporter
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '0.4'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '0.4'
83
+ - !ruby/object:Gem::Dependency
84
+ name: faraday
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: '0.9'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '0.9'
97
+ - !ruby/object:Gem::Dependency
98
+ name: activesupport
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: 3.0.0
104
+ - - <=
105
+ - !ruby/object:Gem::Version
106
+ version: 4.3.0
107
+ type: :runtime
108
+ prerelease: false
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ! '>='
112
+ - !ruby/object:Gem::Version
113
+ version: 3.0.0
114
+ - - <=
115
+ - !ruby/object:Gem::Version
116
+ version: 4.3.0
117
+ - !ruby/object:Gem::Dependency
118
+ name: multi_json
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ~>
122
+ - !ruby/object:Gem::Version
123
+ version: '1.7'
124
+ type: :runtime
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ~>
129
+ - !ruby/object:Gem::Version
130
+ version: '1.7'
131
+ description: A simple library for communicating with the Put.io REST API
132
+ email:
133
+ - bloxsom@umich.edu
134
+ executables: []
135
+ extensions: []
136
+ extra_rdoc_files: []
137
+ files:
138
+ - .gitignore
139
+ - .rspec
140
+ - .travis.yml
141
+ - Gemfile
142
+ - README.md
143
+ - Rakefile
144
+ - bin/console
145
+ - bin/setup
146
+ - lib/putio-ruby.rb
147
+ - lib/putio-ruby/api/client.rb
148
+ - lib/putio-ruby/api/object.rb
149
+ - lib/putio-ruby/errors.rb
150
+ - lib/putio-ruby/file.rb
151
+ - lib/putio-ruby/middleware/oauth_token.rb
152
+ - lib/putio-ruby/middleware/parse.rb
153
+ - lib/putio-ruby/transfer.rb
154
+ - lib/putio-ruby/version.rb
155
+ - putio-ruby.gemspec
156
+ homepage: https://github.com/bloxsom/putio-ruby
157
+ licenses: []
158
+ metadata: {}
159
+ post_install_message:
160
+ rdoc_options: []
161
+ require_paths:
162
+ - lib
163
+ required_ruby_version: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ! '>='
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ required_rubygems_version: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ! '>='
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ requirements: []
174
+ rubyforge_project:
175
+ rubygems_version: 2.4.6
176
+ signing_key:
177
+ specification_version: 4
178
+ summary: A simple library for communicating with the Put.io REST API
179
+ test_files: []