Sha256: 58f14cc379d824120f3ec5372d95fd3f3ccd041c3124941677a9f77b32712935

Contents?: true

Size: 1.37 KB

Versions: 21

Compression:

Stored size: 1.37 KB

Contents

module Cody
  module Evaluate
    include Interface

    def evaluate(path)
      source_code = IO.read(path)
      begin
        instance_eval(source_code, path)
      rescue Exception => e
        if e.class == SystemExit # allow exit to happen normally
          raise
        else
          task_definition_error(e)
          puts "\nFull error:"
          raise
        end
      end
    end

  private
    # Prints out a user friendly task_definition error message
    def task_definition_error(e)
      error_info = e.backtrace.first
      path, line_no, _ = error_info.split(':')
      line_no = line_no.to_i
      puts "Error evaluating #{path}:".color(:red)
      puts e.message
      puts "Here's the line in #{path} with the error:\n\n"

      contents = IO.read(path)
      content_lines = contents.split("\n")
      context = 5 # lines of context
      top, bottom = [line_no-context-1, 0].max, line_no+context-1
      spacing = content_lines.size.to_s.size
      content_lines[top..bottom].each_with_index do |line_content, index|
        line_number = top+index+1
        if line_number == line_no
          printf("%#{spacing}d %s\n".color(:red), line_number, line_content)
        else
          printf("%#{spacing}d %s\n", line_number, line_content)
        end
      end
    end

    def lookup_cody_file(name)
      [".cody", @options[:type], name].compact.join("/")
    end
  end
end

Version data entries

21 entries across 21 versions & 1 rubygems

Version Path
cody-1.0.6 lib/cody/evaluate.rb
cody-1.0.5 lib/cody/evaluate.rb
cody-1.0.4 lib/cody/evaluate.rb
cody-1.0.3 lib/cody/evaluate.rb
cody-1.0.2 lib/cody/evaluate.rb
cody-1.0.1 lib/cody/evaluate.rb
cody-1.0.0 lib/cody/evaluate.rb
cody-0.9.8 lib/cody/evaluate.rb
cody-0.9.7 lib/cody/evaluate.rb
cody-0.9.6 lib/cody/evaluate.rb
cody-0.9.5 lib/cody/evaluate.rb
cody-0.9.4 lib/cody/evaluate.rb
cody-0.9.3 lib/cody/evaluate.rb
cody-0.9.2 lib/cody/evaluate.rb
cody-0.9.1 lib/cody/evaluate.rb
cody-0.9.0 lib/cody/evaluate.rb
cody-0.8.6 lib/cody/evaluate.rb
cody-0.8.5 lib/cody/evaluate.rb
cody-0.8.4 lib/cody/evaluate.rb
cody-0.8.3 lib/cody/evaluate.rb