class Acting::Actor

Public Class Methods

new(actor, role) click to toggle source
# File lib/acting.rb, line 60
def initialize(actor, role)
  raise "#{actor.inspect} not kind of Acting::Cast" unless actor.kind_of? Cast
  @actor = actor
  @role = role
end

Public Instance Methods

play() click to toggle source
# File lib/acting.rb, line 66
def play
  assign_behaviour
end
quit() click to toggle source
# File lib/acting.rb, line 70
def quit
  revoke_behaviour
end

Private Instance Methods

assign_behaviour() click to toggle source
# File lib/acting.rb, line 98
def assign_behaviour
  @actor.send :__inject_methods__, role_methods
end
revoke_behaviour() click to toggle source
# File lib/acting.rb, line 102
def revoke_behaviour
  @actor.send :__remove_methods__, role_methods
end
role_methods() click to toggle source
# File lib/acting.rb, line 75
def role_methods
  unless @role_methods
    method_names = @role.instance_methods

    if RUBY_VERSION =~ /2\.0/
      @role_methods = method_names.map do |name|
        @role.instance_method name
      end
    else
      # interim object so we can bind the method
      # willy nilly (no 'kind_of?(@role) == true' required)
      object = Object.new
      object.extend @role

      @role_methods = method_names.map do |name|
        object.method(name).unbind
      end
    end

  end
  @role_methods
end