Module: Surrounded::Context::RoleBuilders

Defined in:
lib/surrounded/context/role_builders.rb

Instance Method Summary collapse

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