class Woyo::Attributes::Exclusion
Attributes
default[R]
Public Class Methods
new(attributes, *members)
click to toggle source
Calls superclass method
Woyo::Attributes::Group::new
# File lib/woyo/world/group.rb, line 36 def initialize attributes, *members super if @members && ! @members.empty? @default = @members.first self[@default] = true @members.each { |member| @attributes.add_listener member, self } end end
Public Instance Methods
<<(new_member)
click to toggle source
Calls superclass method
# File lib/woyo/world/group.rb, line 45 def << new_member raise "#{new_member} is not an attribute" unless @attributes.names.include? new_member super if @members.count == 1 @default = new_member @attributes.set new_member, true else @attributes.set new_member, false end @attributes.add_listener new_member, self self end
[]=(this_member, value)
click to toggle source
Calls superclass method
# File lib/woyo/world/group.rb, line 58 def []= this_member, value raise "#{this_member} is not a member of this group" unless @members.include? this_member super if value #true # sync group members via AttributesHash#set to prevent triggering notify @members.each { |member| @attributes.set(member,false) unless member == this_member } else #false if self.count == 2 # binary group @members.each { |member| @attributes.set member ,(member != this_member ) } else self[@default] = true # revert to default end end end
default!()
click to toggle source
# File lib/woyo/world/group.rb, line 83 def default! self[@default] = true end
notify(this_member, value)
click to toggle source
# File lib/woyo/world/group.rb, line 73 def notify this_member, value # assuming value==true for now # sync group members via AttributesHash#set to prevent re-triggering notify @members.each { |member| @attributes.set(member,false) unless member == this_member } end
value()
click to toggle source
# File lib/woyo/world/group.rb, line 79 def value @members.detect { |member| @attributes[member] } # name of first member with true value end