about summary refs log tree commit homepage
diff options
context:
space:
mode:
-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