From e0438b1c071d8dc2c7fc87075485d4ac01f4eb07 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Piotr=20Nie=C5=82acny?= <piotr.nielacny@gmail.com>
Date: Thu, 16 May 2013 15:37:19 +0200
Subject: Show real LoadError on helpers require

When helper try to require missing file rails will throw exception about
missing helper.

  # app/helpers/my_helper.rb

  require 'missing'

  module MyHelper
  end

And when we try do load helper

  class ApplicationController
    helper :my
  end

Rails will throw exception. This is wrong because there is a helper
file.

  Missing helper file helpers/my_helper.rb

Now when helper try to require non-existed file rails will throw proper
exception.

  No such file to load -- missing
---
 actionpack/test/abstract/.helper_test.rb.swp        | Bin 0 -> 12288 bytes
 actionpack/test/abstract/helper_test.rb             |  20 ++++++++++++++++++++
 .../helpers_missing/invalid_require_helper.rb       |   5 +++++
 3 files changed, 25 insertions(+)
 create mode 100644 actionpack/test/abstract/.helper_test.rb.swp
 create mode 100644 actionpack/test/fixtures/helpers_missing/invalid_require_helper.rb

(limited to 'actionpack/test')

diff --git a/actionpack/test/abstract/.helper_test.rb.swp b/actionpack/test/abstract/.helper_test.rb.swp
new file mode 100644
index 0000000000..d029f89288
Binary files /dev/null and b/actionpack/test/abstract/.helper_test.rb.swp differ
diff --git a/actionpack/test/abstract/helper_test.rb b/actionpack/test/abstract/helper_test.rb
index 7960e5b55b..2cc27fbecd 100644
--- a/actionpack/test/abstract/helper_test.rb
+++ b/actionpack/test/abstract/helper_test.rb
@@ -48,6 +48,14 @@ module AbstractController
       end
     end
 
+    class AbstractInvalidHelpers < AbstractHelpers
+      include ActionController::Helpers
+
+      path = File.join(File.expand_path('../../fixtures', __FILE__), "helpers_missing")
+      $:.unshift(path)
+      self.helpers_path = path
+    end
+
     class TestHelpers < ActiveSupport::TestCase
       def setup
         @controller = AbstractHelpers.new
@@ -97,5 +105,17 @@ module AbstractController
         assert_equal "Hello Default", @controller.response_body
       end
     end
+
+    class InvalidHelpersTest < ActiveSupport::TestCase
+      def test_controller_raise_error_about_real_require_problem
+        e = assert_raise(LoadError) { AbstractInvalidHelpers.helper(:invalid_require) }
+        assert_equal "No such file to load -- very_invalid_file_name", e.message
+      end
+
+      def test_controller_raise_error_about_missing_helper
+        e = assert_raise(Helpers::ClassMethods::MissingHelperError) { AbstractInvalidHelpers.helper(:missing) }
+        assert_equal "Missing helper file helpers/missing_helper.rb", e.message
+      end
+    end
   end
 end
diff --git a/actionpack/test/fixtures/helpers_missing/invalid_require_helper.rb b/actionpack/test/fixtures/helpers_missing/invalid_require_helper.rb
new file mode 100644
index 0000000000..d8801e54d5
--- /dev/null
+++ b/actionpack/test/fixtures/helpers_missing/invalid_require_helper.rb
@@ -0,0 +1,5 @@
+require 'very_invalid_file_name'
+
+module InvalidRequireHelper
+end
+
-- 
cgit v1.2.3