Sha256: 8e7a6ac29456842e2caa55029052346ec7bfeaea19fb1a2a1d187e50ed625e02

Contents?: true

Size: 1.16 KB

Versions: 1

Compression:

Stored size: 1.16 KB

Contents

require "contextuality/version"
require "contextuality/defaults"
require "contextuality/context"

module Contextuality
  def self.included klass
    klass.class_eval do
      extend ContextualityMethods
      include ContextualityMethods
    end
  end

  def self.method_missing method, *args, &block
    ::Thread.current.contextuality[method]
  end

  def self.defaults
    ::Thread.main[:contextuality_defaults] ||= Contextuality::Defaults.new
  end

  def self.logger= logger
    @logger = logger
  end

  def self.log message
    @logger.info message if @logger
  end

  module ContextualityMethods
    def contextuality
      ::Thread.current.contextuality
    end
  end

  module ObjectMethods
    def contextualize variables = {}, &block
      ::Thread.current.contextuality.push variables
      result = block.call
      ::Thread.current.contextuality.pop
      result
    end
  end

  module ThreadMethods
    def contextuality
      self[:contextuality] ||= (Thread.main != self) ?
        Thread.main.contextuality.dup :
        Contextuality::Context.new
    end
  end
end

Object.send :include, Contextuality::ObjectMethods
Thread.send :include, Contextuality::ThreadMethods

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
contextuality-1.0.3 lib/contextuality.rb