In Files

Parent

Class/Module Index [+]

Quicksearch

ArrayOf

ArrayOf is a subclass of Array whose elements are supposed to be all of the same class. This is not intended to be used directly, but rather to be subclassed as needed (see for example Irc::UserList and Irc::NetmaskList)

Presently, only very few selected methods from Array are overloaded to check if the new elements are the correct class. An orthodox? method is provided to check the entire ArrayOf against the appropriate class.

Attributes

element_class[R]

Public Class Methods

new(kl, ar=[]) click to toggle source

Create a new ArrayOf whose elements are supposed to be all of type kl, optionally filling it with the elements from the Array argument.

# File lib/rbot/irc.rb, line 374
def initialize(kl, ar=[])
  raise TypeError, "#{kl.inspect} must be a class name" unless kl.kind_of?(Class)
  super()
  @element_class = kl
  case ar
  when Array
    insert(0, *ar)
  else
    raise TypeError, "#{self.class} can only be initialized from an Array"
  end
end

Public Instance Methods

&(ar) click to toggle source

Overloaded from Array#&, checks for appropriate class of argument elements

# File lib/rbot/irc.rb, line 433
def &(ar)
  r = super(ar)
  ArrayOf.new(@element_class, r) if internal_will_accept?(true, *r)
end
+(ar) click to toggle source

Overloaded from Array#+, checks for appropriate class of argument elements

# File lib/rbot/irc.rb, line 440
def +(ar)
  ArrayOf.new(@element_class, super(ar)) if internal_will_accept?(true, *ar)
end
-(ar) click to toggle source

Overloaded from Array#-, so that an ArrayOf is returned. There is no need to check the validity of the elements in the argument

# File lib/rbot/irc.rb, line 447
def -(ar)
  ArrayOf.new(@element_class, super(ar)) # if internal_will_accept?(true, *ar)
end
<<(el) click to toggle source

Overloaded from Array#<<, checks for appropriate class of argument

# File lib/rbot/irc.rb, line 427
def <<(el)
  super(el) if internal_will_accept?(true, el)
end
concat(ar) click to toggle source

Overloaded from Array#concat, checks for appropriate class of argument elements

# File lib/rbot/irc.rb, line 460
def concat(ar)
  super(ar) if internal_will_accept?(true, *ar)
end
downcase() click to toggle source

We introduce the 'downcase' method, which maps downcase() to all the Array elements, properly failing when the elements don't have a downcase method

# File lib/rbot/irc.rb, line 496
def downcase
  self.map { |el| el.downcase }
end
insert(idx, *ar) click to toggle source

Overloaded from Array#insert, checks for appropriate class of argument elements

# File lib/rbot/irc.rb, line 467
def insert(idx, *ar)
  super(idx, *ar) if internal_will_accept?(true, *ar)
end
inspect() click to toggle source
# File lib/rbot/irc.rb, line 386
def inspect
  self.__to_s__[0..-2].sub(/:[^:]+$/,"[#{@element_class}]\\0") + " #{super}>"
end
push(*ar) click to toggle source

Overloaded from Array#push, checks for appropriate class of argument elements

# File lib/rbot/irc.rb, line 481
def push(*ar)
  super(*ar) if internal_will_accept?(true, *ar)
end
replace(ar) click to toggle source

Overloaded from Array#replace, checks for appropriate class of argument elements

# File lib/rbot/irc.rb, line 474
def replace(ar)
  super(ar) if (ar.kind_of?(ArrayOf) && ar.element_class <= @element_class) or internal_will_accept?(true, *ar)
end
unshift(*els) click to toggle source

Overloaded from Array#unshift, checks for appropriate class of argument(s)

# File lib/rbot/irc.rb, line 487
def unshift(*els)
  els.each { |el|
    super(el) if internal_will_accept?(true, *els)
  }
end
valid?() click to toggle source

This method checks that all elements are of the appropriate class

# File lib/rbot/irc.rb, line 414
def valid?
  will_accept?(*self)
end
validate() click to toggle source

This method is similar to the above, except that it raises an exception if the receiver is not valid

# File lib/rbot/irc.rb, line 421
def validate
  raise TypeError unless valid?
end
will_accept?(*els) click to toggle source

This method checks if the passed arguments are acceptable for our ArrayOf

# File lib/rbot/irc.rb, line 408
def will_accept?(*els)
  internal_will_accept?(false, *els)
end
|(ar) click to toggle source

Overloaded from Array#|, checks for appropriate class of argument elements

# File lib/rbot/irc.rb, line 453
def |(ar)
  ArrayOf.new(@element_class, super(ar)) if internal_will_accept?(true, *ar)
end

Private Instance Methods

internal_will_accept?(raising, *els) click to toggle source

Private method to check the validity of the elements passed to it and optionally raise an error

TODO should it accept nils as valid?

# File lib/rbot/irc.rb, line 395
def internal_will_accept?(raising, *els)
  els.each { |el|
    unless el.kind_of?(@element_class)
      raise TypeError, "#{el.inspect} is not of class #{@element_class}" if raising
      return false
    end
  }
  return true
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.