dailymile-ruby 0.1.0 → 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.
- data/Rakefile +2 -1
- data/VERSION +1 -1
- data/dailymile-ruby.gemspec +9 -5
- data/lib/dailymile.rb +4 -2
- data/lib/dailymile/client.rb +19 -14
- data/lib/dailymile/{token.rb → connection.rb} +30 -24
- data/lib/dailymile/connection/token.rb +28 -0
- metadata +27 -10
data/Rakefile
CHANGED
@@ -11,8 +11,9 @@ begin
|
|
11
11
|
gem.homepage = "http://github.com/dailymile/dailymile-ruby"
|
12
12
|
gem.authors = ["lostinpatterns"]
|
13
13
|
|
14
|
-
gem.add_dependency("
|
14
|
+
gem.add_dependency("faraday", "~> 0.4.1")
|
15
15
|
gem.add_dependency("json_pure")
|
16
|
+
gem.add_dependency("oauth2", "0.0.13")
|
16
17
|
|
17
18
|
# gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
|
18
19
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/dailymile-ruby.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{dailymile-ruby}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["lostinpatterns"]
|
@@ -26,7 +26,8 @@ Gem::Specification.new do |s|
|
|
26
26
|
"dailymile-ruby.gemspec",
|
27
27
|
"lib/dailymile.rb",
|
28
28
|
"lib/dailymile/client.rb",
|
29
|
-
"lib/dailymile/
|
29
|
+
"lib/dailymile/connection.rb",
|
30
|
+
"lib/dailymile/connection/token.rb",
|
30
31
|
"lib/oauth2_monkey_patches.rb",
|
31
32
|
"test/helper.rb",
|
32
33
|
"test/test_dailymile-ruby.rb"
|
@@ -46,15 +47,18 @@ Gem::Specification.new do |s|
|
|
46
47
|
s.specification_version = 3
|
47
48
|
|
48
49
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
49
|
-
s.add_runtime_dependency(%q<
|
50
|
+
s.add_runtime_dependency(%q<faraday>, ["~> 0.4.1"])
|
50
51
|
s.add_runtime_dependency(%q<json_pure>, [">= 0"])
|
52
|
+
s.add_runtime_dependency(%q<oauth2>, ["= 0.0.13"])
|
51
53
|
else
|
52
|
-
s.add_dependency(%q<
|
54
|
+
s.add_dependency(%q<faraday>, ["~> 0.4.1"])
|
53
55
|
s.add_dependency(%q<json_pure>, [">= 0"])
|
56
|
+
s.add_dependency(%q<oauth2>, ["= 0.0.13"])
|
54
57
|
end
|
55
58
|
else
|
56
|
-
s.add_dependency(%q<
|
59
|
+
s.add_dependency(%q<faraday>, ["~> 0.4.1"])
|
57
60
|
s.add_dependency(%q<json_pure>, [">= 0"])
|
61
|
+
s.add_dependency(%q<oauth2>, ["= 0.0.13"])
|
58
62
|
end
|
59
63
|
end
|
60
64
|
|
data/lib/dailymile.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
|
-
require '
|
1
|
+
require 'faraday'
|
2
2
|
require 'json'
|
3
|
+
require 'oauth2'
|
3
4
|
|
4
5
|
require 'oauth2_monkey_patches'
|
5
|
-
require 'dailymile/
|
6
|
+
require 'dailymile/connection'
|
7
|
+
require 'dailymile/connection/token'
|
6
8
|
require 'dailymile/client'
|
7
9
|
|
8
10
|
module Dailymile
|
data/lib/dailymile/client.rb
CHANGED
@@ -2,41 +2,41 @@ require 'forwardable'
|
|
2
2
|
|
3
3
|
module Dailymile
|
4
4
|
|
5
|
-
DEFAULT_FORMAT = 'json'
|
6
5
|
STREAM_FILTERS = %w(nearby popular)
|
7
6
|
|
8
7
|
class Client
|
9
8
|
extend Forwardable
|
10
9
|
|
11
|
-
|
12
|
-
|
10
|
+
def_instance_delegators :@connection, :get, :post, :put, :delete
|
11
|
+
|
12
|
+
def initialize(token = nil)
|
13
|
+
raise "Please call set_client_credentials first" if @@oauth_client.nil?
|
14
|
+
|
15
|
+
@connection = Connection::Token.new(@@oauth_client, token)
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.get(*args); connection.get(*args) end
|
13
19
|
|
14
20
|
def self.set_client_credentials(client_id, client_secret)
|
15
|
-
@@
|
21
|
+
@@oauth_client = OAuth2::Client.new(client_id, client_secret,
|
16
22
|
:site => BASE_URI,
|
17
23
|
:access_token_path => OAUTH_TOKEN_PATH,
|
18
24
|
:authorize_path => OAUTH_AUTHORIZE_PATH
|
19
25
|
)
|
20
26
|
end
|
21
27
|
|
22
|
-
def initialize(token = nil)
|
23
|
-
@@client ||= OAuth2::Client.new('', '', :site => BASE_URI) # HACK: dummy client
|
24
|
-
|
25
|
-
@access_token = Token.new(@@client, token)
|
26
|
-
end
|
27
|
-
|
28
28
|
# EXAMPLES:
|
29
29
|
# everyone stream: client.entries
|
30
30
|
# nearby stream: client.entries :nearby, 37.77916, -122.420049, :page => 2
|
31
|
-
# ben's stream: client.entries
|
32
|
-
def entries(*args)
|
31
|
+
# ben's stream: client.entries 'ben', :page => 2
|
32
|
+
def self.entries(*args)
|
33
33
|
params = extract_options_from_args!(args)
|
34
34
|
filter = args.shift
|
35
35
|
|
36
36
|
entries_path = case filter
|
37
37
|
when String, Symbol
|
38
38
|
filter = filter.to_s.strip
|
39
|
-
|
39
|
+
|
40
40
|
if STREAM_FILTERS.include?(filter)
|
41
41
|
if filter == 'nearby'
|
42
42
|
lat, lon = args
|
@@ -55,12 +55,17 @@ module Dailymile
|
|
55
55
|
data["entries"]
|
56
56
|
end
|
57
57
|
|
58
|
+
|
58
59
|
private
|
59
60
|
|
60
|
-
def extract_options_from_args!(args)
|
61
|
+
def self.extract_options_from_args!(args)
|
61
62
|
args.last.is_a?(Hash) ? args.pop : {}
|
62
63
|
end
|
63
64
|
|
65
|
+
def self.connection
|
66
|
+
@@connection ||= Connection.new
|
67
|
+
end
|
68
|
+
|
64
69
|
end
|
65
70
|
|
66
71
|
end
|
@@ -1,15 +1,12 @@
|
|
1
1
|
module Dailymile
|
2
2
|
|
3
|
-
class
|
3
|
+
class Connection
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
def access_token=(token)
|
11
|
-
set_access_token token
|
12
|
-
end
|
5
|
+
DEFAULT_FORMAT = :json
|
6
|
+
DEFAULT_HEADERS = {
|
7
|
+
'Accept' => 'application/json',
|
8
|
+
'User-Agent' => "dailymile-ruby/#{VERSION}"
|
9
|
+
}
|
13
10
|
|
14
11
|
def get(path, params = {})
|
15
12
|
request :get, path, params
|
@@ -27,16 +24,36 @@ module Dailymile
|
|
27
24
|
request :delete, path
|
28
25
|
end
|
29
26
|
|
30
|
-
|
27
|
+
protected
|
31
28
|
|
32
|
-
def
|
29
|
+
def make_request(verb, path, params = {}, headers = {}, &block)
|
33
30
|
path << ".#{DEFAULT_FORMAT}" unless path =~ /.+\.\w+$/
|
34
31
|
path << to_query_string(params) unless params.empty?
|
35
32
|
|
36
|
-
response =
|
33
|
+
response = block.call verb, path, {}, DEFAULT_HEADERS.merge(headers)
|
34
|
+
|
37
35
|
handle_response(response)
|
38
36
|
end
|
39
37
|
|
38
|
+
private
|
39
|
+
|
40
|
+
def request(verb, path, params = {}, headers = {})
|
41
|
+
@connection ||= Faraday::Connection.new(:url => "http://api.dailymile.com", :headers => DEFAULT_HEADERS) do |builder|
|
42
|
+
builder.adapter Faraday.default_adapter
|
43
|
+
#builder.use Faraday::Response::Mashify
|
44
|
+
end
|
45
|
+
|
46
|
+
make_request(verb, path, params, headers) do |verb, path, params, headers|
|
47
|
+
if verb == :get
|
48
|
+
@connection.run_request(verb, path, nil, headers) do |req|
|
49
|
+
req.params.update(params)
|
50
|
+
end
|
51
|
+
else
|
52
|
+
@connection.run_request(verb, path, params, headers)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
40
57
|
def handle_response(response)
|
41
58
|
case response.status
|
42
59
|
when 200, 201
|
@@ -47,7 +64,7 @@ module Dailymile
|
|
47
64
|
raise Unauthorized
|
48
65
|
when 403
|
49
66
|
raise Forbidden, "Not using HTTP over TLS"
|
50
|
-
|
67
|
+
when 503, 502
|
51
68
|
if response.status == 503 && response['Retry-After']
|
52
69
|
raise RateLimitExceeded
|
53
70
|
else
|
@@ -72,17 +89,6 @@ module Dailymile
|
|
72
89
|
end
|
73
90
|
end.join('&')
|
74
91
|
end
|
75
|
-
|
76
|
-
def default_headers
|
77
|
-
{
|
78
|
-
'Accept' => 'application/json',
|
79
|
-
'User-Agent' => "dailymile-ruby/#{VERSION}"
|
80
|
-
}
|
81
|
-
end
|
82
|
-
|
83
|
-
def set_access_token(token)
|
84
|
-
@access_token = OAuth2::AccessToken.new(@client, token)
|
85
|
-
end
|
86
92
|
|
87
93
|
end
|
88
94
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Dailymile
|
2
|
+
|
3
|
+
class Connection::Token < Connection
|
4
|
+
|
5
|
+
def initialize(client, token)
|
6
|
+
@client = client
|
7
|
+
set_access_token token
|
8
|
+
end
|
9
|
+
|
10
|
+
def access_token=(token)
|
11
|
+
set_access_token token
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def request(verb, path, params = {}, headers = {})
|
17
|
+
make_request(verb, path, params, headers) do |verb, path, params, headers|
|
18
|
+
@access_token.request(verb, path, params, headers)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def set_access_token(token)
|
23
|
+
@access_token = OAuth2::AccessToken.new(@client, token)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dailymile-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- lostinpatterns
|
@@ -19,19 +19,19 @@ date: 2010-10-11 00:00:00 -07:00
|
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
22
|
+
name: faraday
|
23
23
|
prerelease: false
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
hash:
|
29
|
+
hash: 13
|
30
30
|
segments:
|
31
31
|
- 0
|
32
|
-
-
|
33
|
-
-
|
34
|
-
version: 0.
|
32
|
+
- 4
|
33
|
+
- 1
|
34
|
+
version: 0.4.1
|
35
35
|
type: :runtime
|
36
36
|
version_requirements: *id001
|
37
37
|
- !ruby/object:Gem::Dependency
|
@@ -48,6 +48,22 @@ dependencies:
|
|
48
48
|
version: "0"
|
49
49
|
type: :runtime
|
50
50
|
version_requirements: *id002
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: oauth2
|
53
|
+
prerelease: false
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - "="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 5
|
60
|
+
segments:
|
61
|
+
- 0
|
62
|
+
- 0
|
63
|
+
- 13
|
64
|
+
version: 0.0.13
|
65
|
+
type: :runtime
|
66
|
+
version_requirements: *id003
|
51
67
|
description: This gem wraps the dailymile API that's available at http://www.dailymile.com/api
|
52
68
|
email: blweiner@gmail.com
|
53
69
|
executables: []
|
@@ -67,7 +83,8 @@ files:
|
|
67
83
|
- dailymile-ruby.gemspec
|
68
84
|
- lib/dailymile.rb
|
69
85
|
- lib/dailymile/client.rb
|
70
|
-
- lib/dailymile/
|
86
|
+
- lib/dailymile/connection.rb
|
87
|
+
- lib/dailymile/connection/token.rb
|
71
88
|
- lib/oauth2_monkey_patches.rb
|
72
89
|
- test/helper.rb
|
73
90
|
- test/test_dailymile-ruby.rb
|