Class: Mechanize::Page::Link

Inherits:
Object
  • Object
show all
Defined in:
lib/mechanize/page/link.rb

Overview

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>

Direct Known Subclasses

Base, Frame, MetaRefresh

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(node, mech, page) ⇒ Link

Returns a new instance of Link.


18
19
20
21
22
23
24
25
26
# File 'lib/mechanize/page/link.rb', line 18

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

Instance Attribute Details

#attributesObject (readonly)

Returns the value of attribute attributes


14
15
16
# File 'lib/mechanize/page/link.rb', line 14

def attributes
  @attributes
end

#hrefObject (readonly)

Returns the value of attribute href


13
14
15
# File 'lib/mechanize/page/link.rb', line 13

def href
  @href
end

#nodeObject (readonly)

Returns the value of attribute node


12
13
14
# File 'lib/mechanize/page/link.rb', line 12

def node
  @node
end

#pageObject (readonly) Also known as: referer

Returns the value of attribute page


15
16
17
# File 'lib/mechanize/page/link.rb', line 15

def page
  @page
end

Instance Method Details

#clickObject

Click on this link


29
30
31
# File 'lib/mechanize/page/link.rb', line 29

def click
  @mech.click self
end

#dom_classObject

This method is a shorthand to get a link's DOM class Common usage:

page.link_with(:dom_class => "links_exact_class")

43
44
45
# File 'lib/mechanize/page/link.rb', line 43

def dom_class
  node['class']
end

#dom_idObject

This method is a shorthand to get link's DOM id. Common usage:

page.link_with(:dom_id => "links_exact_id")

36
37
38
# File 'lib/mechanize/page/link.rb', line 36

def dom_id
  node['id']
end

#noreferrer?Boolean

Test if this link should not be traced.

Returns:

  • (Boolean)

67
68
69
# File 'lib/mechanize/page/link.rb', line 67

def noreferrer?
  rel?('noreferrer')
end

#pretty_print(q) ⇒ Object

:nodoc:


47
48
49
50
51
52
# File 'lib/mechanize/page/link.rb', line 47

def pretty_print(q) # :nodoc:
  q.object_group(self) {
    q.breakable; q.pp text
    q.breakable; q.pp href
  }
end

#relObject

A list of words in the rel attribute, all lower-cased.


57
58
59
# File 'lib/mechanize/page/link.rb', line 57

def rel
  @rel ||= (val = attributes['rel']) ? val.downcase.split(' ') : []
end

#rel?(kind) ⇒ Boolean

Test if the rel attribute includes kind.

Returns:

  • (Boolean)

62
63
64
# File 'lib/mechanize/page/link.rb', line 62

def rel? kind
  rel.include? kind
end

#resolved_uriObject

A fully resolved URI for the #href for this link.


103
104
105
# File 'lib/mechanize/page/link.rb', line 103

def resolved_uri
  @mech.resolve uri
end

#textObject Also known as: to_s

The text content of this link


72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/mechanize/page/link.rb', line 72

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

#uriObject

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.


92
93
94
95
96
97
98
99
100
# File 'lib/mechanize/page/link.rb', line 92

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