directlink 0.0.4.1 → 0.0.4.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7a07a4e3fb181e173d60d07dfa59aeb271d96465
4
- data.tar.gz: 0e8903a3ae585b36bccca7830f4344fbbf642b3a
3
+ metadata.gz: 95b60e38f85cce3fe9c3cf915a4ae95cf76a1a33
4
+ data.tar.gz: c2a6dfdd49aa4b9ab22bf9dbaad5d594f1307454
5
5
  SHA512:
6
- metadata.gz: b623472083860ac4b05f4ed972c3c6aa8cf3c7f8909930b001eeb183c5e480977afe2df8868ec86b82f9e7f0055a2d7c8dee711226781675c5fef4fab74d0007
7
- data.tar.gz: 6ea8634f8953a26d98e01a285528ef11c67b21e4ca4efad13dca031b47a002161a02152cc203200edfdf1babecb5cb5667fd2f53345b18eb641113b26f4592c1
6
+ metadata.gz: dbca7e2c709fc76d04deb83c77b2742cb9ccd8b842d8f366a36c938f4baa709cd4748d09a8c503d78811364cacbd014c724dd8f78caa641225a89ff3dee9af89
7
+ data.tar.gz: e7ed956ca117b8e2d4a281cab5f314e553d375181381a80fc3a882bf9f6cec19fe360d1bbbe5ec3b4f6aa38a9516fcb140ed57c91329e8062af43d548714bfe7
data/README.md CHANGED
@@ -159,3 +159,7 @@ SocketError: Failed to open TCP connection to minus.com:80 (getaddrinfo: nodenam
159
159
  * style: `@@` and lambdas are used to keep things private
160
160
  * this gem is a historically 2 or 3 libraries merged -- this is why tests may look awkward
161
161
  * 500px.com has discontinued API in June 2018 -- the tool now uses undocumented methods
162
+ * `DirectLink()` can return an Array of Structs for 1) Imgur 2) Reddit unless `giveup = true` is set
163
+
164
+ TODO: maybe make all these web service specific methods private and discourage to use them since they all return very different things and sometimes don't raise exceptions while the `DirectLink()` does
165
+ TODO: what should `--json` print if exception was thrown?
@@ -1,2 +1,3 @@
1
1
  export IMGUR_CLIENT_ID=0f99cd781c9d0d8
2
2
  export FLICKR_API_KEY=dc2bfd348b01bdc5b09d36876dc38f3d
3
+ export REDDIT_SECRETS=reddit_token_for_travis.yaml
data/bin/directlink CHANGED
@@ -68,8 +68,9 @@ begin
68
68
  (t.is_a?(Array) ? t : [t]).each{ |s| puts "=> #{s.url}\n #{s.type} #{s.width}x#{s.height}" }
69
69
  end
70
70
  end
71
- rescue NetHTTPUtils::Error,
72
- SocketError,
71
+ rescue SocketError,
72
+ Net::OpenTimeout,
73
+ NetHTTPUtils::Error,
73
74
  FastImage::UnknownImageType,
74
75
  FastImage::ImageFetchFailure,
75
76
  # DirectLink::ErrorMissingEnvVar,
data/directlink.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "directlink"
3
- spec.version = "0.0.4.1"
3
+ spec.version = "0.0.4.2"
4
4
  spec.summary = "converts any kind of image hyperlink to direct link, type of image and its resolution"
5
5
 
6
6
  spec.author = "Victor Maslov aka Nakilon"
@@ -9,9 +9,10 @@ Gem::Specification.new do |spec|
9
9
  spec.homepage = "https://github.com/nakilon/directlink"
10
10
  spec.metadata = {"source_code_uri" => "https://github.com/nakilon/directlink"}
11
11
 
12
- spec.add_dependency "nethttputils", "~>0.2.4.0"
13
12
  spec.add_dependency "fastimage", "~>2.1.3"
14
13
  spec.add_dependency "nokogiri"
14
+ spec.add_dependency "reddit_bot", "~>1.6.7"
15
+ spec.add_dependency "kramdown"
15
16
  spec.add_development_dependency "minitest"
