instagram-continued-continued 1.5.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 (94) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.hound.yml +2 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +15 -0
  6. data/.travis.yml +20 -0
  7. data/.yardopts +9 -0
  8. data/Gemfile +3 -0
  9. data/LICENSE.md +30 -0
  10. data/PATENTS.md +23 -0
  11. data/README.md +15 -0
  12. data/Rakefile +23 -0
  13. data/instagram-continued-continued.gemspec +34 -0
  14. data/lib/faraday/loud_logger.rb +74 -0
  15. data/lib/faraday/oauth2.rb +40 -0
  16. data/lib/faraday/raise_http_exception.rb +61 -0
  17. data/lib/instagram.rb +28 -0
  18. data/lib/instagram/api.rb +31 -0
  19. data/lib/instagram/client.rb +21 -0
  20. data/lib/instagram/client/comments.rb +62 -0
  21. data/lib/instagram/client/embedding.rb +28 -0
  22. data/lib/instagram/client/geographies.rb +29 -0
  23. data/lib/instagram/client/likes.rb +58 -0
  24. data/lib/instagram/client/locations.rb +75 -0
  25. data/lib/instagram/client/media.rb +82 -0
  26. data/lib/instagram/client/subscriptions.rb +211 -0
  27. data/lib/instagram/client/tags.rb +59 -0
  28. data/lib/instagram/client/users.rb +310 -0
  29. data/lib/instagram/client/utils.rb +28 -0
  30. data/lib/instagram/configuration.rb +123 -0
  31. data/lib/instagram/connection.rb +33 -0
  32. data/lib/instagram/error.rb +34 -0
  33. data/lib/instagram/hashie_wrapper.rb +8 -0
  34. data/lib/instagram/oauth.rb +36 -0
  35. data/lib/instagram/request.rb +79 -0
  36. data/lib/instagram/response.rb +27 -0
  37. data/lib/instagram/version.rb +3 -0
  38. data/spec/faraday/response_spec.rb +85 -0
  39. data/spec/fixtures/access_token.json +9 -0
  40. data/spec/fixtures/approve_user.json +8 -0
  41. data/spec/fixtures/block_user.json +8 -0
  42. data/spec/fixtures/deny_user.json +8 -0
  43. data/spec/fixtures/follow_user.json +8 -0
  44. data/spec/fixtures/followed_by.json +1 -0
  45. data/spec/fixtures/follows.json +1 -0
  46. data/spec/fixtures/geography_recent_media.json +1 -0
  47. data/spec/fixtures/liked_media.json +1 -0
  48. data/spec/fixtures/location.json +1 -0
  49. data/spec/fixtures/location_recent_media.json +1 -0
  50. data/spec/fixtures/location_search.json +1 -0
  51. data/spec/fixtures/location_search_facebook.json +1 -0
  52. data/spec/fixtures/media.json +1 -0
  53. data/spec/fixtures/media_comment.json +1 -0
  54. data/spec/fixtures/media_comment_deleted.json +1 -0
  55. data/spec/fixtures/media_comments.json +1 -0
  56. data/spec/fixtures/media_liked.json +1 -0
  57. data/spec/fixtures/media_likes.json +1 -0
  58. data/spec/fixtures/media_popular.json +1 -0
  59. data/spec/fixtures/media_search.json +1 -0
  60. data/spec/fixtures/media_shortcode.json +1 -0
  61. data/spec/fixtures/media_unliked.json +1 -0
  62. data/spec/fixtures/mikeyk.json +1 -0
  63. data/spec/fixtures/oembed.json +14 -0
  64. data/spec/fixtures/recent_media.json +1 -0
  65. data/spec/fixtures/relationship.json +9 -0
  66. data/spec/fixtures/requested_by.json +12 -0
  67. data/spec/fixtures/shayne.json +1 -0
  68. data/spec/fixtures/subscription.json +12 -0
  69. data/spec/fixtures/subscription_deleted.json +1 -0
  70. data/spec/fixtures/subscription_payload.json +14 -0
  71. data/spec/fixtures/subscriptions.json +22 -0
  72. data/spec/fixtures/tag.json +1 -0
  73. data/spec/fixtures/tag_recent_media.json +1 -0
  74. data/spec/fixtures/tag_search.json +1 -0
  75. data/spec/fixtures/unblock_user.json +8 -0
  76. data/spec/fixtures/unfollow_user.json +8 -0
  77. data/spec/fixtures/user_media_feed.json +1 -0
  78. data/spec/fixtures/user_search.json +1 -0
  79. data/spec/instagram/api_spec.rb +259 -0
  80. data/spec/instagram/client/comments_spec.rb +67 -0
  81. data/spec/instagram/client/embedding_spec.rb +36 -0
  82. data/spec/instagram/client/geography_spec.rb +34 -0
  83. data/spec/instagram/client/likes_spec.rb +62 -0
  84. data/spec/instagram/client/locations_spec.rb +121 -0
  85. data/spec/instagram/client/media_spec.rb +95 -0
  86. data/spec/instagram/client/subscriptions_spec.rb +162 -0
  87. data/spec/instagram/client/tags_spec.rb +75 -0
  88. data/spec/instagram/client/users_spec.rb +407 -0
  89. data/spec/instagram/client/utils_spec.rb +31 -0
  90. data/spec/instagram/client_spec.rb +23 -0
  91. data/spec/instagram/request_spec.rb +56 -0
  92. data/spec/instagram_spec.rb +105 -0
  93. data/spec/spec_helper.rb +66 -0
  94. metadata +293 -0
