directlink 0.0.4.4 → 0.0.4.5

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: 7e252357f3a65696511a206fa8fdf8bebd65cc97
4
- data.tar.gz: f4fddedf24809bed96c56a3e063b92d8feeb2cb9
3
+ metadata.gz: 812459ea321dc15a16ea19cea2176c5b37fa868b
4
+ data.tar.gz: b1328fb09fb38b8471eaaee2eb951ba77f87f026
5
5
  SHA512:
6
- metadata.gz: c955776c59833e37194229370d7d26b17d1e6d48674b1cde952cc262eb9705e8681f8eb68d700b7de41abe31bb976a1fb297a18712a157dc0aec364b9d668377
7
- data.tar.gz: cf7513d360fdfb6bad2108906398526ed18ee588dbd0a99e1961f5c8d593bd6061049376fad8936e0c835df0f4f6c1decc92952aa4040c4851a78dbb6bdc3d20
6
+ metadata.gz: 4e82be782453a80cf10d38334e532edde1feb72c9b24fb9ff24c3c7baa7d12a3b30de655af9be7f1527b63d5fea9aae2fbc2e08ec80c28f0e846d6a40454e019
7
+ data.tar.gz: fa87ea7807b41ca3689455afb2dac674ee659352adf5a5fa57c519eb47d46d7d4f388ba8d9478d69bfee3d3998c3c762e3159ad1105656b7a2e27734f7f86924
data/bin/directlink CHANGED
@@ -70,6 +70,7 @@ begin
70
70
  end
71
71
  rescue SocketError,
72
72
  Net::OpenTimeout,
73
+ Errno::ECONNRESET,
73
74
  NetHTTPUtils::Error,
74
75
  FastImage::UnknownImageType,
75
76
  FastImage::ImageFetchFailure,
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.4"
3
+ spec.version = "0.0.4.5"
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"
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
 
12
12
  spec.add_dependency "fastimage", "~>2.1.3"
13
13
  spec.add_dependency "nokogiri"
14
- spec.add_dependency "reddit_bot", "~>1.6.8"
14
+ spec.add_dependency "reddit_bot", "~>1.6.9"
15
15
  spec.add_dependency "kramdown"
16
16
  spec.add_dependency "addressable"
17
17
  spec.add_development_dependency "minitest"
data/lib/directlink.rb CHANGED
@@ -19,7 +19,7 @@ module DirectLink
19
19
  end
20
20
  logging_error = Class.new RuntimeError do
21
21
  def initialize msg
22
- Module.nesting.first.logger.error msg
22
+ Module.nesting.first.logger.error "#{self.class}: #{msg}"
23
23
  super msg
24
24
  end
25
25
  end
@@ -216,7 +216,7 @@ module DirectLink
216
216
  end
217
217
  json = if ENV["REDDIT_SECRETS"]
218
218
  require "reddit_bot"
219
- RedditBot.logger.level = Logger::FATAL
219
+ RedditBot.logger.level = Logger::ERROR
220
220
  require "yaml"
221
221
  self.reddit_bot ||= RedditBot::Bot.new YAML.load_file ENV["REDDIT_SECRETS"]
222
222
  retry_on_json_parseerror.call{ self.reddit_bot.json :get, "/by_id/t3_#{id}" }
@@ -228,13 +228,12 @@ module DirectLink
228
228
  end
229
229
  data = json["data"]["children"].first["data"]
230
230
  if data["media"]["reddit_video"]
231
- t = data["preview"]["images"]
232
- raise ErrorAssert.new "our knowledge about Reddit API seems to be outdated" unless t.size == 1
233
- return [true, t.first["source"]["url"]]
231
+ return [true, data["media"]["reddit_video"]["fallback_url"]]
234
232
  else
235
233
  raise ErrorAssert.new "our knowledge about Reddit API seems to be outdated" unless data["media"].keys.sort == %w{ oembed type } && data["media"]["type"] == "youtube.com"
236
234
  return [true, data["media"]["oembed"]["thumbnail_url"]]
237
235
  end if data["media"]
236
+ return reddit data["url"] if data["crosspost_parent"] # TODO: test that it does it
238
237
  return [true, data["url"]] unless data["is_self"]
239
238
  raise ErrorAssert.new "our knowledge about Reddit API seems to be outdated" if data["url"] != "https://www.reddit.com" + data["permalink"]
240
239
  return [false, data["selftext"]]
@@ -273,7 +272,9 @@ def DirectLink link, max_redirect_resolving_retry_delay = nil, giveup = false
273
272
  # > NetHTTPUtils.logger.level = Logger::DEBUG
274
273
  # > NetHTTPUtils.request_data "http://www.aeronautica.difesa.it/organizzazione/REPARTI/divolo/PublishingImages/6%C2%B0%20Stormo/2013-decollo%20al%20tramonto%20REX%201280.jpg",
275
274
  # max_read_retry_delay: 5, timeout: 5
