A simple implementation of the observer pattern for Ruby programs.
Ruby
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
test
.gitignore
Gemfile
Gemfile.lock
HISTORY
LICENSE
README.md
Rakefile
observatory.gemspec
watch_tests.rb

README.md

Observatory

Overview

Description

Observatory is a simple Ruby gem that implements the observer design pattern to facilitate loosely coupled communication between objects in your program. It allows one object to publish an event, and others to respond to that.

Using Observatory you can apply filters to method arguments, respond to events in your program or dynamically inject new functionality.

What's new?

See HISTORY for a list of changes per version.

Usage

Installation

Observatory is distributed as a Ruby gem, so installation is simple:

$ gem install observatory

Then, you only need to load it in your program using Bundler or a manual require, like so:

require 'observatory'

Quick start

For full documentation refer to the inline API docs (which you can generate using the yard rake task). A quick overview:

class Post
  include Observatory::Observable
  
  attr_reader :dispatcher, :title
  
  def initialize(title, dispatcher)
    @title = title
    @dispatcher = dispatcher
  end
  
  def publish
    notify 'post.publish', :title => title
  end
  
  def title
    filter('post.title', @title).return_value
  end
end

class Logger
  include Observatory::Observer
  
  def initialize(dispatcher)
    @dispatcher = dispatcher
  end
  
  observe 'post.publish'
  def log(event)
    "Post published: #{event[:title]}"
  end
end

dispatcher = Observatory::Dispatcher.new

dispatcher.connect('post.title') do |event, title|
  "Title: #{title}"
end

p = Post.new('foo', dispatcher)
l = Logger.new(dispatcher)

p.publish
# => Outputs: 'Post published: Title: foo'

More information

To Do

  • Complete unit tests for mixins.

Note on Patches/Pull Requests

  • Fork the project.
  • Make your feature addition or bug fix.
  • Add tests for it. This is important so I don't break it in a future version unintentionally.
  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
  • Send me a pull request. Bonus points for topic branches.

Credits

By Arjan van der Gaag arjan@arjanvandergaag.nl. Based on the Event Dispatcher Symfonoy Component.

License

Observatory is released under the same license as Ruby. See LICENSE for more information.