Composite version 0.3.0

Overview

Mixin module to create classes where the 'whole' object is seen as being composed of 'parts'. Allowing access to some object both as composed as well as in parts. The typical use case is a subclass of String that is used to deal with a string that has a certain format and supports accessor methods to its parts, for example an URI/IRI, a BCP 47 language tag, a name or address in a certain format, and so on.

Usage

class myComposite < BaseClass
  def initialize (n)
    super(n)
  end
  part :part1, :part2, ...
  def compose
    # calculate a value for the BaseClass object
    # from @part1, @part2,...
  end
  def decompose
    # calculate @part1, @part2,...
    # from the value of BaseClass
  end
end

The above provides methods part1, part1=, part2, part2=,… for access to parts.

Performance

decompose is called on each access (both read and write) to any of the parts, because it's impossible to predict when the BaseClass object changes (all methods of the BaseClass would need to be patched). If decompose takes time, it may be possible to speed things up by saving a copy of the BaseClass object, or its hash, internally and do a comparison to see if anything has changed.

Copyright

Copyright © 2007 Martin J. Du“rst (duerst@it.aoyama.ac.jp) Licensed under the same terms as Ruby. Absolutely no warranty. (see www.ruby-lang.org/en/LICENSE.txt)