16
17
 
17
18
  spec.require_path = "lib"
data/lib/directlink.rb CHANGED
@@ -31,7 +31,7 @@ module DirectLink
31
31
  end
32
32
  class ErrorMissingEnvVar < logging_error
33
33
  def initialize msg
34
- super "(warning, recommendation) #{msg}"
34
+ super "(warning/recommendation) #{msg}"
35
35
  end
36
36
  end
37
37
 
@@ -199,6 +199,35 @@ module DirectLink
199
199
  imageinfo.first["url"]
200
200
  end
201
201
 
202
+ class << self
203
+ attr_accessor :reddit_bot
204
+ end
205
+ def self.reddit link
206
+ unless id = URI(link).path[/\A(?:\/r\/[0-9a-zA-Z_]+)?(?:\/comments)?\/([0-9a-z]{5,6})(?:\/|\z)/, 1]
207
+ raise DirectLink::ErrorBadLink.new link unless URI(link).host &&
208
+ URI(link).host.split(?.) == %w{ i redd it } &&
209
+ URI(link).path[/\A\/[a-z0-9]{12,13}\.(gif|jpg)\z/]
210
+ return [true, link]
211
+ end
212
+ if ENV["REDDIT_SECRETS"]
213
+ require "reddit_bot"
214
+ RedditBot.logger.level = Logger::FATAL
215
+ require "yaml"
216
+ reddit_bot ||= RedditBot::Bot.new YAML.load_file ENV["REDDIT_SECRETS"]
217
+ json = reddit_bot.json(:get, "/by_id/t3_#{id}")
218
+ else
219
+ raise ErrorMissingEnvVar.new "defining REDDIT_SECRETS env var is highly recommended" rescue nil
220
+ json = JSON.load NetHTTPUtils.request_data "#{link}.json", header: {"User-Agent" => "Mozilla"}
221
+ raise ErrorAssert.new "our knowledge about Reddit API seems to be outdated" unless json.size == 2
222
+ json = json.find{ |_| _["data"]["children"].first["kind"] == "t3" }
223
+ end
224
+ data = json["data"]["children"].first["data"]
225
+ url = data["url"]
226
+ return [true, url] unless data["is_self"]
227
+ raise ErrorAssert.new "our knowledge about Reddit API seems to be outdated" if url != "https://www.reddit.com" + data["permalink"]
228
+ return [false, data["selftext"]]
229
+ end
230
+
202
231
  class_variable_set :@@directlink, Struct.new(:url, :width, :height, :type)
203
232
  end
204
233
 
@@ -215,13 +244,16 @@ def DirectLink link, max_redirect_resolving_retry_delay = nil, giveup = false
215
244
 
216
245
  struct = Module.const_get(__callee__).class_variable_get :@@directlink
217
246
 
218
- if %w{ lh3 googleusercontent com } == URI(link).host.split(?.).last(3) ||
219
- %w{ bp blogspot com } == URI(link).host.split(?.).last(3)
220
- u = DirectLink.google link
221
- f = FastImage.new(u, raise_on_failure: true, http_header: {"User-Agent" => "Mozilla"})
222
- w, h = f.size
223
- return struct.new u, w, h, f.type
247
+ google_without_schema_crutch = lambda do
248
+ if %w{ lh3 googleusercontent com } == URI(link).host.split(?.).last(3) ||
249
+ %w{ bp blogspot com } == URI(link).host.split(?.).last(3)
250
+ u = DirectLink.google link
251
+ f = FastImage.new(u, raise_on_failure: true, http_header: {"User-Agent" => "Mozilla"})
252
+ w, h = f.size
253
+ struct.new u, w, h, f.type
254
+ end
224
255
  end
256
+ t = google_without_schema_crutch[] and return t
225
257
 
226
258
  # to test that we won't hang for too long if someone like aeronautica.difesa.it will be silent for some reason:
227
259
  # $ bundle console
