Module: MethodSource::CodeHelpers

### Home Classes Methods

### In Files

- lib/method_source/code_helpers.rb

### Namespace

- MODULE MethodSource::CodeHelpers::IncompleteExpression

### Methods

- #comment_describing
- #complete_expression?
- #expression_at

### Class/Module Index

Quicksearch

- MethodSource
- MethodSource::CodeHelpers
- MethodSource::CodeHelpers::IncompleteExpression
- MethodSource::ReeSourceLocation
- MethodSource::SourceLocation
- MethodSource::SourceLocation::MethodExtensions
- MethodSource::SourceLocation::ProcExtensions
- MethodSource::SourceLocation::UnboundMethodExtensions

No matching classes.

# MethodSource::CodeHelpers

### Public Instance Methods

comment_describing(file, line_number) click to toggle source

Retrieve the comment describing the expression on the given line of the given file.

This is useful to get module or method documentation.

@param [Array<String>, File, String] file The file to parse, either as a File or as

    a String or an Array of lines.

@param [Fixnum] line_number The line number at which to look.

    NOTE: The first line in a file is line 1!

@return [String] The comment

    # File lib/method_source/code_helpers.rb, line 52
    def comment_describing(file, line_number)
      lines = file.is_a?(Array) ? file : file.each_line.to_a

      extract_last_comment(lines[0..(line_number - 2)])
    end

complete_expression?(str) click to toggle source

Determine if a string of code is a complete Ruby expression. @param [String] code The code to validate. @return [Boolean] Whether or not the code is a complete Ruby expression. @raise [SyntaxError] Any SyntaxError that does not represent incompleteness. @example

    complete_expression?("class Hello") #=> false
    complete_expression?("class Hello; end") #=> true
    complete_expression?("class 123") #=> SyntaxError: unexpected tINTEGER

    # File lib/method_source/code_helpers.rb, line 66
    def complete_expression?(str)
      old_verbose = $VERBOSE
      $VERBOSE = nil

      catch(:valid) do
        eval("BEGIN{throw :valid}\n#{str}")
      end

      # Assert that a line which ends with a , or \ is incomplete.
      str !~ /[,\\]\s*\z/
    rescue IncompleteExpression
      false
    ensure
      $VERBOSE = old_verbose
    end

expression_at(file, line_number, options={}) click to toggle source

Retrieve the first expression starting on the given line of the given file.

This is useful to get module or method source code.

@param [Array<String>, File, String] file The file to parse, either as a File or as @param [Fixnum] line_number The line number at which to look.

      NOTE: The first line in a file is
    line 1!

@param [Hash] options The optional configuration parameters. @option options [Boolean] :strict If set to true, then only completely

    valid expressions are returned. Otherwise heuristics are used to extract
    expressions that may have been valid inside an eval.

@option options [Fixnum] :consume A number of lines to automatically

    consume (add to the expression buffer) without checking for validity.

@return [String] The first complete expression @raise [SyntaxError] If the first complete expression can't be identified

    # File lib/method_source/code_helpers.rb, line 20
    def expression_at(file, line_number, options={})
      options = {
        :strict  => false,
        :consume => 0
      }.merge!(options)

      lines = file.is_a?(Array) ? file : file.each_line.to_a

      relevant_lines = lines[(line_number - 1)..-1] || []

      extract_first_expression(relevant_lines, options[:consume])
    rescue SyntaxError => e
      raise if options[:strict]

      begin
        extract_first_expression(relevant_lines) do |code|
          code.gsub(/\#\{.*?\}/, "temp")
        end
      rescue SyntaxError
        raise e
      end
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.