Skip to content

Commit

Permalink
Improve error messages
Browse files Browse the repository at this point in the history
  • Loading branch information
ConradIrwin committed Jun 3, 2012
1 parent 38231ee commit 423fb75
Showing 1 changed file with 12 additions and 9 deletions.
21 changes: 12 additions & 9 deletions lib/method_source.rb
Expand Up @@ -18,23 +18,25 @@ class SourceNotFoundError < StandardError; end
# Helper method responsible for extracting method body.
# Defined here to avoid polluting `Method` class.
# @param [Array] source_location The array returned by Method#source_location
# @param [String] method_name
# @return [String] The method body
def self.source_helper(source_location)
raise SourceNotFoundError, "Source location not found" unless source_location
def self.source_helper(source_location, name=nil)
raise SourceNotFoundError, "Could not locate source for #{name}!" unless source_location
file, line = *source_location

expression_at(lines_for(file), line)
rescue SyntaxError => e
raise SourceNotFoundError, e.message
raise SourceNotFoundError, "Could not parse source for #{name}: #{e.message}"
end

# Helper method responsible for opening source file and buffering up
# the comments for a specified method. Defined here to avoid polluting
# `Method` class.
# @param [Array] source_location The array returned by Method#source_location
# @param [String] method_name
# @return [String] The comments up to the point of the method.
def self.comment_helper(source_location)
raise SourceNotFoundError, "Source location not found" unless source_location
def self.comment_helper(source_location, name=nil)
raise SourceNotFoundError, "Could not locate source for #{name}!" unless source_location
file, line = *source_location

comment_describing(lines_for(file), line)
Expand All @@ -43,13 +45,14 @@ def self.comment_helper(source_location)
# Load a memoized copy of the lines in a file.
#
# @param [String] file_name
# @param [String] method_name
# @return [Array<String>] the contents of the file
# @raise [SourceNotFoundError]
def self.lines_for(file_name)
def self.lines_for(file_name, name=nil)
@lines_for_file ||= {}
@lines_for_file[file_name] ||= File.readlines(file_name)
rescue Errno::ENOENT => e
raise SourceNotFoundError, e.message
raise SourceNotFoundError, "Could not load source for #{name}: #{e.message}"
end

# @deprecated — use MethodSource::CodeHelpers#complete_expression?
Expand Down Expand Up @@ -104,7 +107,7 @@ def self.included(klass)
# self
# end
def source
MethodSource.source_helper(source_location)
MethodSource.source_helper(source_location, name)
end

# Return the comments associated with the method as a string.
Expand All @@ -116,7 +119,7 @@ def source
# =>
# # Removes all elements and returns self.
def comment
MethodSource.comment_helper(source_location)
MethodSource.comment_helper(source_location, name)
end
end
end
Expand Down

0 comments on commit 423fb75

Please sign in to comment.