@@ -241,14 +273,7 @@ def DirectLink link, max_redirect_resolving_retry_delay = nil, giveup = false
241
273
  # because they can be hidden behind URL shorteners
242
274
  # also it can resolve NetHTTPUtils::Error(404) before trying the adapter
243
275
 
244
- # TODO: get rid of this copypasta, that is caused by that we want to pass urls without schema to this method
245
- if %w{ lh3 googleusercontent com } == URI(link).host.split(?.).last(3) ||
246
- %w{ bp blogspot com } == URI(link).host.split(?.).last(3)
247
- u = DirectLink.google link
248
- f = FastImage.new(u, raise_on_failure: true, http_header: {"User-Agent" => "Mozilla"})
249
- w, h = f.size
250
- return struct.new u, w, h, f.type
251
- end
276
+ t = google_without_schema_crutch[] and return t
252
277
 
253
278
  begin
254
279
  imgur = DirectLink.imgur(link).sort_by{ |u, w, h, t| - w * h }.map do |u, w, h, t|
@@ -257,9 +282,9 @@ def DirectLink link, max_redirect_resolving_retry_delay = nil, giveup = false
257
282
  # `DirectLink.imgur` return value is always an Array
258
283
  return imgur.size == 1 ? imgur.first : imgur
259
284
  rescue DirectLink::ErrorMissingEnvVar
260
- end if %w{ imgur com } == URI(link).host.split(?.).last(2) ||
261
- %w{ i imgur com } == URI(link).host.split(?.).last(3) ||
262
- %w{ m imgur com } == URI(link).host.split(?.).last(3) ||
285
+ end if %w{ imgur com } == URI(link).host.split(?.).last(2) ||
286
+ %w{ i imgur com } == URI(link).host.split(?.).last(3) ||
287
+ %w{ m imgur com } == URI(link).host.split(?.).last(3) ||
263
288
  %w{ www imgur com } == URI(link).host.split(?.).last(3)
264
289
 
265
290
  if %w{ 500px com } == URI(link).host.split(?.).last(2)
@@ -269,25 +294,41 @@ def DirectLink link, max_redirect_resolving_retry_delay = nil, giveup = false
269
294
 
270
295
  begin
271
296
  w, h, u = DirectLink.flickr(link)
272
- f = FastImage.new(u, raise_on_failure: true, http_header: {"User-Agent" => "Mozilla"})
297
+ f = FastImage.new(u, raise_on_failure: true) # , http_header: {"User-Agent" => "Mozilla"}
273
298
  return struct.new u, w, h, f.type
274
299
  rescue DirectLink::ErrorMissingEnvVar
275
300
  end if %w{ www flickr com } == URI(link).host.split(?.).last(3)
276
301
 
277
- if %w{ wikipedia org } == URI(link).host.split(?.).last(2) ||
302
+ if %w{ wikipedia org } == URI(link).host.split(?.).last(2) ||
278
303
  %w{ commons wikimedia org } == URI(link).host.split(?.).last(3)
279
304
  u = DirectLink.wiki link
280
- f = FastImage.new(u, raise_on_failure: true, http_header: {"User-Agent" => "Mozilla"})
305
+ f = FastImage.new(u, raise_on_failure: true) # , http_header: {"User-Agent" => "Mozilla"}
281
306
  w, h = f.size
282
307
  return struct.new u, w, h, f.type
283
308
  end
284
309
 
310
+ # TODO protect in two places from eternal recursion
311
+
312
+ begin
313
+ s, u = DirectLink.reddit(link)
314
+ if s
315
+ return DirectLink u, max_redirect_resolving_retry_delay, giveup
316
+ end
317
+ raise DirectLink::ErrorBadLink.new link if giveup # TODO: print original url in such cases if there was a recursion
318
+ f = ->_{ _.type == :a ? _.attr["href"] : _.children.flat_map(&f) }
319
+ require "kramdown"
320
+ return f[Kramdown::Document.new(u).root].map{ |_| DirectLink _, max_redirect_resolving_retry_delay, giveup }
321
+ rescue DirectLink::ErrorMissingEnvVar
322
+ end if %w{ reddit com } == URI(link).host.split(?.).last(2) ||
323
+ %w{ redd it } == URI(link).host.split(?.).last(2)
324
+
325
+
285
326
  begin
