Sha256: f5acf437d9029a6b28abe928d92fe7b2d504025c186302fce9f9080989d73b90

Contents?: true

Size: 1.34 KB

Versions: 21

Compression:

Stored size: 1.34 KB

Contents

##
# Sandbox for global error capture
class Midori::Sandbox
  class << self
    def class_initialize
      @handlers = Hash.new
      @handlers[Midori::Exception::InternalError] = proc {|e| Midori::Response.new(status: 500, body: "#{e.inspect} #{e.backtrace}")}
      @handlers[Midori::Exception::NotFound] = proc {|_e| Midori::Response.new(status: 404, body: '404 Not Found')}
    end

    # Add a rule to Sandbox
    # @param [Class] class_name the class to capture
    # @param [Proc] block what to do when captured
    # @return [nil] nil
    def add_rule(class_name, block)
      @handlers[class_name] = block
      nil
    end

    # Detect what to run with given error
    # @param [StandardError] error the error captured
    # @return [nil] nil
    def capture(error)
      if @handlers[error.class].nil?
        @handlers[Midori::Exception::InternalError].call(error)
      else
        @handlers[error.class].call(error) 
      end
    end

    # Run sandbox inside given clean room
    # @param [Midori::CleanRoom] clean_room Clean room to run
    # @param [Proc] function the block to run
    # @return [nil] nil
    def run(clean_room, function, *args)
      begin
        function.to_lambda(clean_room).call(*args)
      rescue StandardError => e
        capture(e)
      end
    end
  end

  private_class_method :class_initialize
  class_initialize
end

Version data entries

21 entries across 21 versions & 2 rubygems

Version Path
midori.rb-0.9.0 lib/midori/sandbox.rb
midori.rb-0.8.0 lib/midori/sandbox.rb
midori.rb-0.7.1 lib/midori/sandbox.rb
midori.rb-0.7.0 lib/midori/sandbox.rb
midori.rb-0.6.0 lib/midori/sandbox.rb
midori.rb-0.5.4 lib/midori/sandbox.rb
midori.rb-0.5.3.1 lib/midori/sandbox.rb
midori.rb-0.5.3 lib/midori/sandbox.rb
midori.rb-0.5.2 lib/midori/sandbox.rb
midori.rb-0.5.1 lib/midori/sandbox.rb
midori.rb-0.5.0 lib/midori/sandbox.rb
midori.rb-0.4.4.1 lib/midori/sandbox.rb
midori.rb-0.4.4 lib/midori/sandbox.rb
midori.rb-0.4.3 lib/midori/sandbox.rb
em-midori-0.4.3 lib/midori/sandbox.rb
em-midori-0.4.2.1 lib/midori/sandbox.rb
em-midori-0.4.2 lib/midori/sandbox.rb
em-midori-0.4.1.1 lib/midori/sandbox.rb
em-midori-0.4.1 lib/midori/sandbox.rb
em-midori-0.4.0 lib/midori/sandbox.rb