Class: HideMyAss::IP

Inherits:
Object
  • Object
show all
Defined in:
lib/hidemyass/ip.rb

Constant Summary collapse

TAGS =
%w(span div text).freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(encoded_address) ⇒ IP

Returns a new instance of IP.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/hidemyass/ip.rb', line 11

def initialize(encoded_address)
  # Select decoy CSS classes: those which result in a hidden element
  @decoys = encoded_address.css("style").text.split("\n").
    select {|style| style =~ /none/}

  # Find enclosing IP elements
  elements = encoded_address.children

  # Process elements and get rid of those with decoy classes
  elements = decode(elements)

  # Finally grab enclosing elements content, which is the real IP
  @address = elements.map(&:content).join
  self
end

Instance Attribute Details

#addressObject

Returns the value of attribute address.



8
9
10
# File 'lib/hidemyass/ip.rb', line 8

def address
  @address
end

#decoysObject

Returns the value of attribute decoys.



8
9
10
# File 'lib/hidemyass/ip.rb', line 8

def decoys
  @decoys
end

Instance Method Details

#decode(elements) ⇒ Object

Receives an array of elements and returns another without invisibles.



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/hidemyass/ip.rb', line 29

def decode(elements)
  elements.each do |element|

    # Remove elements with CSS style "none"
    if !TAGS.include?(element.name) || (element["style"] && element["style"] =~ /none/)
      element.children.remove

    # Get rid of decoy children
    elsif element["class"]
      decoys.each do |decoy|
        element.children.remove if decoy.include?(element["class"])
      end
    end
  end

  elements
end

#inspectObject



52
53
54
# File 'lib/hidemyass/ip.rb', line 52

def inspect
  "#<#{self.class}> @address=#{address}>"
end

#valid?Boolean

Make sure the IP has a valid format.

Returns:

  • (Boolean)


48
49
50
# File 'lib/hidemyass/ip.rb', line 48

def valid?
  address.split(".").reject(&:empty?).size == 4
end