Method: Websitary::Configuration#rewrite_href

Defined in:
lib/websitary/configuration.rb

#rewrite_href(href, url, uri = nil, urd = nil, local = false) ⇒ Object

Try to make href an absolute url.



941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
# File 'lib/websitary/configuration.rb', line 941

def rewrite_href(href, url, uri=nil, urd=nil, local=false)
    begin
        return nil if !href or is_excluded?(href)
        uri ||= URI.parse(url)
        if href =~ /^\s*\//
            return uri.merge(href).to_s
        end
        urh   = URI.parse(href)
        urd ||= guess_dir(uri.path)
        rv    = nil

        # $logger.debug "DBG", uri, urh, #DBG#
        if href =~ /\w+:/
            # $logger.debug "DBG href=#$0" #DBG#
            rv = href
        elsif urh.relative?
            # $logger.debug "DBG urh relative" #DBG#
            if uri.relative?
                # $logger.debug "DBG both relative" #DBG#
                if uri.instance_of?(URI::Generic)
                    rv = File.join(urd, href)
                    # $logger.debug "DBG rv=#{rv}" #DBG#
                end
            else
                rv = uri.merge(href).to_s
                # $logger.debug "DBG relativ rv=#{rv}" #DBG#
                if local
                    hf = latestname(rv)
                    if @todo.include?(rv) or @done.include?(rv) or File.exist?(hf)
                        rv = hf
                        # $logger.debug "DBG relativ, local rv=#{rv}" #DBG#
                    end
                end
            end
        elsif href[0..0] == '#'
            # $logger.debug "DBG anchor" #DBG#
            rv = url + href
        elsif uri.host == urh.host
            # $logger.debug "DBG merge" #DBG#
            rv = uri.merge(href).to_s
        else
            # $logger.debug "as is" #DBG#
            rv = href
        end

        case rv
        when String
            return rv
        when nil
        else
            $logger.error "Internal error: href=#{href}"
            $logger.debug caller.join("\n")
        end
        return
    rescue Exception => e
        # $logger.error e  #DBG#
        $logger.error e.message
        $logger.debug e.backtrace
    end
    return nil
end