require "roleplay/version"

module Roleplay

  def included(base)
    base.send(:extend, ClassMethods)
  end

  def playing(name)
    modules = self.class.roles[name]
    value = self.dup
    modules.each do |m|
      value.extend m
    end
    value
  end
  alias :as_a :playing

  module ClassMethods

    attr_accessor :roles

    def plays_role(name, opts={})
      @roles ||= {}
      roles[name] = [opts[:using]].flatten
    end

    def new_with_role(name)
      value = new
      value.singleton_class.send(:attr_accessor, :role)
      modules = roles[name]
      value.role = {name => modules}
      modules.each do |m|
        value.extend m
      end
      value
    end
  end
end

Object.send(:include, Roleplay)