about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2013-07-09 22:48:43 +0000
committerEric Wong <normalperson@yhbt.net>2013-07-09 22:49:05 +0000
commit118db9865545c6879128e58390d15c6ba80be405 (patch)
tree273849b278b7ddca3ba9a1e8390c4a689b573f5f
parent9d5770ea12d78c88e5accfbc12b81f8c3af4ed30 (diff)
downloadmogilefs-client-118db9865545c6879128e58390d15c6ba80be405.tar.gz
This allows easy iteration while respecting :after and :limit.
This gives each_key an interface consistent with each_file_info.
-rw-r--r--lib/mogilefs/mogilefs.rb16
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/mogilefs/mogilefs.rb b/lib/mogilefs/mogilefs.rb
index b0bdc0d..cd6f7c6 100644
--- a/lib/mogilefs/mogilefs.rb
+++ b/lib/mogilefs/mogilefs.rb
@@ -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