286
327
  f = FastImage.new(link, raise_on_failure: true, http_header: {"User-Agent" => "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36"})
287
328
  rescue FastImage::UnknownImageType
288
329
  raise if giveup
289
330
  require "nokogiri"
290
- html = Nokogiri::HTML NetHTTPUtils::request_data link
331
+ html = Nokogiri::HTML NetHTTPUtils::request_data link, header: {"User-Agent" => "Mozilla"}
291
332
  h = {}
292
333
  l = lambda do |node, s = []|
293
334
  node.element_children.flat_map do |child|
@@ -0,0 +1,4 @@
1
+ :client_id: SLdfneWbqS6hVw
2
+ :client_secret: xNbSyCQrvZrtcN2OfG8sujXH-vw
3
+ :password: nakilontravispublicforimgur@gmail.com
4
+ :login: nakilontravispublicf
data/test.rb CHANGED
@@ -9,12 +9,13 @@ require "minitest/mock"
9
9
 
10
10
  fail unless ENV.include? "IMGUR_CLIENT_ID"
11
11
  fail unless ENV.include? "FLICKR_API_KEY"
12
+ fail unless ENV.include? "REDDIT_SECRETS"
12
13
 
13
14
  require_relative "lib/directlink"
14
15
  DirectLink.silent = true
15
16
  describe DirectLink do
16
17
 
17
- describe "methods" do
18
+ describe "./lib" do
18
19
 
19
20
  describe "google" do
20
21
  "
@@ -284,6 +285,8 @@ describe DirectLink do
284
285
  end
285
286
  end
286
287
 
288
+ # TODO we need tests that check we really get dimensions from `DirectLink()` method called on wiki and reddit links
289
+ # and maaaaybe move some tests from here to the context about giveup
287
290
  [
288
291
  [ :_500px, [
289
292
  ["https://500px.com/photo/264092015/morning-rider-by-tiger-seo", [1200, 800, "https://drscdn.500px.org/photo/264092015/m%3D1200/v2?webp=true&sig=49c6f8346ba8453ccb17208d4653b9e11bc3e1bb8c21c161047e2842716f3649", "jpeg"]],
@@ -306,12 +309,21 @@ describe DirectLink do
306
309
  ["http://commons.wikimedia.org/wiki/File:Eduard_Bohlen_anagoria.jpg", "https://upload.wikimedia.org/wikipedia/commons/0/0d/Eduard_Bohlen_anagoria.jpg"],
307
310
  ["https://en.wikipedia.org/wiki/Spanish_Civil_War#/media/File:Alfonso_XIIIdeEspa%C3%B1a.jpg", "https://upload.wikimedia.org/wikipedia/commons/f/fb/Alfonso_XIIIdeEspa%C3%B1a.jpg"], # escaped input URI
308
311
  ] ],
312
+ [ :reddit, [
313
+ ["https://www.reddit.com/r/cacography/comments/32tq0i/c/", [true, "http://i.imgur.com/vy6Ms4Z.jpg"]],
314
+ ["http://redd.it/32tq0i", [true, "http://i.imgur.com/vy6Ms4Z.jpg"]], # TODO maybe check that it calls #imgur recursively
315
+ ["https://i.redd.it/c8rk0kjywhy01.jpg", [true, "https://i.redd.it/c8rk0kjywhy01.jpg"]],
316
+ ["https://i.redd.it/si758zk7r5xz.jpg", [true, "https://i.redd.it/si758zk7r5xz.jpg"]], # it is 404 but `.reddit` does not care -- it just returns the url
317
+ ["https://reddit.com/123456", [true, "http://www.youtube.com/watch?v=b9upM4RbIeU&amp;feature=g-vrec"]],
318
+ ["https://www.reddit.com/r/travel/988889", [true, "https://i.redd.it/3h5xls6ehrg11.jpg"]],
319
+ ["http://redd.it/988889", [true, "https://i.redd.it/3h5xls6ehrg11.jpg"]],
320
+ ] ],
309
321
  ].each do |method, tests|
