directlink 0.0.4.1 → 0.0.4.2

Sign up to get free protection for your applications and to get access to all the features.
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: