Sha256: 783aedf02fb9f16c214ae6198a541f31d7466c3ba1462e89cf3a1a2889441705

Contents?: true

Size: 1.04 KB

Versions: 3

Compression:

Stored size: 1.04 KB

Contents

module Safemode
  class Blankslate
    @@allow_instance_methods = ['class', 'inspect', 'methods', 'respond_to?', 'respond_to_missing?', 'to_s', 'instance_variable_get']
    @@allow_class_methods    = ['methods', 'new', 'name', 'inspect', '<', 'ancestors', '=='] # < needed in Rails Object#subclasses_of

    silently { undef_methods(*instance_methods.map(&:to_s) - @@allow_instance_methods) }
    class << self
      silently { undef_methods(*instance_methods.map(&:to_s) - @@allow_class_methods) }

      def method_added(name) end # ActiveSupport needs this

      def inherited(subclass)
        subclass.init_allowed_methods(@allowed_methods)
      end

      def init_allowed_methods(allowed_methods)
        @allowed_methods = allowed_methods
      end

      def allowed_methods
        @allowed_methods ||= []
      end

      def allow(*names)
        @allowed_methods = allowed_methods + names.map{|name| name.to_s}
        @allowed_methods.uniq!
      end

      def allowed?(name)
        allowed_methods.include? name.to_s
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
safemode-1.2.3 lib/safemode/blankslate.rb
safemode-1.2.2 lib/safemode/blankslate.rb
safemode-1.2.1 lib/safemode/blankslate.rb