Home

Awesome

observable

This project is being built weekly with the latest crystal version (works with v1.7.2 🎉)

Simple implementation of the Observer pattern in Crystal. It is loosely based on the Observable module from Ruby :)

The observer pattern is used to avoid tightly coupling objects that stand in a one-to-many relationship. It allows you to notify dependents about changes that happened to your object, without having hard-coded dependencies :)

Installation

Add to your shard.yml

dependencies:
  observable:
    github: tpei/observable
    branch: master

and then install the library into your project with

$ crystal deps

Usage

Include observable in the class you want to observe:

require "observable/observable"

class ToObserve
  include Observable
end

This provides you with the following methods:

and as an added bonus, because I dislike the forced changed call precondition:

Then you can include observer in the class you want observing:

require "observable/observer"

class Observing
  include Observer

  def update(observable : Observable)
    # do whatever you want to do if your observable changes
  end
end

This only gives you an update(observable : Observable) method you should override, because it willl raise an error otherwise.

Unfortunately we don't have ruby's verbosity and dynamism here so it's all a little more static. Especially the update method can really only pass on the observable object.