From 1563ba37904f3da9b786592dd266b7c86cd3ff48 Mon Sep 17 00:00:00 2001 From: lyk0rian Date: Mon, 20 Apr 2015 17:03:34 +0300 Subject: [PATCH 1/2] add ipv6 support --- lib/moped/address.rb | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) 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 From f07af855273cd20c692acc37d91cfff9527a74e1 Mon Sep 17 00:00:00 2001 From: Andrew Beyond Date: Mon, 20 Apr 2015 22:06:01 +0300 Subject: [PATCH 2/2] use ::1 as one of localhost addresses in address spec --- spec/moped/address_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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