class Zapata::RZpec::Runner

Attributes

ran[R]

Public Class Methods

new(spec_filename) click to toggle source
# File lib/zapata/rzpec/runner.rb, line 8
def initialize(spec_filename)
  @spec_filename = spec_filename
  run
  # silence { run }
end

Public Instance Methods

examples() click to toggle source
# File lib/zapata/rzpec/runner.rb, line 60
def examples
  parsed_json_result['examples']
end
expected(method_name) click to toggle source
# File lib/zapata/rzpec/runner.rb, line 35
def expected(method_name)
  report_lines = result_message(method_name).to_s.split(/\n/)
  expected_line = report_lines.detect { |line| line.match('got:') }

  if expected_line
    clean_expected_line = expected_line[10..-1]

    if (matches = clean_expected_line.match(/\#\<(.+):(.+)\>/))
      "'Returned instance object #{matches[1]}'"
    else
      Printer.print(Diver.dive(Parser::CurrentRuby.parse(clean_expected_line)).to_raw)
    end
  else
    "'Exception in RSpec'"
  end
end
methodz() click to toggle source
# File lib/zapata/rzpec/runner.rb, line 27
def methodz
  examples.index_by { |ex| ex['description'].delete('#').to_sym }
end
parsed_json_result() click to toggle source
# File lib/zapata/rzpec/runner.rb, line 64
def parsed_json_result
  @json ||= JSON.parse(@stdout.readlines.last)
end
result_message(method_name) click to toggle source
# File lib/zapata/rzpec/runner.rb, line 31
def result_message(method_name)
  methodz[method_name]['exception']['message']
end
run() click to toggle source
# File lib/zapata/rzpec/runner.rb, line 52
def run
  @ran = true

  @stdin, @stdout, @stderr = Bundler.with_clean_env do
    Open3.popen3("bundle exec rspec #{@spec_filename} --format j")
  end
end
silence() { || ... } click to toggle source
# File lib/zapata/rzpec/runner.rb, line 14
def silence
  original_stderr = $stderr.dup
  original_stdout = $stdout.dup

  $stdout.reopen('/dev/null', 'w')
  $stdout.reopen('/dev/null', 'w')

  yield

  $stderr = original_stderr
  $stdout = original_stdout
end