singly 0.1.0

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.
Files changed (90) hide show
  1. data/.gitignore +17 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +63 -0
  5. data/Rakefile +8 -0
  6. data/lib/singly/account.rb +63 -0
  7. data/lib/singly/api/auth/merge.rb +8 -0
  8. data/lib/singly/api/auth/service/oauth1_apply.rb +13 -0
  9. data/lib/singly/api/auth/service/oauth2_apply.rb +13 -0
  10. data/lib/singly/api/auth/service.rb +23 -0
  11. data/lib/singly/api/auth.rb +163 -0
  12. data/lib/singly/api/friends/group.rb +12 -0
  13. data/lib/singly/api/friends.rb +76 -0
  14. data/lib/singly/api/id.rb +6 -0
  15. data/lib/singly/api/multi.rb +6 -0
  16. data/lib/singly/api/profile.rb +6 -0
  17. data/lib/singly/api/profiles/delete.rb +8 -0
  18. data/lib/singly/api/profiles/delete_profile.rb +8 -0
  19. data/lib/singly/api/profiles/delete_service.rb +8 -0
  20. data/lib/singly/api/profiles/self.rb +8 -0
  21. data/lib/singly/api/profiles/self_update.rb +8 -0
  22. data/lib/singly/api/profiles/service.rb +18 -0
  23. data/lib/singly/api/profiles.rb +178 -0
  24. data/lib/singly/api/proxy/delete.rb +8 -0
  25. data/lib/singly/api/proxy/get.rb +8 -0
  26. data/lib/singly/api/proxy/post.rb +8 -0
  27. data/lib/singly/api/proxy/put.rb +8 -0
  28. data/lib/singly/api/proxy.rb +169 -0
  29. data/lib/singly/api/services/37signals.rb +14 -0
  30. data/lib/singly/api/services/bodymedia.rb +30 -0
  31. data/lib/singly/api/services/dropbox.rb +22 -0
  32. data/lib/singly/api/services/dwolla.rb +14 -0
  33. data/lib/singly/api/services/endpoint.rb +12 -0
  34. data/lib/singly/api/services/facebook.rb +62 -0
  35. data/lib/singly/api/services/fitbit.rb +34 -0
  36. data/lib/singly/api/services/flickr.rb +26 -0
  37. data/lib/singly/api/services/foursquare.rb +34 -0
  38. data/lib/singly/api/services/gcal.rb +18 -0
  39. data/lib/singly/api/services/gcontacts.rb +18 -0
  40. data/lib/singly/api/services/gdocs.rb +18 -0
  41. data/lib/singly/api/services/github.rb +34 -0
  42. data/lib/singly/api/services/gmail.rb +22 -0
  43. data/lib/singly/api/services/google.rb +14 -0
  44. data/lib/singly/api/services/gplus.rb +18 -0
  45. data/lib/singly/api/services/id_endpoint.rb +12 -0
  46. data/lib/singly/api/services/imgur.rb +14 -0
  47. data/lib/singly/api/services/instagram.rb +26 -0
  48. data/lib/singly/api/services/klout.rb +26 -0
  49. data/lib/singly/api/services/linkedin.rb +26 -0
  50. data/lib/singly/api/services/meetup.rb +30 -0
  51. data/lib/singly/api/services/paypal.rb +14 -0
  52. data/lib/singly/api/services/picasa.rb +22 -0
  53. data/lib/singly/api/services/rdio.rb +26 -0
  54. data/lib/singly/api/services/reddit.rb +14 -0
  55. data/lib/singly/api/services/runkeeper.rb +38 -0
  56. data/lib/singly/api/services/service.rb +48 -0
  57. data/lib/singly/api/services/shutterfly.rb +22 -0
  58. data/lib/singly/api/services/soundcloud.rb +14 -0
  59. data/lib/singly/api/services/stocktwits.rb +22 -0
  60. data/lib/singly/api/services/tout.rb +14 -0
  61. data/lib/singly/api/services/tumblr.rb +26 -0
  62. data/lib/singly/api/services/twitter.rb +42 -0
  63. data/lib/singly/api/services/withings.rb +18 -0
  64. data/lib/singly/api/services/wordpress.rb +22 -0
  65. data/lib/singly/api/services/yammer.rb +26 -0
  66. data/lib/singly/api/services/youtube.rb +18 -0
  67. data/lib/singly/api/services/zeo.rb +26 -0
  68. data/lib/singly/api/services.rb +158 -0
  69. data/lib/singly/api/types/type.rb +12 -0
  70. data/lib/singly/api/types.rb +68 -0
  71. data/lib/singly/endpoint.rb +112 -0
  72. data/lib/singly/error.rb +24 -0
  73. data/lib/singly/http.rb +38 -0
  74. data/lib/singly/logger.rb +14 -0
  75. data/lib/singly.rb +37 -0
  76. data/lib/version.rb +3 -0
  77. data/singly.gemspec +25 -0
  78. data/spec/integration/auth_spec.rb +14 -0
  79. data/spec/singly/account_spec.rb +108 -0
  80. data/spec/singly/api/auth_spec.rb +8 -0
  81. data/spec/singly/endpoint_spec.rb +100 -0
  82. data/spec/singly/error_spec.rb +40 -0
  83. data/spec/singly/http_spec.rb +52 -0
  84. data/spec/singly/logger_spec.rb +32 -0
  85. data/spec/singly_spec.rb +53 -0
  86. data/spec/spec_helper.rb +27 -0
  87. data/spec/vcr_cassettes/http_fetch_with_api_error.yml +39 -0
  88. data/spec/vcr_cassettes/http_fetch_with_json_response.yml +102 -0
  89. data/spec/vcr_cassettes/http_fetch_with_non_json_response.yml +39 -0
  90. metadata +216 -0
