module Speculations

Constants

DISCLAIMER
VERSION

Public Instance Methods

compile(infile, outfile=nil) click to toggle source
# File lib/speculations.rb, line 14
def compile(infile, outfile=nil)
  raise ArgumentError, "#{infile} not found" unless File.readable? infile
  outfile ||= _speculation_path(infile)
  if _out_of_date?(outfile, infile)
    ast  = Speculations::Parser.new.parse_from_file(infile)
    code = _decorated_ast_code ast, infile
    File.write(outfile, code.join("\n"))
  end
  outfile
end

Private Instance Methods

_decorated_ast_code(ast, filename) click to toggle source
# File lib/speculations.rb, line 27
def _decorated_ast_code ast, filename
  [DISCLAIMER.gsub("FILENAME", filename.inspect).split("\n"), %{RSpec.describe #{filename.inspect} do}] +
  ast.to_code + ["end"]
end
_out_of_date?(outf, inf) click to toggle source
# File lib/speculations.rb, line 32
def _out_of_date?(outf, inf)
  return true unless File.exists? outf
  return File.lstat(outf).mtime <= File.lstat(inf).mtime
end
_speculation_path(file) click to toggle source
# File lib/speculations.rb, line 37
def _speculation_path(file)
  dir = File.dirname(file)
  dest_dir = File.join("spec", "speculations", dir)
  FileUtils.mkdir_p(dest_dir) unless File.directory?(dest_dir)
  rspec = File.basename(file, ".md")
  File.join(dest_dir, "#{rspec}_spec.rb")
end