client: each_key: accept optional :after and :limit args
authorEric Wong <normalperson@yhbt.net>
Tue, 9 Jul 2013 22:48:43 +0000 (9 22:48 +0000)
committerEric Wong <normalperson@yhbt.net>
Tue, 9 Jul 2013 22:49:05 +0000 (9 22:49 +0000)
This allows easy iteration while respecting :after and :limit.
This gives each_key an interface consistent with each_file_info.

lib/mogilefs/mogilefs.rb

index b0bdc0d..cd6f7c6 100644 (file)
@@ -84,11 +84,19 @@ class MogileFS::MogileFS < MogileFS::Client
   end
 
   # Enumerates keys, limited by optional +prefix+
-  def each_key(prefix = "", &block)
-    after = nil
+  # +args+ may also be specified for an optional +:limit+
+  # and +:after+ (default: nil)
+  def each_key(prefix = "", args = nil, &block)
+    after = limit = nil
+    if args
+      after = args[:after]
+      limit = args[:limit]
+    end
     begin
-      keys, after = list_keys(prefix, after, 1000, &block)
-    end while keys && keys[0]
+      keys, after = list_keys(prefix, after, limit || 1000, &block)
+      return unless keys && keys[0]
+      limit -= keys.size if limit
+    end while limit == nil || limit > 0
     nil
   end