class IpAddress < ActiveRecord::Base belongs_to :subnet belongs_to :interface def address_string IpAddress.long2ip(address) end def address_string= (ip) print "received ip: " << (ip==nil ? "nil" : ip) << "\n" address= IpAddress.ip2long(ip) print "address now equals: " << address.to_s << "\n" end def IpAddress.ip2long (ip) long = 0 ip.split(/\./).each_with_index do |b, i| if(b.to_i>255) #invalid octet. return end if(b.to_i<0) #invalid octet. return end long += b.to_i << (8*i) end long end def IpAddress.long2ip (long) if long == -1 return end ip = [] 4.times do |i| ip.push(long.to_i & 255) long = long.to_i >> 8 end ip.join(".") end end --- script/console output: ksmith@ksmith-desktop:~/secnetdb_root$ script/console Loading development environment (Rails 2.0.2) >> x= IpAddress.new => # >> x.address => nil >> x.address = 1 => 1 >> x.address => 1 >> x.address_string = "10.17.184.1" received ip: 10.17.184.1 address now equals: 28840202 => "10.17.184.1" >> x.address => 1 >> x.address_string => "1.0.0.0" >> x.address = 28840202 => 28840202 >> x.address_string => "10.17.184.1"