Sha256: 47a86b130e9f9e6c2a6f3f0d70934e3c4938da97bb9bfd8fee4c8c6008cffcfb
Contents?: true
Size: 1.21 KB
Versions: 1
Compression:
Stored size: 1.21 KB
Contents
module ActiveRecord module Deferrable class Result < ActiveSupport::BasicObject # Represents a Lazy Loaded resultset. # Any method calls would block if the result hasn't yet been processed in a background # Thread. # def initialize( &deferrable ) defer!( deferrable ) end # Calls a given procedure in a background Thread, on another # connection from the pool.Guarantees that said connection is checked # back in on completion. # def defer!( deferrable ) @result = ::Thread.new( deferrable ) do |deferrable| begin deferrable.call rescue => exception exception ensure ::ActiveRecord::Base.connection_pool.release_connection end end self end # Delegates to the background Thread. # def method_missing(*args, &block) @_result ||= @result.value validate! @_result.send(*args, &block) end # Re-raise any Exceptions from the background Thread. # def validate! raise @_result if @_result.is_a?( ::Exception ) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
methodmissing-mysqlplus_adapter-1.0.2 | lib/active_record/connection_adapters/mysqlplus_adapter/deferrable/result.rb |