Sha256: 31d70290b29a4fc76507ed341d04c1af2f4d045f791b75a2ec5275aa0e7bdd45

Contents?: true

Size: 1.88 KB

Versions: 4

Compression:

Stored size: 1.88 KB

Contents

##
# This class encapsulates links.  It contains the text and the URI for
# 'a' tags parsed out of an HTML page.  If the link contains an image,
# the alt text will be used for that image.
#
# For example, the text for the following links with both be 'Hello World':
#
#   <a href="http://example">Hello World</a>
#   <a href="http://example"><img src="test.jpg" alt="Hello World"></a>

class Mechanize::Page::Link
  attr_reader :node
  attr_reader :href
  attr_reader :attributes
  attr_reader :page
  alias :referer :page

  def initialize(node, mech, page)
    @node       = node
    @attributes = node
    @href       = node['href']
    @mech       = mech
    @page       = page
    @text       = nil
    @uri        = nil
  end

  # Click on this link
  def click
    @mech.click self
  end

  # This method is a shorthand to get link's DOM id.
  # Common usage:
  #   page.link_with(:dom_id => "links_exact_id")
  def dom_id
    node['id']
  end

  # A list of words in the rel attribute, all lower-cased.
  def rel
    @rel ||= (val = attributes['rel']) ? val.downcase.split(' ') : []
  end

  # Test if the rel attribute includes +kind+.
  def rel? kind
    rel.include? kind
  end

  # The text content of this link
  def text
    return @text if @text

    @text = @node.inner_text

    # If there is no text, try to find an image and use it's alt text
    if (@text.nil? or @text.empty?) and imgs = @node.search('img') then
      @text = imgs.map do |e|
        e['alt']
      end.join
    end

    @text
  end

  alias :to_s :text

  # A URI for the #href for this link.  The link is first parsed as a raw
  # link.  If that fails parsing an escaped link is attepmted.

  def uri
    @uri ||= if @href then
               begin
                 URI.parse @href
               rescue URI::InvalidURIError
                 URI.parse WEBrick::HTTPUtils.escape @href
               end
             end
  end

end

Version data entries

4 entries across 4 versions & 3 rubygems

Version Path
aai10-mechanize-2.0.1.0 lib/mechanize/page/link.rb
neocoin-mechanize-2.0.2 lib/mechanize/page/link.rb
mechanize-2.0.1 lib/mechanize/page/link.rb
mechanize-2.0 lib/mechanize/page/link.rb