1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
require 'uri'
require 'spreadsheet/encodings'
module Spreadsheet
##
# The Link class. Is a Subclass of String, which lets you treat a Cell that
# contains a Link just as if it was a String (containing the link's description
# if there is one or the url with fragment otherwise), but gives you access
# to the url, fragment and target_frame if you need it.
#
#
# Interesting Attributes
# #url :: The Uniform Resource Location this Link points to.
# #fragment :: Also called text mark: http://example.com/page.html#fragment
# #target_frame :: Which frame a Link should be opened in, should also support
# the special frames _blank, _parent, _self and _top.
# #dos :: Excel may store a DOS-Filename together with the long
# Filename introduced in VFAT. You probably will not need this,
# but if you do, here is where you can find it.
class Link < String
include Encodings
attr_accessor :target_frame, :url, :dos, :fragment
def initialize url='', description=url, fragment=nil
super description
@url = url
@fragment = fragment
end
##
# The Url with the fragment appended if present.
def href
href = (@url || @dos).to_s.dup
if @fragment
href << client('#', 'UTF-8') << @fragment
end
href
end
##
# Attempts to parse the output of href. May raise a URI::InvalidURIError
def to_uri
URI.parse href
end
end
end
|