Sha256: fdcfe729a610cef9f3647ceb61e28937e23689ce99e9978389f1d46a9be4fa7e
Contents?: true
Size: 1.44 KB
Versions: 4
Compression:
Stored size: 1.44 KB
Contents
module Safemode class Scope < Blankslate def initialize(delegate = nil, delegate_methods = []) @delegate = delegate @delegate_methods = delegate_methods @locals = {} end def bind(instance_vars = {}, locals = {}, &block) @locals = symbolize_keys(locals) # why can't I just pull them to local scope in the same way like instance_vars? instance_vars = symbolize_keys(instance_vars) instance_vars.each {|key, obj| eval "@#{key} = instance_vars[:#{key}]" } @_safemode_output = '' binding end def to_jail self end def puts(*args) print args.to_s + "\n" end def print(*args) @_safemode_output += args.to_s end def output @_safemode_output end def method_missing(method, *args, &block) if @locals.has_key?(method) @locals[method] elsif @delegate_methods.include?(method) @delegate.send method, *unjail_args(args), &block else raise Safemode::SecurityError.new(method, "#<Safemode::ScopeObject>") end end private def symbolize_keys(hash) hash.inject({}) do |hash, (key, value)| hash[key.to_s.intern] = value hash end end def unjail_args(args) args.collect do |arg| arg.class.name =~ /::Jail$/ ? arg.instance_variable_get(:@source) : arg end end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
safemode-1.0.2 | lib/safemode/scope.rb |
safemode-1.0.1 | lib/safemode/scope.rb |
safemode-1.0.0 | lib/safemode/scope.rb |
safemode-0.0.2 | lib/safemode/scope.rb |