module Peregrine::Collections::Named

Provides methods for filtering collections by item names. This module is intended to be an extension to existing collection instances.

Public Instance Methods

named(matcher) { |item| ... } click to toggle source

Returns an array of all items with a name that matches the given matcher. The matcher may be a Regexp for fine-tuned matching or any other object for specific equality matching. Yields the matching items in the collection if a block is given.

Examples

Using a regular expression as a matcher:

manager = Peregrine::EntityManager.new do |manager|
  manager.spawn { |entity| entity.name = 'Example' }
end
manager.entities.named(/^Ex/) # => [ Entity 'Example' ... ]

Using a string as a matcher:

manager = Peregrine::EntityManager.new do |manager|
  manager.spawn { |entity| entity.name = 'Example' }
end
manager.entities.named('Example') # => [ Entity 'Example' ... ]
# File lib/peregrine/collections/named.rb, line 24
def named(matcher)
  items = select do |item|
    next unless item.respond_to?(:name)
    matcher.is_a?(Regexp) ? item.name[matcher] : item.name == matcher.to_s
  end
  items.each { |item| yield item } if block_given?
  items.extend(Collections)
end