From e87d69883d050dfb24525a89bcd340250dad6991 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 8 Dec 2011 20:49:57 +0000 Subject: backend: auto-generate error constants on const_missing This way, folks can rescue for exceptions we haven't defined, yet. --- lib/mogilefs/backend.rb | 8 ++++++++ test/test_backend.rb | 8 ++++++++ 2 files changed, 16 insertions(+) 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 -- cgit v1.2.3-24-ge0c7