lib/roleplay.rb in roleplay-0.0.2 vs lib/roleplay.rb in roleplay-0.0.3

- old
+ new

@@ -6,30 +6,47 @@ base.send(:extend, ClassMethods) end def playing(name) modules = self.class.roles[name] + raise "role #{name} does not define any modules" unless modules.present? value = self.dup + value.singleton_class.send(:attr_accessor, :role) + value.role = {name => modules} modules.each do |m| value.extend m end value end alias :as_a :playing + def playing!(name) + modules = self.class.roles[name] + raise "role #{name} does not define any modules" unless modules.present? + singleton_class.send(:attr_accessor, :role) + self.role = {name => modules} + modules.each do |m| + extend m + end + self + end + alias :as_a! :playing! + module ClassMethods attr_accessor :roles def plays_role(name, opts={}) @roles ||= {} + raise "no modules specified for role #{name}" unless opts[:using].present? roles[name] = [opts[:using]].flatten end def new_with_role(name) value = new - value.singleton_class.send(:attr_accessor, :role) modules = roles[name] + raise "role #{name} does not define any modules" unless modules.present? + value.singleton_class.send(:attr_accessor, :role) value.role = {name => modules} modules.each do |m| value.extend m end value