310
322
  describe method do
311
323
  tests.each_with_index do |(input, expectation), i|
312
- it "##{i + 1}" do
324
+ it "#{method} ##{i + 1}" do
313
325
  if expectation.is_a? Class
314
- assert_raises expectation do
326
+ assert_raises expectation, input do
315
327
  DirectLink.method(method).call input
316
328
  end
317
329
  else
@@ -347,6 +359,13 @@ describe DirectLink do
347
359
  https://en.wikipedia.org/wiki/Third_Party_System#/media/File:United_States_presidential_election_results,_1876-1892.svg
348
360
  http://commons.wikimedia.org/wiki/File:Eduard_Bohlen_anagoria.jpg
349
361
  },
362
+ reddit: %w{
363
+ https://www.reddit.com/r/cacography/comments/32tq0i/c/
364
+ https://i.redd.it/si758zk7r5xz.jpg
365
+ http://redd.it/32tq0i
366
+ https://reddit.com/123456
367
+ https://www.reddit.com/r/travel/988889
368
+ },
350
369
  }.each do |method, tests|
351
370
  describe "DirectLink() calls #{method}" do
352
371
  tests.each_with_index do |input, i|
@@ -363,10 +382,12 @@ describe DirectLink do
363
382
  end
364
383
 
365
384
  describe "throws ErrorBadLink if method does not match the link" do
366
- %i{ google imgur flickr _500px wiki }.each do |method|
367
- it method do
368
- assert_raises DirectLink::ErrorBadLink do
369
- DirectLink.method(method).call ""
385
+ %i{ google imgur flickr _500px wiki reddit }.each do |method|
386
+ ["", "test", "http://example.com/"].each_with_index do |url, i|
387
+ it "#{method} ##{i + 1}" do
388
+ assert_raises DirectLink::ErrorBadLink do
389
+ DirectLink.method(method).call url
390
+ end
370
391
  end
371
392
  end
372
393
  end
@@ -377,22 +398,38 @@ describe DirectLink do
377
398
  describe "DirectLink()" do
378
399
 
379
400
  it "throws ErrorBadLink if link is invalid" do
380
- e = assert_raises DirectLink::ErrorBadLink do
381
- DirectLink "test"
382
- end
383
- assert_equal "test".inspect, e.message
401
+ assert_equal "test".inspect, (
402
+ assert_raises DirectLink::ErrorBadLink do
403
+ DirectLink "test"
404
+ end
405
+ ).message
384
406
  end
385
407
 
386
408
  describe "does not shadow the internal exception" do
