Class: Pio::IPv4Address

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/pio/ipv4_address.rb

Overview

IPv4 Address

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(addr) ⇒ IPv4Address

Creates a Pio::IPv4Address instance object as a proxy to IPAddr class.

Raises:

  • (TypeError)

    invalid address if supplied argument is invalid



23
24
25
26
27
28
29
30
31
32
# File 'lib/pio/ipv4_address.rb', line 23

def initialize(addr)
  case addr
  when Integer
    @value = IPAddr.new(addr, Socket::AF_INET)
  when String
    @value = IPAddr.new(addr)
  else
    @value = addr.value
  end
end

Instance Attribute Details

#valueRange (readonly)



10
11
12
# File 'lib/pio/ipv4_address.rb', line 10

def value
  @value
end

Instance Method Details

#class_a?bool



84
85
86
# File 'lib/pio/ipv4_address.rb', line 84

def class_a?
  mask(1).to_s == '0.0.0.0'
end

#class_b?bool



90
91
92
# File 'lib/pio/ipv4_address.rb', line 90

def class_b?
  mask(2).to_s == '128.0.0.0'
end

#class_c?bool



96
97
98
# File 'lib/pio/ipv4_address.rb', line 96

def class_c?
  mask(3).to_s == '192.0.0.0'
end

#class_d?bool Also known as: multicast?



102
103
104
# File 'lib/pio/ipv4_address.rb', line 102

def class_d?
  mask(4).to_s == '224.0.0.0'
end

#class_e?bool



109
110
111
# File 'lib/pio/ipv4_address.rb', line 109

def class_e?
  mask(4).to_s == '240.0.0.0'
end

#mask(masklen) ⇒ IPv4Address Also known as: prefix

Returns the IPv4 address masked with masklen.



77
78
79
# File 'lib/pio/ipv4_address.rb', line 77

def mask(masklen)
  clone.mask!(masklen)
end

#mask!(masklen) ⇒ IPv4Address Also known as: prefix!

Returns the IPv4 address masked with masklen.



69
70
71
72
# File 'lib/pio/ipv4_address.rb', line 69

def mask!(masklen)
  @value = @value.mask(masklen)
  self
end

#prefixlenNumber



46
47
48
49
50
51
52
53
# File 'lib/pio/ipv4_address.rb', line 46

def prefixlen
  netmask = to_range.first.to_i ^ to_range.last.to_i
  if netmask > 0
    32 - format('%b', netmask).length
  else
    32
  end
end

#to_aArray



57
58
59
# File 'lib/pio/ipv4_address.rb', line 57

def to_a
  to_s.split('.').map(&:to_i)
end

#to_aryArray



63
64
65
# File 'lib/pio/ipv4_address.rb', line 63

def to_ary
  to_a
end

#unicast?bool



115
116
117
# File 'lib/pio/ipv4_address.rb', line 115

def unicast?
  class_a? || class_b? || class_c?
end