#!/usr/bin/env ruby require "optparse" require_relative "../lib/template-ruby" options = { timeout: 0 } OptionParser.new do |opts| opts.banner = "Usage: bin/code [options]" opts.on( "-i INPUT", "--input=INPUT", "Input in the code language (String or File)" ) do |input| if File.exists?(input) input = File.read(input) end options[:input] = input end opts.on( "-c CONTEXT", "--context=CONTEXT", "Context in the code language (String or File)" ) do |context| if File.exists?(context) context = File.read(context) end options[:context] = context end opts.on("-p", "--parse", "Get parser results for input") do |parse| options[:parse] = parse end opts.on("-t TIMEOUT", "--timeout=TIMEOUT", "Set timeout in seconds") do |timeout| options[:timeout] = timeout.to_f end end.parse! input = options.fetch(:input, "") context = options.fetch(:context, "") if options[:parse] pp ::Code::Parser::Code.new.parse(input) else print Code.evaluate(input, context, io: $stdout, timeout: options[:timeout]).to_s end