387
- [
409
+ it "raises SocketError from the redirect resolving stage" do
410
+ assert_raises SocketError do
411
+ NetHTTPUtils.stub :get_response, ->*{ raise SocketError.new } do
412
+ DirectLink "http://example.com/404"
413
+ end
414
+ end
415
+ end
416
+ it "raises Net::OpenTimeout -- server side issues can happen (not related to User Agent)" do
417
+ assert_raises Net::OpenTimeout do
418
+ NetHTTPUtils.stub :get_response, ->*{ raise Net::OpenTimeout.new } do
419
+ DirectLink "http://example.com/404"
420
+ end
421
+ end
422
+ end
423
+ [ # TODO this URLs may be reused from tests that check that this method calls internal method
388
424
  [:google, "//lh3.googleusercontent.com/proxy/DZtTi5KL7PqiBwJc8weNGLk_Wi2UTaQH0AC_h2kuURiu0AbwyI2ywOk2XgdAjL7ceg=w530-h354-n"],
389
425
  [:imgur, "http://imgur.com/HQHBBBD"],
390
426
  [:flickr, "https://www.flickr.com/photos/44133687@N00/17380073505/"],
391
427
  [:_500px, "https://500px.com/photo/112134597/milky-way-by-tom-hall"],
392
428
  [:wiki, "http://commons.wikimedia.org/wiki/File:Eduard_Bohlen_anagoria.jpg"],
429
+ [:reddit, "https://www.reddit.com/123456"],
393
430
  ].each do |method, link|
394
- it method do
395
- e = assert_raises DirectLink::ErrorBadLink do
431
+ it "can otherwise raise DirectLink::ErrorBadLink #{method}" do
432
+ e = assert_raises(DirectLink::ErrorBadLink, link) do
396
433
  DirectLink.stub method, ->*{ raise DirectLink::ErrorBadLink.new "test" } do
397
434
  DirectLink link
398
435
  end
@@ -400,20 +437,12 @@ describe DirectLink do
400
437
  assert_equal "\"test\" -- if you think this link is valid, please report the issue", e.message
401
438
  end
402
439
  end
403
- it "raises SocketError from the redirect resolving stage" do
404
- assert_raises SocketError do
405
- NetHTTPUtils.stub :get_response, ->*{ raise SocketError.new } do
406
- DirectLink "http://example.com/404"
407
- end
408
- end
409
- end
410
440
  end
411
441
 
412
- describe "some other tests" do
442
+ describe "other domains tests" do
413
443
  [
414
444
  ["http://www.aeronautica.difesa.it/organizzazione/REPARTI/divolo/PublishingImages/6%C2%B0%20Stormo/2013-decollo%20al%20tramonto%20REX%201280.jpg", ["http://www.aeronautica.difesa.it/organizzazione/REPARTI/divolo/PublishingImages/6%C2%B0%20Stormo/2013-decollo%20al%20tramonto%20REX%201280.jpg", 1280, 853, :jpeg]],
415
445
  ["http://minus.com/lkP3hgRJd9npi", SocketError, /nodename nor servname provided, or not known|No address associated with hostname/, 0],
416
- ["https://i.redd.it/si758zk7r5xz.jpg", NetHTTPUtils::Error, "HTTP error #404 "],
417
446
  ["http://www.cutehalloweencostumeideas.org/wp-content/uploads/2017/10/Niagara-Falls_04.jpg", SocketError, /nodename nor servname provided, or not known|Name or service not known/, 0],
418
447
  ].each_with_index do |(input, expectation, message_string_or_regex, max_redirect_resolving_retry_delay), i|
419
448
  it "##{i + 1}" do
@@ -441,28 +470,35 @@ describe DirectLink do
441
470
  ["https://github.com/Nakilon/dhash-vips", FastImage::UnknownImageType, true],
442
471
  ["https://github.com/Nakilon/dhash-vips", 3],
443
472
  ["http://imgur.com/HQHBBBD", FastImage::UnknownImageType, true],
444
- ["http://imgur.com/HQHBBBD", "https://i.imgur.com/HQHBBBD.jpg?fb"],
473
+ ["http://imgur.com/HQHBBBD", "https://i.imgur.com/HQHBBBD.jpg?fb"], # .at_css("meta[@property='og:image']")
474
+ ["http://redd.it/123456", FastImage::UnknownImageType, true],
475
+ ["http://redd.it/123456", 1],
476
+ ["http://redd.it/997he7", DirectLink::ErrorBadLink, true],
477
+ ["http://redd.it/997he7", 1], # currently only links are parsed
445
478
  ].each_with_index do |(input, expectation, giveup), i|
446
- it "##{i + 1}" do
447
- t = ENV.delete "IMGUR_CLIENT_ID"
479
+ it "##{i + 1} (#{URI(input).host})" do # to match with minitest `-n` run flag
480
+ ti = ENV.delete "IMGUR_CLIENT_ID"
481
+ tr = ENV.delete "REDDIT_SECRETS"
448
482
  begin
449
483
  case expectation
450
484
  when Class
451
485
  e = assert_raises expectation, "for #{input} (giveup = #{giveup})" do
452
486
  DirectLink input, nil, giveup
453
487
  end
454
- assert_equal expectation.to_s, e.message, "for #{input} (giveup = #{giveup})"
488
+ assert_equal expectation.to_s, e.class.to_s, "for #{input} (giveup = #{giveup})"
455
489
  when String
