Class: VagrantPlugins::Skytap::Util::IpAddress
- Defined in:
- lib/vagrant-skytap/util/ip_address.rb
Defined Under Namespace
Classes: InvalidIp
Constant Summary collapse
- IP_REGEX =
/^(0[0-7]*|0[x][0-9a-f]+|[1-9][0-9]*)\.(0[0-7]*|0[x][0-9a-f]+|[1-9][0-9]*)\.(0[0-7]*|0[x][0-9a-f]+|[1-9][0-9]*)\.(0[0-7]*|0[x][0-9a-f]+|[1-9][0-9]*)$/i
- MAX_IP4_INT =
2**32 - 1
- MAX_IP4 =
self.new(MAX_IP4_INT)
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(str_or_int) ⇒ IpAddress
constructor
A new instance of IpAddress.
- #inverse ⇒ Object (also: #~)
- #succ ⇒ Object
- #to_i ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(str_or_int) ⇒ IpAddress
Returns a new instance of IpAddress.
22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/vagrant-skytap/util/ip_address.rb', line 22 def initialize(str_or_int) if str_or_int.is_a?(String) @i = self.class.str_to_int(str_or_int) elsif str_or_int.is_a?(Integer) raise InvalidIp.new("IP #{str_or_int} is greater than the maximum IPv4 value") if str_or_int > MAX_IP4_INT raise InvalidIp.new("IP value must be non-negative") if str_or_int < 0 @i = str_or_int else raise InvalidIp.new("Don't know how to make an IP out of #{str_or_int}") end end |
Class Method Details
.int_to_str(i) ⇒ Object
16 17 18 19 |
# File 'lib/vagrant-skytap/util/ip_address.rb', line 16 def int_to_str(i) raise InvalidIp.new("#{i} exceeds maximum IPv4 address") if i > MAX_IP4_INT [24, 16, 8, 0].collect{|shift| (i & (255 << shift)) >> shift}.join('.') end |
.str_to_int(str) ⇒ Object
10 11 12 13 14 15 |
# File 'lib/vagrant-skytap/util/ip_address.rb', line 10 def str_to_int(str) raise InvalidIp.new("'#{str}' does not look like an IP") unless str =~ IP_REGEX bytes = [Integer($1), Integer($2), Integer($3), Integer($4)] raise InvalidIp.new("'#{str}' octet exceeds 255") if bytes.any?{|b| b > 255} bytes.zip([24, 16, 8, 0]).collect{|n,shift| n << shift}.inject(&:+) end |
Instance Method Details
#inverse ⇒ Object Also known as: ~
58 59 60 |
# File 'lib/vagrant-skytap/util/ip_address.rb', line 58 def inverse MAX_IP4 - self end |
#succ ⇒ Object
63 64 65 |
# File 'lib/vagrant-skytap/util/ip_address.rb', line 63 def succ self + 1 end |
#to_i ⇒ Object
34 35 36 |
# File 'lib/vagrant-skytap/util/ip_address.rb', line 34 def to_i @i end |
#to_s ⇒ Object
38 39 40 |
# File 'lib/vagrant-skytap/util/ip_address.rb', line 38 def to_s self.class.int_to_str(@i) end |