Class: WrapperBased::Roles
- Inherits:
-
Module
- Object
- Module
- WrapperBased::Roles
- Defined in:
- lib/wrapper_based/roles.rb
Defined Under Namespace
Modules: InstanceMethods
Constant Summary collapse
- Unassigned =
Class.new(StandardError)
Instance Method Summary collapse
- #add_reader_for(role) ⇒ Object
- #add_role(role) ⇒ Object
- #add_role_to_class(role, casting) ⇒ Object
- #add_writer_for(role) ⇒ Object
- #cast_as(role, actor) ⇒ Object
- #define_casting_director ⇒ Object
- #defing_casting_director(casting_agent) ⇒ Object
- #included(base) ⇒ Object
-
#initialize(wrappers, *roles, **where, &block) ⇒ Roles
constructor
A new instance of Roles.
Constructor Details
#initialize(wrappers, *roles, **where, &block) ⇒ Roles
Returns a new instance of Roles.
5 6 7 8 9 10 11 |
# File 'lib/wrapper_based/roles.rb', line 5 def initialize(wrappers, *roles, **where, &block) @casting_agent = (where.keys | roles.map(&:to_sym)).inject {|cast, role| cast[role] = Casting.new(role, wrappers) } @casting_agent.keys.each { |role| add_role role } where.each_pair {|role, trait| @casting[role].as trait } define_casting_director(@casting_agent) include InstanceMethods end |
Instance Method Details
#add_reader_for(role) ⇒ Object
30 31 32 33 34 |
# File 'lib/wrapper_based/roles.rb', line 30 def add_reader_for(role) define_method(role) do _casting_director_.fetch(role) { raise Roles::Unassigned, "Role '#{role}' is missing.", caller } end end |
#add_role(role) ⇒ Object
25 26 27 28 |
# File 'lib/wrapper_based/roles.rb', line 25 def add_role(role) add_reader_for(role) add_writer_for(role) end |
#add_role_to_class(role, casting) ⇒ Object
44 45 46 |
# File 'lib/wrapper_based/roles.rb', line 44 def add_role_to_class(role, casting) define_singleton_method(role) { casting } end |
#add_writer_for(role) ⇒ Object
36 37 38 39 40 41 42 |
# File 'lib/wrapper_based/roles.rb', line 36 def add_writer_for(role) role_player = :"@#{role}" define_method(:"#{role}=") do |actor| instance_variable_set(role_player, actor) _casting_director_.cast_as role, actor end end |
#cast_as(role, actor) ⇒ Object
13 14 15 |
# File 'lib/wrapper_based/roles.rb', line 13 def cast_as role, actor end |
#define_casting_director ⇒ Object
48 49 50 |
# File 'lib/wrapper_based/roles.rb', line 48 def define_casting_director roles = self end |
#defing_casting_director(casting_agent) ⇒ Object
17 18 19 |
# File 'lib/wrapper_based/roles.rb', line 17 def defing_casting_director(casting_agent) define_method(:_casting_director_) { @_casting_director ||= CastingDirector.new(casting_agent) } end |
#included(base) ⇒ Object
52 53 54 |
# File 'lib/wrapper_based/roles.rb', line 52 def included(base) base.extend ClassMethods end |