cloudenvoy 0.1.0 → 0.2.0
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/CHANGELOG.md +7 -0
- data/Gemfile.lock +1 -1
- data/README.md +13 -1
- data/gemfiles/rails_5.2.gemfile.lock +1 -1
- data/gemfiles/rails_6.0.gemfile.lock +1 -1
- data/lib/cloudenvoy/backend/google_pub_sub.rb +32 -11
- data/lib/cloudenvoy/backend/memory_pub_sub.rb +2 -1
- data/lib/cloudenvoy/pub_sub_client.rb +16 -2
- data/lib/cloudenvoy/subscriber.rb +7 -3
- data/lib/cloudenvoy/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 504b503a71e3417dc060ca78ab1653e670b77a87a094394d231e1c8d6bace2f9
|
4
|
+
data.tar.gz: fc905028b47de294dc1a42c7c6ea6edbf3148db8c2e9f94c3b656f2f480fd317
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f91e316422710774f1298c9e8f675c89c79e2e6b1043903b8beacf5c7929696b7d3131f25aeda9f3cd54f0b1f81c65291b9ec92dfa4acb66ef03c837e5c6d89
|
7
|
+
data.tar.gz: 7d6cfe241d6477428c40c40fd28975c8e27752a4d485ba2a40a865d8d60f426770118f88e376ee6bc8750277cebff8f3e5dc14f59463c44ccfcfd4918c763109
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,11 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [v0.2.0](https://github.com/keypup-io/cloudenvoy/tree/v0.2.0) (2020-09-22)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/keypup-io/cloudenvoy/compare/v0.1.0...v0.2.0)
|
6
|
+
|
7
|
+
**Improvements:**
|
8
|
+
- Subscriptions: support creation options such as `retained_acked` and `deadline`
|
9
|
+
|
3
10
|
## [v0.1.0](https://github.com/keypup-io/cloudenvoy/tree/v0.1.0) (2020-09-16)
|
4
11
|
Initial release
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -357,7 +357,19 @@ class UserSubscriber
|
|
357
357
|
include Cloudenvoy::Subscriber
|
358
358
|
|
359
359
|
# Subscribers can subscribe to multiple topics
|
360
|
-
|
360
|
+
#
|
361
|
+
# You can subscribe to multiple topics:
|
362
|
+
# > cloudenvoy_options topics: ['system-users', 'events']
|
363
|
+
#
|
364
|
+
# You can specify subscription options for each topic
|
365
|
+
# by passing a hash (target: v0.2.0)
|
366
|
+
#
|
367
|
+
# > cloudenvoy_options topics: ['system-users', { name: 'events', retain_acked: true }]
|
368
|
+
#
|
369
|
+
# See the Pub/Sub documentation of the list of available subscription options:
|
370
|
+
# https://googleapis.dev/ruby/google-cloud-pubsub/latest/Google/Cloud/PubSub/Topic.html#subscribe-instance_method
|
371
|
+
#
|
372
|
+
cloudenvoy_options topic: 'system-users'
|
361
373
|
|
362
374
|
# Create the user locally if it does not exist already
|
363
375
|
#
|
@@ -68,21 +68,42 @@ module Cloudenvoy
|
|
68
68
|
#
|
69
69
|
# @param [String] topic The name of the topic
|
70
70
|
# @param [String] name The name of the subscription
|
71
|
+
# @param [Hash] opts The subscription configuration options
|
72
|
+
# @option opts [Integer] :deadline The maximum number of seconds after a subscriber receives a message
|
73
|
+
# before the subscriber should acknowledge the message.
|
74
|
+
# @option opts [Boolean] :retain_acked Indicates whether to retain acknowledged messages. If true,
|
75
|
+
# then messages are not expunged from the subscription's backlog, even if they are acknowledged,
|
76
|
+
# until they fall out of the retention window. Default is false.
|
77
|
+
# @option opts [<Type>] :retention How long to retain unacknowledged messages in the subscription's
|
78
|
+
# backlog, from the moment a message is published. If retain_acked is true, then this also configures
|
79
|
+
# the retention of acknowledged messages, and thus configures how far back in time a Subscription#seek
|
80
|
+
# can be done. Cannot be more than 604,800 seconds (7 days) or less than 600 seconds (10 minutes).
|
81
|
+
# Default is 604,800 seconds (7 days).
|
82
|
+
# @option opts [String] :filter An expression written in the Cloud Pub/Sub filter language.
|
83
|
+
# If non-empty, then only Message instances whose attributes field matches the filter are delivered
|
84
|
+
# on this subscription. If empty, then no messages are filtered out. Optional.
|
71
85
|
#
|
72
86
|
# @return [Cloudenvoy::Subscription] The upserted subscription.
|
73
87
|
#
|
74
|
-
def upsert_subscription(topic, name)
|
75
|
-
|
76
|
-
# Retrieve the topic
|
77
|
-
ps_topic = backend.topic(topic, skip_lookup: true)
|
88
|
+
def upsert_subscription(topic, name, opts = {})
|
89
|
+
sub_config = opts.to_h.merge(endpoint: webhook_url)
|
78
90
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
91
|
+
ps_sub =
|
92
|
+
begin
|
93
|
+
# Retrieve the topic
|
94
|
+
ps_topic = backend.topic(topic, skip_lookup: true)
|
95
|
+
|
96
|
+
# Attempt to create the subscription
|
97
|
+
ps_topic.subscribe(name, sub_config)
|
98
|
+
rescue Google::Cloud::AlreadyExistsError
|
99
|
+
# Update endpoint on subscription
|
100
|
+
# Topic is not updated as it is name-dependent
|
101
|
+
backend.subscription(name).tap do |e|
|
102
|
+
sub_config.each do |k, v|
|
103
|
+
e.send("#{k}=", v)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
86
107
|
|
87
108
|
# Return formatted subscription
|
88
109
|
Subscription.new(name: ps_sub.name, original: ps_sub)
|
@@ -66,10 +66,11 @@ module Cloudenvoy
|
|
66
66
|
#
|
67
67
|
# @param [String] topic The name of the topic
|
68
68
|
# @param [String] name The name of the subscription
|
69
|
+
# @param [Hash] opts The subscription configuration options
|
69
70
|
#
|
70
71
|
# @return [Cloudenvoy::Subscription] The upserted subscription.
|
71
72
|
#
|
72
|
-
def upsert_subscription(_topic, name)
|
73
|
+
def upsert_subscription(_topic, name, _opts)
|
73
74
|
Subscription.new(name: name)
|
74
75
|
end
|
75
76
|
|
@@ -41,11 +41,25 @@ module Cloudenvoy
|
|
41
41
|
#
|
42
42
|
# @param [String] topic The name of the topic
|
43
43
|
# @param [String] name The name of the subscription
|
44
|
+
# @param [Hash] opts The subscription configuration options
|
45
|
+
# @option opts [Integer] :deadline The maximum number of seconds after a subscriber receives a message
|
46
|
+
# before the subscriber should acknowledge the message.
|
47
|
+
# @option opts [Boolean] :retain_acked Indicates whether to retain acknowledged messages. If true,
|
48
|
+
# then messages are not expunged from the subscription's backlog, even if they are acknowledged,
|
49
|
+
# until they fall out of the retention window. Default is false.
|
50
|
+
# @option opts [<Type>] :retention How long to retain unacknowledged messages in the subscription's
|
51
|
+
# backlog, from the moment a message is published. If retain_acked is true, then this also configures
|
52
|
+
# the retention of acknowledged messages, and thus configures how far back in time a Subscription#seek
|
53
|
+
# can be done. Cannot be more than 604,800 seconds (7 days) or less than 600 seconds (10 minutes).
|
54
|
+
# Default is 604,800 seconds (7 days).
|
55
|
+
# @option opts [String] :filter An expression written in the Cloud Pub/Sub filter language.
|
56
|
+
# If non-empty, then only Message instances whose attributes field matches the filter are delivered
|
57
|
+
# on this subscription. If empty, then no messages are filtered out. Optional.
|
44
58
|
#
|
45
59
|
# @return [Cloudenvoy::Subscription] The upserted subscription.
|
46
60
|
#
|
47
|
-
def self.upsert_subscription(topic, name)
|
48
|
-
backend.upsert_subscription(topic, name)
|
61
|
+
def self.upsert_subscription(topic, name, opts = {})
|
62
|
+
backend.upsert_subscription(topic, name, opts)
|
49
63
|
end
|
50
64
|
|
51
65
|
#
|
@@ -98,10 +98,12 @@ module Cloudenvoy
|
|
98
98
|
# Return the list of topics this subscriber listens
|
99
99
|
# to.
|
100
100
|
#
|
101
|
-
# @return [Array<
|
101
|
+
# @return [Array<Hash>] The list of subscribed topics.
|
102
102
|
#
|
103
103
|
def topics
|
104
|
-
cloudenvoy_options_hash[:
|
104
|
+
@topics ||= (Array(cloudenvoy_options_hash[:topic]) + Array(cloudenvoy_options_hash[:topics])).map do |t|
|
105
|
+
t.is_a?(String) ? { name: t } : t
|
106
|
+
end
|
105
107
|
end
|
106
108
|
|
107
109
|
#
|
@@ -125,7 +127,9 @@ module Cloudenvoy
|
|
125
127
|
#
|
126
128
|
def setup
|
127
129
|
topics.map do |t|
|
128
|
-
|
130
|
+
relative_name = t[:name] || t['name']
|
131
|
+
sub_opts = t.reject { |k, _| k.to_sym == :name }
|
132
|
+
PubSubClient.upsert_subscription(t, subscription_name(relative_name), sub_opts)
|
129
133
|
end
|
130
134
|
end
|
131
135
|
end
|
data/lib/cloudenvoy/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudenvoy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arnaud Lachaume
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-09-
|
11
|
+
date: 2020-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|