Class: Needle::DefinitionContext
- Inherits:
-
Object
- Object
- Needle::DefinitionContext
- Defined in:
- lib/needle/definition-context.rb
Overview
This class is used by the Container#define! and 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.)
Instance Method Summary collapse
-
#initialize(container) ⇒ DefinitionContext
constructor
Create a new DefinitionContext that wraps the given container.
-
#intercept(name) ⇒ Object
Delegate to Container#intercept.
-
#method_missing(sym, *args, &block) ⇒ Object
Any method invocation with no block and no parameters is interpreted to be a service reference on the wrapped container, and delegates to Container#[].
-
#namespace(*parms, &block) ⇒ Object
Delegate to Container#namespace.
-
#namespace_define(*parms, &block) ⇒ Object
Delegate to Container#define on the new namespace.
-
#namespace_define!(*parms, &block) ⇒ Object
(also: #namespace!)
Delegate to Container#namespace_define!.
-
#require(*parms) ⇒ Object
Delegate to Container#require on the current container.
-
#this_container ⇒ Object
A way to access the container reference being operated on from within the context.
Constructor Details
#initialize(container) ⇒ DefinitionContext
Create a new DefinitionContext that wraps the given container. All operations performed on this context will be delegated to the container.
40 41 42 |
# File 'lib/needle/definition-context.rb', line 40 def initialize( container ) @container = container end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(sym, *args, &block) ⇒ Object
Any method invocation with no block and no parameters is interpreted to be a service reference on the wrapped container, and delegates to 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 Container#register, leaving all parameters in place.
86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/needle/definition-context.rb', line 86 def method_missing( sym, *args, &block ) if block.nil? if args.empty? @container[sym] else super end else @container.register( sym, *args, &block ) end end |
Instance Method Details
#intercept(name) ⇒ Object
Delegate to Container#intercept.
51 52 53 |
# File 'lib/needle/definition-context.rb', line 51 def intercept( name ) @container.intercept( name ) end |
#namespace(*parms, &block) ⇒ Object
Delegate to Container#namespace.
56 57 58 |
# File 'lib/needle/definition-context.rb', line 56 def namespace( *parms, &block ) @container.namespace( *parms, &block ) end |
#namespace_define(*parms, &block) ⇒ Object
Delegate to Container#define on the new namespace.
68 69 70 |
# File 'lib/needle/definition-context.rb', line 68 def namespace_define( *parms, &block ) @container.namespace( *parms ) { |ns| ns.define( &block ) } end |
#namespace_define!(*parms, &block) ⇒ Object Also known as: namespace!
Delegate to Container#namespace_define!.
61 62 63 |
# File 'lib/needle/definition-context.rb', line 61 def namespace_define!( *parms, &block ) @container.namespace_define!( *parms, &block ) end |
#require(*parms) ⇒ Object
Delegate to Container#require on the current container.
73 74 75 76 77 |
# File 'lib/needle/definition-context.rb', line 73 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 |
#this_container ⇒ Object
A way to access the container reference being operated on from within the context.
46 47 48 |
# File 'lib/needle/definition-context.rb', line 46 def this_container @container end |