Sha256: 7eb2f9a3633015f15ef75fbb53fbb2d518e129f25e4f382ae36abec4a5313a52

Contents?: true

Size: 1.47 KB

Versions: 2

Compression:

Stored size: 1.47 KB

Contents

module RbPlusPlus
  # Class representation of a ruby Module to be exposed in the extension.
  # A Module acts much in the same way as Extension in that it can contain
  # classes, functions, enumerations, etc. 
  class RbModule

    # Modules can be nested
    attr_accessor :modules

    # Modules have a name
    attr_accessor :name

    # Access to the underlying RbGCCXML parser
    attr_reader :node

    # Registers a new module definition for this extension.
    # Use Extension#module or RbModule#module instead
    # of creating an instance of this class directly
    #
    # The block parameter is optional, you can also 
    # grab the reference of the Module and work with
    # it as you want:
    #
    #   module "Name" do |m|
    #     ...
    #   end
    #   
    # or
    #
    #   m = module "Name"
    #   ...
    #
    # Unlike Extension#new, no special processing is done
    # in the block version, it's just there for convenience.
    def initialize(name, parser, &block)
      @name = name
      @parser = parser
      @modules = []

      block.call(self) if block
    end

    # Specify a C++ namespace from which the contained code will
    # be wrapped and exposed to Ruby under this Module.
    def namespace(name)
      @node = @parser.namespaces(name)
    end

    # Register another module to be defined inside of
    # this module. Acts the same as Extension#module.
    def module(name, &block)
      @modules << RbModule.new(name, @parser, &block)
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rbplusplus-0.1.1 lib/rbplusplus/module.rb
rbplusplus-0.1 lib/rbplusplus/module.rb