terracycle 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/AUTHORS ADDED
@@ -0,0 +1,9 @@
1
+ 2list of contributors
2
+ -------------------------------
3
+
4
+ Code and patches from:
5
+
6
+ * [Albert McKeever](http://www.terracycle.net)
7
+ * [Billy Catherall](http://www.terracycle.net)
8
+
9
+ Bug reporting, feature requests
data/History.mkd ADDED
@@ -0,0 +1,3 @@
1
+ 0.1.0 - January, 2011
2
+ -------------------------
3
+ * [Initial release](http://github.com/terracycle/commit/XXXXXXXXXXXXXXXXXXXXXXXXXXX)
data/Licence.mkd ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 TerraCycle Inc.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Manifest ADDED
@@ -0,0 +1,15 @@
1
+ AUTHORS
2
+ History.mkd
3
+ Licence.mkd
4
+ Manifest
5
+ Notes.txt
6
+ README.rdoc
7
+ Rakefile
8
+ VERSION.yml
9
+ add
10
+ lib/terracycle.rb
11
+ lib/terracycle/base.rb
12
+ lib/terracycle/httpauth.rb
13
+ lib/terracycle/oauth.rb
14
+ lib/terracycle/request.rb
15
+ terracycle.gemspec
data/Notes.txt ADDED
@@ -0,0 +1,25 @@
1
+ *****************************************************************
2
+ * From Terracycle API Docs *
3
+ *****************************************************************
4
+
5
+ http://api.terracycle.net
6
+
7
+ 200 OK: everything went awesome.
8
+ 304 Not Modified: there was no new data to return.
9
+ 400 Bad Request: your request is invalid, and we'll return an error message that tells you why. This is the status code returned if you've exceeded the rate limit (see below).
10
+ 401 Not Authorized: either you need to provide authentication credentials, or the credentials provided aren't valid.
11
+ 403 Forbidden: we understand your request, but are refusing to fulfill it. An accompanying error message should explain why.
12
+ 404 Not Found: either you're requesting an invalid URI or the resource in question doesn't exist (ex: no such user).
13
+ 500 Internal Server Error: we did something wrong. Please post to the group about it and the Terracycle team will investigate.
14
+ 502 Bad Gateway: returned if Terracycle is down or being upgraded.
15
+ 503 Service Unavailable: the Terracycle servers are up, but are overloaded with requests. Try again later.
16
+
17
+ **********
18
+ * Errors *
19
+ **********
20
+
21
+ <?xml version="1.0" encoding="UTF-8"?>
22
+ <hash>
23
+ <request>/direct_messages/destroy/456.xml</request>
24
+ <error>No direct message with that ID found.</error>
25
+ </hash>
data/README.rdoc ADDED
@@ -0,0 +1,135 @@
1
+ == The Terracycle Ruby Gem
2
+
3
+ A Ruby wrapper for the Terracycle REST APIs
4
+
5
+ == Installation
6
+
7
+ gem install terracycle
8
+
9
+ == What's new in 0.1.0?
10
+
11
+ This gem is the first version 0.1.0. Thanks to [contributions from Albert Mckeever
12
+ and Billy Catherall](http://github.net/terracycle/HISTORY.mkd).
13
+ This write creates the <tt>Terracycle::Client</tt> class.
14
+
15
+ * **-0.0.1**
16
+ Terracycle::Client.new.user("akmckeever").name
17
+
18
+ The error classes is consistent with [Terracycle's documented
19
+ response codes](http://api.terracycle.net/api_home/responses_errors). These changes should make it easier to
20
+ rescue from specific errors and take action accordingly.
21
+
22
+ <table>
23
+ <thead>
24
+ <tr>
25
+ <th>Response Code</th>
26
+ <th>-0.0.1</th>
27
+ </tr>
28
+ </thead>
29
+ <tbody>
30
+ <tr>
31
+ <td><tt>401</tt></td>
32
+ <td><tt>Terracycle::Unauthorized</tt></td>
33
+ <td><tt>Terracycle::Unauthorized</tt></td>
34
+ </tr>
35
+ <tr>
36
+ <td><tt>403</tt></td>
37
+ <td><tt>Terracycle::General</tt></td>
38
+ <td><tt>Terracycle::Forbidden</tt></td>
39
+ </tr>
40
+ <tr>
41
+ <td><tt>404</tt></td>
42
+ <td><tt>Terracycle::NotFound</tt></td>
43
+ <td><tt>Terracycle::NotFound</tt></td>
44
+ </tr>
45
+ <tr>
46
+ <td><tt>406</tt></td>
47
+ <td>N/A</td>
48
+ <td><tt>Terracycle::NotAcceptable</tt></td>
49
+ </tr>
50
+ <tr>
51
+ <td><tt>420</tt></td>
52
+ <td>N/A</td>
53
+ <td><tt>Terracycle::EnhanceYourCalm</tt></td>
54
+ </tr>
55
+ <tr>
56
+ <td><tt>500</tt></td>
57
+ <td><tt>Terracycle::InformTerracycle</tt></td>
58
+ <td><tt>Terracycle::InternalServerError</tt></td>
59
+ </tr>
60
+ <tr>
61
+ <td><tt>502</tt></td>
62
+ <td><tt>Terracycle::Unavailable</tt></td>
63
+ <td><tt>Terracycle::BadGateway</tt></td>
64
+ </tr>
65
+ <tr>
66
+ <td><tt>503</tt></td>
67
+ <td><tt>Terracycle::Unavailable</tt></td>
68
+ <td><tt>Terracycle::ServiceUnavailable</tt></td>
69
+ </tr>
70
+ </tbody>
71
+ </table>
72
+
73
+ The public APIs defined in version 0.0.1 of this gem will maintain backwards compatibility in
74
+ the next major version, following the best practice of [Semantic Versioning](http://semver.org/).
75
+ You are free to continue using the 0.1.0 series of the gem.
76
+
77
+ Here are a some aditional info:
78
+
79
+ * Ruby 1.8.6 compatibility: All code and specs now work in the latest version of Ruby!
80
+ * Support for HTTP proxies: Access Terracycle from UK, Canada, or inside your office firewall!
81
+ * Support for multiple HTTP adapters: NetHttp (default) and Typhoeus.
82
+ * Support for multiple request formats: JSON (default) or XML
83
+ * More flexible: Parse JSON or XML with the engine of your choosing.
84
+ * More RESTful: Uses HTTP DELETE (instead of POST) when requesting destructive resources
85
+ * SSL: On by default for increased [speed](http://gist.github.net/652330) and security!
86
+
87
+ examples of the gem's usage below.
88
+
89
+ Help! I'm getting: "Did not recognize your engine specification. Please specify either a symbol or a class. (RuntimeError)"
90
+ ---------------------------------------------------------------------------------------------------------------------------
91
+
92
+ If you're using the JSON request format (i.e., the default), you'll need to
93
+ explicitly require a JSON library. We recommend [yajl-ruby](http://github.net/brianmario/yajl-ruby).
94
+ If you're using the XML request format, we recommend requiring [libxml-ruby](http://github.net/dvdplm/libxml-ruby) for dramatically improved performance over REXML.
95
+
96
+ == Documentation
97
+
98
+ Usage Examples
99
+ --------------
100
+ require "rubygems"
101
+ require "terracycle"
102
+
103
+ # Get a brigades info
104
+ puts Terracycle.brigade("6").info
105
+
106
+ # Certain methods require authentication. To get your Terracycle credentials,
107
+ # register an app at http://api.terracycle.net
108
+ Terracycle.configure do |config|
109
+ config.api_key = YOUR_API_KEY
110
+ end
111
+
112
+ # Initialize your Terracycle client
113
+ client = Terracycle::Client.new
114
+
115
+ == Contributing
116
+
117
+ In the spirit of [free software](http://www.fsf.org/licensing/essays/free-sw.html), **everyone** is encouraged to help improve this project.
118
+
119
+ Here are some ways *you* can contribute:
120
+
121
+ * by using alpha, beta, and prerelease versions
122
+ * by reporting bugs
123
+ * by suggesting new features
124
+ * by writing or editing documentation
125
+ * by writing specifications
126
+ * by writing code (**no patch is too small**: fix typos, add comments, clean up inconsistent whitespace)
127
+ * by refactoring code
128
+ * by reviewing patches
129
+
130
+ All contributors will be added to the [HISTORY](https://github.net/terracycle/tc-api-gem/HISTORY.mkd)
131
+ file and will receive the respect and gratitude of the community.
132
+
133
+ == Copyright
134
+ Copyright (c) 2011 TerraCycle Inc..
135
+ See [LICENSE](https://github.com/terracycle/tc-api-gem/LICENSE.mkd) for details.
data/Rakefile ADDED
@@ -0,0 +1,39 @@
1
+ # echoe - used to release the gem
2
+ require 'rubygems'
3
+ require 'rake'
4
+ require 'echoe'
5
+
6
+ Echoe.new('terracycle', '0.1.0') do |p|
7
+ p.description = 'A Ruby wrapper for the Terracycle REST APIs'
8
+ p.url = 'http://github.com/terracycle/tc-api-gem'
9
+ p.author ='Albert Mckeever'
10
+ p.email ='albert.mckeever@terracycle.net'
11
+ p.ignore_pattern = ['temp/*', 'script/*']
12
+ p.development_dependencies = []
13
+ end
14
+
15
+ Dir['#{File.dirname(__FILE__)}/tasks/*.rake'].sort.each { |ext| load ext }
16
+
17
+ # Bundler
18
+ #require 'bundler'
19
+ #Bundler::GemHelper.install_tasks
20
+
21
+ #Rspec
22
+ require 'rspec/core/rake_task'
23
+ RSpec::Core::RakeTask.new(:spec)
24
+
25
+ task :default => :spec
26
+
27
+ namespace :doc do
28
+ require 'yard'
29
+ YARD::Rake::YardocTask.new do |task|
30
+ task.files = ['HISTORY.mkd', 'LICENSE.mkd', 'lib/**/*.rb']
31
+ task.options = [
32
+ '--protected',
33
+ '--output-dir', 'doc/yard',
34
+ '--tag', 'format:Supported formats',
35
+ '--tag', 'authenticated:Requires Authentication',
36
+ '--markup', 'markdown',
37
+ ]
38
+ end
39
+ end
data/VERSION.yml ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ :major: 0
3
+ :minor: 1
4
+ :patch: 0
data/add ADDED
File without changes
@@ -0,0 +1,149 @@
1
+ module Terracycle
2
+ class Base
3
+ extend Forwardable
4
+
5
+ def_delegators :client, :get, :post
6
+
7
+ attr_reader :client
8
+
9
+ def initialize(client)
10
+ @client = client
11
+ end
12
+
13
+ # Signs up a new user
14
+ #
15
+ # @format :json, :xml
16
+ # @authenticated false
17
+ # @see http://api.Terracycle.net/api_home/update_user
18
+ # @example Update the authenticating user's profile
19
+ # @URL - http://api.terracycle.net/api_home/sign_up
20
+ # One of the following must be present:
21
+ # first name, last name - see http://api.terracycle.net/api_home/sign_up for complete list
22
+ def signup_create(user, email, first_mame, last_name, login, default_charity, password, password_confirmation, minimum_registration_age, terms)
23
+ perform_post("/users/create.json", :body => {:user => user, :email => email, :first_mame => first_mame, :last_name => last_name, :login => login,
24
+ :default_charity => default_charity, :password => password, :password_confirmation => password_confirmation,
25
+ :minimum_registration_age => minimum_registration_age, :terms => terms })
26
+ end
27
+
28
+ # Returns extended information of a given user
29
+ #
30
+ # @todo Overload the method to allow fetching of the authenticated user's user name from configuration.
31
+ # @format :json, :xml
32
+ # @authenticated true
33
+ # @param user [Integer, String] A Terracycle user ID or user name.
34
+ # @see http://api.terracycle.net/api_home/users
35
+ # @example Return extended information
36
+ # Terracycle.user("Johndoe33")
37
+ # Terracycle.user(7505382) # Same as above
38
+ def user_info(username, format)
39
+ perform_get("/users/#{username}.#{format}", :mash => false)
40
+ end
41
+
42
+ # Updates the authenticating user's profile
43
+ #
44
+ # @note This method asynchronously processes the uploaded file before updating the user's profile.
45
+ # @format :json, :xml
46
+ # @authenticated true
47
+ # @see http://api.Terracycle.net/api_home/update_user
48
+ # @example Update the authenticating user's profile
49
+ # @URL - http://api.terracycle.net/users/update/username.format
50
+ # One of the following must be present:
51
+ # first name, last name - see http://api.Terracycle.net/api_home/update_use for complete list
52
+ def update_user(username, body={})
53
+ perform_post("/users/update/#{username}.json", :body => body)
54
+ end
55
+
56
+
57
+ # Returns a user's collection
58
+ #
59
+ # @overload collections(options={})
60
+ # @param options [Hash] A customizable set of options.
61
+ # @option options [Integer] :cursor (-1) Breaks the results into pages. Provide values as returned in the response objects's next_cursor and previous_cursor attributes to page back and forth in the list.
62
+ # @return [Hashie::Mash]
63
+ # @example Return the authenticated user's collections
64
+ # Terracycle.collections
65
+ # @overload collections(user, options={})
66
+ # @param user [Integer, String] A Terracycle user ID or user name.
67
+ # @param options [Hash] A customizable set of options.
68
+ # @option options [Integer] :cursor (-1) Breaks the results into pages. Provide values as returned in the response objects's next_cursor and previous_cursor attributes to page back and forth in the list.
69
+ # @return [Hashie::Mash]
70
+ # @example Return @johndoe33's collections
71
+ # Terracycle.collections("johndoe33")
72
+ # Terracycle.collections(7505382) # Same as above
73
+ # @see http://api.terracycle.net/api_home/get/collections
74
+ # @format :json, :xml
75
+ # @authenticated true
76
+
77
+ def user_collection(username, id, format)
78
+ perform_get("/users/#{username}/collections/#{id}.#{format}", :mash => false)
79
+ end
80
+
81
+ # Returns the specified brigade
82
+ #
83
+ # @format :json, :xml
84
+ # @authenticated true
85
+ # @param brigade_id [Integer, String] The id or slug of the brigade.
86
+ # @option options [Integer] :cursor (-1) Breaks the results into pages. Provide values as returned in the response objects's next_cursor and previous_cursor attributes to page back and forth in the brigade.
87
+ # @return [Array]
88
+ # @see http://api.Terracycle.com/api_home/brigade_signup
89
+ # @example Return the brigade minimum waste collected
90
+ # Terracycle.brigade_lists("chip bag brigade", "energy bar wrapper brigade")
91
+ def brigade(id, format)
92
+ perform_get("/brigades/#{id}.#{format}", :mash => true)
93
+ end
94
+
95
+ # Returns the subscribers of the specified label Requests
96
+ #
97
+ # @format :json, :xml
98
+ # @authenticated true
99
+ # @param id [Integer] The collection id of the Label Requests
100
+ # @param options [Hash] A customizable set of options.
101
+ # @return [Array] The subscribers of the specified collection.
102
+ # @see http://api.terracycle.net/api_home/labels_request
103
+ # @example Return the label request of user
104
+ # Terracycle.collection("chip bag", "Toasted chip")
105
+ def label_requests_show(id, format)
106
+ perform_get("/label_requests/#{id}.#{format}", :mash => true)
107
+ end
108
+
109
+ # Returns the subscribers of the specified labels
110
+ #
111
+ # @format :json, :xml
112
+ # @authenticated true
113
+ # @param id [Integer] The collection id of the label.
114
+ # @param options [Hash] A customizable set of options.
115
+ # @return [Array] The subscribers of the specified collection.
116
+ # @see http://api.terracycle.net/api_home/labels
117
+ # @example Return the labels of user
118
+ # Terracycle.collection("chip bag", "Toasted chip")
119
+ def label_show(id, format)
120
+ perform_get("/labels/#{id}.#{format}")
121
+ end
122
+
123
+
124
+ # Brigade/collection sign up
125
+ #
126
+ # @note Brigade sign up is unlimited.
127
+ # @format :json, :xml
128
+ # @authenticated true.
129
+ # @param brigade_id [Integer, String] The id or slug of the brigade.
130
+ # @param id [Integer] The user id of the brigade.
131
+ # @see http://api.Terracycle.com/api_home/brigae_signup
132
+ # Terracycle.brigade_lists("chip bag brigade", "energy bar wrapper brigade")
133
+ def collection_create(body = {})
134
+
135
+ perform_post("/collections/create.json", :body => body)
136
+ end
137
+
138
+
139
+ private
140
+ def perform_get(path, options={})
141
+ Terracycle::Request.get(self, path, options)
142
+
143
+ end
144
+
145
+ def perform_post(path, options={})
146
+ Terracycle::Request.post(self, path, options)
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,27 @@
1
+ module Terracycle
2
+ class HTTPAuth
3
+ include HTTParty
4
+ format :plain
5
+
6
+ attr_reader :username, :password, :options
7
+
8
+ def initialize(username, password, options={})
9
+ @username, @password = username, password
10
+ @options = {:ssl => false}.merge(options)
11
+ self.class.base_uri "http#{'s' if options[:ssl]}://api.terracycle.net"
12
+ end
13
+
14
+ def get(uri, headers={})
15
+ self.class.get(uri, :headers => headers, :basic_auth => basic_auth)
16
+ end
17
+
18
+ def post(uri, body={}, headers={})
19
+ self.class.post(uri, :body => body, :headers => headers, :basic_auth => basic_auth)
20
+ end
21
+
22
+ private
23
+ def basic_auth
24
+ @basic_auth ||= {:username => @username, :password => @password}
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,34 @@
1
+ module Terracycle
2
+ class OAuth
3
+ extend Forwardable
4
+ def_delegators :access_token, :get, :post
5
+
6
+ attr_reader :ctoken, :csecret
7
+
8
+ def initialize(ctoken, csecret)
9
+ @ctoken, @csecret = ctoken, csecret
10
+ end
11
+
12
+ def consumer
13
+ @consumer ||= ::OAuth::Consumer.new(@ctoken, @csecret, {:site => 'http://api.terracycle.net'})
14
+ end
15
+
16
+ def request_token
17
+ @request_token ||= consumer.get_request_token
18
+ end
19
+
20
+ def authorize_from_request(rtoken, rsecret)
21
+ request_token = ::OAuth::RequestToken.new(consumer, rtoken, rsecret)
22
+ access_token = request_token.get_access_token
23
+ @atoken, @asecret = access_token.token, access_token.secret
24
+ end
25
+
26
+ def access_token
27
+ @access_token ||= ::OAuth::AccessToken.new(consumer, @atoken, @asecret)
28
+ end
29
+
30
+ def authorize_from_access(atoken, asecret)
31
+ @atoken, @asecret = atoken, asecret
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,102 @@
1
+ module Terracycle
2
+ class Request
3
+ extend Forwardable
4
+
5
+ def self.get(client, path, options={})
6
+ new(client, :get, path, options).perform
7
+ end
8
+
9
+ def self.post(client, path, options={})
10
+ new(client, :post, path, options).perform
11
+ end
12
+
13
+ attr_reader :client, :method, :path, :options
14
+
15
+ def_delegators :client, :get, :post
16
+
17
+ def initialize(client, method, path, options={})
18
+ @client, @method, @path, @options = client, method, path, {:mash => true}.merge(options)
19
+ end
20
+
21
+ def uri
22
+ @uri ||= begin
23
+ uri = URI.parse(path)
24
+
25
+ if options[:query] && options[:query] != {}
26
+ uri.query = to_query(options[:query])
27
+ end
28
+
29
+ uri.to_s
30
+ end
31
+ end
32
+
33
+ def perform
34
+ make_friendly(send("perform_#{method}"))
35
+ end
36
+
37
+ private
38
+ def perform_get
39
+ send(:get, uri, options[:headers])
40
+ end
41
+
42
+ def perform_post
43
+ send(:post, uri, options[:body], options[:headers])
44
+ end
45
+
46
+ def make_friendly(response)
47
+ raise_errors(response)
48
+ data = parse(response)
49
+ options[:mash] ? mash(data) : data
50
+ end
51
+
52
+ def raise_errors(response)
53
+ case response.code.to_i
54
+ when 400
55
+ data = parse(response)
56
+ raise RateLimitExceeded.new(data), "(#{response.code}): #{response.message} - #{data['error'] if data}"
57
+ when 401
58
+ data = parse(response)
59
+ raise Unauthorized.new(data), "(#{response.code}): #{response.message} - #{data['error'] if data}"
60
+ when 403
61
+ data = parse(response)
62
+ raise General.new(data), "(#{response.code}): #{response.message} - #{data['error'] if data}"
63
+ when 404
64
+ raise NotFound, "(#{response.code}): #{response.message}"
65
+ when 500
66
+ raise InformTerracycle, "Terracycle had an internal error. Please let them know in the group. (#{response.code}): #{response.message}"
67
+ when 502..503
68
+ raise Unavailable, "(#{response.code}): #{response.message}"
69
+ end
70
+ end
71
+
72
+ def parse(response)
73
+ Crack::JSON.parse(response.body)
74
+ end
75
+
76
+ def mash(obj)
77
+ if obj.is_a?(Array)
78
+ obj.map { |item| make_mash_with_consistent_hash(item) }
79
+ elsif obj.is_a?(Hash)
80
+ make_mash_with_consistent_hash(obj)
81
+ else
82
+ obj
83
+ end
84
+ end
85
+
86
+ # Lame workaround for the fact that mash doesn't hash correctly
87
+ def make_mash_with_consistent_hash(obj)
88
+ m = Mash.new(obj)
89
+ def m.hash
90
+ inspect.hash
91
+ end
92
+ return m
93
+ end
94
+
95
+ def to_query(options)
96
+ options.inject([]) do |collection, opt|
97
+ collection << "#{opt[0]}=#{opt[1]}"
98
+ collection
99
+ end * '&'
100
+ end
101
+ end
102
+ end
data/lib/terracycle.rb ADDED
@@ -0,0 +1,64 @@
1
+ require 'forwardable'
2
+ require 'rubygems'
3
+
4
+ gem 'oauth', '0.3.2'
5
+ require 'oauth'
6
+
7
+ gem 'mash', '0.0.3'
8
+ require 'mash'
9
+
10
+ gem 'httparty', '0.4.3'
11
+ require 'httparty'
12
+
13
+ module Terracycle
14
+ class TerracycleError < StandardError
15
+ attr_reader :data
16
+
17
+ def initialize(data)
18
+ @data = data
19
+ super
20
+ end
21
+ end
22
+
23
+ class RateLimitExceeded < TerracycleError; end
24
+ class Unauthorized < TerracycleError; end
25
+ class General < TerracycleError; end
26
+
27
+ class Unavailable < StandardError; end
28
+ class InformTerracycle < StandardError; end
29
+ class NotFound < StandardError; end
30
+
31
+
32
+ def self.label(id)
33
+ response = HTTParty.get("http://api.terracycle.net/labels/#{id}.json", :format => :json)
34
+ end
35
+
36
+ def self.user_info(username)
37
+ HTTParty.get("http://api.terracycle.net/users/#{username}.json", :format => :json)
38
+ end
39
+
40
+ def self.brigade(id)
41
+ HTTParty.get("http://api.terracycle.net/brigades/#{id}.xml", :format => :xml)
42
+ end
43
+
44
+ def self.collection(id)
45
+ HTTParty.get("http://api.terracycle.net/collections/#{id}.json", :format => :json)
46
+ end
47
+
48
+ def self.label_requests(id)
49
+ HTTParty.get("http://api.terracycle.net/users/#{username}/collections/#{:id}.json", :format => :json)
50
+
51
+ end
52
+
53
+ def self.user_collection(username, id)
54
+ HTTParty.get("http://api.terracycle.net/label_requests/#{id}.json", :format => :json)
55
+ end
56
+ end
57
+
58
+ directory = File.dirname(__FILE__)
59
+ $:.unshift(directory) unless $:.include?(directory)
60
+
61
+ require 'terracycle/oauth'
62
+ require 'terracycle/httpauth'
63
+ require 'terracycle/request'
64
+ require 'terracycle/base'
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{terracycle}
5
+ s.version = "0.1.0"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Albert Mckeever"]
9
+ s.date = %q{2011-01-10}
10
+ s.description = %q{A Ruby wrapper for the Terracycle REST APIs}
11
+ s.email = %q{albert.mckeever@terracycle.net}
12
+ s.extra_rdoc_files = ["README.rdoc", "lib/terracycle.rb", "lib/terracycle/base.rb", "lib/terracycle/httpauth.rb", "lib/terracycle/oauth.rb", "lib/terracycle/request.rb"]
13
+ s.files = ["AUTHORS", "History.mkd", "Licence.mkd", "Manifest", "Notes.txt", "README.rdoc", "Rakefile", "VERSION.yml", "add", "lib/terracycle.rb", "lib/terracycle/base.rb", "lib/terracycle/httpauth.rb", "lib/terracycle/oauth.rb", "lib/terracycle/request.rb", "terracycle.gemspec"]
14
+ s.homepage = %q{http://github.com/terracycle/tc-api-gem}
15
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Terracycle", "--main", "README.rdoc"]
16
+ s.require_paths = ["lib"]
17
+ s.rubyforge_project = %q{terracycle}
18
+ s.rubygems_version = %q{1.4.2}
19
+ s.summary = %q{A Ruby wrapper for the Terracycle REST APIs}
20
+
21
+ if s.respond_to? :specification_version then
22
+ s.specification_version = 3
23
+
24
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
25
+ else
26
+ end
27
+ else
28
+ end
29
+ end
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: terracycle
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Albert Mckeever
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-01-10 00:00:00 -05:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description: A Ruby wrapper for the Terracycle REST APIs
23
+ email: albert.mckeever@terracycle.net
24
+ executables: []
25
+
26
+ extensions: []
27
+
28
+ extra_rdoc_files:
29
+ - README.rdoc
30
+ - lib/terracycle.rb
31
+ - lib/terracycle/base.rb
32
+ - lib/terracycle/httpauth.rb
33
+ - lib/terracycle/oauth.rb
34
+ - lib/terracycle/request.rb
35
+ files:
36
+ - AUTHORS
37
+ - History.mkd
38
+ - Licence.mkd
39
+ - Manifest
40
+ - Notes.txt
41
+ - README.rdoc
42
+ - Rakefile
43
+ - VERSION.yml
44
+ - add
45
+ - lib/terracycle.rb
46
+ - lib/terracycle/base.rb
47
+ - lib/terracycle/httpauth.rb
48
+ - lib/terracycle/oauth.rb
49
+ - lib/terracycle/request.rb
50
+ - terracycle.gemspec
51
+ has_rdoc: true
52
+ homepage: http://github.com/terracycle/tc-api-gem
53
+ licenses: []
54
+
55
+ post_install_message:
56
+ rdoc_options:
57
+ - --line-numbers
58
+ - --inline-source
59
+ - --title
60
+ - Terracycle
61
+ - --main
62
+ - README.rdoc
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ hash: 3
71
+ segments:
72
+ - 0
73
+ version: "0"
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ hash: 11
80
+ segments:
81
+ - 1
82
+ - 2
83
+ version: "1.2"
84
+ requirements: []
85
+
86
+ rubyforge_project: terracycle
87
+ rubygems_version: 1.4.2
88
+ signing_key:
89
+ specification_version: 3
90
+ summary: A Ruby wrapper for the Terracycle REST APIs
91
+ test_files: []
92
+