pocket-ruby 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,13 @@
1
+ *.gem
2
+ *.rbc
3
+ .DS_Store
4
+ .bundle
5
+ .rvmrc
6
+ .yardoc
7
+ .rake_tasks~
8
+ Gemfile.lock
9
+ coverage/*
10
+ doc/*
11
+ log/*
12
+ pkg/*
13
+ .idea/*
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format=nested
3
+ --backtrace
@@ -0,0 +1,9 @@
1
+ --no-private
2
+ --protected
3
+ --tag format:"Supported formats"
4
+ --tag authenticated:"Requires Authentication"
5
+ --tag rate_limited:"Rate Limited"
6
+ --markup markdown
7
+ -
8
+ HISTORY.mkd
9
+ LICENSE.mkd
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
@@ -0,0 +1,21 @@
1
+ Copyright (c) 2012 Geknowm, Inc.
2
+ Portions Copyright (c) 2011 Instagram (Burbn, Inc.)
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining
5
+ a copy of this software and associated documentation files (the
6
+ "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,27 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core/rake_task'
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task :default => :spec
8
+
9
+ namespace :doc do
10
+ begin
11
+ require 'yard'
12
+ rescue LoadError
13
+ # ignore
14
+ else
15
+ YARD::Rake::YardocTask.new do |task|
16
+ task.files = ['HISTORY.mkd', 'LICENSE.mkd', 'lib/**/*.rb']
17
+ task.options = [
18
+ '--protected',
19
+ '--output-dir', 'doc/yard',
20
+ '--tag', 'format:Supported formats',
21
+ '--tag', 'authenticated:Requires Authentication',
22
+ '--tag', 'rate_limited:Rate Limited',
23
+ '--markup', 'markdown',
24
+ ]
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,71 @@
1
+ require "sinatra"
2
+
3
+ require "./lib/pocket.rb"
4
+
5
+ enable :sessions
6
+
7
+ CALLBACK_URL = "http://localhost:4567/oauth/callback"
8
+
9
+ Pocket.configure do |config|
10
+ config.consumer_key = <http://getpocket.com/developer/apps/>
11
+ end
12
+
13
+ get '/reset' do
14
+ puts "GET /reset"
15
+ session.clear
16
+ end
17
+
18
+ get "/" do
19
+ puts "GET /"
20
+ puts "session: #{session}"
21
+
22
+ if session[:access_token]
23
+ '
24
+ <a href="/add?url=http://geknowm.com">Add Geknowm</a>
25
+ <a href="/retrieve">Retrieve items</a>
26
+ '
27
+ else
28
+ '<a href="/oauth/connect">Connect with Pocket</a>'
29
+ end
30
+ end
31
+
32
+ get "/oauth/connect" do
33
+ puts "OAUTH CONNECT"
34
+ puts "session: #{session}"
35
+ session[:code] = Pocket.get_code(:redirect_uri => CALLBACK_URL)
36
+ puts "code in connect session: #{session[:code]}"
37
+ new_url = Pocket.authorize_url(:code => session[:code], :redirect_uri => CALLBACK_URL)
38
+ puts "new_url: #{new_url}"
39
+ redirect new_url
40
+ end
41
+
42
+ get "/oauth/callback" do
43
+ puts "OAUTH CALLBACK"
44
+ puts "session: #{session}"
45
+ puts "request.url: #{request.url}"
46
+ puts "request.body: #{request.body.read}"
47
+ puts "code in callback session: #{session[:code]}"
48
+ puts "code in callback session: #{session[:code]}"
49
+ session[:code] = session[:code] if session[:code] == "ef0a7115-e3f2-a253-1147-a16a32"
50
+ access_token = Pocket.get_access_token(session[:code], :redirect_uri => CALLBACK_URL)
51
+ session[:access_token] = access_token
52
+ redirect "/"
53
+ end
54
+
55
+ get '/add' do
56
+ client = Pocket.client(:access_token => session[:access_token])
57
+ info = client.add :url => 'http://geknowm.com'
58
+ "<pre>#{info}</pre>"
59
+ end
60
+
61
+ get "/retrieve" do
62
+ client = Pocket.client(:access_token => session[:access_token])
63
+ info = client.retrieve :detailType => :complete
64
+
65
+ # html = "<h1>#{user.username}'s recent photos</h1>"
66
+ # for media_item in client.user_recent_media
67
+ # html << "<img src='#{media_item.images.thumbnail.url}'>"
68
+ # end
69
+ # html
70
+ "<pre>#{info}</pre>"
71
+ end
@@ -0,0 +1,24 @@
1
+ require 'faraday'
2
+
3
+ # @private
4
+ module FaradayMiddleware
5
+ # @private
6
+ class PocketOAuth < Faraday::Middleware
7
+ def call(env)
8
+ env[:body] = {} if env[:body].nil?
9
+ env[:body] = env[:body].merge(:consumer_key => @consumer_key)
10
+
11
+ if @access_token
12
+ env[:body] = env[:body].merge(:access_token => @access_token)
13
+ end
14
+
15
+ @app.call env
16
+ end
17
+
18
+ def initialize(app, consumer_key, access_token=nil)
19
+ @app = app
20
+ @consumer_key = consumer_key
21
+ @access_token = access_token
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,32 @@
1
+ module Faraday
2
+
3
+ # HTTP Status X-Error-Code X-Error
4
+ # 400 138 Missing consumer key.
5
+ # 403 152 Invalid consumer key.
6
+ # 400 181 Invalid redirect uri.
7
+ # 400 182 Missing code.
8
+ # 400 185 Code not found.
9
+ # 403 158 User rejected code.
10
+ # 403 159 Already used code.
11
+ # 50X 199 Pocket server issue.
12
+ #
13
+ # @see http://getpocket.com/developer/docs/authentication
14
+ class Response::RaisePocketError < Response::Middleware
15
+ ClientErrorStatuses = 400...600
16
+
17
+ def on_complete(env)
18
+ case env[:status]
19
+ when 404
20
+ raise Faraday::Error::ResourceNotFound, response_values(env)
21
+ when 400...403
22
+ raise Pocket::Error, env[:response_headers]['X-Error']
23
+ when ClientErrorStatuses
24
+ raise Faraday::Error::ClientError, response_values(env)
25
+ end
26
+ end
27
+
28
+ def response_values(env)
29
+ {:status => env.status, :headers => env.response_headers, :body => env.body}
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,26 @@
1
+ require File.expand_path('../pocket/error', __FILE__)
2
+ require File.expand_path('../pocket/configuration', __FILE__)
3
+ require File.expand_path('../pocket/api', __FILE__)
4
+ require File.expand_path('../pocket/client', __FILE__)
5
+
6
+ module Pocket
7
+ extend Configuration
8
+
9
+ # Alias for Pocket::Client.new
10
+ #
11
+ # @return [Pocket::Client]
12
+ def self.client(options={})
13
+ Pocket::Client.new(options)
14
+ end
15
+
16
+ # Delegate to Pocket::Client
17
+ def self.method_missing(method, *args, &block)
18
+ return super unless client.respond_to?(method)
19
+ client.send(method, *args, &block)
20
+ end
21
+
22
+ # Delegate to Pocket::Client
23
+ def self.respond_to?(method)
24
+ return client.respond_to?(method) || super
25
+ end
26
+ end
@@ -0,0 +1,21 @@
1
+ require File.expand_path('../connection', __FILE__)
2
+ require File.expand_path('../oauth', __FILE__)
3
+
4
+ module Pocket
5
+ # @private
6
+ class API
7
+ # @private
8
+ attr_accessor *Configuration::VALID_OPTIONS_KEYS
9
+
10
+ # Creates a new API
11
+ def initialize(options={})
12
+ options = Pocket.options.merge(options)
13
+ Configuration::VALID_OPTIONS_KEYS.each do |key|
14
+ send("#{key}=", options[key])
15
+ end
16
+ end
17
+
18
+ include Connection
19
+ include OAuth
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ module Pocket
2
+ # Wrapper for the Pocket REST API
3
+ #
4
+ # @note All methods have been separated into modules and follow the same grouping used in {TODO:doc_URL the Pocket API Documentation}.
5
+ # @see TODO:doc_url
6
+ class Client < API
7
+ Dir[File.expand_path('../client/*.rb', __FILE__)].each{|f| require f}
8
+
9
+ include Pocket::Client::Add
10
+ include Pocket::Client::Modify
11
+ include Pocket::Client::Retrieve
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ module Pocket
2
+ class Client
3
+ # http://getpocket.com/developer/docs/v3/add
4
+ module Add
5
+ # required params: url, consumer_key, access_token
6
+ def add params
7
+ response = connection.post("/v3/add", params)
8
+ response.body
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module Pocket
2
+ class Client
3
+ # http://getpocket.com/developer/docs/v3/modify
4
+ module Modify
5
+ # required params: actions, consumer_key, access_token
6
+ def modify params
7
+ response = connection.post("/v3/send", params)
8
+ response.body
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module Pocket
2
+ class Client
3
+ # http://getpocket.com/developer/docs/v3/retrieve
4
+ module Retrieve
5
+ # required params: consumer_key, access_token
6
+ def retrieve params=[]
7
+ response = connection.post("/v3/get", params)
8
+ response.body
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,85 @@
1
+ require 'faraday'
2
+ require File.expand_path('../version', __FILE__)
3
+
4
+ module Pocket
5
+ # Defines constants and methods related to configuration
6
+ module Configuration
7
+ # An array of valid keys in the options hash when configuring a {Pocket::API}
8
+ VALID_OPTIONS_KEYS = [
9
+ :adapter,
10
+ :consumer_key,
11
+ :access_token,
12
+ :endpoint,
13
+ :format,
14
+ :user_agent,
15
+ :proxy
16
+ ].freeze
17
+
18
+ # An array of valid request/response formats
19
+ #
20
+ # @note Not all methods support the XML format.
21
+ VALID_FORMATS = [
22
+ :json].freeze
23
+
24
+ # The adapter that will be used to connect if none is set
25
+ #
26
+ # @note The default faraday adapter is Net::HTTP.
27
+ DEFAULT_ADAPTER = Faraday.default_adapter
28
+
29
+ # By default, don't set an application ID
30
+ DEFAULT_CONSUMER_KEY = nil
31
+
32
+ # By default, don't set an application redirect uri
33
+ DEFAULT_REDIRECT_URI = nil
34
+
35
+ # By default, don't set a user access token
36
+ DEFAULT_ACCESS_TOKEN = nil
37
+
38
+ # The endpoint that will be used to connect if none is set
39
+ #
40
+ # @note There is no reason to use any other endpoint at this time
41
+ DEFAULT_ENDPOINT = 'https://getpocket.com/v3/'.freeze
42
+
43
+ # The response format appended to the path and sent in the 'Accept' header if none is set
44
+ #
45
+ # @note JSON is the only available format at this time
46
+ DEFAULT_FORMAT = :json
47
+
48
+ # By default, don't use a proxy server
49
+ DEFAULT_PROXY = nil
50
+
51
+ # The user agent that will be sent to the API endpoint if none is set
52
+ DEFAULT_USER_AGENT = "Pocket Ruby Gem #{Pocket::VERSION}".freeze
53
+
54
+ # @private
55
+ attr_accessor *VALID_OPTIONS_KEYS
56
+
57
+ # When this module is extended, set all configuration options to their default values
58
+ def self.extended(base)
59
+ base.reset
60
+ end
61
+
62
+ # Convenience method to allow configuration options to be set in a block
63
+ def configure
64
+ yield self
65
+ end
66
+
67
+ # Create a hash of options and their values
68
+ def options
69
+ VALID_OPTIONS_KEYS.inject({}) do |option, key|
70
+ option.merge!(key => send(key))
71
+ end
72
+ end
73
+
74
+ # Reset all configuration options to defaults
75
+ def reset
76
+ self.adapter = DEFAULT_ADAPTER
77
+ self.consumer_key = DEFAULT_CONSUMER_KEY
78
+ self.access_token = DEFAULT_ACCESS_TOKEN
79
+ self.endpoint = DEFAULT_ENDPOINT
80
+ self.format = DEFAULT_FORMAT
81
+ self.user_agent = DEFAULT_USER_AGENT
82
+ self.proxy = DEFAULT_PROXY
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,29 @@
1
+ require 'faraday_middleware'
2
+ Dir[File.expand_path('../../faraday/*.rb', __FILE__)].each{|f| require f}
3
+
4
+ module Pocket
5
+ # @private
6
+ module Connection
7
+ private
8
+
9
+ def connection(raw=false)
10
+ options = {
11
+ :headers => {'User-Agent' => user_agent},
12
+ :proxy => proxy,
13
+ :ssl => {:verify => false},
14
+ :url => endpoint,
15
+ }
16
+
17
+ Faraday::Connection.new(options) do |conn|
18
+ conn.use FaradayMiddleware::PocketOAuth, consumer_key, access_token
19
+ conn.use Faraday::Response::RaisePocketError
20
+
21
+ conn.request :json
22
+
23
+ conn.response :json, :content_type => /\bjson$/
24
+
25
+ conn.adapter Faraday.default_adapter
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,19 @@
1
+ module Pocket
2
+ # Custom error class for rescuing from all Pocket errors
3
+ class Error < StandardError; end
4
+
5
+ # Raised when Pocket returns the HTTP status code 400
6
+ class BadRequest < Error; end
7
+
8
+ # Raised when Pocket returns the HTTP status code 404
9
+ class NotFound < Error; end
10
+
11
+ # Raised when Pocket returns the HTTP status code 500
12
+ class InternalServerError < Error; end
13
+
14
+ # Raised when Pocket returns the HTTP status code 503
15
+ class ServiceUnavailable < Error; end
16
+
17
+ # Raised when a subscription payload hash is invalid
18
+ class InvalidSignature < Error; end
19
+ end
@@ -0,0 +1,38 @@
1
+ module Pocket
2
+ # Defines HTTP request methods
3
+ module OAuth
4
+ # Return URL for OAuth authorization
5
+ def authorize_url(options={})
6
+ params = access_token_params.merge(options)
7
+ # Pocket renames `code` to `request_token` for some reason in this call
8
+ params[:request_token] = params[:code]
9
+ connection.build_url("/auth/authorize", params).to_s
10
+ end
11
+
12
+ # Return a Pocket code
13
+ def get_code(options={})
14
+ params = access_token_params.merge(options)
15
+ response = connection.post 'oauth/request', params
16
+ results = Hash[URI.decode_www_form(response.body)]
17
+ code = results['code']
18
+ end
19
+
20
+ # Return an access token from authorization
21
+ def get_access_token(code, options={})
22
+ params = access_token_params.merge(options)
23
+
24
+ params = access_token_params.merge(:code => code).merge(options)
25
+ response = connection.post 'oauth/authorize', params
26
+ results = Hash[URI.decode_www_form(response.body)]
27
+ access_token = results['access_token']
28
+ end
29
+
30
+ private
31
+
32
+ def access_token_params
33
+ {
34
+ :consumer_key => consumer_key
35
+ }
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,3 @@
1
+ module Pocket
2
+ VERSION = '0.0.3'.freeze unless defined?(::Pocket::VERSION)
3
+ end
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/pocket/version', __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.add_development_dependency('rspec', '~> 2.4')
6
+ s.add_development_dependency('webmock', '~> 1.6')
7
+ s.add_development_dependency('bluecloth', '~> 2.0.11')
8
+ s.add_development_dependency('sinatra', '~> 1.3.3')
9
+ s.add_development_dependency('pry', '~> 0.9.10')
10
+ s.add_development_dependency('multi_xml')
11
+ s.add_runtime_dependency('faraday', ['>= 0.7', '< 0.9'])
12
+ s.add_runtime_dependency('faraday_middleware', '~> 0.8')
13
+ s.add_runtime_dependency('multi_json', '>= 1.0.3', '~> 1.0')
14
+ s.add_runtime_dependency('hashie', '>= 0.4.0')
15
+ s.authors = ["Turadg Aleahmad"]
16
+ s.description = %q{A Ruby wrapper for the Pocket REST and Search APIs}
17
+ s.email = ['turadg@aleahmad.net']
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.files = `git ls-files`.split("\n")
20
+ s.homepage = 'https://github.com/Geknowm/pocket-ruby'
21
+ s.name = 'pocket-ruby'
22
+ s.platform = Gem::Platform::RUBY
23
+ s.require_paths = ['lib']
24
+ s.required_rubygems_version = Gem::Requirement.new('>= 1.3.6') if s.respond_to? :required_rubygems_version=
25
+ s.rubyforge_project = s.name
26
+ s.summary = %q{Ruby wrapper for the Pocket API}
27
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
28
+ s.version = Pocket::VERSION.dup
29
+ end
metadata ADDED
@@ -0,0 +1,238 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pocket-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Turadg Aleahmad
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-12-10 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '2.4'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '2.4'
30
+ - !ruby/object:Gem::Dependency
31
+ name: webmock
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '1.6'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '1.6'
46
+ - !ruby/object:Gem::Dependency
47
+ name: bluecloth
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 2.0.11
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 2.0.11
62
+ - !ruby/object:Gem::Dependency
63
+ name: sinatra
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 1.3.3
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.3.3
78
+ - !ruby/object:Gem::Dependency
79
+ name: pry
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 0.9.10
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 0.9.10
94
+ - !ruby/object:Gem::Dependency
95
+ name: multi_xml
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: faraday
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0.7'
118
+ - - <
119
+ - !ruby/object:Gem::Version
120
+ version: '0.9'
121
+ type: :runtime
122
+ prerelease: false
123
+ version_requirements: !ruby/object:Gem::Requirement
124
+ none: false
125
+ requirements:
126
+ - - ! '>='
127
+ - !ruby/object:Gem::Version
128
+ version: '0.7'
129
+ - - <
130
+ - !ruby/object:Gem::Version
131
+ version: '0.9'
132
+ - !ruby/object:Gem::Dependency
133
+ name: faraday_middleware
134
+ requirement: !ruby/object:Gem::Requirement
135
+ none: false
136
+ requirements:
137
+ - - ~>
138
+ - !ruby/object:Gem::Version
139
+ version: '0.8'
140
+ type: :runtime
141
+ prerelease: false
142
+ version_requirements: !ruby/object:Gem::Requirement
143
+ none: false
144
+ requirements:
145
+ - - ~>
146
+ - !ruby/object:Gem::Version
147
+ version: '0.8'
148
+ - !ruby/object:Gem::Dependency
149
+ name: multi_json
150
+ requirement: !ruby/object:Gem::Requirement
151
+ none: false
152
+ requirements:
153
+ - - ! '>='
154
+ - !ruby/object:Gem::Version
155
+ version: 1.0.3
156
+ - - ~>
157
+ - !ruby/object:Gem::Version
158
+ version: '1.0'
159
+ type: :runtime
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ none: false
163
+ requirements:
164
+ - - ! '>='
165
+ - !ruby/object:Gem::Version
166
+ version: 1.0.3
167
+ - - ~>
168
+ - !ruby/object:Gem::Version
169
+ version: '1.0'
170
+ - !ruby/object:Gem::Dependency
171
+ name: hashie
172
+ requirement: !ruby/object:Gem::Requirement
173
+ none: false
174
+ requirements:
175
+ - - ! '>='
176
+ - !ruby/object:Gem::Version
177
+ version: 0.4.0
178
+ type: :runtime
179
+ prerelease: false
180
+ version_requirements: !ruby/object:Gem::Requirement
181
+ none: false
182
+ requirements:
183
+ - - ! '>='
184
+ - !ruby/object:Gem::Version
185
+ version: 0.4.0
186
+ description: A Ruby wrapper for the Pocket REST and Search APIs
187
+ email:
188
+ - turadg@aleahmad.net
189
+ executables: []
190
+ extensions: []
191
+ extra_rdoc_files: []
192
+ files:
193
+ - .gitignore
194
+ - .rspec
195
+ - .yardopts
196
+ - Gemfile
197
+ - LICENSE.md
198
+ - Rakefile
199
+ - demo-server.rb
200
+ - lib/faraday/pocket_oauth.rb
201
+ - lib/faraday/raise_pocket_error.rb
202
+ - lib/pocket.rb
203
+ - lib/pocket/api.rb
204
+ - lib/pocket/client.rb
205
+ - lib/pocket/client/add.rb
206
+ - lib/pocket/client/modify.rb
207
+ - lib/pocket/client/retrieve.rb
208
+ - lib/pocket/configuration.rb
209
+ - lib/pocket/connection.rb
210
+ - lib/pocket/error.rb
211
+ - lib/pocket/oauth.rb
212
+ - lib/pocket/version.rb
213
+ - pocket-ruby.gemspec
214
+ homepage: https://github.com/Geknowm/pocket-ruby
215
+ licenses: []
216
+ post_install_message:
217
+ rdoc_options: []
218
+ require_paths:
219
+ - lib
220
+ required_ruby_version: !ruby/object:Gem::Requirement
221
+ none: false
222
+ requirements:
223
+ - - ! '>='
224
+ - !ruby/object:Gem::Version
225
+ version: '0'
226
+ required_rubygems_version: !ruby/object:Gem::Requirement
227
+ none: false
228
+ requirements:
229
+ - - ! '>='
230
+ - !ruby/object:Gem::Version
231
+ version: 1.3.6
232
+ requirements: []
233
+ rubyforge_project: pocket-ruby
234
+ rubygems_version: 1.8.24
235
+ signing_key:
236
+ specification_version: 3
237
+ summary: Ruby wrapper for the Pocket API
238
+ test_files: []