Sha256: ee1f69f0eb0926b6ea9c6fc683e770ba02d422498b34413b008f8efe03e5fcfd
Contents?: true
Size: 1.93 KB
Versions: 3
Compression:
Stored size: 1.93 KB
Contents
# frozen_string_literal: true require "oga" module Miteru class Website < Service # @return [String] attr_reader :url # @return [String] attr_reader :source # # @param [String] url # @param [String] source # def initialize(url, source:) super() @url = url @source = source end def title doc&.at_css("title")&.text end def kits @kits ||= links.map { |link| Kit.new(link, source:) }.select(&:valid?) end def index? title.to_s.start_with? "Index of" end def kits? kits.any? end def links (href_links + possible_file_links).compact.uniq end # # @return [String] # def truncated_url url.truncate(64) end private def timeout Miteru.config.http_timeout end def http @http ||= HTTP::Factory.build(timeout:) end def get http.get url end def response @response ||= get end def doc Oga.parse_html response.body.to_s end def href_links Try[Addressable::URI::InvalidURIError, Encoding::CompatibilityError, ::HTTP::Error, LL::ParserError, OpenSSL::SSL::SSLError, StatusError, ArgumentError] do doc.css("a").filter_map { |a| a.get("href") }.map do |href| normalized_href = href.start_with?("/") ? href : "/#{href}" normalized_url = url.end_with?("/") ? url.delete_suffix("/") : url normalized_url + normalized_href end end.recover { [] }.value! end def file_extensions Miteru.config.file_extensions end def possible_file_links parsed = URI.parse(url) segments = parsed.path.split("/") return [] if segments.empty? last = segments.last file_extensions.map do |ext| new_segments = segments[0..-2] + ["#{last}#{ext}"] parsed.path = new_segments.join("/") parsed.to_s end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
miteru-2.1.0 | lib/miteru/website.rb |
miteru-2.0.3 | lib/miteru/website.rb |
miteru-2.0.2 | lib/miteru/website.rb |