singly 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. data/lib/singly.rb +5 -1
  2. data/lib/singly/account.rb +4 -4
  3. data/lib/singly/api/profiles.rb +5 -2
  4. data/lib/singly/api/profiles/service.rb +6 -3
  5. data/lib/singly/api/services.rb +4 -2
  6. data/lib/singly/api/services/37signals.rb +0 -1
  7. data/lib/singly/api/services/bodymedia.rb +1 -2
  8. data/lib/singly/api/services/dropbox.rb +1 -2
  9. data/lib/singly/api/services/dwolla.rb +1 -2
  10. data/lib/singly/api/services/endpoint.rb +1 -1
  11. data/lib/singly/api/services/facebook.rb +1 -2
  12. data/lib/singly/api/services/fitbit.rb +1 -2
  13. data/lib/singly/api/services/flickr.rb +1 -4
  14. data/lib/singly/api/services/foursquare.rb +1 -2
  15. data/lib/singly/api/services/gcal.rb +1 -2
  16. data/lib/singly/api/services/gcontacts.rb +1 -2
  17. data/lib/singly/api/services/gdocs.rb +1 -2
  18. data/lib/singly/api/services/github.rb +1 -2
  19. data/lib/singly/api/services/gmail.rb +1 -2
  20. data/lib/singly/api/services/google.rb +1 -2
  21. data/lib/singly/api/services/gplus.rb +1 -2
  22. data/lib/singly/api/services/imgur.rb +1 -2
  23. data/lib/singly/api/services/instagram.rb +1 -2
  24. data/lib/singly/api/services/klout.rb +1 -2
  25. data/lib/singly/api/services/linkedin.rb +1 -2
  26. data/lib/singly/api/services/meetup.rb +1 -2
  27. data/lib/singly/api/services/paypal.rb +1 -2
  28. data/lib/singly/api/services/picasa.rb +1 -2
  29. data/lib/singly/api/services/rdio.rb +1 -2
  30. data/lib/singly/api/services/reddit.rb +1 -2
  31. data/lib/singly/api/services/runkeeper.rb +1 -2
  32. data/lib/singly/api/services/service.rb +9 -31
  33. data/lib/singly/api/services/shutterfly.rb +1 -2
  34. data/lib/singly/api/services/soundcloud.rb +1 -2
  35. data/lib/singly/api/services/stocktwits.rb +1 -2
  36. data/lib/singly/api/services/tout.rb +1 -2
  37. data/lib/singly/api/services/tumblr.rb +1 -2
  38. data/lib/singly/api/services/twitter.rb +1 -2
  39. data/lib/singly/api/services/withings.rb +1 -2
  40. data/lib/singly/api/services/wordpress.rb +1 -2
  41. data/lib/singly/api/services/yammer.rb +1 -2
  42. data/lib/singly/api/services/youtube.rb +1 -2
  43. data/lib/singly/api/services/zeo.rb +1 -2
  44. data/lib/singly/endpoint.rb +52 -43
  45. data/lib/singly/error.rb +6 -4
  46. data/lib/singly/http.rb +7 -8
  47. data/lib/version.rb +1 -1
  48. data/spec/integration/account/apply_spec.rb +36 -0
  49. data/spec/integration/account/delete_spec.rb +23 -0
  50. data/spec/integration/account/friends_spec.rb +51 -0
  51. data/spec/integration/account/id_spec.rb +23 -0
  52. data/spec/integration/account/merge_spec.rb +14 -0
  53. data/spec/integration/account/profile_spec.rb +14 -0
  54. data/spec/integration/account/profiles_spec.rb +64 -0
  55. data/spec/integration/account/proxy_spec.rb +43 -0
  56. data/spec/integration/account/services_spec.rb +62 -0
  57. data/spec/integration/account/types_spec.rb +57 -0
  58. data/spec/integration/api_spec.rb +77 -0
  59. data/spec/singly/account_spec.rb +8 -8
  60. data/spec/singly/endpoint_spec.rb +53 -45
  61. data/spec/singly/error_spec.rb +21 -13
  62. data/spec/singly/http_spec.rb +26 -13
  63. data/spec/singly_spec.rb +1 -1
  64. data/spec/spec_helper.rb +6 -0
  65. data/spec/vcr_cassettes/{http_fetch_with_api_error.yml → singly/http_fetch_with_api_error.yml} +3 -3
  66. data/spec/vcr_cassettes/{http_fetch_with_json_response.yml → singly/http_fetch_with_json_response.yml} +2 -2
  67. data/spec/vcr_cassettes/{http_fetch_with_non_json_response.yml → singly/http_fetch_with_non_json_response.yml} +2 -2
  68. metadata +30 -12
  69. data/spec/integration/auth_spec.rb +0 -14
  70. data/spec/singly/api/auth_spec.rb +0 -8
