zaikio-webhooks 0.0.3 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +44 -7
- data/app/controllers/zaikio/webhooks/webhooks_controller.rb +6 -4
- data/config/initializers/register_zaikio_webhooks_event_serializer.rb +1 -0
- data/lib/zaikio/webhooks.rb +6 -5
- data/lib/zaikio/webhooks/configuration.rb +1 -1
- data/lib/zaikio/webhooks/event.rb +2 -1
- data/lib/zaikio/webhooks/event_serializer.rb +17 -0
- data/lib/zaikio/webhooks/version.rb +1 -1
- metadata +12 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf6756e5fa3c37dfe5d4aed4cc5566d3390071a8e00be34345db988175dd4906
|
4
|
+
data.tar.gz: 0a0ca2e2511ce82f4ec2505ca1389ced5062f23edaee106431162fa3d7cb93d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9945cb3f9ab6f0b08650ee1ca71e40c82c04e4f52844fe6774d46718361d22443b2d41c337b86e66de23ccb4e663768a0ad079c8da83929c6d93c45765b99270
|
7
|
+
data.tar.gz: b85e483c5e7fc506aaee90c171b62a336ab99e88d11ffbf9ff67f4257bc931768bcb1719e48aeba79c4e20f6fd0f6d0c36b266e757cbbf7e32fbb4df6e28cf31
|
data/README.md
CHANGED
@@ -34,13 +34,6 @@ Zaikio::Webhooks.configure do |config|
|
|
34
34
|
my_other_app.shared_secret = "test-secret"
|
35
35
|
end
|
36
36
|
end
|
37
|
-
|
38
|
-
# Perform job immediately, for all clients
|
39
|
-
Zaikio::Webhooks.on "directory.revoked_access_token", RevokeAccessTokenJob,
|
40
|
-
perform_now: true
|
41
|
-
# Only for a specific client
|
42
|
-
Zaikio::Webhooks.on "directory.machine_added", AddMachineJob,
|
43
|
-
client_name: :my_app
|
44
37
|
```
|
45
38
|
|
46
39
|
### 3. Mount Engine
|
@@ -77,3 +70,47 @@ class AddMachineJob < ApplicationJob
|
|
77
70
|
end
|
78
71
|
end
|
79
72
|
```
|
73
|
+
|
74
|
+
### 6. Add Webhook URL to Zaikio Hub
|
75
|
+
|
76
|
+
Login to [Zaikio Hub](https://directory.zaikio.com/) 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`.
|
77
|
+
|
78
|
+
Now you should receive all events you subscribed to.
|
79
|
+
|
80
|
+
### 7. Usage
|
81
|
+
|
82
|
+
When everything is set up you can register events with custom jobs, using the
|
83
|
+
`Zaikio::Webhooks.on` function. This is idempotent and can be safely re-executed.
|
84
|
+
|
85
|
+
For Rails 6.0 and above, we can setup an initializer like so:
|
86
|
+
|
87
|
+
```rb
|
88
|
+
# config/initializers/zaikio_webhooks.rb
|
89
|
+
|
90
|
+
# We need to add this special wrapper here because we're referencing autoloaded constants
|
91
|
+
# (RevokeAccessTokenJob, AddMachineJob) at boot time. For more information, see:
|
92
|
+
# https://guides.rubyonrails.org/autoloading_and_reloading_constants.html#autoloading-when-the-application-boots
|
93
|
+
Rails.application.reloader.to_prepare do
|
94
|
+
# Perform job immediately, for all clients
|
95
|
+
Zaikio::Webhooks.on "directory.revoked_access_token", RevokeAccessTokenJob,
|
96
|
+
perform_now: true
|
97
|
+
# Only for a specific client
|
98
|
+
Zaikio::Webhooks.on "directory.machine_added", AddMachineJob,
|
99
|
+
client_name: :my_app
|
100
|
+
end
|
101
|
+
```
|
102
|
+
|
103
|
+
If you're using a Rails v5.2 or less, you can skip the outer `Rails.application.reloader`
|
104
|
+
block and just use the inner section directly.
|
105
|
+
|
106
|
+
## Contributing
|
107
|
+
|
108
|
+
- Make your changes and submit a pull request for them
|
109
|
+
- Make sure to update `CHANGELOG.md`
|
110
|
+
|
111
|
+
To release a new version of the gem:
|
112
|
+
- Update the version in `lib/zaikio/webhooks/version.rb`
|
113
|
+
- Update `CHANGELOG.md` to include the new version and its release date
|
114
|
+
- Commit and push your changes
|
115
|
+
- Create a [new release on GitHub](https://github.com/zaikio/zaikio-webhooks/releases/new)
|
116
|
+
- CircleCI will build the Gem package and push it Rubygems for you
|
@@ -5,9 +5,10 @@ module Zaikio
|
|
5
5
|
before_action :verify_signature
|
6
6
|
|
7
7
|
def receive_event
|
8
|
-
Zaikio::Webhooks.webhooks_for(params[:client_name], event_params[:name])
|
9
|
-
|
10
|
-
|
8
|
+
Zaikio::Webhooks.webhooks_for(params[:client_name], event_params[:name])
|
9
|
+
.each do |job_klass, options|
|
10
|
+
job_klass.public_send(options[:perform_now] ? :perform_now : :perform_later,
|
11
|
+
Zaikio::Webhooks::Event.new(event_params))
|
11
12
|
end
|
12
13
|
|
13
14
|
head :ok
|
@@ -29,7 +30,8 @@ module Zaikio
|
|
29
30
|
end
|
30
31
|
|
31
32
|
def event_params
|
32
|
-
params.permit(:id, :name, :subject, :timestamp,
|
33
|
+
params.permit(:id, :client_name, :name, :subject, :timestamp,
|
34
|
+
:version, :link, :received_at, payload: {})
|
33
35
|
end
|
34
36
|
end
|
35
37
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Rails.application.config.active_job.custom_serializers << Zaikio::Webhooks::EventSerializer
|
data/lib/zaikio/webhooks.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
+
require "active_support/core_ext/integer/time"
|
1
2
|
require "zaikio/webhooks/configuration"
|
2
3
|
require "zaikio/webhooks/event"
|
4
|
+
require "zaikio/webhooks/event_serializer"
|
3
5
|
require "zaikio/webhooks/engine"
|
4
6
|
|
5
7
|
module Zaikio
|
@@ -30,7 +32,7 @@ module Zaikio
|
|
30
32
|
end
|
31
33
|
|
32
34
|
def webhooks_for(client_name, event_name)
|
33
|
-
(@webhooks.dig(client_name.to_s, event_name.to_s) ||
|
35
|
+
(@webhooks.dig(client_name.to_s, event_name.to_s) || {})
|
34
36
|
end
|
35
37
|
|
36
38
|
def on(event_name, job_klass, client_name: nil, perform_now: false)
|
@@ -40,10 +42,9 @@ module Zaikio
|
|
40
42
|
client_names = Array(client_name || configuration.all_client_names).map(&:to_s)
|
41
43
|
client_names.each do |name|
|
42
44
|
@webhooks[name] ||= {}
|
43
|
-
@webhooks[name][event_name.to_s] ||=
|
44
|
-
@webhooks[name][event_name.to_s]
|
45
|
-
perform_now: perform_now
|
46
|
-
job_klass: job_klass
|
45
|
+
@webhooks[name][event_name.to_s] ||= {}
|
46
|
+
@webhooks[name][event_name.to_s][job_klass] = {
|
47
|
+
perform_now: perform_now
|
47
48
|
}
|
48
49
|
end
|
49
50
|
end
|
@@ -5,7 +5,8 @@ module Zaikio
|
|
5
5
|
class Event
|
6
6
|
extend Forwardable
|
7
7
|
attr_reader :data
|
8
|
-
|
8
|
+
|
9
|
+
def_delegators :data, :id, :name, :version, :payload, :link, :client_name, :to_h
|
9
10
|
|
10
11
|
def initialize(event_data)
|
11
12
|
@data = OpenStruct.new(event_data)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Zaikio
|
2
|
+
module Webhooks
|
3
|
+
class EventSerializer < ActiveJob::Serializers::ObjectSerializer
|
4
|
+
def serialize?(argument)
|
5
|
+
argument.is_a? Event
|
6
|
+
end
|
7
|
+
|
8
|
+
def serialize(event)
|
9
|
+
super(event.to_h)
|
10
|
+
end
|
11
|
+
|
12
|
+
def deserialize(data)
|
13
|
+
Event.new(data)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
metadata
CHANGED
@@ -1,35 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zaikio-webhooks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zaikio GmbH
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '6.0'
|
20
17
|
- - ">="
|
21
18
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
19
|
+
version: 5.0.0
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- - "~>"
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '6.0'
|
30
24
|
- - ">="
|
31
25
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
26
|
+
version: 5.0.0
|
33
27
|
description: Handle incoming Zaikio loom webhooks
|
34
28
|
email:
|
35
29
|
- js@crispymtn.com
|
@@ -41,6 +35,7 @@ files:
|
|
41
35
|
- README.md
|
42
36
|
- Rakefile
|
43
37
|
- app/controllers/zaikio/webhooks/webhooks_controller.rb
|
38
|
+
- config/initializers/register_zaikio_webhooks_event_serializer.rb
|
44
39
|
- config/routes.rb
|
45
40
|
- lib/tasks/zaikio/webhook_tasks.rake
|
46
41
|
- lib/zaikio/webhooks.rb
|
@@ -48,11 +43,14 @@ files:
|
|
48
43
|
- lib/zaikio/webhooks/configuration.rb
|
49
44
|
- lib/zaikio/webhooks/engine.rb
|
50
45
|
- lib/zaikio/webhooks/event.rb
|
46
|
+
- lib/zaikio/webhooks/event_serializer.rb
|
51
47
|
- lib/zaikio/webhooks/version.rb
|
52
|
-
homepage: https://
|
48
|
+
homepage: https://github.com/zaikio/zaikio-webhooks
|
53
49
|
licenses:
|
54
50
|
- MIT
|
55
|
-
metadata:
|
51
|
+
metadata:
|
52
|
+
changelog_uri: https://github.com/zaikio/zaikio-webhooks/blob/main/CHANGELOG.md
|
53
|
+
source_code_uri: https://github.com/zaikio/zaikio-webhooks
|
56
54
|
post_install_message:
|
57
55
|
rdoc_options: []
|
58
56
|
require_paths:
|
@@ -61,14 +59,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
61
59
|
requirements:
|
62
60
|
- - ">="
|
63
61
|
- !ruby/object:Gem::Version
|
64
|
-
version:
|
62
|
+
version: 2.6.5
|
65
63
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
64
|
requirements:
|
67
65
|
- - ">="
|
68
66
|
- !ruby/object:Gem::Version
|
69
67
|
version: '0'
|
70
68
|
requirements: []
|
71
|
-
rubygems_version: 3.1.
|
69
|
+
rubygems_version: 3.1.4
|
72
70
|
signing_key:
|
73
71
|
specification_version: 4
|
74
72
|
summary: Handle incoming Zaikio loom webhooks
|