X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/beb0ef6357e426ab08349109d47c3726ed50042e..9c0d5277adfde9f7daee0b0c83d4e68dd331e905:/db/migrate/20120208122334_merge_acl_address_and_mask.rb diff --git a/db/migrate/20120208122334_merge_acl_address_and_mask.rb b/db/migrate/20120208122334_merge_acl_address_and_mask.rb new file mode 100644 index 000000000..791bf659a --- /dev/null +++ b/db/migrate/20120208122334_merge_acl_address_and_mask.rb @@ -0,0 +1,45 @@ +require "ipaddr" + +class IPAddr + def address + _to_string(@addr) + end + + def netmask + _to_string(@mask_addr) + end +end + +class MergeAclAddressAndMask < ActiveRecord::Migration + def up + Acl.find_each do |acl| + address = IPAddr.new(acl.address) + netmask = IPAddr.new(acl.netmask) + prefix = 0 + + while netmask != "0.0.0.0" + netmask = netmask << 1 + prefix = prefix + 1 + end + + acl.address = "#{address.mask(prefix)}/#{prefix}" + acl.save! + end + + remove_column :acls, :netmask + end + + def down + add_column :acls, :netmask, :inet + + Acl.find_each do |acl| + address = IPAddr.new(acl.address) + + acl.address = address.address + acl.netmask = address.netmask + acl.save! + end + + change_column :acls, :netmask, :inet, :null => false + end +end