Calling #to_s on an Array such as ["foo"] in Ruby 1.9 will result in
the string '["foo"]', instead of stringifying the element in the array
which would have given the expected result of "foo".  Since the
element of the array we're dealing with is already a string, we can
just grab it out of the array by using #first.

Paired-with: Josh Cooper <[email protected]>
Signed-off-by: Jacob Helwig <[email protected]>
---

Local-branch: tickets/next/6614-ipaddress6-ruby-19-compat

 lib/facter/ipaddress6.rb |   48 ++++++++++++++++-----------------------------
 1 files changed, 17 insertions(+), 31 deletions(-)

diff --git a/lib/facter/ipaddress6.rb b/lib/facter/ipaddress6.rb
index b494b9d..db3805b 100644
--- a/lib/facter/ipaddress6.rb
+++ b/lib/facter/ipaddress6.rb
@@ -21,21 +21,26 @@
 # Used the ipaddress fact that is already part of
 # Facter as a template.
 
+def get_address_after_token(output, token, return_first=false)
+  ip = nil
+
+  output.scan(/#{token} ((?>[0-9,a-f,A-F]*\:{1,2})+[0-9,a-f,A-F]{0,4})/).each 
do |match|
+    match = match.first
+    unless match =~ /fe80.*/ or match == "::1"
+      ip = match
+      break if return_first
+    end
+  end
+
+  ip
+end
+
 Facter.add(:ipaddress6) do
   confine :kernel => :linux
   setcode do
-    ip = nil
     output = Facter::Util::Resolution.exec('/sbin/ifconfig')
 
-    output.scan(/inet6 addr: 
((?>[0-9,a-f,A-F]*\:{1,2})+[0-9,a-f,A-F]{0,4})/).each { |str|
-      str = str.to_s
-      unless str =~ /fe80.*/ or str == "::1"
-        ip = str
-      end
-    }
-
-    ip
-
+    get_address_after_token(output, 'inet6 addr:')
   end
 end
 
@@ -43,17 +48,8 @@ Facter.add(:ipaddress6) do
   confine :kernel => %w{SunOS}
   setcode do
     output = Facter::Util::Resolution.exec('/usr/sbin/ifconfig -a')
-    ip = nil
-
-    output.scan(/inet6 ((?>[0-9,a-f,A-F]*\:{0,2})+[0-9,a-f,A-F]{0,4})/).each { 
|str|
-      str = str.to_s
-      unless str =~ /fe80.*/ or str == "::1"
-        ip = str
-      end
-    }
-
-    ip
 
+    get_address_after_token(output, 'inet6')
   end
 end
 
@@ -61,17 +57,7 @@ Facter.add(:ipaddress6) do
   confine :kernel => %w{Darwin FreeBSD OpenBSD}
   setcode do
     output = Facter::Util::Resolution.exec('/sbin/ifconfig -a')
-    ip = nil
 
-    output.scan(/inet6 ((?>[0-9,a-f,A-F]*\:{1,2})+[0-9,a-f,A-F]{0,4})/).each 
do |str|
-      str = str.to_s
-      unless str =~ /fe80.*/ or str == "::1"
-        ip = str
-        break
-      end
-    end
-
-    ip
+    get_address_after_token(output, 'inet6', true)
   end
 end
-
-- 
1.7.4.5

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to