Sha256: 1811e18c7ce5f481edf9bafc5187a09b07ede5441532f22e8678fd5cf623cf70
Contents?: true
Size: 1.47 KB
Versions: 1
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
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
spade-0.1.1.1 | lib/spade/exports.rb |