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

Version Path
spade-0.0.8.1 lib/spade/exports.rb
spade-0.0.7 lib/spade/exports.rb
spade-0.0.6 lib/spade/exports.rb
spade-0.0.5 lib/spade/exports.rb
spade-0.0.4 lib/spade/exports.rb
spade-0.0.3 lib/spade/exports.rb
spade-0.0.2 lib/spade/exports.rb
spade-0.0.1 lib/spade/exports.rb