Object
# File lib/rufus/treechecker.rb, line 236 def accept_pattern (pat) (@accepted_patterns[pat.first] ||= []) << pat end
# File lib/rufus/treechecker.rb, line 247 def check (sexp) if sexp.is_a?(Symbol) m = @excluded_symbols[sexp] raise SecurityError.new(m) if m elsif sexp.is_a?(Array) # accepted patterns are evaluated before excluded patterns # if one is found the excluded patterns are skipped pats = @accepted_patterns[sexp.first] pats.each { |pat| return if check_pattern(sexp, pat) } if pats pats = @excluded_patterns[sexp.first] return unless pats pats.each do |pat, msg| raise SecurityError.new(msg) if check_pattern(sexp, pat) end end end
# File lib/rufus/treechecker.rb, line 223 def clone rs = RuleSet.new rs.instance_variable_set(:@excluded_symbols, @excluded_symbols.dup) rs.instance_variable_set(:@accepted_patterns, @accepted_patterns.dup) rs.instance_variable_set(:@excluded_patterns, @excluded_patterns.dup) rs end
# File lib/rufus/treechecker.rb, line 241 def exclude_pattern (pat, message) (@excluded_patterns[pat.first] ||= []) << [ pat, message || "#{pat.inspect} is excluded" ] end
# File lib/rufus/treechecker.rb, line 231 def exclude_symbol (s, message) @excluded_symbols[s] = (message || ":#{s} is excluded") end
# File lib/rufus/treechecker.rb, line 271 def freeze super @excluded_symbols.freeze @excluded_symbols.each { |k, v| k.freeze; v.freeze } @accepted_patterns.freeze @accepted_patterns.each { |k, v| k.freeze; v.freeze } @excluded_patterns.freeze @excluded_patterns.each { |k, v| k.freeze; v.freeze } end
# File lib/rufus/treechecker.rb, line 283 def to_s s = "#{self.class} (#{self.object_id})\n" s << " excluded symbols :\n" @excluded_symbols.each do |k, v| s << " - #{k.inspect}, #{v}\n" end s << " accepted patterns :\n" @accepted_patterns.each do |k, v| v.each do |p| s << " - #{k.inspect}, #{p.inspect}\n" end end s << " excluded patterns :\n" @excluded_patterns.each do |k, v| v.each do |p| s << " - #{k.inspect}, #{p.inspect}\n" end end s end
Generated with the Darkfish Rdoc Generator 2.