lib/ruote/svc/treechecker.rb in ruote-2.2.0 vs lib/ruote/svc/treechecker.rb in ruote-2.3.0
- old
+ new
@@ -1,7 +1,7 @@
#--
-# Copyright (c) 2005-2011, John Mettraux, jmettraux@gmail.com
+# Copyright (c) 2005-2012, John Mettraux, jmettraux@gmail.com
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
@@ -35,11 +35,11 @@
#
class TreeChecker
def initialize(context)
- (context['use_ruby_treechecker'] == false) and return
+ return if context['use_ruby_treechecker'] == false
checker = Rufus::TreeChecker.new do
exclude_fvccall :abort, :exit, :exit!
exclude_fvccall :system, :fork, :syscall, :trap, :require, :load
@@ -48,11 +48,10 @@
#exclude_call_to :class
exclude_fvcall :private, :public, :protected
#exclude_raise # no raise or throw
- exclude_def # no method definition
exclude_eval # no eval, module_eval or instance_eval
exclude_backquotes # no `rm -fR the/kitchen/sink`
exclude_alias # no alias or aliast_method
exclude_global_vars # $vars are off limits
exclude_module_tinkering # no module opening
@@ -68,23 +67,21 @@
# Ruote::ProcessDefinition
exclude_call_to :instance_variable_get, :instance_variable_set
end
+ stricter_checker = checker.clone
+ stricter_checker.add_rules do
+ exclude_def # no method definition
+ exclude_raise # no raise or throw
+ end
+
# the checker used when reading process definitions
- @def_checker = checker.clone # and not dup
- @def_checker.add_rules do
- exclude_raise # no raise or throw
- end
+ @def_checker = stricter_checker.clone # and not dup
@def_checker.freeze
- # the checker used when dealing with BlockParticipant code
-
- @blo_checker = checker.clone # and not dup
- @blo_checker.freeze
-
## the checker used when dealing with conditionals
#
#@con_checker = checker.clone # and not dup
#@con_checker.add_rules do
# exclude_raise # no raise or throw
@@ -98,16 +95,26 @@
# lib/ruote/exp/condition.rb doesn't use this treechecker
# kept (commented out) for 'documentation'
# the checker used when dealing with code in $(ruby:xxx}
- @dol_checker = checker.clone # and not dup
- @dol_checker.add_rules do
- exclude_raise # no raise or throw
- end
+ @dol_checker = stricter_checker.clone # and not dup
@dol_checker.freeze
+ # the checker used when dealing with BlockParticipant code
+
+ @blo_checker = checker.clone # and not dup
+ @blo_checker.add_rules do
+ exclude_def # no method definition
+ end
+ @blo_checker.freeze
+
+ # the checker used for CodeParticipant
+
+ @cod_checker = checker.clone # and not dup
+ @cod_checker.freeze
+
freeze
# preventing further modifications
end
def definition_check(ruby_code)
@@ -121,9 +128,14 @@
end
def dollar_check(ruby_code)
@dol_checker.check(ruby_code) if @dol_checker
+ end
+
+ def code_check(ruby_code)
+
+ @cod_checker.check(ruby_code) if @cod_checker
end
end
end