Sha256: aaf0f2149a272d220264dcfb8e076217e610f348c337098401ce3f68eec0e90f

Contents?: true

Size: 1.1 KB

Versions: 20

Compression:

Stored size: 1.1 KB

Contents

require 'delegate'

class Module

  # Create a seperated method namespace.
  #
  #   module T
  #     def t ; "HERE" ; end
  #   end
  #
  #   class X
  #     namespace :test { include T }
  #     def t ; test.t ; end
  #   end
  #
  #   X.new.t  #=> "HERE"
  #
  # NOTE: This is not as functional as it ought be in that
  # the instance variables of the object are not accessible
  # within the namespace.
  def namespace( name, &blk )
    s = self
    c = Class.new(SimpleDelegator, &blk)
    c.class_eval { define_method(:initialize) { |s| super(s) } }
    self.class_eval {
      define_method( name ) {
        instance_variable_set( "@#{name}",  instance_variable_get( "@#{name}" ) || c.new(s) )
      }
    }
  end

end


#  _____         _
# |_   _|__  ___| |_
#   | |/ _ \/ __| __|
#   | |  __/\__ \ |_
#   |_|\___||___/\__|
#
=begin test

  require 'test/unit'

  class TCModule < Test::Unit::TestCase

    class MockObject
      namespace(:hope) {
        def watch ; 'watch' ; end
      }
    end

    def test_namespace
      m = MockObject.new
      assert_equal( 'watch', m.hope.watch )
    end

  end

=end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
facets-1.0.0 lib/facet/module/namespace.rb
facets-0.9.0 lib/nano/module/namespace.rb
facets-1.0.3 packages/core/lib/facet/module/namespace.rb
facets-1.2.1 lib/facets/core/module/namespace.rb
facets-1.2.0 lib/facets/core/module/namespace.rb
facets-1.3.0 lib/facets/core/module/namespace.rb
facets-1.1.0 lib/facet/module/namespace.rb
facets-1.3.1 lib/facets/core/module/namespace.rb
facets-1.3.3 lib/facets/core/module/namespace.rb
facets-1.3.2 lib/facets/core/module/namespace.rb
facets-1.4.0 lib/facets/core/module/namespace.rb
facets-1.4.2 lib/facets/core/module/namespace.rb
facets-1.4.1 lib/facets/core/module/namespace.rb
facets-1.4.3 lib/facets/core/module/namespace.rb
facets-1.4.5 lib/facets/core/module/namespace.rb
facets-1.4.4 lib/facets/core/module/namespace.rb
facets-1.7.0 lib/facets/core/module/namespace.rb
facets-1.7.30 lib/facets/core/module/namespace.rb
facets-1.7.38 lib/facets/core/module/namespace.rb
facets-1.7.46 lib/facets/core/module/namespace.rb