]> git.openstreetmap.org Git - rails.git/blob - db/migrate/20120208122334_merge_acl_address_and_mask.rb
Merge pull request #5932 from tomhughes/frozen-strings
[rails.git] / db / migrate / 20120208122334_merge_acl_address_and_mask.rb
1 # frozen_string_literal: true
2
3 require "ipaddr"
4
5 class IPAddr
6   def address
7     _to_string(@addr)
8   end
9
10   def netmask
11     _to_string(@mask_addr)
12   end
13 end
14
15 class MergeAclAddressAndMask < ActiveRecord::Migration[4.2]
16   class Acl < ApplicationRecord
17   end
18
19   def up
20     Acl.find_each do |acl|
21       address = IPAddr.new(acl.address)
22       netmask = IPAddr.new(acl.netmask)
23       prefix = 0
24
25       while netmask != "0.0.0.0"
26         netmask <<= 1
27         prefix += 1
28       end
29
30       acl.address = "#{address.mask(prefix)}/#{prefix}"
31       acl.save!
32     end
33
34     remove_column :acls, :netmask
35   end
36
37   def down
38     add_column :acls, :netmask, :inet
39
40     Acl.find_each do |acl|
41       address = IPAddr.new(acl.address)
42
43       acl.address = address.address
44       acl.netmask = address.netmask
45       acl.save!
46     end
47
48     change_column :acls, :netmask, :inet, :null => false
49   end
50 end