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