hanami-events-cloud_pubsub 1.0.0 → 1.0.1
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 +5 -5
- data/.rubocop_todo.yml +8 -4
- data/Gemfile.lock +1 -1
- data/README.md +28 -21
- data/lib/hanami/events/adapter/cloud_pubsub.rb +0 -11
- data/lib/hanami/events/cloud_pubsub/cli.rb +4 -18
- data/lib/hanami/events/cloud_pubsub/integration.rb +96 -0
- data/lib/hanami/events/cloud_pubsub/register.rb +16 -0
- data/lib/hanami/events/cloud_pubsub/version.rb +1 -1
- data/lib/hanami/events/cloud_pubsub.rb +5 -9
- metadata +4 -3
- data/lib/hanami/events/cloud_pubsub/mixin.rb +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 97f77c6262cd320d8cfdbe03c2ebddcc69008d45
|
4
|
+
data.tar.gz: 5dd8219a8cf755fb32bfb75c8f4e3306bff6715b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c971196c9903b9466bed196532fda7d9bd4658d05c5a5ecac841ef6caec31aa0b1d356befccfc0ee5f4fa7a55436463f4b1e8faef7c9f9590f321869f28edba
|
7
|
+
data.tar.gz: 501ad612c1ab074e7d9ce4809770b4aa1423250e4e7b88e1f45db3f3fa7b942877c50e00a69c07b6e056ca4d0a11cd02a36622c82947b1ba513dbe04143be5b7
|
data/.rubocop_todo.yml
CHANGED
@@ -1,24 +1,28 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on 2018-06-
|
3
|
+
# on 2018-06-13 22:39:48 -0400 using RuboCop version 0.54.0.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
8
8
|
|
9
|
+
# Offense count: 1
|
10
|
+
# Configuration parameters: CountComments.
|
11
|
+
Metrics/MethodLength:
|
12
|
+
Max: 14
|
13
|
+
|
9
14
|
# Offense count: 1
|
10
15
|
# Configuration parameters: CountKeywordArgs.
|
11
16
|
Metrics/ParameterLists:
|
12
17
|
Max: 6
|
13
18
|
|
14
|
-
# Offense count:
|
19
|
+
# Offense count: 1
|
15
20
|
# Configuration parameters: AllowedVariables.
|
16
21
|
Style/GlobalVars:
|
17
22
|
Exclude:
|
18
23
|
- 'examples/server.rb'
|
19
|
-
- 'lib/hanami/events/cloud_pubsub/cli.rb'
|
20
24
|
|
21
|
-
# Offense count:
|
25
|
+
# Offense count: 23
|
22
26
|
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
23
27
|
# URISchemes: http, https
|
24
28
|
Metrics/LineLength:
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -3,15 +3,37 @@
|
|
3
3
|
|
4
4
|
## Installation
|
5
5
|
|
6
|
-
|
6
|
+
```ruby
|
7
|
+
bundle add hanami-events-cloud_pubsub
|
8
|
+
```
|
9
|
+
|
10
|
+
If using Hanami, register the adapter in your `config/environment.rb`:
|
7
11
|
|
8
12
|
```ruby
|
9
|
-
|
13
|
+
# config/environment.rb
|
14
|
+
# ...
|
15
|
+
require_relative './../lib/my_app'
|
16
|
+
require_relative './../apps/web/application'
|
17
|
+
# ...
|
18
|
+
|
19
|
+
require 'hanami/events/cloud_pubsub/register' # <----
|
10
20
|
```
|
11
21
|
|
12
|
-
|
22
|
+
Configure the pubsub adapter how you want (optional):
|
13
23
|
|
14
|
-
|
24
|
+
```ruby
|
25
|
+
# config/environment.rb
|
26
|
+
|
27
|
+
Hanami.configure do
|
28
|
+
environment :development do
|
29
|
+
cloud_pubsub do |config|
|
30
|
+
config.pubsub = { project_id: 'emulator' }
|
31
|
+
config.logger = Hanami.logger
|
32
|
+
# ...
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
```
|
15
37
|
|
16
38
|
## Usage
|
17
39
|
|
@@ -22,27 +44,12 @@ This gem is compatible with the
|
|
22
44
|
should pass this:
|
23
45
|
|
24
46
|
```ruby
|
25
|
-
|
47
|
+
Hanami.events.subscribe('user.deleted', id: 'my-subscriber-id') do |payload|
|
26
48
|
puts "Deleted user: #{payload}"
|
27
49
|
end
|
28
50
|
```
|
29
51
|
|
30
|
-
2.
|
31
|
-
merged](https://github.com/hanami/events/pull/76)
|
32
|
-
|
33
|
-
```ruby
|
34
|
-
class WelcomeMailer
|
35
|
-
include Hanami::Events::CloudPubsub::Mixin
|
36
|
-
|
37
|
-
subscribe_to $events, 'user.created', id: 'welcome-mailer'
|
38
|
-
|
39
|
-
def call(payload)
|
40
|
-
payload
|
41
|
-
end
|
42
|
-
end
|
43
|
-
```
|
44
|
-
|
45
|
-
3. Responding to events is done in a different process via the CLI.
|
52
|
+
2. Responding to events is done in a different process via the CLI.
|
46
53
|
|
47
54
|
First, create a config file:
|
48
55
|
|
@@ -41,8 +41,6 @@ module Hanami
|
|
41
41
|
# @param event_name [Symbol, String] the event name
|
42
42
|
# @param block [Block] to execute when event is broadcasted
|
43
43
|
def subscribe(event_name, id:, &block)
|
44
|
-
return false unless listening?
|
45
|
-
|
46
44
|
logger.debug("Subscribed listener \"#{id}\" for event \"#{event_name}\"")
|
47
45
|
|
48
46
|
@subscribers << Subscriber.new(event_name, block, logger)
|
@@ -56,15 +54,6 @@ module Hanami
|
|
56
54
|
pubs.each(&:stop).map(&:wait!)
|
57
55
|
end
|
58
56
|
|
59
|
-
def listen(should_listen = true)
|
60
|
-
@listen = should_listen
|
61
|
-
self
|
62
|
-
end
|
63
|
-
|
64
|
-
def listening?
|
65
|
-
!!@listen # rubocop:disable Style/DoubleNegation
|
66
|
-
end
|
67
|
-
|
68
57
|
private
|
69
58
|
|
70
59
|
attr_reader :logger
|
@@ -28,13 +28,9 @@ module Hanami
|
|
28
28
|
|
29
29
|
option :config,
|
30
30
|
type: :string,
|
31
|
-
default: './config/
|
31
|
+
default: './config/boot.rb',
|
32
32
|
desc: 'Config file which is loaded before starting the runner'
|
33
33
|
|
34
|
-
option :project_id,
|
35
|
-
type: :string,
|
36
|
-
desc: 'Project ID for the project'
|
37
|
-
|
38
34
|
def call(opts)
|
39
35
|
setup_env(opts)
|
40
36
|
parse_opts(opts)
|
@@ -55,7 +51,6 @@ module Hanami
|
|
55
51
|
|
56
52
|
def setup_env(opts)
|
57
53
|
ENV['PUBSUB_EMULATOR_HOST'] ||= 'localhost:8085' if opts[:emulator]
|
58
|
-
CloudPubsub.setup
|
59
54
|
end
|
60
55
|
|
61
56
|
def start_server
|
@@ -85,23 +80,14 @@ module Hanami
|
|
85
80
|
end
|
86
81
|
|
87
82
|
def parse_opts(opts)
|
88
|
-
@project_id = opts[:project_id]
|
89
83
|
@emulator = opts[:emulator]
|
90
84
|
@config = opts[:config]
|
91
85
|
end
|
92
86
|
|
93
87
|
def build_runner
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
pubsub_opts[:project_id] = @project_id if @project_id
|
98
|
-
|
99
|
-
pubsub = Google::Cloud::Pubsub.new pubsub_opts
|
100
|
-
$events = Hanami::Events.initialize(:cloud_pubsub,
|
101
|
-
pubsub: pubsub,
|
102
|
-
logger: logger,
|
103
|
-
listen: true)
|
104
|
-
@runner = Runner.new(logger: logger, adapter: $events.adapter)
|
88
|
+
Hanami::Components.resolve 'events'
|
89
|
+
events = Hanami::Components['events']
|
90
|
+
@runner = Runner.new(logger: logger, adapter: events.adapter)
|
105
91
|
end
|
106
92
|
|
107
93
|
def logger
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Hanami
|
4
|
+
module Events
|
5
|
+
module CloudPubsub
|
6
|
+
module Integration
|
7
|
+
# Helpers use to setup all integration with hanami
|
8
|
+
module Setup
|
9
|
+
module_function
|
10
|
+
|
11
|
+
def setup
|
12
|
+
register_events_adapter
|
13
|
+
register_hanami_component
|
14
|
+
hook_into_all
|
15
|
+
add_configuration_helpers
|
16
|
+
end
|
17
|
+
|
18
|
+
def register_events_adapter
|
19
|
+
::Hanami::Events::Adapter.register(:cloud_pubsub) do
|
20
|
+
require 'hanami/events/adapter/cloud_pubsub'
|
21
|
+
::Hanami::Events::Adapter::CloudPubsub
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def register_hanami_component
|
26
|
+
::Hanami::Components.register 'events' do
|
27
|
+
requires 'logger', 'code'
|
28
|
+
|
29
|
+
prepare { require 'hanami/events/cloud_pubsub' }
|
30
|
+
|
31
|
+
resolve do |conf|
|
32
|
+
CloudPubsub.configure do |config|
|
33
|
+
conf.cloud_pubsub.each { |blk| blk.call(config) }
|
34
|
+
end
|
35
|
+
|
36
|
+
::Hanami::Events.initialize(
|
37
|
+
:cloud_pubsub,
|
38
|
+
pubsub: Google::Cloud::Pubsub.new,
|
39
|
+
logger: Hanami::Components['logger']
|
40
|
+
)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def hook_into_all
|
46
|
+
require 'hanami/components'
|
47
|
+
# Unfortunately, hanami does not provide a way to add the component
|
48
|
+
# requirements easily, so we take the old requirements and append 'events'
|
49
|
+
requirements_for_all = ::Hanami::Components.component('all').send(:requirements)
|
50
|
+
|
51
|
+
::Hanami::Components.register 'all' do
|
52
|
+
requires(*requirements_for_all, 'events')
|
53
|
+
resolve { true }
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def add_configuration_helpers
|
58
|
+
require 'hanami/utils/load_paths'
|
59
|
+
require 'hanami/configuration'
|
60
|
+
::Hanami::Configuration.include(Integration::Configuration)
|
61
|
+
::Hanami.extend Integration::EasyAccess
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Extra configuration methods for Hanami
|
66
|
+
#
|
67
|
+
# @example Use emulator in development
|
68
|
+
# # config/environment.rb
|
69
|
+
# Hanami.configure do
|
70
|
+
# environment :development do
|
71
|
+
# cloud_pubsub do |conf|
|
72
|
+
# conf.pubsub = { project_id: 'emulator' }
|
73
|
+
# end
|
74
|
+
# end
|
75
|
+
# end
|
76
|
+
module Configuration
|
77
|
+
def cloud_pubsub(&blk)
|
78
|
+
if block_given?
|
79
|
+
settings[:cloud_pubsub] ||= []
|
80
|
+
settings[:cloud_pubsub] << blk
|
81
|
+
end
|
82
|
+
|
83
|
+
settings[:cloud_pubsub]
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# Easy access to events, i.e. Hanami.events
|
88
|
+
module EasyAccess
|
89
|
+
def events
|
90
|
+
Hanami::Components['events']
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'hanami/components'
|
4
|
+
require 'hanami/configuration'
|
5
|
+
require_relative 'integration'
|
6
|
+
|
7
|
+
module Hanami
|
8
|
+
module Events
|
9
|
+
module CloudPubsub
|
10
|
+
# Register all the things needed to integrate with hanami
|
11
|
+
module Register
|
12
|
+
Integration::Setup.setup
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -6,7 +6,6 @@ require 'hanami/events/cloud_pubsub/middleware/stack'
|
|
6
6
|
require 'hanami/events/cloud_pubsub/middleware/logging'
|
7
7
|
require 'hanami/events/cloud_pubsub/middleware/auto_acknowledge'
|
8
8
|
require 'hanami/events/cloud_pubsub/runner'
|
9
|
-
require 'hanami/events/cloud_pubsub/mixin'
|
10
9
|
require 'google/cloud/pubsub'
|
11
10
|
require 'dry-configurable'
|
12
11
|
|
@@ -23,6 +22,11 @@ module Hanami
|
|
23
22
|
setting :push, 4
|
24
23
|
end
|
25
24
|
end
|
25
|
+
|
26
|
+
setting :pubsub do |conf_hash|
|
27
|
+
conf_hash.each { |key, val| Google::Cloud::Pubsub.configure[key] = val }
|
28
|
+
end
|
29
|
+
|
26
30
|
setting :project_id, reader: true
|
27
31
|
setting :logger, Logger.new(STDOUT), reader: true
|
28
32
|
setting :subscriptions_loader, proc {
|
@@ -53,14 +57,6 @@ module Hanami
|
|
53
57
|
Middleware::Logging.new,
|
54
58
|
Middleware::AutoAcknowledge.new
|
55
59
|
)
|
56
|
-
|
57
|
-
def self.setup
|
58
|
-
Hanami::Events::Adapter.register(:cloud_pubsub) do
|
59
|
-
require_relative 'adapter/cloud_pubsub'
|
60
|
-
|
61
|
-
::Hanami::Events::Adapter::CloudPubsub
|
62
|
-
end
|
63
|
-
end
|
64
60
|
end
|
65
61
|
end
|
66
62
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hanami-events-cloud_pubsub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ian Ker-Seymer
|
@@ -139,11 +139,12 @@ files:
|
|
139
139
|
- lib/hanami/events/cloud_pubsub/cli.rb
|
140
140
|
- lib/hanami/events/cloud_pubsub/handler.rb
|
141
141
|
- lib/hanami/events/cloud_pubsub/health_check_server.rb
|
142
|
+
- lib/hanami/events/cloud_pubsub/integration.rb
|
142
143
|
- lib/hanami/events/cloud_pubsub/listener.rb
|
143
144
|
- lib/hanami/events/cloud_pubsub/middleware/auto_acknowledge.rb
|
144
145
|
- lib/hanami/events/cloud_pubsub/middleware/logging.rb
|
145
146
|
- lib/hanami/events/cloud_pubsub/middleware/stack.rb
|
146
|
-
- lib/hanami/events/cloud_pubsub/
|
147
|
+
- lib/hanami/events/cloud_pubsub/register.rb
|
147
148
|
- lib/hanami/events/cloud_pubsub/runner.rb
|
148
149
|
- lib/hanami/events/cloud_pubsub/safe_error_handler.rb
|
149
150
|
- lib/hanami/events/cloud_pubsub/thread_inspector.rb
|
@@ -169,7 +170,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
169
170
|
version: '0'
|
170
171
|
requirements: []
|
171
172
|
rubyforge_project:
|
172
|
-
rubygems_version: 2.
|
173
|
+
rubygems_version: 2.6.14
|
173
174
|
signing_key:
|
174
175
|
specification_version: 4
|
175
176
|
summary: Google Cloud Pub/Sub adapter for the hanami-events gem
|
@@ -1,39 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Hanami
|
4
|
-
module Events
|
5
|
-
module CloudPubsub
|
6
|
-
# Mixin that extends class by `subscribe_to` method.
|
7
|
-
#
|
8
|
-
# @example
|
9
|
-
# $events = Hanami::Events.initialize(:memory)
|
10
|
-
#
|
11
|
-
# class WelcomeMailer
|
12
|
-
# include Hanami::Events::Mixin
|
13
|
-
#
|
14
|
-
# subscribe_to $events, 'user.created', id: 'welcome-mailer'
|
15
|
-
#
|
16
|
-
# def call(payload)
|
17
|
-
# # send email
|
18
|
-
# end
|
19
|
-
# end
|
20
|
-
#
|
21
|
-
# @since 0.1.0
|
22
|
-
#
|
23
|
-
# @api public
|
24
|
-
module Mixin
|
25
|
-
def self.included(klass)
|
26
|
-
klass.extend(ClassMethods)
|
27
|
-
end
|
28
|
-
|
29
|
-
# Class interfaces
|
30
|
-
module ClassMethods
|
31
|
-
def subscribe_to(event_bus, event_name, id:)
|
32
|
-
klass = self
|
33
|
-
event_bus.subscribe(event_name, id: id) { |payload| klass.new.call(payload) }
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|