Sha256: 46532e01380beec22cef98243a7f6739d427a303a56756585c1418b5f65f4565

Contents?: true

Size: 968 Bytes

Versions: 18

Compression:

Stored size: 968 Bytes

Contents

# -*- encoding : utf-8 -*-
module Dao
  module InstanceExec
    Code = proc do
      unless Object.new.respond_to?(:instance_exec)
        module InstanceExecHelper; end
        include InstanceExecHelper

        def instance_exec(*args, &block)
          begin
            old_critical, Thread.critical = Thread.critical, true
            n = 0
            n += 1 while respond_to?(mname="__instance_exec_#{ n }__")
            InstanceExecHelper.module_eval{ define_method(mname, &block) }
          ensure
            Thread.critical = old_critical
          end
          begin
            ret = send(mname, *args)
          ensure
            InstanceExecHelper.module_eval{ remove_method(mname) } rescue nil
          end
          ret
        end
      end
    end

    def InstanceExec.included(other)
      other.module_eval(&Code)
      super
    end

    def InstanceExec.extend_object(other)
      other.instance_eval(&Code)
      super
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
dao-8.0.1 lib/dao/instance_exec.rb
dao-8.0.0 lib/dao/instance_exec.rb
dao-7.0.0 lib/dao/instance_exec.rb
dao-5.6.1 lib/dao/instance_exec.rb
dao-5.5.2 lib/dao/instance_exec.rb
dao-5.5.1 lib/dao/instance_exec.rb
dao-5.5.0 lib/dao/instance_exec.rb
dao-5.4.0 lib/dao/instance_exec.rb
dao-5.3.3 lib/dao/instance_exec.rb
dao-5.3.2 lib/dao/instance_exec.rb
dao-5.3.0 lib/dao/instance_exec.rb
dao-5.2.1 lib/dao/instance_exec.rb
dao-5.1.2 lib/dao/instance_exec.rb
dao-5.1.1 lib/dao/instance_exec.rb
dao-5.0.0 lib/dao/instance_exec.rb
dao-4.6.4 lib/dao/instance_exec.rb
dao-4.4.4 lib/dao/instance_exec.rb
dao-4.4.2 lib/dao/instance_exec.rb