Permalink
Browse files

Stop overriding LoadError.new to return a MissingSourceError (and som…

…etimes nil!)
  • Loading branch information...
1 parent 5ebfa62 commit 1a50d2e66a80c910fe1e2203eb2c993e5dbc4e5b Yehuda Katz committed Jan 20, 2010
@@ -100,7 +100,7 @@ def default_helper_module!
module_path = module_name.underscore
helper module_path
rescue MissingSourceFile => e
- raise e unless e.is_missing? "#{module_path}_helper"
+ raise e unless e.is_missing? "helpers/#{module_path}_helper"
rescue NameError => e
raise e unless e.missing_name? "#{module_name}Helper"
end
@@ -22,7 +22,7 @@ def modify_response_headers
end
def show_actions
- render :text => "actions: #{action_methods.to_a.join(', ')}"
+ render :text => "actions: #{action_methods.to_a.sort.join(', ')}"
end
protected
@@ -53,6 +53,8 @@ def test_model_naming
assert_kind_of String, model_name
assert_kind_of String, model_name.human
assert_kind_of String, model_name.partial_path
+ assert_kind_of String, model_name.singular
+ assert_kind_of String, model_name.plural
end
# errors
@@ -1,36 +1,22 @@
-class MissingSourceFile < LoadError #:nodoc:
- attr_reader :path
- def initialize(message, path)
- super(message)
- @path = path
- end
-
- def is_missing?(path)
- path.gsub(/\.rb$/, '') == self.path.gsub(/\.rb$/, '')
- end
+class LoadError
+ REGEXPS = [
+ /^no such file to load -- (.+)$/i,
+ /^Missing \w+ (?:file\s*)?([^\s]+.rb)$/i,
+ /^Missing API definition file in (.+)$/i,
+ ]
- def self.from_message(message)
- REGEXPS.each do |regexp, capture|
- match = regexp.match(message)
- return MissingSourceFile.new(message, match[capture]) unless match.nil?
+ def path
+ @path ||= begin
+ REGEXPS.find do |regex|
+ message =~ regex
@hstrowd
hstrowd Jul 30, 2011

Unless I'm misreading something here, it looks like the message variable will always be nil at this point, resulting in this method always returning nil, which in tern will cause the path.sub call below to raise a method_missing error.

+ end
+ $1
end
- nil
end
- REGEXPS = [
- [/^no such file to load -- (.+)$/i, 1],
- [/^Missing \w+ (file\s*)?([^\s]+.rb)$/i, 2],
- [/^Missing API definition file in (.+)$/i, 1],
- [/win32/, 0]
- ] unless defined?(REGEXPS)
-end
-
-class LoadError
- def self.new(*args)
- if self == LoadError
- MissingSourceFile.from_message(args.first)
- else
- super
- end
+ def is_missing?(location)
+ location.sub(/\.rb$/, '') == path.sub(/\.rb$/, '')
end
end
+
+MissingSourceFile = LoadError
@@ -236,7 +236,7 @@ def depend_on(file_name, swallow_load_errors = false, message = "No such file to
rescue LoadError => load_error
unless swallow_load_errors
if file_name = load_error.message[/ -- (.*?)(\.rb)?$/, 1]
- raise MissingSourceFile.new(message % file_name, load_error.path).copy_blame!(load_error)
+ raise LoadError.new(message % file_name).copy_blame!(load_error)
end
raise
end
@@ -15,3 +15,18 @@ def test_path
end
end
end
+
+class TestLoadError < Test::Unit::TestCase
+ def test_with_require
+ assert_raise(LoadError) { require 'no_this_file_don\'t_exist' }
+ end
+ def test_with_load
+ assert_raise(LoadError) { load 'nor_does_this_one' }
+ end
+ def test_path
+ begin load 'nor/this/one.rb'
+ rescue LoadError => e
+ assert_equal 'nor/this/one.rb', e.path
+ end
+ end
+end

0 comments on commit 1a50d2e

Please sign in to comment.