lib/macaddr.rb in macaddr-0.0.2 vs lib/macaddr.rb in macaddr-1.0.0
- old
+ new
@@ -1,8 +1,40 @@
+##
+# Cross platform MAC address determination. Works for:
+# * /sbin/ifconfig
+# * /bin/ifconfig
+# * ifconfig
+# * ipconfig /all
+#
+# To return the first MAC address on the system:
+#
+# Mac.address
+#
+# To return an array of all MAC addresses:
+#
+# Mac.address.list
+
module Mac
+ VERSION = '1.0.0'
+
+ def Mac.version() ::Mac::VERSION end
+
class << self
+
+ ##
+ # Accessor for the system's first MAC address, requires a call to #address
+ # first
+
attr_accessor "mac_address"
+
+ ##
+ # Discovers and returns the system's MAC addresses. Returns the first
+ # MAC address, and includes an accessor #list for the remaining addresses:
+ #
+ # Mac.addr # => first address
+ # Mac.addr.list # => all addresses
+
def address
return @mac_address if defined? @mac_address and @mac_address
re = %r/[^:\-](?:[0-9A-F][0-9A-F][:\-]){5}[0-9A-F][0-9A-F][^:\-]/io
cmds = '/sbin/ifconfig', '/bin/ifconfig', 'ifconfig', 'ipconfig /all'
@@ -12,22 +44,26 @@
cmds.each do |cmd|
stdout = IO.popen("#{ cmd } 2> #{ null }"){|fd| fd.readlines} rescue next
next unless stdout and stdout.size > 0
lines = stdout and break
end
- raise "all of #{ cmds.join ' ' } failed" unless lines
+ raise "all of #{ cmds.join ' ' } failed" unless lines
candidates = lines.select{|line| line =~ re}
raise 'no mac address candidates' unless candidates.first
candidates.map!{|c| c[re].strip}
maddr = candidates.first
- raise 'no mac address found' unless maddr
+ raise 'no mac address found' unless maddr
maddr.strip!
maddr.instance_eval{ @list = candidates; def list() @list end }
@mac_address = maddr
end
+
+ ##
+ # Shorter alias for #address
+
alias_method "addr", "address"
end
end