@@ -13,7 +13,7 @@ Dir["#{File.dirname(__FILE__)}/**/*.rb"].each {|f| require(f)}
13
13
 
14
14
  module Singly
15
15
  @version = "v0"
16
- @timeout = 2000
16
+ @timeout = 2 # Typheous timeouts are in seconds, not like the docs say
17
17
 
18
18
  class << self
19
19
  attr_accessor :client_id
@@ -22,6 +22,10 @@ module Singly
22
22
  attr_accessor :version
23
23
  attr_accessor :timeout
24
24
 
25
+ def services
26
+ Singly::Services.new
27
+ end
28
+
25
29
  def account(access_token, account=nil)
26
30
  Singly::Account.new(access_token, account)
27
31
  end
@@ -42,7 +42,9 @@ module Singly
42
42
  # Alternative to calling #profiles.<service>.delete.
43
43
  # Useful if you don't know the exact service at runtime.
44
44
  def delete(service, id=nil)
45
- Singly::Profiles::Service.new(access_token: access_token, service: service.to_s).delete(id)
45
+ endpoint = Singly::Profiles::Service.new(access_token: access_token)
46
+ endpoint.service = service
47
+ endpoint.delete(id)
46
48
  end
47
49
 
48
50
  # Shortcut to Singly.auth.merge(source: <source>, dest: <dest>)
@@ -55,9 +57,7 @@ module Singly
55
57
  # where <account_id> is always this account's account_id.
56
58
  # If the account_id is not present, it is fetched from the api.
57
59
  def apply(service, params)
58
- is_oauth1 = !params[:token_secret].nil?
59
- service = Singly::Auth::Service.new(service, is_oauth1)
60
- service.apply(params.merge(account: account_id))
60
+ Singly.auth.send(service).apply(params.merge(account: account_id))
61
61
  end
62
62
  end
63
63
  end
@@ -15,7 +15,8 @@ module Singly
15
15
  # required parameters, it sends a GET.
16
16
  # Otherwise it sends a POST.
17
17
  def self(params=nil)
18
- if params.nil? || (params.keys - required_params).empty?
18
+ params ||= {}
19
+ if (params.keys - self.class.required_params).empty?
19
20
  Singly::Profiles::Self.new(creds)
20
21
  else
21
22
  Singly::Profiles::SelfUpdate.new(creds.merge(params))
@@ -172,7 +173,9 @@ module Singly
172
173
 
173
174
  def service(service, params)
174
175
  params ||= {}
175
- Singly::Profiles::Service.new(creds.merge(params.merge(service: service.to_s)))
176
+ endpoint = Singly::Profiles::Service.new(creds.merge(params.merge(service: service.to_s)))
177
+ endpoint.service = service.to_s
178
+ endpoint
176
179
  end
177
180
  end
178
181
  end
@@ -6,13 +6,16 @@ module Singly
6
6
  endpoint :get, "/profiles/:service", required: [:access_token], optional: [:auth]
7
7
 
8
8
  def delete(id=nil)
9
- service = route_params[:service]
10
9
  if id
11
- Singly::Profiles::DeleteProfile.new(creds.merge({service: service, id: id.to_s}))
10
+ Singly::Profiles::DeleteProfile.new(creds.merge({service: @service, id: id.to_s}))
12
11
  else