456
490
  result = DirectLink input, nil, giveup
457
491
  assert_equal expectation, result.url, "for #{input} (giveup = #{giveup})"
458
492
  else
459
493
  result = DirectLink input, nil, giveup
494
+ result = [result] unless result.is_a? Array # we can't do `Array(<Struct>)` because it splats by elements
460
495
  assert_equal expectation, result.size, ->{
461
496
  "for #{input} (giveup = #{giveup}): #{result.map &:url}"
462
497
  }
463
498
  end
464
499
  ensure
465
- ENV["IMGUR_CLIENT_ID"] = t
500
+ ENV["IMGUR_CLIENT_ID"] = ti
501
+ ENV["REDDIT_SECRETS"] = tr
466
502
  end
467
503
  end
468
504
  end
@@ -513,7 +549,7 @@ describe DirectLink do
513
549
 
514
550
  [1, "https://imgur.com/a/badlinkpattern", "NetHTTPUtils::Error: HTTP error #404 "],
515
551
  # TODO: a test that it appends the `exception.cause`
516
- ].each_with_index do |(expected_exit_code, link, expected_output, unset), i|
552
+ ].each_with_index do |(expected_exit_code, link, expected_output, unset), i| # TODO: unset is not used anymore or I have to go sleep?
517
553
  it "##{i + 1}" do
518
554
  string, status = Open3.capture2e "export #{File.read("api_tokens_for_travis.sh").gsub(/\n?export/, ?\s).strip}#{unset} && bundle exec ruby bin/directlink #{link}"
519
555
  assert_equal [expected_exit_code, "#{expected_output}\n"], [status.exitstatus, string], "for #{link}"
@@ -557,12 +593,17 @@ describe DirectLink do
557
593
  ]
558
594
  '.gsub(/^ {8}/, ""), "json"],
559
595
  ].each do |expected_output, param|
560
- it "#{param || "default"} succeeds" do
596
+ it "#{param || "default"} output format" do
561
597
  string, status = Open3.capture2e "export #{File.read("api_tokens_for_travis.sh").gsub(/\n?export/, ?\s).strip} && bundle exec ruby bin/directlink#{" --#{param}" if param} #{valid_imgur_image_url1} #{valid_imgur_image_url2}"
562
598
  assert_equal [0, expected_output], [status.exitstatus, string]
563
599
  end
564
600
  end
565
601
 
602
+ it "reddit_bot gem logger does not flood STDOUT" do
603
+ string, status = Open3.capture2e "bundle exec ruby bin/directlink http://redd.it/997he7"
604
+ assert_equal "<= http://redd.it/997he7\n=> https://i.imgur.com/QpOBvRY.png\n image/png 460x460\n", string
605
+ end
606
+
566
607
  end
567
608
 
568
609
  end
metadata CHANGED
@@ -1,45 +1,59 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: directlink
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4.1
4
+ version: 0.0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor Maslov aka Nakilon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-12 00:00:00.000000000 Z
11
+ date: 2018-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: nethttputils
14
+ name: fastimage
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.2.4.0
19
+ version: 2.1.3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.2.4.0
26
+ version: 2.1.3
27
27
  - !ruby/object:Gem::Dependency
28
- name: fastimage
28
+ name: nokogiri
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: reddit_bot
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - "~>"
32
46
  - !ruby/object:Gem::Version
33
- version: 2.1.3
47
+ version: 1.6.7
34
48
  type: :runtime
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
- version: 2.1.3
54
+ version: 1.6.7
41
55
  - !ruby/object:Gem::Dependency
42
- name: nokogiri
56
+ name: kramdown
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - ">="
@@ -84,6 +98,7 @@ files:
84
98
  - directlink.gemspec
85
99
  - gplus.txt
86
100
  - lib/directlink.rb
101
+ - reddit_token_for_travis.yaml
87
102
  - test.rb
88
103
  homepage: https://github.com/nakilon/directlink
89
104
  licenses: