observable alternatives and similar shards
Based on the "Misc" category.
Alternatively, view observable alternatives based on common mentions on social networks and blogs.
-
sentry
Build/Runs your crystal application, watches files, and rebuilds/restarts app on file changes -
burocracia.cr
👔 Zero-dependency Crystal shard to validate, generate and format Brazilian burocracias (CPF, CNPJ, CEP) -
wikicr
Wiki in crystal, using Markdown and Git, inspired by dokuwiki. Last features to build are pretty hard, if you have some time to help... :) -
defined
This shard provides facilities for checking whether a constant exists at compile time, and for a variety of different conditional compilation options. Code can be conditionally compiled based on the existence of a constant, version number constraints, or whether an environment variable is set truthy or not.
InfluxDB - Purpose built for real-time analytics at any scale.
Do you think we are missing an alternative of observable or a related project?
README
observable
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:
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
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.