class PhpPrecompileHook

Constants

BATCH_SEPARATOR
RESULTS_SEPARATOR

Public Instance Methods

add_php_tag(content) click to toggle source
# File lib/precompile_hook.rb, line 56
def add_php_tag(content)
  "<?php\n#{content}"
end
add_php_tags(files) click to toggle source
# File lib/precompile_hook.rb, line 52
def add_php_tags(files)
  Hash[files.map{|name, content| [name, add_php_tag(content)] } ]
end
command_line(*filenames) click to toggle source
# File lib/precompile_hook.rb, line 5
def command_line(*filenames)
  "run-tests-and-get-ast #{filenames.join(' ')}"
end
compile(request) click to toggle source
Calls superclass method
# File lib/precompile_hook.rb, line 9
def compile(request)
  return request unless request[:query].nil?

  files = super request
  struct request.to_h.merge result: run!(files)
end
compile_file_content(request) click to toggle source
# File lib/precompile_hook.rb, line 16
def compile_file_content(request)
  test_content = compile_test_content request

  if has_files?(request)
    ast_content = request.content.values.join("\n")
    add_php_tags(test_content).merge('submission_ast.json' => add_php_tag(ast_content))
  else
    add_php_tag(test_content) + BATCH_SEPARATOR + add_php_tag(request.content)
  end
end
compile_test_content(request) click to toggle source
# File lib/precompile_hook.rb, line 33
  def compile_test_content(request)
    test = <<-EOF
declare(strict_types=1);

#{request.extra}
#{has_files?(request) ? '' : request.content}

use PHPUnit\\Framework\\TestCase;

final class #{PhpTestHook::TEST_NAME}Test extends TestCase {
#{request.test.lines.map {|it| '  ' + it}.join}
}
    EOF

    has_files?(request) ?
      files_of(request).merge("#{PhpTestHook::TEST_NAME.downcase}.php" => test) :
      test
  end
post_process_file(_file, result, status) click to toggle source
# File lib/precompile_hook.rb, line 27
def post_process_file(_file, result, status)
  parts = result.split RESULTS_SEPARATOR

  { test: parts.first, ast: parts.last }
end