roo_on_rails 1.9.0 → 1.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.routemaster_client.md +27 -31
- data/gemfiles/rails_3.gemfile.lock +3 -3
- data/gemfiles/rails_4.gemfile.lock +3 -3
- data/gemfiles/rails_5.gemfile.lock +3 -3
- data/gemfiles/rails_5_1.gemfile.lock +3 -3
- data/lib/roo_on_rails/routemaster/publish_lifecycle_events.rb +13 -0
- data/lib/roo_on_rails/routemaster/publisher.rb +5 -1
- data/lib/roo_on_rails/routemaster/publishers.rb +11 -1
- data/lib/roo_on_rails/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a75dec85ceb80185f16de9a7750600c6a6284f20
|
4
|
+
data.tar.gz: b0c3482407ff65e0cf7a69e9935a4b1b67a54893
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a0e90668340f68bec18a4fcf1b7aaaf0fe05a1a89649a0fe0383bcbc19bb9aeb1070201d5cadc3b0f8dd3f5c43ae3b036b001c562aac20479a7c042ac4c6492
|
7
|
+
data.tar.gz: 3c90104b1133595ddd86729440776ac6a0c08f03aa71f87584afee49353545f4fd7cef91ecedd0d1a2dade237453d2960c43be7110414e29d69c5b47cfc48be4
|
data/CHANGELOG.md
CHANGED
@@ -8,39 +8,29 @@ It also assumes that your app has an API for the resources you want to publish l
|
|
8
8
|
|
9
9
|
### Setup lifecycle events for your models
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
```ruby
|
14
|
-
# app/models/concerns/routemaster_lifecycle_events.rb
|
15
|
-
require 'roo_on_rails/routemaster/lifecycle_events'
|
16
|
-
|
17
|
-
module RoutemasterLifecycleEvents
|
18
|
-
extend ActiveSupport::Concern
|
19
|
-
include RooOnRails::Routemaster::LifecycleEvents
|
20
|
-
|
21
|
-
included do
|
22
|
-
publish_lifecycle_events
|
23
|
-
end
|
24
|
-
end
|
25
|
-
```
|
26
|
-
|
27
|
-
Then let's include this concern to the relevant model(s):
|
11
|
+
You can use publish events on create, update, and destroy by including the `PublishLifecycleEvents` module:
|
28
12
|
|
29
13
|
```ruby
|
30
14
|
# app/models/order.rb
|
15
|
+
require 'roo_on_rails/routemaster/publish_lifecycle_events'
|
16
|
+
|
31
17
|
class Order < ApplicationRecord
|
32
|
-
include
|
18
|
+
include RooOnRails::Routemaster::PublishLifecycleEvents
|
33
19
|
|
34
20
|
# ...
|
35
21
|
end
|
36
22
|
```
|
37
23
|
|
38
|
-
|
24
|
+
If you need more control over which events are published you can use the base module `LifecycleEvents` and specify them explicitly:
|
39
25
|
|
40
26
|
```ruby
|
41
27
|
# app/models/rider.rb
|
28
|
+
require 'roo_on_rails/routemaster/lifecycle_events'
|
29
|
+
|
42
30
|
class Rider < ApplicationRecord
|
43
|
-
include
|
31
|
+
include RooOnRails::Routemaster::LifecycleEvents
|
32
|
+
|
33
|
+
publish_lifecycle_events :create, :destroy
|
44
34
|
|
45
35
|
# ...
|
46
36
|
end
|
@@ -48,26 +38,31 @@ end
|
|
48
38
|
|
49
39
|
### Create publishers for lifecycle events
|
50
40
|
|
51
|
-
We have now configured our models to publish lifecycle events to Routemaster, but it won't send anything until you have enabled publishing and created matching publishers. Let's start with creating
|
41
|
+
We have now configured our models to publish lifecycle events to Routemaster, but it won't send anything until you have enabled publishing and created matching publishers. Let's start with creating an `ApplicationPublisher` that we can use as our default.
|
52
42
|
|
53
43
|
```ruby
|
54
|
-
# app/publishers/
|
44
|
+
# app/publishers/application_publisher.rb
|
55
45
|
require 'roo_on_rails/routemaster/publisher'
|
56
46
|
|
57
|
-
class
|
47
|
+
class ApplicationPublisher < RooOnRails::Routemaster::Publisher
|
58
48
|
include Rails.application.routes.url_helpers
|
59
49
|
|
50
|
+
def url
|
51
|
+
url_helper = :"api_#{model.class.name.underscore}_url"
|
52
|
+
public_send(url_helper, model.id, host: ENV.fetch('API_HOST'), protocol: 'https')
|
53
|
+
end
|
54
|
+
|
60
55
|
# Add your method overrides here if needed
|
61
56
|
end
|
62
57
|
```
|
63
58
|
|
64
|
-
|
59
|
+
If different behaviour is needed for specific models then you can override the defaults in their publishers:
|
65
60
|
|
66
61
|
```ruby
|
67
62
|
# app/publishers/order_publisher.rb
|
68
|
-
class OrderPublisher <
|
69
|
-
def
|
70
|
-
|
63
|
+
class OrderPublisher < ApplicationPublisher
|
64
|
+
def async?
|
65
|
+
true
|
71
66
|
end
|
72
67
|
end
|
73
68
|
```
|
@@ -76,9 +71,9 @@ and
|
|
76
71
|
|
77
72
|
```ruby
|
78
73
|
# app/publishers/rider_publisher.rb
|
79
|
-
class RiderPublisher <
|
80
|
-
def
|
81
|
-
|
74
|
+
class RiderPublisher < ApplicationPublisher
|
75
|
+
def topic
|
76
|
+
'a_different_rider_topic'
|
82
77
|
end
|
83
78
|
end
|
84
79
|
```
|
@@ -96,10 +91,11 @@ PUBLISHERS = [
|
|
96
91
|
RiderPublisher
|
97
92
|
].freeze
|
98
93
|
|
94
|
+
RooOnRails::Routemaster::Publishers.register_default(ApplicationPublisher)
|
99
95
|
PUBLISHERS.each do |publisher|
|
100
96
|
model_class = publisher.to_s.gsub("Publisher", "").constantize
|
101
97
|
RooOnRails::Routemaster::Publishers.register(publisher, model_class: model_class)
|
102
98
|
end
|
103
99
|
```
|
104
100
|
|
105
|
-
We should now be all set for our app to publish lifecycle events for
|
101
|
+
We should now be all set for our app to publish lifecycle events for all our models onto the event bus, with special behaviour for `orders` and `riders`, so that other apps can listen to them.
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
roo_on_rails (1.
|
4
|
+
roo_on_rails (1.10.0)
|
5
5
|
dogstatsd-ruby
|
6
6
|
dotenv-rails (~> 2.1)
|
7
7
|
faraday
|
@@ -76,7 +76,7 @@ GEM
|
|
76
76
|
erubis (2.7.0)
|
77
77
|
ethon (0.10.1)
|
78
78
|
ffi (>= 1.3.0)
|
79
|
-
excon (0.
|
79
|
+
excon (0.57.1)
|
80
80
|
faraday (0.12.2)
|
81
81
|
multipart-post (>= 1.2, < 3)
|
82
82
|
faraday_middleware (0.12.2)
|
@@ -141,7 +141,7 @@ GEM
|
|
141
141
|
omniauth (1.4.2)
|
142
142
|
hashie (>= 1.2, < 4)
|
143
143
|
rack (>= 1.0, < 3)
|
144
|
-
omniauth-google-oauth2 (0.5.
|
144
|
+
omniauth-google-oauth2 (0.5.1)
|
145
145
|
jwt (~> 1.5)
|
146
146
|
multi_json (~> 1.3)
|
147
147
|
omniauth (>= 1.1.1)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
roo_on_rails (1.
|
4
|
+
roo_on_rails (1.10.0)
|
5
5
|
dogstatsd-ruby
|
6
6
|
dotenv-rails (~> 2.1)
|
7
7
|
faraday
|
@@ -83,7 +83,7 @@ GEM
|
|
83
83
|
erubis (2.7.0)
|
84
84
|
ethon (0.10.1)
|
85
85
|
ffi (>= 1.3.0)
|
86
|
-
excon (0.
|
86
|
+
excon (0.57.1)
|
87
87
|
faraday (0.12.2)
|
88
88
|
multipart-post (>= 1.2, < 3)
|
89
89
|
faraday_middleware (0.12.2)
|
@@ -155,7 +155,7 @@ GEM
|
|
155
155
|
omniauth (1.6.1)
|
156
156
|
hashie (>= 3.4.6, < 3.6.0)
|
157
157
|
rack (>= 1.6.2, < 3)
|
158
|
-
omniauth-google-oauth2 (0.5.
|
158
|
+
omniauth-google-oauth2 (0.5.1)
|
159
159
|
jwt (~> 1.5)
|
160
160
|
multi_json (~> 1.3)
|
161
161
|
omniauth (>= 1.1.1)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
roo_on_rails (1.
|
4
|
+
roo_on_rails (1.10.0)
|
5
5
|
dogstatsd-ruby
|
6
6
|
dotenv-rails (~> 2.1)
|
7
7
|
faraday
|
@@ -86,7 +86,7 @@ GEM
|
|
86
86
|
erubis (2.7.0)
|
87
87
|
ethon (0.10.1)
|
88
88
|
ffi (>= 1.3.0)
|
89
|
-
excon (0.
|
89
|
+
excon (0.57.1)
|
90
90
|
faraday (0.12.2)
|
91
91
|
multipart-post (>= 1.2, < 3)
|
92
92
|
faraday_middleware (0.12.2)
|
@@ -159,7 +159,7 @@ GEM
|
|
159
159
|
omniauth (1.6.1)
|
160
160
|
hashie (>= 3.4.6, < 3.6.0)
|
161
161
|
rack (>= 1.6.2, < 3)
|
162
|
-
omniauth-google-oauth2 (0.5.
|
162
|
+
omniauth-google-oauth2 (0.5.1)
|
163
163
|
jwt (~> 1.5)
|
164
164
|
multi_json (~> 1.3)
|
165
165
|
omniauth (>= 1.1.1)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
roo_on_rails (1.
|
4
|
+
roo_on_rails (1.10.0)
|
5
5
|
dogstatsd-ruby
|
6
6
|
dotenv-rails (~> 2.1)
|
7
7
|
faraday
|
@@ -87,7 +87,7 @@ GEM
|
|
87
87
|
erubis (2.7.0)
|
88
88
|
ethon (0.10.1)
|
89
89
|
ffi (>= 1.3.0)
|
90
|
-
excon (0.
|
90
|
+
excon (0.57.1)
|
91
91
|
faraday (0.12.2)
|
92
92
|
multipart-post (>= 1.2, < 3)
|
93
93
|
faraday_middleware (0.12.2)
|
@@ -160,7 +160,7 @@ GEM
|
|
160
160
|
omniauth (1.6.1)
|
161
161
|
hashie (>= 3.4.6, < 3.6.0)
|
162
162
|
rack (>= 1.6.2, < 3)
|
163
|
-
omniauth-google-oauth2 (0.5.
|
163
|
+
omniauth-google-oauth2 (0.5.1)
|
164
164
|
jwt (~> 1.5)
|
165
165
|
multi_json (~> 1.3)
|
166
166
|
omniauth (>= 1.1.1)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'active_support/concern'
|
2
|
+
require 'roo_on_rails/routemaster/lifecycle_events'
|
3
|
+
|
4
|
+
module RooOnRails
|
5
|
+
module Routemaster
|
6
|
+
module PublishLifecycleEvents
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
include LifecycleEvents
|
9
|
+
|
10
|
+
included(&:publish_lifecycle_events)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -22,7 +22,7 @@ module RooOnRails
|
|
22
22
|
|
23
23
|
def publish!
|
24
24
|
return unless will_publish?
|
25
|
-
@client.send(@event, topic, url, data: stringify_keys(data))
|
25
|
+
@client.send(@event, topic, url, async: async?, data: stringify_keys(data))
|
26
26
|
end
|
27
27
|
|
28
28
|
def topic
|
@@ -33,6 +33,10 @@ module RooOnRails
|
|
33
33
|
raise NotImplementedError
|
34
34
|
end
|
35
35
|
|
36
|
+
def async?
|
37
|
+
false
|
38
|
+
end
|
39
|
+
|
36
40
|
def data
|
37
41
|
nil
|
38
42
|
end
|
@@ -1,17 +1,27 @@
|
|
1
1
|
module RooOnRails
|
2
2
|
module Routemaster
|
3
3
|
module Publishers
|
4
|
+
@default_publishers = []
|
4
5
|
@publishers = {}
|
5
6
|
|
7
|
+
def self.register_default(publisher_class)
|
8
|
+
@default_publishers << publisher_class
|
9
|
+
end
|
10
|
+
|
6
11
|
def self.register(publisher_class, model_class:)
|
7
12
|
@publishers[model_class] ||= Set.new
|
8
13
|
@publishers[model_class] << publisher_class
|
9
14
|
end
|
10
15
|
|
11
16
|
def self.for(model, event)
|
12
|
-
publisher_classes = @publishers[model.class]
|
17
|
+
publisher_classes = @publishers[model.class] || @default_publishers
|
13
18
|
publisher_classes.map { |c| c.new(model, event) }
|
14
19
|
end
|
20
|
+
|
21
|
+
def self.clear
|
22
|
+
@default_publishers = []
|
23
|
+
@publishers = {}
|
24
|
+
end
|
15
25
|
end
|
16
26
|
end
|
17
27
|
end
|
data/lib/roo_on_rails/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roo_on_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Julien Letessier
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dotenv-rails
|
@@ -433,6 +433,7 @@ files:
|
|
433
433
|
- lib/roo_on_rails/railties/routemaster.rb
|
434
434
|
- lib/roo_on_rails/railties/sidekiq.rb
|
435
435
|
- lib/roo_on_rails/routemaster/lifecycle_events.rb
|
436
|
+
- lib/roo_on_rails/routemaster/publish_lifecycle_events.rb
|
436
437
|
- lib/roo_on_rails/routemaster/publisher.rb
|
437
438
|
- lib/roo_on_rails/routemaster/publishers.rb
|
438
439
|
- lib/roo_on_rails/shell.rb
|