276
- r = NetHTTPUtils.get_response link, 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"}, **(max_redirect_resolving_retry_delay ? {
275
+ r = NetHTTPUtils.get_response link, header: {
276
+ "User-Agent" => "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36"
277
+ }, **(max_redirect_resolving_retry_delay ? {
277
278
  max_timeout_retry_delay: max_redirect_resolving_retry_delay,
278
279
  max_sslerror_retry_delay: max_redirect_resolving_retry_delay,
279
280
  max_read_retry_delay: max_redirect_resolving_retry_delay,
@@ -328,7 +329,9 @@ def DirectLink link, max_redirect_resolving_retry_delay = nil, giveup = false
328
329
  raise DirectLink::ErrorBadLink.new link if giveup # TODO: print original url in such cases if there was a recursion
329
330
  f = ->_{ _.type == :a ? _.attr["href"] : _.children.flat_map(&f) }
330
331
  require "kramdown"
331
- return f[Kramdown::Document.new(u).root].map{ |_| DirectLink _, max_redirect_resolving_retry_delay, giveup }
332
+ return f[Kramdown::Document.new(u).root].map do |sublink|
333
+ DirectLink URI.join(link, sublink), max_redirect_resolving_retry_delay, giveup
334
+ end
332
335
  end
333
336
  return struct.new *u.values_at(*%w{ fallback_url width height }), "video" if u.is_a? Hash
334
337
  link = u
@@ -343,17 +346,15 @@ def DirectLink link, max_redirect_resolving_retry_delay = nil, giveup = false
343
346
  raise if giveup
344
347
  require "nokogiri"
345
348
  html = Nokogiri::HTML NetHTTPUtils::request_data link, header: {"User-Agent" => "Mozilla"}
346
- h = {}
349
+ h = {} # TODO: maybe move it outside because of possible img[:src] recursion?...
347
350
  l = lambda do |node, s = []|
348
351
  node.element_children.flat_map do |child|
349
- if "img" == child.node_name
350
- begin
351
- [[s, (h[child[:src]] = h[child[:src]] || DirectLink(child[:src], nil, true))]]
352
- rescue => e
353
- []
354
- end
355
- else
356
- l[child, s + [child.node_name]]
352
+ next l[child, s + [child.node_name]] unless "img" == child.node_name
353
+ begin
354
+ [[s, (h[child[:src]] = h[child[:src]] || DirectLink(URI.join(link, child[:src]), nil, true))]] # ... or wait, do we giveup?
355
+ rescue => e
356
+ DirectLink.logger.error e
357
+ []
357
358
  end
358
359
  end
359
360
  end
@@ -363,6 +364,7 @@ def DirectLink link, max_redirect_resolving_retry_delay = nil, giveup = false
363
364
  return DirectLink t[:content], nil, true
364
365
  end.max_by{ |_, v| v.map{ |i| i.width * i.height }.inject(:+) / v.size }.last
365
366
  else
367
+ # TODO: maybe move this to right before `rescue` line
366
368
  w, h = f.size
367
369
  struct.new link, w, h, f.type
368
370
  end
data/test.rb CHANGED
@@ -412,8 +412,11 @@ describe DirectLink do
412
412
  tries += 1
413
413
  raise JSON::ParserError
414
414
  end
415
+ # this gem call should never return success -- it should experience JSON::ParserError
416
+ # so I'm not much sure why do we need this line
415
417
  m.call *args
416
418
  } do
419
+ # why?
417
420
  t = ENV.delete "REDDIT_SECRETS"
418
421
  begin
419
422
  DirectLink.reddit link, 3 # do not remove `4` or test will hang
@@ -427,11 +430,17 @@ describe DirectLink do
427
430
  end
428
431
  it "Reddit correctly parses out id when no token provided" do
429
432
  t = ENV.delete "REDDIT_SECRETS"
430
- begin
431
- assert_equal "https://i.redditmedia.com/-WnE-3o4RhKx6ImGD69vJYAo7UjMn5b4ClHHISJ0_Kk.png?s=fc3e2f2f9973c45daa759a45a75557bf",
432
- DirectLink("https://www.reddit.com/r/gifs/comments/9ftc8f/low_pass_wake_vortices/?st=JM2JIKII&sh=c00fea4f").url
433
- ensure
434
- ENV["REDDIT_SECRETS"] = t
433
+ FastImage.stub :new, lambda{ |link, *|
434
+ assert_equal "https://v.redd.it/2tyovczka8m11/DASH_4_8_M", link
435
+ throw :_
436
+ } do
437
+ begin
438
+ catch :_ do
439
+ DirectLink "https://www.reddit.com/r/gifs/comments/9ftc8f/low_pass_wake_vortices/?st=JM2JIKII&sh=c00fea4f"
440
+ end
441
+ ensure
442
+ ENV["REDDIT_SECRETS"] = t
443
+ end
435
444
  end
436
445
  end
437
446
  it "it is really impossible to get dimensions from the shitty Reddit media hosting" do
@@ -519,10 +528,15 @@ describe DirectLink do
519
528
  end
520
529
 
521
530
  describe "does not shadow the internal exception" do
522
- it "raises SocketError from the redirect resolving stage" do
523
- assert_raises SocketError do
524
- NetHTTPUtils.stub :get_response, ->*{ raise SocketError.new } do
525
- DirectLink "http://example.com/404"
531
+ [
532
+ SocketError,
533
+ Errno::ECONNRESET,
534
+ ].each do |exception|
535
+ it "raises #{exception} from the redirect resolving stage" do
536
+ assert_raises exception do
537
+ NetHTTPUtils.stub :get_response, ->*{ raise exception.new } do
538
+ DirectLink "http://example.com/404"
539
+ end
526
540
  end
527
541
  end
528
542
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: directlink
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4.4
4
+ version: 0.0.4.5
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-09-15 00:00:00.000000000 Z
11
+ date: 2018-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fastimage
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.6.8
47
+ version: 1.6.9
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.6.8
54
+ version: 1.6.9
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: kramdown
57
57
  requirement: !ruby/object:Gem::Requirement