@@ -0,0 +1,75 @@
1
+ require File.expand_path("../../../spec_helper", __FILE__)
2
+
3
+ describe Instagram::Client do
4
+ Instagram::Configuration::VALID_FORMATS.each do |format|
5
+ context ".new(:format => '#{format}')" do
6
+ before do
7
+ @client = Instagram::Client.new(format: format, client_id: "CID", client_secret: "CS", access_token: "AT")
8
+ end
9
+
10
+ describe ".tag" do
11
+ before do
12
+ stub_get("tags/cat.#{format}")
13
+ .with(query: { access_token: @client.access_token })
14
+ .to_return(body: fixture("tag.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
15
+ end
16
+
17
+ it "should get the correct resource" do
18
+ @client.tag("cat")
19
+ expect(a_get("tags/cat.#{format}")
20
+ .with(query: { access_token: @client.access_token }))
21
+ .to have_been_made
22
+ end
23
+
24
+ it "should return extended information of a given media item" do
25
+ tag = @client.tag("cat")
26
+ expect(tag.name).to eq("cat")
27
+ end
28
+ end
29
+
30
+ describe ".tag_recent_media" do
31
+ before do
32
+ stub_get("tags/cat/media/recent.#{format}")
33
+ .with(query: { access_token: @client.access_token })
34
+ .to_return(body: fixture("tag_recent_media.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
35
+ end
36
+
37
+ it "should get the correct resource" do
38
+ @client.tag_recent_media("cat")
39
+ expect(a_get("tags/cat/media/recent.#{format}")
40
+ .with(query: { access_token: @client.access_token }))
41
+ .to have_been_made
42
+ end
43
+
44
+ it "should return a list of media taken at a given location" do
45
+ media = @client.tag_recent_media("cat")
46
+ expect(media).to be_a Array
47
+ expect(media.first.user.username).to eq("amandavan")
48
+ end
49
+ end
50
+
51
+ describe ".tag_search" do
52
+ before do
53
+ stub_get("tags/search.#{format}")
54
+ .with(query: { access_token: @client.access_token })
55
+ .with(query: { q: "cat" })
56
+ .to_return(body: fixture("tag_search.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
57
+ end
58
+
59
+ it "should get the correct resource" do
60
+ @client.tag_search("cat")
61
+ expect(a_get("tags/search.#{format}")
62
+ .with(query: { access_token: @client.access_token })
63
+ .with(query: { q: "cat" }))
64
+ .to have_been_made
65
+ end
66
+
67
+ it "should return an array of user search results" do
68
+ tags = @client.tag_search("cat")
69
+ expect(tags).to be_a Array
70
+ expect(tags.first.name).to eq("cats")
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,407 @@
1
+ require File.expand_path("../../../spec_helper", __FILE__)
2
+
3
+ describe Instagram::Client do
4
+ Instagram::Configuration::VALID_FORMATS.each do |format|
5
+ context ".new(:format => '#{format}')" do
6
+ before do
7
+ @client = Instagram::Client.new(format: format, client_id: "CID", client_secret: "CS", access_token: "AT")
8
+ end
9
+
10
+ describe ".user" do
11
+ context "with user ID passed" do
12
+ before do
13
+ stub_get("users/4.#{format}")
14
+ .with(query: { access_token: @client.access_token })
15
+ .to_return(body: fixture("mikeyk.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
16
+ end
17
+
18
+ it "should get the correct resource" do
19
+ @client.user(4)
20
+ expect(a_get("users/4.#{format}")
21
+ .with(query: { access_token: @client.access_token }))
22
+ .to have_been_made
23
+ end
24
+
25
+ it "should return extended information of a given user" do
26
+ user = @client.user(4)
27
+ expect(user.full_name).to eq("Mike Krieger")
28
+ end
29
+ end
30
+
31
+ context "without user ID passed" do
32
+ before do
33
+ stub_get("users/self.#{format}")
34
+ .with(query: { access_token: @client.access_token })
35
+ .to_return(body: fixture("shayne.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
36
+ end
37
+
38
+ it "should get the correct resource" do
39
+ @client.user
40
+ expect(a_get("users/self.#{format}")
41
+ .with(query: { access_token: @client.access_token }))
42
+ .to have_been_made
43
+ end
44
+ end
45
+ end
46
+
47
+ describe ".user_search" do
48
+ before do
49
+ stub_get("users/search.#{format}")
50
+ .with(query: { access_token: @client.access_token })
51
+ .with(query: { q: "Shayne Sweeney" })
52
+ .to_return(body: fixture("user_search.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
53
+ end
54
+
55
+ it "should get the correct resource" do
56
+ @client.user_search("Shayne Sweeney")
57
+ expect(a_get("users/search.#{format}")
58
+ .with(query: { access_token: @client.access_token })
59
+ .with(query: { q: "Shayne Sweeney" }))
60
+ .to have_been_made
61
+ end
62
+
63
+ it "should return an array of user search results" do
64
+ users = @client.user_search("Shayne Sweeney")
65
+ expect(users).to be_a Array
66
+ expect(users.first.username).to eq("shayne")
67
+ end
68
+ end
69
+
70
+ describe ".user_follows" do
71
+ context "with user ID passed" do
72
+ before do
73
+ stub_get("users/4/follows.#{format}")
74
+ .with(query: { access_token: @client.access_token })
75
+ .to_return(body: fixture("follows.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
76
+ end
77
+
78
+ it "should get the correct resource" do
79
+ @client.user_follows(4)
80
+ expect(a_get("users/4/follows.#{format}")
81
+ .with(query: { access_token: @client.access_token }))
82
+ .to have_been_made
83
+ end
84
+
85
+ it "should return a list of users whom a given user follows" do
86
+ follows = @client.user_follows(4)
87
+ expect(follows).to be_a Array
88
+ expect(follows.first.username).to eq("heartsf")
89
+ end
90
+ end
91
+
92
+ context "without user ID passed" do
93
+ before do
94
+ stub_get("users/self/follows.#{format}")
95
+ .with(query: { access_token: @client.access_token })
96
+ .to_return(body: fixture("follows.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
97
+ end
98
+
99
+ it "should get the correct resource" do
100
+ @client.user_follows
101
+ expect(a_get("users/self/follows.#{format}")
102
+ .with(query: { access_token: @client.access_token }))
103
+ .to have_been_made
104
+ end
105
+ end
106
+ end
107
+
108
+ describe ".user_followed_by" do
109
+ context "with user ID passed" do
110
+ before do
111
+ stub_get("users/4/followed-by.#{format}")
112
+ .with(query: { access_token: @client.access_token })
113
+ .to_return(body: fixture("followed_by.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
114
+ end
115
+
116
+ it "should get the correct resource" do
117
+ @client.user_followed_by(4)
118
+ expect(a_get("users/4/followed-by.#{format}")
119
+ .with(query: { access_token: @client.access_token }))
120
+ .to have_been_made
121
+ end
122
+
123
+ it "should return a list of users whom a given user is followed by" do
124
+ followed_by = @client.user_followed_by(4)
125
+ expect(followed_by).to be_a Array
126
+ expect(followed_by.first.username).to eq("bojieyang")
127
+ end
128
+ end
129
+
130
+ context "without user ID passed" do
131
+ before do
132
+ stub_get("users/self/followed-by.#{format}")
133
+ .with(query: { access_token: @client.access_token })
134
+ .to_return(body: fixture("followed_by.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
135
+ end
136
+
137
+ it "should get the correct resource" do
138
+ @client.user_followed_by
139
+ expect(a_get("users/self/followed-by.#{format}")
140
+ .with(query: { access_token: @client.access_token }))
141
+ .to have_been_made
142
+ end
143
+ end
144
+ end
145
+
146
+ describe ".user_media_feed" do
147
+ before do
148
+ stub_get("users/self/feed.#{format}")
149
+ .with(query: { access_token: @client.access_token })
150
+ .to_return(body: fixture("user_media_feed.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
151
+ end
152
+
153
+ it "should get the correct resource" do
154
+ @client.user_media_feed
155
+ expect(a_get("users/self/feed.#{format}")
156
+ .with(query: { access_token: @client.access_token }))
157
+ .to have_been_made
158
+ end
159
+
160
+ context Instagram::Response do
161
+ let(:user_media_feed_response) { @client.user_media_feed }
162
+ subject { user_media_feed_response }
163
+
164
+ it { is_expected.to be_a_kind_of(Instagram::Response) }
165
+ it { is_expected.to respond_to(:pagination) }
166
+ it { is_expected.to respond_to(:meta) }
167
+
168
+ context ".pagination" do
169
+ subject { user_media_feed_response.pagination }
170
+
171
+ it { is_expected.to be_an_instance_of(Instagram::HashieWrapper) }
172
+
173
+ describe "#next_max_id" do
174
+ subject { super().next_max_id }
175
+ it { is_expected.to eq("22063131") }
176
+ end
177
+ end
178
+
179
+ context ".meta" do
180
+ subject { user_media_feed_response.meta }
181
+
182
+ it { is_expected.to be_an_instance_of(Instagram::HashieWrapper) }
183
+
184
+ describe "#code" do
185
+ subject { super().code }
186
+ it { is_expected.to eq(200) }
187
+ end
188
+ end
189
+ end
190
+ end
191
+
192
+ describe ".user_liked_media" do
193
+ before do
194
+ stub_get("users/self/media/liked.#{format}")
195
+ .with(query: { access_token: @client.access_token })
196
+ .to_return(body: fixture("liked_media.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
197
+ end
198
+
199
+ it "should get the correct resource" do
200
+ @client.user_liked_media
201
+ expect(a_get("users/self/media/liked.#{format}")
202
+ .with(query: { access_token: @client.access_token }))
203
+ .to have_been_made
204
+ end
205
+ end
206
+
207
+ describe ".user_recent_media" do
208
+ context "with user ID passed" do
209
+ before do
210
+ stub_get("users/4/media/recent.#{format}")
211
+ .with(query: { access_token: @client.access_token })
212
+ .to_return(body: fixture("recent_media.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
213
+ end
214
+
215
+ it "should get the correct resource" do
216
+ @client.user_recent_media(4)
217
+ expect(a_get("users/4/media/recent.#{format}")
218
+ .with(query: { access_token: @client.access_token }))
219
+ .to have_been_made
220
+ end
221
+
222
+ it "should return a list of recent media items for the given user" do
223
+ recent_media = @client.user_recent_media(4)
224
+ expect(recent_media).to be_a Array
225
+ expect(recent_media.first.user.username).to eq("shayne")
226
+ end
227
+ end
228
+
229
+ context "without user ID passed" do
230
+ before do
231
+ stub_get("users/self/media/recent.#{format}")
232
+ .with(query: { access_token: @client.access_token })
233
+ .to_return(body: fixture("recent_media.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
234
+ end
235
+
236
+ it "should get the correct resource" do
237
+ @client.user_recent_media
238
+ expect(a_get("users/self/media/recent.#{format}")
239
+ .with(query: { access_token: @client.access_token }))
240
+ .to have_been_made
241
+ end
242
+ end
243
+ end
244
+
245
+ describe ".user_requested_by" do
246
+ before do
247
+ stub_get("users/self/requested-by.#{format}")
248
+ .with(query: { access_token: @client.access_token })
249
+ .to_return(body: fixture("requested_by.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
250
+ end
251
+
252
+ it "should get the correct resource" do
253
+ @client.user_requested_by
254
+ expect(a_get("users/self/requested-by.#{format}")
255
+ .with(query: { access_token: @client.access_token }))
256
+ .to have_been_made
257
+ end
258
+
259
+ it "should return a list of users awaiting approval" do
260
+ users = @client.user_requested_by
261
+ expect(users).to be_a Array
262
+ expect(users.first.username).to eq("shayne")
263
+ end
264
+ end
265
+
266
+ describe ".user_relationship" do
267
+ before do
268
+ stub_get("users/4/relationship.#{format}")
269
+ .with(query: { access_token: @client.access_token })
270
+ .to_return(body: fixture("relationship.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
271
+ end
272
+
273
+ it "should get the correct resource" do
274
+ @client.user_relationship(4)
275
+ expect(a_get("users/4/relationship.#{format}")
276
+ .with(query: { access_token: @client.access_token }))
277
+ .to have_been_made
278
+ end
279
+
280
+ it "should return a relationship status response" do
281
+ status = @client.user_relationship(4)
282
+ expect(status.incoming_status).to eq("requested_by")
283
+ end
284
+ end
285
+
286
+ describe ".follow_user" do
287
+ before do
288
+ stub_post("users/4/relationship.#{format}")
289
+ .with(body: { action: "follow", access_token: @client.access_token })
290
+ .to_return(body: fixture("follow_user.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
291
+ end
292
+
293
+ it "should get the correct resource" do
294
+ @client.follow_user(4)
295
+ expect(a_post("users/4/relationship.#{format}")
296
+ .with(body: { action: "follow", access_token: @client.access_token }))
297
+ .to have_been_made
298
+ end
299
+
300
+ it "should return a relationship status response" do
301
+ status = @client.follow_user(4)
302
+ expect(status.outgoing_status).to eq("requested")
303
+ end
304
+ end
305
+
306
+ describe ".unfollow_user" do
307
+ before do
308
+ stub_post("users/4/relationship.#{format}")
309
+ .with(body: { action: "unfollow", access_token: @client.access_token })
310
+ .to_return(body: fixture("unfollow_user.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
311
+ end
312
+
313
+ it "should get the correct resource" do
314
+ @client.unfollow_user(4)
315
+ expect(a_post("users/4/relationship.#{format}")
316
+ .with(body: { action: "unfollow", access_token: @client.access_token }))
317
+ .to have_been_made
318
+ end
319
+
320
+ it "should return a relationship status response" do
321
+ status = @client.unfollow_user(4)
322
+ expect(status.outgoing_status).to eq("none")
323
+ end
324
+ end
325
+
326
+ describe ".block_user" do
327
+ before do
328
+ stub_post("users/4/relationship.#{format}")
329
+ .with(body: { action: "block", access_token: @client.access_token })
330
+ .to_return(body: fixture("block_user.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
331
+ end
332
+
333
+ it "should get the correct resource" do
334
+ @client.block_user(4)
335
+ expect(a_post("users/4/relationship.#{format}")
336
+ .with(body: { action: "block", access_token: @client.access_token }))
337
+ .to have_been_made
338
+ end
339
+
340
+ it "should return a relationship status response" do
341
+ status = @client.block_user(4)
342
+ expect(status.outgoing_status).to eq("none")
343
+ end
344
+ end
345
+
346
+ describe ".unblock_user" do
347
+ before do
348
+ stub_post("users/4/relationship.#{format}")
349
+ .with(body: { action: "unblock", access_token: @client.access_token })
350
+ .to_return(body: fixture("unblock_user.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
351
+ end
352
+
353
+ it "should get the correct resource" do
354
+ @client.unblock_user(4)
355
+ expect(a_post("users/4/relationship.#{format}")
356
+ .with(body: { action: "unblock", access_token: @client.access_token }))
357
+ .to have_been_made
358
+ end
359
+
360
+ it "should return a relationship status response" do
361
+ status = @client.unblock_user(4)
362
+ expect(status.outgoing_status).to eq("none")
363
+ end
364
+ end
365
+
366
+ describe ".approve_user" do
367
+ before do
368
+ stub_post("users/4/relationship.#{format}")
369
+ .with(body: { action: "approve", access_token: @client.access_token })
370
+ .to_return(body: fixture("approve_user.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
371
+ end
372
+
373
+ it "should get the correct resource" do
374
+ @client.approve_user(4)
375
+ expect(a_post("users/4/relationship.#{format}")
376
+ .with(body: { action: "approve", access_token: @client.access_token }))
377
+ .to have_been_made
378
+ end
379
+
380
+ it "should return a relationship status response" do
381
+ status = @client.approve_user(4)
382
+ expect(status.outgoing_status).to eq("follows")
383
+ end
384
+ end
385
+
386
+ describe ".deny_user" do
387
+ before do
388
+ stub_post("users/4/relationship.#{format}")
389
+ .with(body: { action: "deny", access_token: @client.access_token })
390
+ .to_return(body: fixture("deny_user.#{format}"), headers: { content_type: "application/#{format}; charset=utf-8" })
391
+ end
392
+
393
+ it "should get the correct resource" do
394
+ @client.deny_user(4)
395
+ expect(a_post("users/4/relationship.#{format}")
396
+ .with(body: { action: "deny", access_token: @client.access_token }))
397
+ .to have_been_made
398
+ end
399
+
400
+ it "should return a relationship status response" do
401
+ status = @client.deny_user(4)
402
+ expect(status.outgoing_status).to eq("none")
403
+ end
404
+ end
405
+ end
406
+ end
407
+ end