Module: Surrounded::Context::RoleBuilders
- Defined in:
- lib/surrounded/context/role_builders.rb
Instance Method Summary collapse
-
#interface(name, &block) ⇒ Object
Create an object which will bind methods to the role player.
-
#role(name, type = nil, &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
#interface(name, &block) ⇒ Object
Create an object which will bind methods to the role player
33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/surrounded/context/role_builders.rb', line 33 def interface(name, &block) class_basename = name.to_s.gsub(/(?:^|_)([a-z])/){ $1.upcase } interface_name = class_basename + 'Interface' behavior = private_const_set(interface_name, Module.new(&block)) require 'surrounded/context/negotiator' undef_method(name) define_method(name) do instance_variable_set("@#{name}", Negotiator.new(role_map.assigned_player(name), behavior)) end end |
#role(name, type = nil, &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 18 19 |
# File 'lib/surrounded/context/role_builders.rb', line 6 def role(name, type=nil, &block) role_type = type || default_role_type if role_type == :module mod_name = name.to_s.gsub(/(?:^|_)([a-z])/){ $1.upcase } mod = Module.new(&block) mod.send(:include, ::Surrounded) private_const_set(mod_name, mod) else meth = method(role_type) meth.call(name, &block) end rescue NameError => e raise e.extend(InvalidRoleType) end |
#wrap(name, &block) ⇒ Object Also known as: wrapper
Create a named behavior for a role using the standard library SimpleDelegator.
23 24 25 26 27 28 |
# File 'lib/surrounded/context/role_builders.rb', line 23 def wrap(name, &block) require 'delegate' wrapper_name = name.to_s.gsub(/(?:^|_)([a-z])/){ $1.upcase } klass = private_const_set(wrapper_name, Class.new(SimpleDelegator, &block)) klass.send(:include, Surrounded) end |