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 +4 -4
- data/bin/directlink +1 -0
- data/directlink.gemspec +2 -2
- data/lib/directlink.rb +18 -16
- data/test.rb +23 -9
- metadata +4 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 812459ea321dc15a16ea19cea2176c5b37fa868b
         | 
| 4 | 
            +
              data.tar.gz: b1328fb09fb38b8471eaaee2eb951ba77f87f026
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 4e82be782453a80cf10d38334e532edde1feb72c9b24fb9ff24c3c7baa7d12a3b30de655af9be7f1527b63d5fea9aae2fbc2e08ec80c28f0e846d6a40454e019
         | 
| 7 | 
            +
              data.tar.gz: fa87ea7807b41ca3689455afb2dac674ee659352adf5a5fa57c519eb47d46d7d4f388ba8d9478d69bfee3d3998c3c762e3159ad1105656b7a2e27734f7f86924
         | 
    
        data/bin/directlink
    CHANGED
    
    
    
        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. | 
| 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. | 
| 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:: | 
| 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 | 
            -
                   | 
| 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: { | 
| 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 | 
| 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 | 
            -
                     | 
| 350 | 
            -
             | 
| 351 | 
            -
             | 
| 352 | 
            -
             | 
| 353 | 
            -
             | 
| 354 | 
            -
                       | 
| 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 | 
            -
                   | 
| 431 | 
            -
                    assert_equal "https:// | 
| 432 | 
            -
             | 
| 433 | 
            -
                   | 
| 434 | 
            -
                     | 
| 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 | 
            -
                   | 
| 523 | 
            -
                     | 
| 524 | 
            -
             | 
| 525 | 
            -
             | 
| 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 | 
            +
              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- | 
| 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. | 
| 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. | 
| 54 | 
            +
                    version: 1.6.9
         | 
| 55 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 56 56 | 
             
              name: kramdown
         | 
| 57 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         |