Module: Surrounded::Context::RoleBuilders
- Defined in:
- lib/surrounded/context/role_builders.rb
Instance Method Summary collapse
-
#delegate_class(name, class_name, &block) ⇒ Object
Create a named behavior for a role using the standard library DelegateClass.
-
#interface(name, &block) ⇒ Object
Create an object which will bind methods to the role player.
-
#role(name, type = default_role_type, &block) ⇒ Object
(also: #role_methods)
Define behaviors for your role players.
-
#wrap(name, &block) ⇒ Object
(also: #wrapper)
Create a named behavior for a role using the standard library SimpleDelegator.
Instance Method Details
#delegate_class(name, class_name, &block) ⇒ Object
Create a named behavior for a role using the standard library DelegateClass. This ties the implementation of the role to a specific class or module API.
31 32 33 34 35 36 37 |
# File 'lib/surrounded/context/role_builders.rb', line 31 def delegate_class(name, class_name, &block) require 'delegate' wrapper_name = RoleName(name) klass = private_const_set(wrapper_name, DelegateClass(Object.const_get(class_name.to_s))) klass.class_eval(&block) klass.send(:include, Surrounded) end |
#interface(name, &block) ⇒ Object
Create an object which will bind methods to the role player.
This object will behave differently that a wrapper or delegate_class. The interface object should only be used for objects whose methods _will not_ call to the other objects in the context. Because the interface methods are applied individually to an object, that object is unaware of the other objects in the context and cannot access them from any of its methods.
47 48 49 50 51 52 53 54 55 |
# File 'lib/surrounded/context/role_builders.rb', line 47 def interface(name, &block) # AdminInterface interface_name = RoleName(name, 'Interface') behavior = private_const_set(interface_name, Module.new(&block)) require 'surrounded/context/negotiator' # Admin private_const_set(RoleName(name), Negotiator.for_role(behavior)) end |
#role(name, type = default_role_type, &block) ⇒ Object Also known as: role_methods
Define behaviors for your role players
6 7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/surrounded/context/role_builders.rb', line 6 def role(name, type=default_role_type, &block) if type == :module mod_name = RoleName(name) mod = Module.new(&block).send(:include, ::Surrounded) private_const_set(mod_name, mod) else meth = method(type) meth.call(name, &block) end rescue NameError => e raise InvalidRoleType, e. end |
#wrap(name, &block) ⇒ Object Also known as: wrapper
Create a named behavior for a role using the standard library SimpleDelegator.
21 22 23 24 25 26 |
# File 'lib/surrounded/context/role_builders.rb', line 21 def wrap(name, &block) require 'delegate' wrapper_name = RoleName(name) klass = private_const_set(wrapper_name, Class.new(SimpleDelegator, &block)) klass.send(:include, Surrounded) end |