about summary refs log tree commit homepage
path: root/lib/mogilefs/admin.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mogilefs/admin.rb')
-rw-r--r--lib/mogilefs/admin.rb16
1 files changed, 11 insertions, 5 deletions
diff --git a/lib/mogilefs/admin.rb b/lib/mogilefs/admin.rb
index 6b63a6b..eeb58ba 100644
--- a/lib/mogilefs/admin.rb
+++ b/lib/mogilefs/admin.rb
@@ -84,8 +84,9 @@ class MogileFS::Admin < MogileFS::Client
   #     "key"=>"new_new_key"}]
 
   def list_fids(from_fid, to_fid)
+    to_i = { "fid" => true, "devcount" => true, "length" => true }
     clean('fid_count', 'fid_',
-          @backend.list_fids(:from => from_fid, :to => to_fid))
+          @backend.list_fids(:from => from_fid, :to => to_fid), true, to_i)
   end
 
   ##
@@ -327,13 +328,18 @@ class MogileFS::Admin < MogileFS::Client
   #     "altip"=>"",
   #     "altmask"=>""}]
 
-  def clean(count, prefix, res, underscore = true)
+  def clean(count, prefix, res, underscore = true, to_i = [])
     underscore = underscore ? '_' : ''
+    keys = res.keys
     (1..res[count].to_i).map do |i|
-      dev = res.select { |k,_| k =~ /^#{prefix}#{i}#{underscore}/ }.map do |k,v|
-        [k.sub(/^#{prefix}#{i}#{underscore}/, ''), v]
+      re = /^#{prefix}#{i}#{underscore}/
+      row = {}
+      keys.grep(re).each do |k|
+        v = res[k]
+        k = k.sub(re, "").freeze
+        row[k] = to_i.include?(k) ? v.to_i : v
       end
-      Hash[*dev.flatten]
+      row
     end
   end