about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-12-08 20:49:57 +0000
committerEric Wong <normalperson@yhbt.net>2011-12-08 20:49:57 +0000
commite87d69883d050dfb24525a89bcd340250dad6991 (patch)
tree3a7d18494f34f6fa602722b62004a5543755f874
parent5c824e04d5de04b4d6c8fb58dfc60e4d3f6cd7c7 (diff)
downloadmogilefs-client-e87d69883d050dfb24525a89bcd340250dad6991.tar.gz
This way, folks can rescue for exceptions we haven't defined,
yet.
-rw-r--r--lib/mogilefs/backend.rb8
-rw-r--r--test/test_backend.rb8
2 files changed, 16 insertions, 0 deletions
diff --git a/lib/mogilefs/backend.rb b/lib/mogilefs/backend.rb
index 0319525..b48764c 100644
--- a/lib/mogilefs/backend.rb
+++ b/lib/mogilefs/backend.rb
@@ -42,6 +42,14 @@ class MogileFS::Backend
     BACKEND_ERRORS[err_snake] = const_get(err_camel)
   end
 
+  def self.const_missing(name)
+    if /Error\z/ =~ name.to_s
+      const_set(name, Class.new(MogileFS::Error))
+    else
+      super name
+    end
+  end
+
   ##
   # The last error
 
diff --git a/test/test_backend.rb b/test/test_backend.rb
index 707c312..cc8d3a7 100644
--- a/test/test_backend.rb
+++ b/test/test_backend.rb
@@ -58,6 +58,14 @@ class TestBackend < Test::Unit::TestCase
     assert @backend.error('peb_kac')
     assert_equal MogileFS::Error, @backend.error('PebKacError').superclass
     assert MogileFS::Backend.const_defined?('PebKacError')
+
+    assert_nothing_raised do
+      MogileFS::Backend::OMFGWTFBBQError
+    end
+    assert_equal MogileFS::Error, MogileFS::Backend::OMFGWTFBBQError.superclass
+    assert_raises(NameError) do
+      MogileFS::Backend::FailFailFail
+    end
   end
 
   def test_size_verify_error_defined