diff --git a/lib/moped/address.rb b/lib/moped/address.rb index 3197192..26b0459 100644 --- a/lib/moped/address.rb +++ b/lib/moped/address.rb @@ -28,8 +28,15 @@ class Address # @since 2.0.0 def initialize(address, timeout) @original = address - @host, port = address.split(":") - @port = (port || 27017).to_i + + if (parts = address.match(/\[(.+)\]:?(.+)?/)) + @host = parts[1] + @port = (parts[2] || 27017).to_i + else + @host, port = address.split(":") + @port = (port || 27017).to_i + end + @timeout = timeout end @@ -49,7 +56,7 @@ def resolve(node) return @resolved if @resolved Timeout::timeout(@timeout) do Resolv.each_address(host) do |ip| - if ip =~ Resolv::IPv4::Regex + if ip =~ Resolv::IPv4::Regex || ip =~ Resolv::IPv6::Regex @ip ||= ip break end diff --git a/spec/moped/address_spec.rb b/spec/moped/address_spec.rb index 2fb0a76..1a95811 100644 --- a/spec/moped/address_spec.rb +++ b/spec/moped/address_spec.rb @@ -83,11 +83,11 @@ end it "sets the resolved address" do - expect(address.resolved).to eq("127.0.0.1:27017") + expect(address.resolved).to satisfy { |a| a == "127.0.0.1:27017" || a == "::1:27017" } end it "sets the ip" do - expect(address.ip).to eq("127.0.0.1") + expect(address.ip).to satisfy { |a| a == "127.0.0.1" || a == "::1" } end end