lib/expressive.rb in expressive-0.0.32 vs lib/expressive.rb in expressive-0.0.33

- old
+ new

@@ -3,25 +3,40 @@ require 'awesome_print' require 'rest_client' require File.join(File.dirname(__FILE__), 'scope') require File.join(File.dirname(__FILE__), 'extended_value') require File.join(File.dirname(__FILE__), 'webhook') +require File.join(File.dirname(__FILE__), 'errors/parse_error') +require File.join(File.dirname(__FILE__), 'errors/run_error') Treetop.load File.join(File.dirname(__FILE__), 'expressive_grammar.treetop') module Expressive def self.run(source_code, scope = TopLevel.new ) program = parse(source_code) - program.eval(scope) + begin + program.eval(scope) + rescue Exception => e + raise RunError, "Error running '#{source_code}': #{$!}", $!.backtrace + end end def self.parse(expressions) @parser ||= ::ExpressiveParser.new - @parser.parse(expressions) + begin + @parser.parse(expressions) + rescue Exception => e + if expressions.nil? + message = "Error parsing nil expression: #{$!}" + else + message = "Error parsing '#{expressions}': #{$!}" + end + raise ParseError, message, $!.backtrace + end end def self.all_symbols - %w(+ - * / = set sum $sub post >= > < <= and or if date datetime get put lookup $lookup $head $tail $reverse round $round $days_ago $hours_ago $minutes_ago $append $id $hash $concat $split $sms $hval $index $random $join) + %w(+ - * / = set sum $sub post >= > < <= and or if date datetime get put lookup $lookup $head $tail $reverse round $round $days_ago $hours_ago $minutes_ago $append $id $hash $concat $split $sms $hval $index $random $join $not) end module Boolean def eval(scope = nil) 'true' == text_value