@@ -0,0 +1,178 @@
1
+ module Singly
2
+ class Profiles
3
+ include Singly::Endpoint
4
+
5
+ endpoint :get, "/profiles", required: [:access_token], optional: [:data, :verify]
6
+
7
+ # Delete all the things!
8
+ def delete
9
+ Singly::Profiles::Delete.new(creds)
10
+ end
11
+
12
+ # CUSTOM PROFILE MANAGEMENT
13
+
14
+ # If params is nil, or only contains
15
+ # required parameters, it sends a GET.
16
+ # Otherwise it sends a POST.
17
+ def self(params=nil)
18
+ if params.nil? || (params.keys - required_params).empty?
19
+ Singly::Profiles::Self.new(creds)
20
+ else
21
+ Singly::Profiles::SelfUpdate.new(creds.merge(params))
22
+ end
23
+ end
24
+
25
+ # SUPPORTED SERVICES SECTION
26
+
27
+ def thirtysevensignals(params={})
28
+ service("37signals", params)
29
+ end
30
+
31
+ def bodymedia(params={})
32
+ service(__method__, params)
33
+ end
34
+
35
+ def dropbox(params={})
36
+ service(__method__, params)
37
+ end
38
+
39
+ def dwolla(params={})
40
+ service(__method__, params)
41
+ end
42
+
43
+ def facebook(params={})
44
+ service(__method__, params)
45
+ end
46
+
47
+ def fitbit(params={})
48
+ service(__method__, params)
49
+ end
50
+
51
+ def flickr(params={})
52
+ service(__method__, params)
53
+ end
54
+
55
+ def foursquare(params={})
56
+ service(__method__, params)
57
+ end
58
+
59
+ def gcal(params={})
60
+ service(__method__, params)
61
+ end
62
+
63
+ def gcontacts(params={})
64
+ service(__method__, params)
65
+ end
66
+
67
+ def gdocs(params={})
68
+ service(__method__, params)
69
+ end
70
+
71
+ def github(params={})
72
+ service(__method__, params)
73
+ end
74
+
75
+ def gmail(params={})
76
+ service(__method__, params)
77
+ end
78
+
79
+ def google(params={})
80
+ service(__method__, params)
81
+ end
82
+
83
+ def gplus(params={})
84
+ service(__method__, params)
85
+ end
86
+
87
+ def imgur(params={})
88
+ service(__method__, params)
89
+ end
90
+
91
+ def instagram(params={})
92
+ service(__method__, params)
93
+ end
94
+
95
+ def klout(params={})
96
+ service(__method__, params)
97
+ end
98
+
99
+ def linkedin(params={})
100
+ service(__method__, params)
101
+ end
102
+
103
+ def meetup(params={})
104
+ service(__method__, params)
105
+ end
106
+
107
+ def paypal(params={})
108
+ service(__method__, params)
109
+ end
110
+
111
+ def picasa(params={})
112
+ service(__method__, params)
113
+ end
114
+
115
+ def rdio(params={})
116
+ service(__method__, params)
117
+ end
118
+
119
+ def reddit(params={})
120
+ service(__method__, params)
121
+ end
122
+
123
+ def runkeeper(params={})
124
+ service(__method__, params)
125
+ end
126
+
127
+ def shutterfly(params={})
128
+ service(__method__, params)
129
+ end
130
+
131
+ def soundcloud(params={})
132
+ service(__method__, params)
133
+ end
134
+
135
+ def stocktwits(params={})
136
+ service(__method__, params)
137
+ end
138
+
139
+ def tout(params={})
140
+ service(__method__, params)
141
+ end
142
+
143
+ def tumblr(params={})
144
+ service(__method__, params)
145
+ end
146
+
147
+ def twitter(params={})
148
+ service(__method__, params)
149
+ end
150
+
151
+ def withings(params={})
152
+ service(__method__, params)
153
+ end
154
+
155
+ def wordpress(params={})
156
+ service(__method__, params)
157
+ end
158
+
159
+ def yammer(params={})
160
+ service(__method__, params)
161
+ end
162
+
163
+ def youtube(params={})
164
+ service(__method__, params)
165
+ end
166
+
167
+ def zeo(params={})
168
+ service(__method__, params)
169
+ end
170
+
171
+ private
172
+
173
+ def service(service, params)
174
+ params ||= {}
175
+ Singly::Profiles::Service.new(creds.merge(params.merge(service: service.to_s)))
176
+ end
177
+ end
178
+ end
@@ -0,0 +1,8 @@
1
+ module Singly
2
+ class Proxy
3
+ class Delete
4
+ include Singly::Endpoint
5
+ endpoint :delete, "/proxy/:service/:path", required: [:access_token]
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module Singly
2
+ class Proxy
3
+ class Get
4
+ include Singly::Endpoint
5
+ endpoint :get, "/proxy/:service/:path", required: [:access_token]
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module Singly
2
+ class Proxy
3
+ class Post
4
+ include Singly::Endpoint
5
+ endpoint :post, "/proxy/:service/:path", required: [:access_token]
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module Singly
2
+ class Proxy
3
+ class Put
4
+ include Singly::Endpoint
5
+ endpoint :put, "/proxy/:service/:path", required: [:access_token]
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,169 @@
1
+ module Singly
2
+ class Proxy
3
+ attr_reader :access_token
4
+
5
+ def initialize(access_token)
6
+ @access_token = access_token
7
+ end
8
+
9
+ def thirtysevensignals(http_method, path, params={})
10
+ proxy("37signals", http_method, path, params)
11
+ end
12
+
13
+ def bodymedia(http_method, path, params={})
14
+ proxy(__method__, http_method, path, params)
15
+ end
16
+
17
+ def dropbox(http_method, path, params={})
18
+ proxy(__method__, http_method, path, params)
19
+ end
20
+
21
+ def dwolla(http_method, path, params={})
22
+ proxy(__method__, http_method, path, params)
23
+ end
24
+
25
+ def facebook(http_method, path, params={})
26
+ proxy(__method__, http_method, path, params)
27
+ end
28
+
29
+ def fitbit(http_method, path, params={})
30
+ proxy(__method__, http_method, path, params)
31
+ end
32
+
33
+ def flickr(http_method, path, params={})
34
+ proxy(__method__, http_method, path, params)
35
+ end
36
+
37
+ def foursquare(http_method, path, params={})
38
+ proxy(__method__, http_method, path, params)
39
+ end
40
+
41
+ def gcal(http_method, path, params={})
42
+ proxy(__method__, http_method, path, params)
43
+ end
44
+
45
+ def gcontacts(http_method, path, params={})
46
+ proxy(__method__, http_method, path, params)
47
+ end
48
+
49
+ def gdocs(http_method, path, params={})
50
+ proxy(__method__, http_method, path, params)
51
+ end
52
+
53
+ def github(http_method, path, params={})
54
+ proxy(__method__, http_method, path, params)
55
+ end
56
+
57
+ def gmail(http_method, path, params={})
58
+ proxy(__method__, http_method, path, params)
59
+ end
60
+
61
+ def google(http_method, path, params={})
62
+ proxy(__method__, http_method, path, params)
63
+ end
64
+
65
+ def gplus(http_method, path, params={})
66
+ proxy(__method__, http_method, path, params)
67
+ end
68
+
69
+ def imgur(http_method, path, params={})
70
+ proxy(__method__, http_method, path, params)
71
+ end
72
+
73
+ def instagram(http_method, path, params={})
74
+ proxy(__method__, http_method, path, params)
75
+ end
76
+
77
+ def klout(http_method, path, params={})
78
+ proxy(__method__, http_method, path, params)
79
+ end
80
+
81
+ def linkedin(http_method, path, params={})
82
+ proxy(__method__, http_method, path, params)
83
+ end
84
+
85
+ def meetup(http_method, path, params={})
86
+ proxy(__method__, http_method, path, params)
87
+ end
88
+
89
+ def paypal(http_method, path, params={})
90
+ proxy(__method__, http_method, path, params)
91
+ end
92
+
93
+ def picasa(http_method, path, params={})
94
+ proxy(__method__, http_method, path, params)
95
+ end
96
+
97
+ def rdio(http_method, path, params={})
98
+ proxy(__method__, http_method, path, params)
99
+ end
100
+
101
+ def reddit(http_method, path, params={})
102
+ proxy(__method__, http_method, path, params)
103
+ end
104
+
105
+ def runkeeper(http_method, path, params={})
106
+ proxy(__method__, http_method, path, params)
107
+ end
108
+
109
+ def shutterfly(http_method, path, params={})
110
+ proxy(__method__, http_method, path, params)
111
+ end
112
+
113
+ def soundcloud(http_method, path, params={})
114
+ proxy(__method__, http_method, path, params)
115
+ end
116
+
117
+ def stocktwits(http_method, path, params={})
118
+ proxy(__method__, http_method, path, params)
119
+ end
120
+
121
+ def tout(http_method, path, params={})
122
+ proxy(__method__, http_method, path, params)
123
+ end
124
+
125
+ def tumblr(http_method, path, params={})
126
+ proxy(__method__, http_method, path, params)
127
+ end
128
+
129
+ def twitter(http_method, path, params={})
130
+ proxy(__method__, http_method, path, params)
131
+ end
132
+
133
+ def withings(http_method, path, params={})
134
+ proxy(__method__, http_method, path, params)
135
+ end
136
+
137
+ def wordpress(http_method, path, params={})
138
+ proxy(__method__, http_method, path, params)
139
+ end
140
+
141
+ def yammer(http_method, path, params={})
142
+ proxy(__method__, http_method, path, params)
143
+ end
144
+
145
+ def youtube(http_method, path, params={})
146
+ proxy(__method__, http_method, path, params)
147
+ end
148
+
149
+ def zeo(http_method, path, params={})
150
+ proxy(__method__, http_method, path, params)
151
+ end
152
+
153
+ private
154
+
155
+ def proxy(service, http_method, path, params={})
156
+ params = params.merge(service: service, path: path, access_token: access_token)
157
+ case http_method.to_s.upcase
158
+ when "POST"
159
+ Singly::Proxy::Post.new(params)
160
+ when "PUT"
161
+ Singly::Proxy::Put.new(params)
162
+ when "DELETE"
163
+ Singly::Proxy::Delete.new(params)
164
+ else
165
+ Singly::Proxy::Get.new(params)
166
+ end
167
+ end
168
+ end
169
+ end
@@ -0,0 +1,14 @@
1
+ module Singly
2
+ class Services
3
+ class ThirtySevenSignals
4
+ include Singly::Endpoint
5
+ include Singly::Services::Service
6
+
7
+ service "37signals"
8
+
9
+ def self(params={})
10
+ service_endpoint(__method__, params)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,30 @@
1
+ module Singly
2
+ class Services
3
+ class Bodymedia
4
+ include Singly::Endpoint
5
+ include Singly::Services::Service
6
+
7
+ service :bodymedia
8
+
9
+ def self(params={})
10
+ service_endpoint(__method__, params)
11
+ end
12
+
13
+ def sleep(params={})
14
+ service_endpoint(__method__, params)
15
+ end
16
+
17
+ def steps(params={})
18
+ service_endpoint(__method__, params)
19
+ end
20
+
21
+ def burn_intensity(params={})
22
+ service_endpoint(__method__, params)
23
+ end
24
+
25
+ def burn_minutes(params={})
26
+ service_endpoint(__method__, params)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,22 @@
1
+ module Singly
2
+ class Services
3
+ class Dropbox
4
+ include Singly::Endpoint
5
+ include Singly::Services::Service
6
+
7
+ service :dropbox
8
+
9
+ def self(params={})
10
+ service_endpoint(__method__, params)
11
+ end
12
+
13
+ def files(params={})
14
+ service_endpoint(__method__, params)
15
+ end
16
+
17
+ def folders(params={})
18
+ service_endpoint(__method__, params)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,14 @@
1
+ module Singly
2
+ class Services
3
+ class Dwolla
4
+ include Singly::Endpoint
5
+ include Singly::Services::Service
6
+
7
+ service :dwolla
8
+
9
+ def self(params={})
10
+ service_endpoint(__method__, params)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ module Singly
2
+ class Services
3
+ class Endpoint
4
+ include Singly::Endpoint
5
+
6
+ endpoint :get, "/services/:service/:endpoint", {
7
+ required: [:access_token],
8
+ optional: [:id, :fields, :limit, :since, :until, :near, :within, :q, :participants, :map]
9
+ }
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,62 @@
1
+ module Singly
2
+ class Services
3
+ class Facebook
4
+ include Singly::Endpoint
5
+ include Singly::Services::Service
6
+
7
+ service :facebook
8
+
9
+ def albums(params={})
10
+ service_endpoint(__method__, params)
11
+ end
12
+
13
+ def checkins(params={})
14
+ service_endpoint(__method__, params)
15
+ end
16
+
17
+ def feed(params={})
18
+ service_endpoint(__method__, params)
19
+ end
20
+
21
+ def friends(params={})
22
+ service_endpoint(__method__, params)
23
+ end
24
+
25
+ def home(params={})
26
+ service_endpoint(__method__, params)
27
+ end
28
+
29
+ def home_checkins(params={})
30
+ service_endpoint(__method__, params)
31
+ end
32
+
33
+ def home_photos(params={})
34
+ service_endpoint(__method__, params)
35
+ end
36
+
37
+ def page_likes(params={})
38
+ service_endpoint(__method__, params)
39
+ end
40
+
41
+ def pages(params={})
42
+ service_endpoint(__method__, params)
43
+ end
44
+
45
+ def photos(params={})
46
+ service_endpoint(__method__, params)
47
+ end
48
+
49
+ def self(params={})
50
+ service_endpoint(__method__, params)
51
+ end
52
+
53
+ def stream_likes(params={})
54
+ service_endpoint(__method__, params)
55
+ end
56
+
57
+ def url_likes(params={})
58
+ service_endpoint(__method__, params)
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,34 @@
1
+ module Singly
2
+ class Services
3
+ class Fitbit
4
+ include Singly::Endpoint
5
+ include Singly::Services::Service
6
+
7
+ service :fitbit
8
+
9
+ def self(params={})
10
+ service_endpoint(__method__, params)
11
+ end
12
+
13
+ def activities(params={})
14
+ service_endpoint(__method__, params)
15
+ end
16
+
17
+ def devices(params={})
18
+ service_endpoint(__method__, params)
19
+ end
20
+
21
+ def fat(params={})
22
+ service_endpoint(__method__, params)
23
+ end
24
+
25
+ def sleep(params={})
26
+ service_endpoint(__method__, params)
27
+ end
28
+
29
+ def weight(params={})
30
+ service_endpoint(__method__, params)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,26 @@
1
+ module Singly
2
+ class Services
3
+ class Flickr
4
+ include Singly::Endpoint
5
+ include Singly::Services::Service
6
+
7
+ service :flickr
8
+
9
+ def self(params={})
10
+ service_endpoint(__method__, params)
11
+ end
12
+
13
+ def photos(params={})
14
+ service_endpoint(__method__, params)
15
+ end
16
+
17
+ def contacts(params={})
18
+ service_endpoint(__method__, params)
19
+ end
20
+
21
+ def photos_feed(params={})
22
+ service_endpoint(__method__, params)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,34 @@
1
+ module Singly
2
+ class Services
3
+ class Foursquare
4
+ include Singly::Endpoint
5
+ include Singly::Services::Service
6
+
7
+ service :foursquare
8
+
9
+ def self(params={})
10
+ service_endpoint(__method__, params)
11
+ end
12
+
13
+ def recent(params={})
14
+ service_endpoint(__method__, params)
15
+ end
16
+
17
+ def checkins(params={})
18
+ service_endpoint(__method__, params)
19
+ end
20
+
21
+ def photos(params={})
22
+ service_endpoint(__method__, params)
23
+ end
24
+
25
+ def badges(params={})
26
+ service_endpoint(__method__, params)
27
+ end
28
+
29
+ def friends(params={})
30
+ service_endpoint(__method__, params)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,18 @@
1
+ module Singly
2
+ class Services
3
+ class Gcal
4
+ include Singly::Endpoint
5
+ include Singly::Services::Service
6
+
7
+ service :gcal
8
+
9
+ def self(params={})
10
+ service_endpoint(__method__, params)
11
+ end
12
+
13
+ def list(params={})
14
+ service_endpoint(__method__, params)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module Singly
2
+ class Services
3
+ class Gcontacts
4
+ include Singly::Endpoint
5
+ include Singly::Services::Service
6
+
7
+ service :gcontacts
8
+
9
+ def self(params={})
10
+ service_endpoint(__method__, params)
11
+ end
12
+
13
+ def contacts(params={})
14
+ service_endpoint(__method__, params)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module Singly
2
+ class Services
3
+ class Gdocs
4
+ include Singly::Endpoint
5
+ include Singly::Services::Service
6
+
7
+ service :gdocs
8
+
9
+ def self(params={})
10
+ service_endpoint(__method__, params)
11
+ end
12
+
13
+ def changes(params={})
14
+ service_endpoint(__method__, params)
15
+ end
16
+ end
17
+ end
18
+ end