13
- Singly::Profiles::DeleteService.new(creds.merge({service: service}))
12
+ Singly::Profiles::DeleteService.new(creds.merge({service: @service}))
14
13
  end
15
14
  end
15
+
16
+ def service=(service)
17
+ @service = service
18
+ end
16
19
  end
17
20
  end
18
21
  end
@@ -2,7 +2,7 @@ module Singly
2
2
  class Services
3
3
  include Singly::Endpoint
4
4
 
5
- endpoint :get, "/services", required: [:access_token]
5
+ endpoint :get, "/services"
6
6
 
7
7
  def thirtysevensignals(params={})
8
8
  service(Singly::Services::ThirtySevenSignals, "37signals", params)
@@ -152,7 +152,9 @@ module Singly
152
152
 
153
153
  def service(endpoint_type, service, params)
154
154
  params ||= {}
155
- endpoint_type.new(creds.merge(params.merge(service: service.to_s)))
155
+ endpoint = endpoint_type.new(creds.merge(params.merge(service: service.to_s)))
156
+ endpoint.service = service.to_s
157
+ endpoint
156
158
  end
157
159
  end
158
160
  end
@@ -4,7 +4,6 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service "37signals"
8
7
 
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :bodymedia
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :dropbox
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :dwolla
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -5,7 +5,7 @@ module Singly
5
5
 
6
6
  endpoint :get, "/services/:service/:endpoint", {
7
7
  required: [:access_token],
8
- optional: [:id, :fields, :limit, :since, :until, :near, :within, :q, :participants, :map]
8
+ optional: [:fields, :limit, :since, :until, :near, :within, :q, :participants, :map]
9
9
  }
10
10
  end
11
11
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :facebook
8
-
7
+
9
8
  def albums(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :fitbit
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -1,11 +1,8 @@
1
1
  module Singly
2
2
  class Services
3
3
  class Flickr
4
- include Singly::Endpoint
5
4
  include Singly::Services::Service
6
-
7
- service :flickr
8
-
5
+
9
6
  def self(params={})
10
7
  service_endpoint(__method__, params)
11
8
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :foursquare
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :gcal
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :gcontacts
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :gdocs
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :github
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :gmail
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :google
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :gplus
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :imgur
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :instagram
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :klout
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :linkedin
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :meetup
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :paypal
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :picasa
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :rdio
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :reddit
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :runkeeper
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end
@@ -2,46 +2,24 @@ module Singly
2
2
  class Services
3
3
  module Service
4
4
 
5
- private
5
+ def self.included(base)
6
+ base.class_eval do
7
+ include Singly::Endpoint
8
+ endpoint :get, "/services/:service", required: [:access_token]
9
+ end
10
+ end
6
11
 
7
12
  def service_endpoint(endpoint_name, params)
8
13
  params ||= {}
9
14
  endpoint_type = params.has_key?(:id) ? Singly::Services::IdEndpoint : Singly::Services::Endpoint
10
15
  endpoint_type.new(creds.merge(params.merge({
11
- service: self.class.service_name,
16
+ service: @service,
12
17
  endpoint: endpoint_name.to_s
13
18
  })))
14
19
  end
15
20
 
16
- def self.included(base)
17
- base.extend ClassMethods
18
- end
19
-
20
- # service :facebook, [:albums, :photos]
21
- module ClassMethods
22
- def type
23
- :get
24
- end
25
-
26
- def path
27
- "/services/:service"
28
- end
29
-
30
- def required_params
31
- [:access_token]
32
- end
33
-
34
- def optional_params
35
- []
36
- end
37
-
38
- def service_name
39
- @service || ":service"
40
- end
41
-
42
- def service(service)
43
- @service = service
44
- end
21
+ def service=(service)
22
+ @service = service
45
23
  end
46
24
  end
47
25
  end
@@ -4,8 +4,7 @@ module Singly
4
4
  include Singly::Endpoint
5
5
  include Singly::Services::Service
6
6
 
7
- service :shutterfly
8
-
7
+
9
8
  def self(params={})
10
9
  service_endpoint(__method__, params)
11
10
  end