module Safemode
Public Class Methods
core_classes()
click to toggle source
# File lib/safemode/core_jails.rb, line 19 def core_classes klasses = [ Array, Float, Hash, Range, String, Symbol, Time, NilClass, FalseClass, TrueClass ] klasses << Date if defined? Date klasses << DateTime if defined? DateTime if RUBY_VERSION >= '2.4.0' klasses << Integer else klasses << Bignum klasses << Fixnum end klasses end
core_jail_class_methods(klass)
click to toggle source
# File lib/safemode/core_jails.rb, line 36 def core_jail_class_methods(klass) @@class_methods_whitelist.fetch(klass.name, []) + (@@default_class_methods & klass.methods.map(&:to_s)) end
core_jail_methods(klass)
click to toggle source
# File lib/safemode/core_jails.rb, line 32 def core_jail_methods(klass) @@methods_whitelist.fetch(klass.name, []) + (@@default_methods & klass.instance_methods.map(&:to_s)) end
define_core_jail_classes()
click to toggle source
# File lib/safemode/core_jails.rb, line 3 def define_core_jail_classes core_classes.each do |klass| jail = define_jail_class(klass) jail.allow_instance_method *core_jail_methods(klass).uniq jail.allow_class_method *core_jail_class_methods(klass).uniq jail end end
define_jail_class(klass)
click to toggle source
# File lib/safemode/core_jails.rb, line 12 def define_jail_class(klass) unless klass.const_defined?("Jail") klass.const_set("Jail", jail = Class.new(Safemode::Jail)) end klass.const_get('Jail') end
find_jail_class(klass)
click to toggle source
# File lib/safemode.rb, line 30 def find_jail_class(klass) while klass != Object return klass.const_get('Jail') if klass.const_defined?('Jail') klass = klass.superclass end Jail end
jail(obj)
click to toggle source
# File lib/safemode.rb, line 26 def jail(obj) find_jail_class(obj.is_a?(Class) ? obj : obj.class).new obj end