class PG::TextEncoder::Inet

This is a encoder class for conversion of Ruby IPAddr values to PostgreSQL inet type.

As soon as this class is used, it requires the ruby standard library 'ipaddr'.

Public Instance Methods

encode(value) click to toggle source
# File lib/pg/text_encoder/inet.rb, line 11
def encode(value)
        case value
        when IPAddr
                default_prefix = (value.family == Socket::AF_INET ? 32 : 128)
                s = value.to_s
                if value.respond_to?(:prefix)
                        prefix = value.prefix
                else
                        range = value.to_range
                        prefix  = default_prefix - Math.log(((range.end.to_i - range.begin.to_i) + 1), 2).to_i
                end
                s << "/" << prefix.to_s if prefix != default_prefix
                s
        else
                value
        end
end