observable v0.0.4

Implementation of the Observer pattern in crystal
  • v0.0.4 - June 15, 2020
  • v0.0.3 - June 15, 2020
  • 0.0.2 - February 15, 2017

observable Build Status

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 :)


Add to your shard.yml

    github: tpei/observable
    branch: master

and then install the library into your project with

$ crystal deps


Include observable in the class you want to observe:

require "observable/observable"

class ToObserve
  include Observable

This provides you with the following methods:

  • add_observer(observer : Observer)
  • changed(state=true)
  • changed?
  • count_observers
  • delete_observer(observer : Observer)
  • delete_observers
  • notify_observers

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

  • notify_observers!, which notifies no matter if changed or not

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

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.

github statistic
  • 6
  • 0
  • 0
  • 0
  • 24 days ago
  • June 10, 2016

MIT License

Synced at

Thu, 09 Jul 2020 11:29:54 GMT