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