doc/diff.rd

# Diff

`diff.rb` - computes the differences between two arrays or strings. Copyright (C) 2001-2002 Lars Christensen.

## Synopsis

    diff = Diff.diff(a, b)
    a.diff(b)
    b = a.patch(diff)

## Module Diff

### Module Methods

`Diff.diff(a, b, &block)`

  Creates a different set which represents the differences between a and b. a and b can be either be arrays with elements of any type, strings, or object of any class that include module Diffable

  If a block is not given, the default is to compact the difference set elements into an array of element of the type `[action,position,elements]`. If action is :+, the array represent elements which is in b but not a which are inserted at position. If action is :-, the array represents elements which are in a at position but has been removed from b. If the original data was arrays, elements will be an array of elements. If the original data was Strings, then elements will be a string.c

  If a block is given, it will be passed each of the element in the difference set. Each time it is called, three arguments are passed: action, position and element. Action is either :+ or :- for add or remove element, respectively. If the action is :+, position will denote the position to add element in the destination set, given all previous before this are changed. If the action is :-, position will denote the position to delete elements from the original set.

## Module Diffable

The Diffable module can be included into classes that you want to compute difference sets for Diffable is included into String and Array when `diff.rb` is `require`'d.

Classes including Diffable should implement `[]` to get element at integer indices, `<<` and `push` to append elements to the object and `ClassName#new` should accept 0 arguments to create a new empty object. Finally, the class must implement the length method which should return the number of element in the array.

### Instance Methods

`Diffable#diff(b, &block)`

  Convinience method which calls Diff.diff(self, b, &block).

`Diffable#patch(diff)`

  Applies the differences from diff to the object obj and return the result. obj is not changed. obj and can be either an array or a string, but must match the object from which the diff was created.