Fix default output for postgres network address types

This commit is contained in:
Erik Peterson 2012-10-22 13:48:57 -04:00
parent 5112a6ccdf
commit 72a4670af1
3 changed files with 20 additions and 9 deletions

@ -1,3 +1,5 @@
require 'ipaddr'
module ActiveRecord
module ConnectionAdapters # :nodoc:
# The goal of this module is to move Adapter specific column
@ -50,6 +52,15 @@ def default_string(value)
when Range
# infinity dumps as Infinity, which causes uninitialized constant error
value.inspect.gsub('Infinity', '::Float::INFINITY')
when IPAddr
subnet_mask = value.instance_variable_get(:@mask_addr)
# If the subnet mask is equal to /32, don't output it
if subnet_mask == (2**32 - 1)
"\"#{value.to_s}\""
else
"\"#{value.to_s}/#{subnet_mask.to_s(2).count('1')}\""
end
else
value.inspect
end

@ -261,22 +261,22 @@ def test_schema_dump_includes_json_shorthand_definition
def test_schema_dump_includes_inet_shorthand_definition
output = standard_dump
if %r{create_table "postgresql_network_address"} =~ output
assert_match %r{t.inet "inet_address"}, output
if %r{create_table "postgresql_network_addresses"} =~ output
assert_match %r{t.inet\s+"inet_address",\s+default: "192.168.1.1"}, output
end
end
def test_schema_dump_includes_cidr_shorthand_definition
output = standard_dump
if %r{create_table "postgresql_network_address"} =~ output
assert_match %r{t.cidr "cidr_address"}, output
if %r{create_table "postgresql_network_addresses"} =~ output
assert_match %r{t.cidr\s+"cidr_address",\s+default: "192.168.1.0/24"}, output
end
end
def test_schema_dump_includes_macaddr_shorthand_definition
output = standard_dump
if %r{create_table "postgresql_network_address"} =~ output
assert_match %r{t.macaddr "macaddr_address"}, output
if %r{create_table "postgresql_network_addresses"} =~ output
assert_match %r{t.macaddr\s+"mac_address",\s+default: "ff:ff:ff:ff:ff:ff"}, output
end
end

@ -145,9 +145,9 @@
execute <<_SQL
CREATE TABLE postgresql_network_addresses (
id SERIAL PRIMARY KEY,
cidr_address CIDR,
inet_address INET,
mac_address MACADDR
cidr_address CIDR default '192.168.1.0/24',
inet_address INET default '192.168.1.1',
mac_address MACADDR default 'ff:ff:ff:ff:ff:ff'
);
_SQL