Module: MethodSource

Extended by:
CodeHelpers
Defined in:
lib/method_source.rb,
lib/method_source/version.rb,
lib/method_source/code_helpers.rb,
lib/method_source/source_location.rb

Defined Under Namespace

Modules: CodeHelpers, MethodExtensions, ReeSourceLocation, SourceLocation Classes: SourceNotFoundError

Constant Summary

VERSION =
"0.8.2"

Class Method Summary collapse

Methods included from CodeHelpers

comment_describing, complete_expression?, expression_at

Class Method Details

.comment_helper(source_location, name = nil) ⇒ String

Helper method responsible for opening source file and buffering up the comments for a specified method. Defined here to avoid polluting Method class.

Parameters:

  • source_location (Array)

    The array returned by Method#source_location

  • method_name (String)

Returns:

  • (String)

    The comments up to the point of the method.

Raises:



38
39
40
41
42
43
# File 'lib/method_source.rb', line 38

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)
end

.extract_code(source_location) ⇒ Object

Deprecated.

— use MethodSource::CodeHelpers#expression_at



66
67
68
# File 'lib/method_source.rb', line 66

def self.extract_code(source_location)
  source_helper(source_location)
end

.lines_for(file_name, name = nil) ⇒ Array<String>

Load a memoized copy of the lines in a file.

Parameters:

  • file_name (String)
  • method_name (String)

Returns:

  • (Array<String>)

    the contents of the file

Raises:



51
52
53
54
55
56
# File 'lib/method_source.rb', line 51

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, "Could not load source for #{name}: #{e.message}"
end

.source_helper(source_location, name = nil) ⇒ String

Helper method responsible for extracting method body. Defined here to avoid polluting Method class.

Parameters:

  • source_location (Array)

    The array returned by Method#source_location

  • method_name (String)

Returns:

  • (String)

    The method body



23
24
25
26
27
28
29
30
# File 'lib/method_source.rb', line 23

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, "Could not parse source for #{name}: #{e.message}"
end

.valid_expression?(str) ⇒ Boolean

Deprecated.

— use MethodSource::CodeHelpers#complete_expression?

Returns:

  • (Boolean)


59
60
61
62
63
# File 'lib/method_source.rb', line 59

def self.valid_expression?(str)
  complete_expression?(str)
rescue SyntaxError
  false
end