evrythng 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/README ADDED
File without changes
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << 'lib' << 'test'
6
+ t.pattern = 'test/**/*_test.rb'
7
+ t.verbose = false
8
+ end
9
+
10
+ task :default => :test
data/evrythng.gemspec ADDED
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+
3
+ $:.unshift File.expand_path('../lib', __FILE__)
4
+ require 'evrythng/version'
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "evrythng"
8
+ s.version = Evrythng::VERSION.dup
9
+ s.authors = ["beawesomeinstead"]
10
+ s.email = "graf.otodrakula@gmail.com"
11
+ s.homepage = "http://github.com/bai/evrythng"
12
+ s.summary = "A Ruby wrapper for the Evrythng API."
13
+ s.description = "A Ruby wrapper for the Evrythng API."
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.platform = Gem::Platform::RUBY
17
+ s.require_path = 'lib'
18
+
19
+ s.add_development_dependency('yard', '~> 0.6')
20
+
21
+ s.add_runtime_dependency 'hashie', '~> 1.0.0'
22
+ s.add_runtime_dependency 'faraday', '~> 0.6.1'
23
+ s.add_runtime_dependency 'faraday_middleware', '~> 0.6.3'
24
+ s.add_runtime_dependency 'multi_json', '~> 1.0.0'
25
+ s.add_runtime_dependency 'multi_xml', '~> 0.2.0'
26
+ s.add_runtime_dependency 'rash', '~> 0.3.0'
27
+ s.add_runtime_dependency 'simple_oauth', '~> 0.1.5'
28
+ end
@@ -0,0 +1,23 @@
1
+ require 'evrythng/connection'
2
+ require 'evrythng/request'
3
+ require 'evrythng/authentication'
4
+
5
+ module Evrythng
6
+ # @private
7
+ class API
8
+ # @private
9
+ attr_accessor *Configuration::VALID_OPTIONS_KEYS
10
+
11
+ # Creates a new API
12
+ def initialize(options={})
13
+ options = Evrythng.options.merge(options)
14
+ Configuration::VALID_OPTIONS_KEYS.each do |key|
15
+ send("#{key}=", options[key])
16
+ end
17
+ end
18
+
19
+ include Connection
20
+ include Request
21
+ include Authentication
22
+ end
23
+ end
@@ -0,0 +1,25 @@
1
+ module Evrythng
2
+ # @private
3
+ module Authentication
4
+ private
5
+
6
+ # Authentication hash
7
+ #
8
+ # @return [Hash]
9
+ def authentication
10
+ {
11
+ :consumer_key => consumer_key,
12
+ :consumer_secret => consumer_secret,
13
+ :token => oauth_token,
14
+ :token_secret => oauth_token_secret
15
+ }
16
+ end
17
+
18
+ # Check whether user is authenticated
19
+ #
20
+ # @return [Boolean]
21
+ def authenticated?
22
+ authentication.values.all?
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,21 @@
1
+ module Evrythng
2
+ class Client
3
+ # Defines methods related to collections
4
+ module Collections
5
+ # Returns a list of collections
6
+ #
7
+ # @format :json, :xml
8
+ # @authenticated true
9
+ # @rate_limited true
10
+ # @param options [Hash] A customizable set of options.
11
+ # @return [Hashie::Rash] The requested list of collections.
12
+ # @see http://dev.evrythng.net/doc/get/collections
13
+ # @example Return the list of collections
14
+ # Evrythng.collections
15
+ def collections(options={})
16
+ response = get('collections', options)
17
+ format.to_s.downcase == 'xml' ? response['collections'] : response
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ module Evrythng
2
+ class Client
3
+ # Defines methods related to things
4
+ module Things
5
+ # Returns a list of things
6
+ #
7
+ # @format :json, :xml
8
+ # @authenticated true
9
+ # @rate_limited true
10
+ # @param options [Hash] A customizable set of options.
11
+ # @return [Hashie::Rash] The requested list of things.
12
+ # @see http://dev.evrythng.net/doc/get/things
13
+ # @example Return the list of things
14
+ # Evrythng.things
15
+ def things(options={})
16
+ response = get('things', options)
17
+ format.to_s.downcase == 'xml' ? response['things'] : response
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ module Evrythng
2
+ # Wrapper for the Evrythng REST API
3
+ class Client < API
4
+ # Require client method modules after initializing the Client class in
5
+ # order to avoid a superclass mismatch error, allowing those modules to be
6
+ # Client-namespaced.
7
+ require 'evrythng/client/things'
8
+ require 'evrythng/client/collections'
9
+
10
+ include Evrythng::Client::Things
11
+ include Evrythng::Client::Collections
12
+ end
13
+ end
@@ -0,0 +1,100 @@
1
+ require 'faraday'
2
+ require 'evrythng/version'
3
+
4
+ module Evrythng
5
+ # Defines constants and methods related to configuration
6
+ module Configuration
7
+ # An array of valid keys in the options hash when configuring a {Evrythng::API}
8
+ VALID_OPTIONS_KEYS = [
9
+ :adapter,
10
+ :consumer_key,
11
+ :consumer_secret,
12
+ :api_endpoint,
13
+ :format,
14
+ :gateway,
15
+ :oauth_token,
16
+ :oauth_token_secret,
17
+ :proxy,
18
+ :search_endpoint,
19
+ :user_agent].freeze
20
+
21
+ # An array of valid request/response formats
22
+ #
23
+ # @note Not all methods support the XML format.
24
+ VALID_FORMATS = [
25
+ :json,
26
+ :xml].freeze
27
+
28
+ # The adapter that will be used to connect if none is set
29
+ #
30
+ # @note The default faraday adapter is Net::HTTP.
31
+ DEFAULT_ADAPTER = Faraday.default_adapter
32
+
33
+ # By default, don't set an application key
34
+ DEFAULT_CONSUMER_KEY = nil
35
+
36
+ # By default, don't set an application secret
37
+ DEFAULT_CONSUMER_SECRET = nil
38
+
39
+ # The endpoint that will be used to connect if none is set
40
+ DEFAULT_ENDPOINT = 'http://evrythng.net/api/v1/'.freeze
41
+
42
+ # The response format appended to the path and sent in the 'Accept' header if none is set
43
+ #
44
+ # @note JSON is preferred over XML because it is more concise and faster to parse.
45
+ DEFAULT_FORMAT = :json
46
+
47
+ # By default, don't set a user oauth token
48
+ DEFAULT_OAUTH_TOKEN = nil
49
+
50
+ # By default, don't set a user oauth secret
51
+ DEFAULT_OAUTH_TOKEN_SECRET = nil
52
+
53
+ # By default, don't use a proxy server
54
+ DEFAULT_PROXY = nil
55
+
56
+ # The search endpoint that will be used to connect if none is set
57
+ DEFAULT_SEARCH_ENDPOINT = 'http://evrythng.net/api/v1/search'.freeze
58
+
59
+ # The user agent that will be sent to the API endpoint if none is set
60
+ DEFAULT_USER_AGENT = "Evrythng Ruby Gem #{Evrythng::VERSION}".freeze
61
+
62
+ DEFAULT_GATEWAY = nil
63
+
64
+ # @private
65
+ attr_accessor *VALID_OPTIONS_KEYS
66
+
67
+ # When this module is extended, set all configuration options to their default values
68
+ def self.extended(base)
69
+ base.reset
70
+ end
71
+
72
+ # Convenience method to allow configuration options to be set in a block
73
+ def configure
74
+ yield self
75
+ end
76
+
77
+ # Create a hash of options and their values
78
+ def options
79
+ options = {}
80
+ VALID_OPTIONS_KEYS.each { |k| options[k] = send(k) }
81
+ options
82
+ end
83
+
84
+ # Reset all configuration options to defaults
85
+ def reset
86
+ self.adapter = DEFAULT_ADAPTER
87
+ self.consumer_key = DEFAULT_CONSUMER_KEY
88
+ self.consumer_secret = DEFAULT_CONSUMER_SECRET
89
+ self.api_endpoint = DEFAULT_ENDPOINT
90
+ self.format = DEFAULT_FORMAT
91
+ self.oauth_token = DEFAULT_OAUTH_TOKEN
92
+ self.oauth_token_secret = DEFAULT_OAUTH_TOKEN_SECRET
93
+ self.proxy = DEFAULT_PROXY
94
+ self.search_endpoint = DEFAULT_SEARCH_ENDPOINT
95
+ self.user_agent = DEFAULT_USER_AGENT
96
+ self.gateway = DEFAULT_GATEWAY
97
+ self
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,42 @@
1
+ require 'faraday_middleware'
2
+ require 'faraday/request/multipart_with_file'
3
+ require 'faraday/request/gateway'
4
+ require 'faraday/request/evrythng_oauth'
5
+ require 'faraday/response/raise_http_4xx'
6
+ require 'faraday/response/raise_http_5xx'
7
+
8
+ module Evrythng
9
+ # @private
10
+ module Connection
11
+ private
12
+
13
+ def connection(raw=false)
14
+ options = {
15
+ :headers => {'Accept' => "application/#{format}", 'User-Agent' => user_agent},
16
+ :proxy => proxy,
17
+ :ssl => {:verify => false},
18
+ :url => api_endpoint,
19
+ }
20
+
21
+ Faraday.new(options) do |builder|
22
+ builder.use Faraday::Request::MultipartWithFile
23
+ builder.use Faraday::Request::EvrythngOAuth, authentication if authenticated?
24
+ builder.use Faraday::Request::Multipart
25
+ builder.use Faraday::Request::UrlEncoded
26
+ builder.use Faraday::Request::Gateway, gateway if gateway
27
+ builder.use Faraday::Response::RaiseHttp4xx
28
+ builder.use Faraday::Response::Rashify unless raw
29
+ unless raw
30
+ case format.to_s.downcase
31
+ when 'json'
32
+ builder.use Faraday::Response::ParseJson
33
+ when 'xml'
34
+ builder.use Faraday::Response::ParseXml
35
+ end
36
+ end
37
+ builder.use Faraday::Response::RaiseHttp5xx
38
+ builder.adapter(adapter)
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,59 @@
1
+ module Evrythng
2
+ # Custom error class for rescuing from all Evrythng errors
3
+ class Error < StandardError
4
+ attr_reader :http_headers
5
+
6
+ def initialize(message, http_headers)
7
+ @http_headers = Hash[http_headers]
8
+ super message
9
+ end
10
+
11
+ def ratelimit_reset
12
+ Time.at(@http_headers.values_at('x-ratelimit-reset', 'X-RateLimit-Reset').detect{|value| value}.to_i)
13
+ end
14
+
15
+ def ratelimit_limit
16
+ @http_headers.values_at('x-ratelimit-limit', 'X-RateLimit-Limit').detect{|value| value}.to_i
17
+ end
18
+
19
+ def ratelimit_remaining
20
+ @http_headers.values_at('x-ratelimit-remaining', 'X-RateLimit-Remaining').detect{|value| value}.to_i
21
+ end
22
+
23
+ def retry_after
24
+ [(ratelimit_reset - Time.now).ceil, 0].max
25
+ end
26
+ end
27
+
28
+ # Raised when Evrythng returns the HTTP status code 400
29
+ class BadRequest < Error; end
30
+
31
+ # Raised when Evrythng returns the HTTP status code 401
32
+ class Unauthorized < Error; end
33
+
34
+ # Raised when Evrythng returns the HTTP status code 403
35
+ class Forbidden < Error; end
36
+
37
+ # Raised when Evrythng returns the HTTP status code 404
38
+ class NotFound < Error; end
39
+
40
+ # Raised when Evrythng returns the HTTP status code 406
41
+ class NotAcceptable < Error; end
42
+
43
+ # Raised when Evrythng returns the HTTP status code 420
44
+ class EnhanceYourCalm < Error
45
+ # The number of seconds your application should wait before requesting date from the Search API again
46
+ def retry_after
47
+ @http_headers.values_at('retry-after', 'Retry-After').detect {|value| value }.to_i
48
+ end
49
+ end
50
+
51
+ # Raised when Evrythng returns the HTTP status code 500
52
+ class InternalServerError < Error; end
53
+
54
+ # Raised when Evrythng returns the HTTP status code 502
55
+ class BadGateway < Error; end
56
+
57
+ # Raised when Evrythng returns the HTTP status code 503
58
+ class ServiceUnavailable < Error; end
59
+ end
@@ -0,0 +1,44 @@
1
+ module Evrythng
2
+ # Defines HTTP request methods
3
+ module Request
4
+ # Perform an HTTP GET request
5
+ def get(path, options={}, raw=false)
6
+ request(:get, path, options, raw)
7
+ end
8
+
9
+ # Perform an HTTP POST request
10
+ def post(path, options={}, raw=false)
11
+ request(:post, path, options, raw)
12
+ end
13
+
14
+ # Perform an HTTP PUT request
15
+ def put(path, options={}, raw=false)
16
+ request(:put, path, options, raw)
17
+ end
18
+
19
+ # Perform an HTTP DELETE request
20
+ def delete(path, options={}, raw=false)
21
+ request(:delete, path, options, raw)
22
+ end
23
+
24
+ private
25
+
26
+ # Perform an HTTP request
27
+ def request(method, path, options, raw=false)
28
+ response = connection(raw).send(method) do |request|
29
+ case method
30
+ when :get, :delete
31
+ request.url(formatted_path(path), options)
32
+ when :post, :put
33
+ request.path = formatted_path(path)
34
+ request.body = options unless options.empty?
35
+ end
36
+ end
37
+ raw ? response : response.body
38
+ end
39
+
40
+ def formatted_path(path)
41
+ [path, format].compact.join('.')
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,4 @@
1
+ module Evrythng
2
+ # The version of the gem
3
+ VERSION = '0.0.1'.freeze unless defined?(::Evrythng::VERSION)
4
+ end
data/lib/evrythng.rb ADDED
@@ -0,0 +1,25 @@
1
+ require 'evrythng/error'
2
+ require 'evrythng/configuration'
3
+ require 'evrythng/api'
4
+ require 'evrythng/client'
5
+
6
+ module Evrythng
7
+ extend Configuration
8
+
9
+ # Alias for Evrythng::Client.new
10
+ #
11
+ # @return [Evrythng::Client]
12
+ def self.new(options={})
13
+ Evrythng::Client.new(options)
14
+ end
15
+
16
+ # Delegate to Evrythng::Client
17
+ def self.method_missing(method, *args, &block)
18
+ return super unless new.respond_to?(method)
19
+ new.send(method, *args, &block)
20
+ end
21
+
22
+ def self.respond_to?(method, include_private = false)
23
+ new.respond_to?(method, include_private) || super(method, include_private)
24
+ end
25
+ end
@@ -0,0 +1,24 @@
1
+ require 'faraday'
2
+
3
+ module Faraday
4
+ class Request::EvrythngOAuth < Faraday::Middleware
5
+ dependency 'simple_oauth'
6
+
7
+ def call(env)
8
+ params = env[:body] || {}
9
+ signature_params = params
10
+
11
+ params.map{ |k,v| signature_params = {} if v.respond_to?(:content_type) }
12
+
13
+ header = SimpleOAuth::Header.new(env[:method], env[:url], signature_params, @options)
14
+
15
+ env[:request_headers]['Authorization'] = header.to_s
16
+
17
+ @app.call(env)
18
+ end
19
+
20
+ def initialize(app, options)
21
+ @app, @options = app, options
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,18 @@
1
+ require 'faraday'
2
+
3
+ # @private
4
+ module Faraday
5
+ # @private
6
+ class Request::Gateway < Faraday::Middleware
7
+ def call(env)
8
+ url = env[:url].dup
9
+ url.host = @gateway
10
+ env[:url] = url
11
+ @app.call(env)
12
+ end
13
+
14
+ def initialize(app, gateway)
15
+ @app, @gateway = app, gateway
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,30 @@
1
+ require 'faraday'
2
+
3
+ # @private
4
+ module Faraday
5
+ # @private
6
+ class Request::MultipartWithFile < Faraday::Middleware
7
+ def call(env)
8
+ if env[:body].is_a?(Hash)
9
+ env[:body].each do |key, value|
10
+ if value.is_a?(File)
11
+ env[:body][key] = Faraday::UploadIO.new(value, mime_type(value), value.path)
12
+ end
13
+ end
14
+ end
15
+
16
+ @app.call(env)
17
+ end
18
+
19
+ private
20
+
21
+ def mime_type(file)
22
+ case file.path
23
+ when /\.jpe?g/i then 'image/jpeg'
24
+ when /\.gif$/i then 'image/gif'
25
+ when /\.png$/i then 'image/png'
26
+ else 'application/octet-stream'
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,24 @@
1
+ require 'faraday'
2
+
3
+ module Faraday
4
+ class Request::OAuth < Faraday::Middleware
5
+ dependency 'simple_oauth'
6
+
7
+ def call(env)
8
+ params = env[:body] || {}
9
+ signature_params = params
10
+
11
+ params.map{ |k,v| signature_params = {} if v.respond_to?(:content_type) }
12
+
13
+ header = SimpleOAuth::Header.new(env[:method], env[:url], signature_params, @options)
14
+
15
+ env[:request_headers]['Authorization'] = header.to_s
16
+
17
+ @app.call(env)
18
+ end
19
+
20
+ def initialize(app, options)
21
+ @app, @options = app, options
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,45 @@
1
+ require 'faraday'
2
+
3
+ # @private
4
+ module Faraday
5
+ # @private
6
+ class Response::RaiseHttp4xx < Response::Middleware
7
+ def on_complete(env)
8
+ case env[:status].to_i
9
+ when 400
10
+ raise Evrythng::BadRequest.new(error_message(env), env[:response_headers])
11
+ when 401
12
+ raise Evrythng::Unauthorized.new(error_message(env), env[:response_headers])
13
+ when 403
14
+ raise Evrythng::Forbidden.new(error_message(env), env[:response_headers])
15
+ when 404
16
+ raise Evrythng::NotFound.new(error_message(env), env[:response_headers])
17
+ when 406
18
+ raise Evrythng::NotAcceptable.new(error_message(env), env[:response_headers])
19
+ when 420
20
+ raise Evrythng::EnhanceYourCalm.new(error_message(env), env[:response_headers])
21
+ end
22
+ end
23
+
24
+ private
25
+
26
+ def error_message(env)
27
+ "#{env[:method].to_s.upcase} #{env[:url].to_s}: #{env[:status]}#{error_body(env[:body])}"
28
+ end
29
+
30
+ def error_body(body)
31
+ if body.nil?
32
+ nil
33
+ elsif body['error']
34
+ ": #{body['error']}"
35
+ elsif body['errors']
36
+ first = Array(body['errors']).first
37
+ if first.kind_of? Hash
38
+ ": #{first['message'].chomp}"
39
+ else
40
+ ": #{first.chomp}"
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,24 @@
1
+ require 'faraday'
2
+
3
+ # @private
4
+ module Faraday
5
+ # @private
6
+ class Response::RaiseHttp5xx < Response::Middleware
7
+ def on_complete(env)
8
+ case env[:status].to_i
9
+ when 500
10
+ raise Evrythng::InternalServerError.new(error_message(env, "Something is technically wrong."), env[:response_headers])
11
+ when 502
12
+ raise Evrythng::BadGateway.new(error_message(env, "Evrythng is down or being upgraded."), env[:response_headers])
13
+ when 503
14
+ raise Evrythng::ServiceUnavailable.new(error_message(env, "(__-){ Evrythng is over capacity."), env[:response_headers])
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def error_message(env, body=nil)
21
+ "#{env[:method].to_s.upcase} #{env[:url].to_s}: #{[env[:status].to_s + ':', body].compact.join(' ')} Check http://status.evrythng.net/ for updates on the status of the Evrythng service."
22
+ end
23
+ end
24
+ end
metadata ADDED
@@ -0,0 +1,160 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: evrythng
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - beawesomeinstead
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-06-06 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: yard
17
+ prerelease: false
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: "0.6"
24
+ type: :development
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
27
+ name: hashie
28
+ prerelease: false
29
+ requirement: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: 1.0.0
35
+ type: :runtime
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
38
+ name: faraday
39
+ prerelease: false
40
+ requirement: &id003 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.6.1
46
+ type: :runtime
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
49
+ name: faraday_middleware
50
+ prerelease: false
51
+ requirement: &id004 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ~>
55
+ - !ruby/object:Gem::Version
56
+ version: 0.6.3
57
+ type: :runtime
58
+ version_requirements: *id004
59
+ - !ruby/object:Gem::Dependency
60
+ name: multi_json
61
+ prerelease: false
62
+ requirement: &id005 !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ~>
66
+ - !ruby/object:Gem::Version
67
+ version: 1.0.0
68
+ type: :runtime
69
+ version_requirements: *id005
70
+ - !ruby/object:Gem::Dependency
71
+ name: multi_xml
72
+ prerelease: false
73
+ requirement: &id006 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ~>
77
+ - !ruby/object:Gem::Version
78
+ version: 0.2.0
79
+ type: :runtime
80
+ version_requirements: *id006
81
+ - !ruby/object:Gem::Dependency
82
+ name: rash
83
+ prerelease: false
84
+ requirement: &id007 !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 0.3.0
90
+ type: :runtime
91
+ version_requirements: *id007
92
+ - !ruby/object:Gem::Dependency
93
+ name: simple_oauth
94
+ prerelease: false
95
+ requirement: &id008 !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ~>
99
+ - !ruby/object:Gem::Version
100
+ version: 0.1.5
101
+ type: :runtime
102
+ version_requirements: *id008
103
+ description: A Ruby wrapper for the Evrythng API.
104
+ email: graf.otodrakula@gmail.com
105
+ executables: []
106
+
107
+ extensions: []
108
+
109
+ extra_rdoc_files: []
110
+
111
+ files:
112
+ - README
113
+ - Rakefile
114
+ - evrythng.gemspec
115
+ - lib/evrythng.rb
116
+ - lib/evrythng/api.rb
117
+ - lib/evrythng/authentication.rb
118
+ - lib/evrythng/client.rb
119
+ - lib/evrythng/client/collections.rb
120
+ - lib/evrythng/client/things.rb
121
+ - lib/evrythng/configuration.rb
122
+ - lib/evrythng/connection.rb
123
+ - lib/evrythng/error.rb
124
+ - lib/evrythng/request.rb
125
+ - lib/evrythng/version.rb
126
+ - lib/faraday/request/evrythng_oauth.rb
127
+ - lib/faraday/request/gateway.rb
128
+ - lib/faraday/request/multipart_with_file.rb
129
+ - lib/faraday/request/oauth.rb
130
+ - lib/faraday/response/raise_http_4xx.rb
131
+ - lib/faraday/response/raise_http_5xx.rb
132
+ homepage: http://github.com/bai/evrythng
133
+ licenses: []
134
+
135
+ post_install_message:
136
+ rdoc_options: []
137
+
138
+ require_paths:
139
+ - lib
140
+ required_ruby_version: !ruby/object:Gem::Requirement
141
+ none: false
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: "0"
146
+ required_rubygems_version: !ruby/object:Gem::Requirement
147
+ none: false
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: "0"
152
+ requirements: []
153
+
154
+ rubyforge_project:
155
+ rubygems_version: 1.8.5
156
+ signing_key:
157
+ specification_version: 3
158
+ summary: A Ruby wrapper for the Evrythng API.
159
+ test_files: []
160
+