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