class Needle::DefinitionContext
This class is used by the Needle::Container#define! and
Needle::Container#namespace!
methods to allow an instance_eval
'd block to create new
service points simply by invoking imaginary methods. It is basically an
empty shell, with almost all of the builtin methods removed from it. (This
allows services like “hash” and “print” to be defined, where they would
normally conflict with the Kernel methods of the same name.)
Public Class Methods
Create a new DefinitionContext that wraps the given container. All operations performed on this context will be delegated to the container.
# File lib/needle/definition-context.rb, line 41 def initialize( container ) @container = container end
Public Instance Methods
Delegates to Needle::Container#has_key?.
# File lib/needle/definition-context.rb, line 103 def has_key?( name ) @container.has_key?( name ) end
Delegate to Needle::Container#intercept.
# File lib/needle/definition-context.rb, line 52 def intercept( name ) @container.intercept( name ) end
Delegates to Needle::Container#knows_key?.
# File lib/needle/definition-context.rb, line 108 def knows_key?( name ) @container.knows_key?( name ) end
Any method invocation with no block and no parameters is interpreted to be a service reference on the wrapped container, and delegates to Needle::Container#[]. If the block is not given but the args are not empty, a NoMethodError will be raised.
If a block is given, this delegates to Needle::Container#register, leaving all parameters in place.
# File lib/needle/definition-context.rb, line 119 def method_missing( sym, *args, &block ) if block.nil? @container.get( sym, *args ) else @container.register( sym, *args, &block ) end end
Delegate to Needle::Container#namespace.
# File lib/needle/definition-context.rb, line 57 def namespace( *parms, &block ) @container.namespace( *parms, &block ) end
Delegate to Needle::Container#define on the new namespace.
# File lib/needle/definition-context.rb, line 69 def namespace_define( *parms, &block ) @container.namespace( *parms ) { |ns| ns.define( &block ) } end
Delegate to Needle::Container#namespace_define!.
# File lib/needle/definition-context.rb, line 62 def namespace_define!( *parms, &block ) @container.namespace_define!( *parms, &block ) end
Delegate to Needle::Container#require on the current container.
# File lib/needle/definition-context.rb, line 74 def require( *parms ) # this is necessary to work around an rdoc bug...rdoc doesn't like # calling require with a variable number of arguments. @container.__send__( :require, *parms ) end
A way to access the container reference being operated on from within the context.
# File lib/needle/definition-context.rb, line 47 def this_container @container end
Delegate to Needle::Container#use on the current container, but yields the definition context instead of the container.
# File lib/needle/definition-context.rb, line 82 def use( opts, &block ) use! @container.defaults.merge( opts ), &block end
Delegate to Needle::Container#use! on the current container, but yields the definition context instead of the container.
# File lib/needle/definition-context.rb, line 88 def use!( opts ) original = @container.use!( opts ) if block_given? begin yield self ensure @container.use! original end end original end