Skip to content
/ cony Public

Cony sends AMQP notifications when your model changes.

License

Notifications You must be signed in to change notification settings

ninech/cony

Repository files navigation

🐰 Cony Build Status Code Climate

Cony sends notifications about the lifecycle of your models via AMQP.

Setup

Rails

In Rubo on Rails add this to your Gemfile and run bundle install.

gem 'cony'

To configure the AMQP-Settings, use an initializer (e.g. config/initializers/cony.rb) with the following content.

Cony.configure do |config|
  config.amqp = {
    host: 'localhost',
    exchange: 'organization.application',
    ssl: true,
    user: 'username',
    pass: 'secret',
  }
  config.test_mode = Rails.env.test?
  # config.durable = false
end

Getting Started

To enable the notifications for a model, you just need to include the corresponding class. For ActiveRecord use the following snippet.

class ExampleModel < ActiveRecord::Base
  include Cony::ActiveRecord
end

Message Format

The routing key for the messages have a format of model_name_with_underscore.mutation.event_type.

It will append the id of the model and the detected changes to the payload of the message.

Create

A create for a Example::Model model will have a routing key of example/model.mutation.created.

The sent JSON structure will look like this:

{
  "id": 1337,
  "changes": [
    { "name": { "old": null, "new": "value" } },
    { "description": { "old": null, "new": "value" } }
  ],
  "event": "created",
  "model": "Example::Model",
}

Update

An update for a Example::Model model will have a routing key of example/model.mutation.updated.

The sent JSON structure will look like this:

{
  "id": 1337,
  "changes": [
    { "name": { "old": "old-value", "new": "new-value" } }
  ],
  "event": "updated",
  "model": "Example::Model",
}

Destroy

A destroy event for a Example::Model model will have a routing key of example/model.mutation.destroyed.

The sent JSON structure will look like this:

{
  "id": 1337,
  "changes": [
    { "name": { "old": "value", "new": null } }
  ],
  "event": "destroyed",
  "model": "Example::Model",
}

About

This gem is currently maintained and funded by nine.