Sha256: a38a0421023faac442825c0f75e3de2a9e4d670a55b09d2bc85e7e6b9e93904f

Contents?: true

Size: 1.08 KB

Versions: 29

Compression:

Stored size: 1.08 KB

Contents

# frozen_string_literal: true

module Boxcars
  # used by Boxcars to run ruby code
  class RubyREPL
    # Execute ruby code
    # @param code [String] The code to run
    def call(code:)
      Boxcars.debug "RubyREPL: #{code}", :yellow

      # wrap the code in an exception block so we can catch errors
      wrapped = "begin\n#{code}\nrescue Exception => e\n  puts 'Error: ' + e.message\nend"
      output = ""
      IO.popen("ruby", "r+") do |io|
        io.puts wrapped
        io.close_write
        output = io.read
      end
      if output =~ /^Error: /
        Boxcars.debug output, :red
        Result.from_error(output, code: code)
      elsif output.blank?
        Result.from_error("The code you gave me did not print a result", code: code)
      else
        output = ::Regexp.last_match(1) if output =~ /^\s*Answer:\s*(.*)$/m
        Boxcars.debug "Answer: #{output}", :yellow, style: :bold
        Result.from_text(output, code: code)
      end
    end

    # Execute ruby code
    # @param command [String] The code to run
    def run(command)
      call(code: command)
    end
  end
end

Version data entries

29 entries across 29 versions & 1 rubygems

Version Path
boxcars-0.7.3 lib/boxcars/ruby_repl.rb
boxcars-0.7.2 lib/boxcars/ruby_repl.rb
boxcars-0.7.1 lib/boxcars/ruby_repl.rb
boxcars-0.6.9 lib/boxcars/ruby_repl.rb
boxcars-0.6.8 lib/boxcars/ruby_repl.rb
boxcars-0.6.7 lib/boxcars/ruby_repl.rb
boxcars-0.6.6 lib/boxcars/ruby_repl.rb
boxcars-0.6.5 lib/boxcars/ruby_repl.rb
boxcars-0.6.4 lib/boxcars/ruby_repl.rb
boxcars-0.6.3 lib/boxcars/ruby_repl.rb
boxcars-0.6.2 lib/boxcars/ruby_repl.rb
boxcars-0.6.1 lib/boxcars/ruby_repl.rb
boxcars-0.5.1 lib/boxcars/ruby_repl.rb
boxcars-0.4.10 lib/boxcars/ruby_repl.rb
boxcars-0.4.9 lib/boxcars/ruby_repl.rb
boxcars-0.4.8 lib/boxcars/ruby_repl.rb
boxcars-0.4.7 lib/boxcars/ruby_repl.rb
boxcars-0.4.6 lib/boxcars/ruby_repl.rb
boxcars-0.4.5 lib/boxcars/ruby_repl.rb
boxcars-0.4.4 lib/boxcars/ruby_repl.rb