Gem that enables you to easily subscribe to Zaikio's webhooks. It also enables other gems to subscribe to events.
gem 'zaikio-webhooks'
And then execute:
$ bundle
Or install it yourself as:
$ gem install zaikio-webhook
# config/initializers/zaikio_webhooks.rb
Zaikio::Webhooks.configure do |config|
config.register_client :my_app do |my_app|
my_app.shared_secret = "test-secret"
end
config.register_client :my_other_app do |my_other_app|
my_other_app.shared_secret = "test-secret"
end
end
mount Zaikio::Webhooks::Engine => "/zaikio/webhook"
The final webhook URL will be:
https://mydomain.de/zaikio/webhook/:client_name
It is recommended to configure background processing, if not all events are performed immediately. Read the ActiveJob Rails Guide for more details.
Every webhook callback expects one job. The job receives the event with useful attributes:
class AddMachineJob < ApplicationJob
def perform(event)
event.id # UUID
event.name # directory.machine_added
event.subject_type # Organization
event.subject_id # UUID of the subject
event.link # optional URL
event.payload # Hash with the payload data
event.created_at # DateTime
event.received_at # DateTime
end
end
Login to Zaikio Hub and go to your Apps and go to Edit App and add your webhook URL e.g. https://mydomain.de/zaikio/webhook/my_app_name
.
Now you should receive all events you subscribed to.
When everything is set up you can register events with custom jobs, using the
Zaikio::Webhooks.on
function. This is idempotent and can be safely re-executed.
We can setup an initializer like so:
# config/initializers/zaikio_webhooks.rb
# We need to add this special wrapper here because we're referencing autoloaded constants
# (RevokeAccessTokenJob, AddMachineJob) at boot time. For more information, see:
# https://guides.rubyonrails.org/autoloading_and_reloading_constants.html#autoloading-when-the-application-boots
Rails.application.reloader.to_prepare do
# Perform job immediately, for all clients
Zaikio::Webhooks.on "directory.revoked_access_token", RevokeAccessTokenJob,
perform_now: true
# Only for a specific client
Zaikio::Webhooks.on "directory.machine_added", AddMachineJob,
client_name: :my_app, options: { custom_keyword_argument_for_job: "value" }
end
- Make your changes and submit a pull request for them
- Make sure to update
CHANGELOG.md
To release a new version of the gem:
- Update the version in
lib/zaikio/webhooks/version.rb
- Update
CHANGELOG.md
to include the new version and its release date - Commit and push your changes
- Create a new release on GitHub
- CircleCI will build the Gem package and push it Rubygems for you