Sha256: 1fee79b653921d9c5ce11286b03ced265082f333aa1998d6f39c4a6b43d8b4dd
Contents?: true
Size: 1.47 KB
Versions: 8
Compression:
Stored size: 1.47 KB
Contents
# ========================================================================== # Project: Spade - CommonJS Runtime # Copyright: ©2010 Strobe Inc. All rights reserved. # License: Licened under MIT license (see LICENSE) # ========================================================================== module Spade module Namespace def [](name) begin self.class.const_defined?(name) ? self.class.const_get(name) : yield rescue NameError => e yield end end end class Exports attr_reader :context def initialize(ctx) @context = ctx end def [](name) begin if self.class.const_defined?(name) ret = self.class.const_get(name) # If we are returning a class, create a custom subclass the first # time that also exposes the current context. if ret.instance_of? Class @klass_cache ||= {} unless @klass_cache[name] proc1 = proc { @context } @klass_cache[name] = Class.new(ret) do @context = proc1.call def self.context @context end end end @klass_cache[name] else ret end else yield end rescue NameError => e yield end end end end
Version data entries
8 entries across 8 versions & 1 rubygems