Module: BetterIpaddr::InstanceMethods
- Includes:
- Constants
- Included in:
- IPAddr, IPAddr::Base
- Defined in:
- lib/better_ipaddr/methods.rb,
lib/better_ipaddr/kernel_method.rb
Overview
Methods included in IPAddr::Base and its descendants
Constant Summary
Constants included from Constants
Constants::FAMILY_TO_BIT_LENGTH, Constants::NETMASK_TO_PREFIX_LENGTH, Constants::PREFIX_LENGTH_TO_NETMASK, Constants::SYMBOL_TO_FAMILY
Instance Attribute Summary collapse
-
#family ⇒ Integer
readonly
Return the magic number representing the address family.
-
#mask_addr ⇒ Integer
readonly
Return the integer representation of the netmask.
Class Method Summary collapse
Instance Method Summary collapse
-
#+(offset) ⇒ IPAddr
Return the address greater than the original address by the given offset.
-
#-(offset) ⇒ IPAddr
Return the address less than the original address by the given offset.
-
#<=>(other) ⇒ Integer
Compare this address with the integer representation of another address of the same address family.
-
#==(other) ⇒ Boolean
Test the equality of two IP addresses, or an IP address an integer representing an address in the same address family.
-
#[](offset) ⇒ IPAddr
The address at the given offset relative to the network address of the network.
-
#address_family_bit_length ⇒ Integer
Returns the number of bits allowed by the address family.
-
#base(full: false) ⇒ String
Returns a string representation of the address without a prefix length.
- #better_to_s(cidr: false, full: false) ⇒ Object
-
#cidr(cidr: nil, full: false) ⇒ String
Return a string containing the CIDR representation of the address.
-
#cover?(other) ⇒ Boolean
Test whether or not this address completely encloses the other address.
-
#each ⇒ Enumerator
Return an enumerator with the behavior described above.
- #first ⇒ Object
-
#grow(shift) ⇒ IPAddr
Return a new address with the prefix length reduced by the given amount.
-
#hash ⇒ IPAddr
The first host address in the network.
-
#host? ⇒ Boolean
Return true if the address represents a host (i.e., only one address).
-
#inspect(cidr: true, full: false) ⇒ Object
Emits a snippet of ruby code that can be copied and pasted.
-
#last ⇒ IPAddr
(also: #broadcast)
Return the last address in the network, which by convention is the broadcast address in IP networks.
-
#netmask ⇒ String
Return the string representation of the netmask.
-
#overlap?(other) ⇒ Boolean
Test whether or not two networks have any addresses in common (i.e., if either entirely encloses the other).
-
#prefix_length ⇒ Integer
(also: #prefix, #prefixlen)
Return the prefix length.
-
#shrink(shift) ⇒ Boolean
Return a new address with the prefix length increased by the given amount.
-
#size ⇒ Integer
Return the number of host addresses representable by the network given its size.
-
#summarize_with(other) ⇒ IPAddr?
Returns a summary address if the two networks can be combined into a single network without covering any other networks.
-
#to_range ⇒ Range(IPAddr)
Return a range representing the network.
-
#wildcard ⇒ IPAddr
Return a wildcard mask representing the network.
Instance Attribute Details
#family ⇒ Integer (readonly)
Return the magic number representing the address family.
18 19 20 |
# File 'lib/better_ipaddr/methods.rb', line 18 def family @family end |
#mask_addr ⇒ Integer (readonly)
Return the integer representation of the netmask.
22 23 24 |
# File 'lib/better_ipaddr/methods.rb', line 22 def mask_addr @mask_addr end |
Class Method Details
Instance Method Details
#+(offset) ⇒ IPAddr
Return the address greater than the original address by the given offset. Note that the result will always be a host address.
37 38 39 |
# File 'lib/better_ipaddr/methods.rb', line 37 def +(offset) self.class.new(@addr + offset, family) end |
#-(offset) ⇒ IPAddr
Return the address less than the original address by the given offset. Note that the result will always be a host address.
48 49 50 |
# File 'lib/better_ipaddr/methods.rb', line 48 def -(offset) self + -offset end |
#<=>(other) ⇒ Integer
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/better_ipaddr/methods.rb', line 64 def <=>(other) if other.is_a?(IPAddr) family_difference = family <=> other.family return family_difference unless family_difference == 0 elsif !other.is_a?(Integer) return nil end address_difference = to_i <=> other.to_i if address_difference != 0 || !other.is_a?(IPAddr) return address_difference end other.instance_variable_get(:@mask_addr) <=> @mask_addr end |
#==(other) ⇒ Boolean
Test the equality of two IP addresses, or an IP address an integer representing an address in the same address family.
Returns false for any other type.
89 90 91 |
# File 'lib/better_ipaddr/methods.rb', line 89 def ==(other) (other.is_a?(IPAddr) || other.is_a?(Integer)) && (self <=> other) == 0 end |
#[](offset) ⇒ IPAddr
The address at the given offset relative to the network address of the network. A negative offset will be used to count backwards from the highest addresses within the network. desired address
100 101 102 103 104 |
# File 'lib/better_ipaddr/methods.rb', line 100 def [](offset) return self if offset == 0 && host? offset2 = offset >= 0 ? offset : size + offset self.class[to_i + offset2, family: family] end |
#address_family_bit_length ⇒ Integer
Returns the number of bits allowed by the address family. A more efficient form of this method is available to the specialized IPAddr child classes.
112 113 114 |
# File 'lib/better_ipaddr/methods.rb', line 112 def address_family_bit_length FAMILY_TO_BIT_LENGTH.fetch(family) end |
#base(full: false) ⇒ String
Returns a string representation of the address without a prefix length.
120 121 122 123 124 125 126 |
# File 'lib/better_ipaddr/methods.rb', line 120 def base(full: false) if full to_string else stdlib_to_s end end |
#better_to_s(cidr: false, full: false) ⇒ Object
128 129 130 131 132 133 134 |
# File 'lib/better_ipaddr/methods.rb', line 128 def better_to_s(cidr: false, full: false) if cidr "#{base(full: full)}/#{prefix_length}" else base(full: full) end end |
#cidr(cidr: nil, full: false) ⇒ String
Return a string containing the CIDR representation of the address.
140 141 142 |
# File 'lib/better_ipaddr/methods.rb', line 140 def cidr(cidr: nil, full: false) better_to_s(cidr: true, full: full) end |
#cover?(other) ⇒ Boolean
Test whether or not this address completely encloses the other address.
146 147 148 |
# File 'lib/better_ipaddr/methods.rb', line 146 def cover?(other) first <= other.first && other.last <= last end |
#each ⇒ Enumerator
161 162 163 164 165 166 167 168 169 170 |
# File 'lib/better_ipaddr/methods.rb', line 161 def each if block_given? (0...size).each do |offset| yield self[offset] end self else enum_for(:each) end end |
#first ⇒ Object
181 182 183 |
# File 'lib/better_ipaddr/methods.rb', line 181 def first self[0] end |
#grow(shift) ⇒ IPAddr
Return a new address with the prefix length reduced by the given amount. The new address will cover the original address.
190 191 192 |
# File 'lib/better_ipaddr/methods.rb', line 190 def grow(shift) mask(prefix_length - shift) end |
#hash ⇒ IPAddr
The first host address in the network.
175 176 177 178 179 |
# File 'lib/better_ipaddr/methods.rb', line 175 def hash # see https://github.com/jruby/jruby/issues/4460 # remove this override when specs still pass without it [self.class, @addr, @mask_addr, @family].hash end |
#host? ⇒ Boolean
Return true if the address represents a host (i.e., only one address).
196 197 198 |
# File 'lib/better_ipaddr/methods.rb', line 196 def host? prefix_length >= address_family_bit_length end |
#inspect(cidr: true, full: false) ⇒ Object
Emits a snippet of ruby code that can be copied and pasted. Uses the string representation of the address, by default in CIDR notation, instead of the harder-to-read mask notation.
24 25 26 |
# File 'lib/better_ipaddr/kernel_method.rb', line 24 def inspect(cidr: true, full: false) "#{self.class}['#{better_to_s(cidr: cidr, full: full)}']" end |
#last ⇒ IPAddr Also known as: broadcast
Return the last address in the network, which by convention is the broadcast address in IP networks.
204 205 206 |
# File 'lib/better_ipaddr/methods.rb', line 204 def last self[-1] end |
#netmask ⇒ String
Return the string representation of the netmask.
26 27 28 |
# File 'lib/better_ipaddr/methods.rb', line 26 def netmask self.class[mask_addr].to_s end |
#overlap?(other) ⇒ Boolean
Test whether or not two networks have any addresses in common (i.e., if either entirely encloses the other).
213 214 215 |
# File 'lib/better_ipaddr/methods.rb', line 213 def overlap?(other) cover?(other) || other.cover?(self) end |
#prefix_length ⇒ Integer Also known as: prefix, prefixlen
Return the prefix length. A more efficient form of this method is available to the specialized IPAddr
child classes.
222 223 224 |
# File 'lib/better_ipaddr/methods.rb', line 222 def prefix_length NETMASK_TO_PREFIX_LENGTH[family][mask_addr] end |
#shrink(shift) ⇒ Boolean
Return a new address with the prefix length increased by the given amount. The old address will cover the new address.
234 235 236 |
# File 'lib/better_ipaddr/methods.rb', line 234 def shrink(shift) mask(prefix_length + shift) end |
#size ⇒ Integer
Return the number of host addresses representable by the network given its size.
242 243 244 |
# File 'lib/better_ipaddr/methods.rb', line 242 def size 2**(address_family_bit_length - prefix_length) end |
#summarize_with(other) ⇒ IPAddr?
Returns a summary address if the two networks can be combined into a single network without covering any other networks. Returns nil
if the two networks can’t be combined this way.
251 252 253 254 255 256 257 258 259 260 261 |
# File 'lib/better_ipaddr/methods.rb', line 251 def summarize_with(other) if other.nil? nil elsif cover?(other) self elsif other.cover?(self) other elsif other.grow(1) == grow(1) grow(1) end end |
#to_range ⇒ Range(IPAddr)
Return a range representing the network. A block can be given to specify a conversion procedure, for example to convert the first and last addresses to integers before building the range.
268 269 270 271 272 273 274 |
# File 'lib/better_ipaddr/methods.rb', line 268 def to_range if block_given? (yield first)..(yield last) else first..last end end |
#wildcard ⇒ IPAddr
Return a wildcard mask representing the network.
279 280 281 |
# File 'lib/better_ipaddr/methods.rb', line 279 def wildcard _to_string(@mask_addr.to_i ^ (2**address_family_bit_length - 1)) end |