Class: Mechanize::Page::Link

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

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.


21
22
23
24
25
26
27
28
29
# File 'lib/mechanize/page/link.rb', line 21

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


17
18
19
# File 'lib/mechanize/page/link.rb', line 17

def attributes
  @attributes
end

#hrefObject (readonly)

Returns the value of attribute href


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

def href
  @href
end

#nodeObject (readonly)

Returns the value of attribute node


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

def node
  @node
end

#pageObject (readonly) Also known as: referer

Returns the value of attribute page


18
19
20
# File 'lib/mechanize/page/link.rb', line 18

def page
  @page
end

Instance Method Details

#clickObject

Click on this link


32
33
34
# File 'lib/mechanize/page/link.rb', line 32

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")

46
47
48
# File 'lib/mechanize/page/link.rb', line 46

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")

39
40
41
# File 'lib/mechanize/page/link.rb', line 39

def dom_id
  node['id']
end

#noreferrer?Boolean

Test if this link should not be traced.

Returns:

  • (Boolean)

70
71
72
# File 'lib/mechanize/page/link.rb', line 70

def noreferrer?
  rel?('noreferrer')
end

#pretty_print(q) ⇒ Object

:nodoc:


50
51
52
53
54
55
# File 'lib/mechanize/page/link.rb', line 50

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.


60
61
62
# File 'lib/mechanize/page/link.rb', line 60

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

#rel?(kind) ⇒ Boolean

Test if the rel attribute includes kind.

Returns:

  • (Boolean)

65
66
67
# File 'lib/mechanize/page/link.rb', line 65

def rel? kind
  rel.include? kind
end

#resolved_uriObject

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


110
111
112
# File 'lib/mechanize/page/link.rb', line 110

def resolved_uri
  @mech.resolve uri
end

#textObject Also known as: to_s

The text content of this link


75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/mechanize/page/link.rb', line 75

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.


95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/mechanize/page/link.rb', line 95

def uri
  @uri ||= if @href then
             begin
               URI.parse @href
             rescue URI::InvalidURIError
               begin
                 URI.parse(Addressable::URI.escape(@href))
               rescue Addressable::URI::InvalidURIError
                 raise URI::InvalidURIError
               end
             end
           end
end