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