lib/ipaddress_2/mongoid.rb
module IPAddress
#
# Mongoid field serialization
#
# IPAddress objects are converted to String
#
# IPAddress.mongoize IPAddress.parse("172.16.10.1")
# #=> "172.16.10.1"
#
# Prefix will be removed from host adresses
#
# IPAddress.mongoize "172.16.10.1/32"
# #=> "172.16.10.1"
#
# Prefix will be kept for network addresses
#
# IPAddress.mongoize "172.16.10.1/24"
# #=> "172.16.10.1/24"
#
# IPv6 addresses will be stored uncompressed to ease DB search and sorting
#
# IPAddress.mongoize "2001:db8::8:800:200c:417a"
# #=> "2001:0db8:0000:0000:0008:0800:200c:417a"
# IPAddress.mongoize "2001:db8::8:800:200c:417a/64"
# #=> "2001:0db8:0000:0000:0008:0800:200c:417a/64"
#
# Invalid addresses will be serialized as nil
#
# IPAddress.mongoize "invalid"
# #=> nil
# IPAddress.mongoize ""
# #=> nil
# IPAddress.mongoize 1
# #=> nil
# IPAddress.mongoize nil
# #=> nil
#
def self.mongoize(ipaddress)
ipaddress = self.parse(ipaddress) unless ipaddress.is_a?(IPAddress)
if ipaddress.bits.length == ipaddress.prefix
ipaddress.address
elsif ipaddress.is_a?(IPAddress::IPv6)
ipaddress.to_string_uncompressed
else
ipaddress.to_string
end
rescue ArgumentError
nil
end
#
# Mongoid field deserialization
#
def self.demongoize(string)
parse(string)
rescue ArgumentError
nil
end
#
# Delegates to IPAddress.mongoize
#
def self.evolve(ipaddress)
mongoize(ipaddress)
end
#
# Sends self object to IPAddress#mongoize
#
def mongoize
IPAddress.mongoize(self)
end
end