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