roo_on_rails 2.0.0.pre.pre.1 → 2.0.0.pre.pre.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: a4a968e2ff69efa8eb45c0f65fdffb7757380e33eebe83198772b6b9af46b551
4
- data.tar.gz: 5aca90417ecd87f7cb731727f349e1d1fc87dc59aa31aa90ffb5117992b12ca7
2
+ SHA1:
3
+ metadata.gz: cd0078f99de5de6df13bb2f3432826fe10ce2a42
4
+ data.tar.gz: 39dc8387999e301ae72bd79f478abea4ae254425
5
5
  SHA512:
6
- metadata.gz: c82c6ede1abab6b2fa49e0b9aa32f3ccb616455057b0ba2de86ec89c20c00907accdd3898fb9f6ca76cba53750e8b125ba6b16b78b98a63cbc014e380cc64b49
7
- data.tar.gz: '039ecd9984d930c9312272246aea2a06acc9cd5e32e52330935b27de9b296d14a68077bef753996b957eb2020bc02915af0723f3d75423f456d5c3801468b5e5'
6
+ metadata.gz: de9ad52a69426d76ceffaa4441a96b12c5d9ac304f739d8fd96fef6c0ffd3c593544b3424435785e4e327952067616e01b983ddd0e9b71e945a10b3e7a2c535d
7
+ data.tar.gz: a86864238bffd84afa3c799086c7171498bb2437e8c17cd654dc92a419cf67ee6e8754fe3833da04004fa8f00c10365031bafc6280181083ecf0035b0e266ab2
@@ -32,7 +32,7 @@ jobs:
32
32
  - image: postgres:9.6-alpine
33
33
  environment:
34
34
  PGDATA: /dev/shm/pgdata
35
- - image: redis:3-alpine
35
+ - image: redis:4-alpine
36
36
  steps:
37
37
  - checkout
38
38
 
data/Appraisals CHANGED
@@ -1,24 +1,29 @@
1
1
  appraise 'rails-4' do
2
2
  gem 'rails', '~> 4.2'
3
- gem 'sqlite3'
3
+ gem 'sqlite3', '~> 1.3.6'
4
4
  gem 'pg', '~> 0.11'
5
+ gem 'sprockets', '~>3.0'
6
+ gem 'rake', '13.0.1'
5
7
  end
6
8
 
7
9
  appraise 'rails-5' do
8
10
  gem 'rails', '~> 5.0.0'
9
- gem 'sqlite3'
11
+ gem 'sqlite3', '~> 1.3.6'
10
12
  gem 'pg', '~> 0.18'
13
+ gem 'rake', '13.0.1'
11
14
  end
12
15
 
13
16
  appraise 'rails-5-1' do
14
17
  gem 'rails', '~> 5.1.0'
15
- gem 'sqlite3'
18
+ gem 'sqlite3', '~> 1.3.6'
16
19
  gem 'pg', '~> 0.18'
20
+ gem 'rake', '13.0.1'
17
21
  end
18
22
 
19
23
  appraise 'rails-5-2' do
20
24
  gem 'rails', '~> 5.2.0'
21
25
  gem 'bootsnap', '>= 1.1.0', require: false
22
- gem 'sqlite3'
26
+ gem 'sqlite3', '~> 1.3.6'
23
27
  gem 'pg', '~> 0.18'
28
+ gem 'rake', '13.0.1'
24
29
  end
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ # v2.0.0-pre.2
2
+
3
+ Features:
4
+
5
+ - Removes routemaster
6
+
1
7
  # v2.0.0-pre.1
2
8
 
3
9
  Features:
data/README.md CHANGED
@@ -30,7 +30,6 @@
30
30
  - [Datadog Integration](#datadog-integration)
31
31
  - [Heroku metrics](#heroku-metrics)
32
32
  - [Custom application metrics](#custom-application-metrics)
33
- - [Routemaster Client](#routemaster-client)
34
33
  - [API Authentication](#api-authentication)
35
34
  - [Command features](#command-features)
36
35
  - [Usage](#usage)
@@ -302,16 +301,6 @@ The following tags will automatically be added to all your metrics and their val
302
301
  * `HOPPER_APP_NAME`+`HOPPER_ECS_CLUSTER_NAME` – automatically set by Hopper (e.g. `notifications-staging`);
303
302
  * Defaults to `unknown`.
304
303
 
305
- ### Routemaster Client
306
-
307
- When `ROUTEMASTER_ENABLED` is set to `true` we attempt to configure [`routemaster-client`](https://github.com/deliveroo/routemaster-client) on your application. In order for this to happen, set the following environment variables:
308
-
309
- * `ROUTEMASTER_URL` – the full URL of your Routemaster application (mandatory)
310
- * `ROUTEMASTER_UUID` – the UUID of your application, e.g. `logistics-dashboard` (mandatory)
311
- * `ROUTEMASTER_VERIFY_SSL` – set to false if your Routemaster application is not served with a valid cert. (optional)
312
-
313
- If you then want to enable the publishing of events onto the event bus, you need to set `ROUTEMASTER_PUBLISHING_ENABLED` to `true` and implement publishers as needed. An example of how to do this is detailed in [`README.routemaster_client.md`](README.routemaster_client.md).
314
-
315
304
  ### API Authentication
316
305
 
317
306
  RooOnRails provides a concern which will make adding rotatable API authentication to your service a breeze:
data/lib/roo_on_rails.rb CHANGED
@@ -12,6 +12,5 @@ if defined?(Rails)
12
12
  require 'roo_on_rails/railties/sidekiq_integration'
13
13
  require 'roo_on_rails/railties/rake_tasks'
14
14
  require 'roo_on_rails/railties/google_oauth'
15
- require 'roo_on_rails/railties/routemaster'
16
15
  require 'roo_on_rails/railties/roo_identity'
17
16
  end
@@ -25,14 +25,6 @@ module RooOnRails
25
25
  ENV.fetch('GOOGLE_AUTH_CONTROLLER')
26
26
  end
27
27
 
28
- def routemaster_enabled?
29
- enabled? 'ROUTEMASTER_ENABLED', default: false
30
- end
31
-
32
- def routemaster_publishing_enabled?
33
- enabled? 'ROUTEMASTER_PUBLISHING_ENABLED', default: false
34
- end
35
-
36
28
  private
37
29
 
38
30
  ENABLED_PATTERN = /\A(YES|TRUE|ON|1)\Z/i
@@ -6,10 +6,6 @@ GOOGLE_AUTH_PATH_PREFIX=/auth
6
6
  GOOGLE_AUTH_CONTROLLER=sessions
7
7
  RACK_SERVICE_TIMEOUT=10
8
8
  RACK_WAIT_TIMEOUT=30
9
- ROUTEMASTER_URL=''
10
- ROUTEMASTER_UUID=''
11
- ROUTEMASTER_ENABLED=false
12
- ROUTEMASTER_PUBLISHING_ENABLED=false
13
9
  SIDEKIQ_ENABLED=true
14
10
  SIDEKIQ_THREADS=25
15
11
  SIDEKIQ_DATABASE_REAPING_FREQUENCY=10
@@ -1,3 +1,3 @@
1
1
  module RooOnRails
2
- VERSION = '2.0.0-pre.1'.freeze
2
+ VERSION = '2.0.0-pre.2'.freeze
3
3
  end
data/roo_on_rails.gemspec CHANGED
@@ -23,18 +23,18 @@ Gem::Specification.new do |spec|
23
23
 
24
24
  spec.add_runtime_dependency 'dotenv-rails', '~> 2.1'
25
25
  spec.add_runtime_dependency 'rails', '>= 3.2.22', '< 5.3'
26
+ spec.add_runtime_dependency 'sprockets', '~>3.0'
26
27
  spec.add_runtime_dependency 'platform-api', '~> 2.0'
27
28
  spec.add_runtime_dependency 'hashie', '~> 3.4'
28
29
  spec.add_runtime_dependency 'rack-timeout', '>= 0.4.0'
29
30
  spec.add_runtime_dependency 'rack-ssl-enforcer'
30
31
  spec.add_runtime_dependency 'octokit'
31
32
  spec.add_runtime_dependency 'hirefire-resource'
32
- spec.add_runtime_dependency 'sidekiq'
33
+ spec.add_runtime_dependency 'sidekiq', '< 6.0.0'
33
34
  spec.add_runtime_dependency 'dogstatsd-ruby'
34
35
  spec.add_runtime_dependency 'omniauth-google-oauth2'
35
36
  spec.add_runtime_dependency 'faraday'
36
37
  spec.add_runtime_dependency 'faraday_middleware'
37
- spec.add_runtime_dependency 'routemaster-client'
38
38
  spec.add_runtime_dependency 'json-jwt', '~> 1.8'
39
39
 
40
40
  spec.add_development_dependency 'bundler'
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: 2.0.0.pre.pre.1
4
+ version: 2.0.0.pre.pre.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julien Letessier
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-05-29 00:00:00.000000000 Z
11
+ date: 2020-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dotenv-rails
@@ -44,6 +44,20 @@ dependencies:
44
44
  - - "<"
45
45
  - !ruby/object:Gem::Version
46
46
  version: '5.3'
47
+ - !ruby/object:Gem::Dependency
48
+ name: sprockets
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '3.0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '3.0'
47
61
  - !ruby/object:Gem::Dependency
48
62
  name: platform-api
49
63
  requirement: !ruby/object:Gem::Requirement
@@ -132,16 +146,16 @@ dependencies:
132
146
  name: sidekiq
133
147
  requirement: !ruby/object:Gem::Requirement
134
148
  requirements:
135
- - - ">="
149
+ - - "<"
136
150
  - !ruby/object:Gem::Version
137
- version: '0'
151
+ version: 6.0.0
138
152
  type: :runtime
139
153
  prerelease: false
140
154
  version_requirements: !ruby/object:Gem::Requirement
141
155
  requirements:
142
- - - ">="
156
+ - - "<"
143
157
  - !ruby/object:Gem::Version
144
- version: '0'
158
+ version: 6.0.0
145
159
  - !ruby/object:Gem::Dependency
146
160
  name: dogstatsd-ruby
147
161
  requirement: !ruby/object:Gem::Requirement
@@ -198,20 +212,6 @@ dependencies:
198
212
  - - ">="
199
213
  - !ruby/object:Gem::Version
200
214
  version: '0'
201
- - !ruby/object:Gem::Dependency
202
- name: routemaster-client
203
- requirement: !ruby/object:Gem::Requirement
204
- requirements:
205
- - - ">="
206
- - !ruby/object:Gem::Version
207
- version: '0'
208
- type: :runtime
209
- prerelease: false
210
- version_requirements: !ruby/object:Gem::Requirement
211
- requirements:
212
- - - ">="
213
- - !ruby/object:Gem::Version
214
- version: '0'
215
215
  - !ruby/object:Gem::Dependency
216
216
  name: json-jwt
217
217
  requirement: !ruby/object:Gem::Requirement
@@ -390,7 +390,6 @@ files:
390
390
  - LICENSE.txt
391
391
  - README.google_oauth2.md
392
392
  - README.md
393
- - README.routemaster_client.md
394
393
  - Rakefile
395
394
  - appraise
396
395
  - bin/console
@@ -447,12 +446,7 @@ files:
447
446
  - lib/roo_on_rails/railties/logging.rb
448
447
  - lib/roo_on_rails/railties/rake_tasks.rb
449
448
  - lib/roo_on_rails/railties/roo_identity.rb
450
- - lib/roo_on_rails/railties/routemaster.rb
451
449
  - lib/roo_on_rails/railties/sidekiq_integration.rb
452
- - lib/roo_on_rails/routemaster/lifecycle_events.rb
453
- - lib/roo_on_rails/routemaster/publish_lifecycle_events.rb
454
- - lib/roo_on_rails/routemaster/publisher.rb
455
- - lib/roo_on_rails/routemaster/publishers.rb
456
450
  - lib/roo_on_rails/shell.rb
457
451
  - lib/roo_on_rails/sidekiq/loader.rb
458
452
  - lib/roo_on_rails/sidekiq/metrics_worker.rb
@@ -484,7 +478,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
484
478
  version: 1.3.1
485
479
  requirements: []
486
480
  rubyforge_project:
487
- rubygems_version: 2.7.7
481
+ rubygems_version: 2.6.11
488
482
  signing_key:
489
483
  specification_version: 4
490
484
  summary: Scaffolding for building services
@@ -1,103 +0,0 @@
1
- ## Using the Routemaster Client feature
2
-
3
- [`routemaster-client`](https://github.com/deliveroo/routemaster-client) comes as a dependency of `roo_on_rails` with a basic implementation of lifecycle event publishers.
4
-
5
- This code example assumes that you are using the latest version of the [`roo_on_rails`](https://github.com/deliveroo/roo_on_rails) gem and that you have set the correct environment variables for Routemaster Client to work on your app, as explained in the main [`README.md`](https://github.com/deliveroo/roo_on_rails#routemaster-client) file.
6
-
7
- It also assumes that your app has an API for the resources you want to publish lifecycle events for, with matching routes and an `API_HOST` environment variable set.
8
-
9
- ### Setup lifecycle events for your models
10
-
11
- You can use publish events on create, update, and destroy by including the `PublishLifecycleEvents` module:
12
-
13
- ```ruby
14
- # app/models/order.rb
15
- require 'roo_on_rails/routemaster/publish_lifecycle_events'
16
-
17
- class Order < ApplicationRecord
18
- include RooOnRails::Routemaster::PublishLifecycleEvents
19
-
20
- # ...
21
- end
22
- ```
23
-
24
- If you need more control over which events are published you can use the base module `LifecycleEvents` and specify them explicitly:
25
-
26
- ```ruby
27
- # app/models/rider.rb
28
- require 'roo_on_rails/routemaster/lifecycle_events'
29
-
30
- class Rider < ApplicationRecord
31
- include RooOnRails::Routemaster::LifecycleEvents
32
-
33
- publish_lifecycle_events :create, :destroy
34
-
35
- # ...
36
- end
37
- ```
38
-
39
- ### Create publishers for lifecycle events
40
-
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.
42
-
43
- ```ruby
44
- # app/publishers/application_publisher.rb
45
- require 'roo_on_rails/routemaster/publisher'
46
-
47
- class ApplicationPublisher < RooOnRails::Routemaster::Publisher
48
- include Rails.application.routes.url_helpers
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
-
55
- # Add your method overrides here if needed
56
- end
57
- ```
58
-
59
- If different behaviour is needed for specific models then you can override the defaults in their publishers:
60
-
61
- ```ruby
62
- # app/publishers/order_publisher.rb
63
- class OrderPublisher < ApplicationPublisher
64
- def async?
65
- true
66
- end
67
- end
68
- ```
69
-
70
- and
71
-
72
- ```ruby
73
- # app/publishers/rider_publisher.rb
74
- class RiderPublisher < ApplicationPublisher
75
- def topic
76
- 'a_different_rider_topic'
77
- end
78
- end
79
- ```
80
-
81
- `#publish?`, `#topics`, `#async?`, `#data` and `#timestamp` can be overriden; see [the `Publisher` class](lib/roo_on_rails/routemaster/publisher.rb) for the default implementations.
82
-
83
- ### Register the publishers with Routemaster
84
-
85
- The final step is to tell Routemaster that these publishers exist, so that it can listen to their events. We're going to do this in an initialiser:
86
-
87
- ```ruby
88
- # config/initilizers/routemaster.rb
89
- require 'roo_on_rails/routemaster/publishers'
90
-
91
- PUBLISHERS = [
92
- OrderPublisher,
93
- RiderPublisher
94
- ].freeze
95
-
96
- RooOnRails::Routemaster::Publishers.register_default(ApplicationPublisher)
97
- PUBLISHERS.each do |publisher|
98
- model_class = publisher.to_s.gsub("Publisher", "").constantize
99
- RooOnRails::Routemaster::Publishers.register(publisher, model_class: model_class)
100
- end
101
- ```
102
-
103
- 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,42 +0,0 @@
1
- require 'roo_on_rails/config'
2
-
3
- module RooOnRails
4
- module Railties
5
- class Routemaster < Rails::Railtie
6
- initializer 'roo_on_rails.routemaster' do
7
- Rails.logger.with initializer: 'roo_on_rails.routemaster' do |log|
8
- next unless Config.routemaster_enabled?
9
- log.debug 'loading'
10
-
11
- abort 'Aborting: ROUTEMASTER_URL and ROUTEMASTER_UUID are required' if bus_details_missing?
12
-
13
- require 'routemaster/client'
14
-
15
- ::Routemaster::Client.configure do |config|
16
- config.url = routemaster_url
17
- config.uuid = routemaster_uuid
18
- config.verify_ssl = routemaster_verify_ssl
19
- end
20
- end
21
- end
22
-
23
- private
24
-
25
- def bus_details_missing?
26
- routemaster_url.blank? || routemaster_uuid.blank?
27
- end
28
-
29
- def routemaster_url
30
- ENV.fetch('ROUTEMASTER_URL')
31
- end
32
-
33
- def routemaster_uuid
34
- ENV.fetch('ROUTEMASTER_UUID')
35
- end
36
-
37
- def routemaster_verify_ssl
38
- ENV.fetch('ROUTEMASTER_VERIFY_SSL', 'true') != 'false'
39
- end
40
- end
41
- end
42
- end
@@ -1,63 +0,0 @@
1
- require 'active_support/concern'
2
- require 'roo_on_rails/routemaster/publishers'
3
-
4
- module RooOnRails
5
- module Routemaster
6
- module LifecycleEvents
7
- extend ActiveSupport::Concern
8
-
9
- ACTIVE_RECORD_TO_ROUTEMASTER_EVENT_MAP = {
10
- create: :created,
11
- update: :updated,
12
- destroy: :deleted,
13
- noop: :noop
14
- }.freeze
15
- private_constant :ACTIVE_RECORD_TO_ROUTEMASTER_EVENT_MAP
16
-
17
- def publish_lifecycle_event(event)
18
- publish_event(event, force_publish: false)
19
- end
20
-
21
- def publish_lifecycle_event!(event)
22
- publish_event(event, force_publish: true)
23
- end
24
-
25
- private
26
-
27
- def publish_event(event, force_publish:)
28
- publishers = Routemaster::Publishers.for(self, routemaster_event_type(event))
29
- publishers.each do |publisher|
30
- begin
31
- publisher.publish!(force_publish: force_publish)
32
- rescue => e
33
- Raven.report_exception(e) if defined?(Raven)
34
- end
35
- end
36
- end
37
-
38
- def routemaster_event_type(event)
39
- ACTIVE_RECORD_TO_ROUTEMASTER_EVENT_MAP[event].tap do |type|
40
- raise "invalid lifecycle event '#{event}'" unless type
41
- end
42
- end
43
-
44
- %i(create update destroy noop).each do |event|
45
- define_method("publish_lifecycle_event_on_#{event}") do
46
- publish_lifecycle_event(event)
47
- end
48
- end
49
-
50
- module ClassMethods
51
- def publish_lifecycle_events(*events)
52
- events = events.any? ? events : %i(create update destroy)
53
- events.each do |event|
54
- after_commit(
55
- :"publish_lifecycle_event_on_#{event}",
56
- on: event
57
- )
58
- end
59
- end
60
- end
61
- end
62
- end
63
- end
@@ -1,13 +0,0 @@
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
@@ -1,74 +0,0 @@
1
- require 'roo_on_rails/config'
2
- require 'routemaster/client'
3
-
4
- module RooOnRails
5
- module Routemaster
6
- class Publisher
7
- attr_reader :model, :event
8
-
9
- def initialize(model, event, client: ::Routemaster::Client)
10
- @model = model
11
- @event = event
12
- @client = client
13
- end
14
-
15
- def publish?
16
- noop? || @model.new_record? || @model.previous_changes.any?
17
- end
18
-
19
- def will_publish?(force_publish: false)
20
- Config.routemaster_publishing_enabled? && (force_publish || publish?)
21
- end
22
-
23
- def publish!(force_publish: false)
24
- return unless will_publish?(force_publish: force_publish)
25
- @client.send(
26
- @event,
27
- topic,
28
- url,
29
- async: async?,
30
- data: stringify_keys(data),
31
- t: timestamp && (timestamp.to_f * 1000).to_i
32
- )
33
- end
34
-
35
- def topic
36
- @model.class.name.tableize
37
- end
38
-
39
- def url
40
- raise NotImplementedError
41
- end
42
-
43
- def async?
44
- false
45
- end
46
-
47
- def data
48
- nil
49
- end
50
-
51
- def timestamp
52
- return @model.created_at if created? && @model.respond_to?(:created_at)
53
- return @model.updated_at if (updated? || created?) && @model.respond_to?(:updated_at)
54
- nil
55
- end
56
-
57
- %i(created updated deleted noop).each do |event_type|
58
- define_method :"#{event_type}?" do
59
- @event.to_sym == event_type
60
- end
61
- end
62
-
63
- private
64
-
65
- def stringify_keys(hash)
66
- return hash if hash.nil? || hash.empty?
67
-
68
- hash.each_with_object({}) do |(k, v), h|
69
- h[k.to_s] = v.is_a?(Hash) ? stringify_keys(v) : v
70
- end
71
- end
72
- end
73
- end
74
- end
@@ -1,27 +0,0 @@
1
- module RooOnRails
2
- module Routemaster
3
- module Publishers
4
- @default_publishers = []
5
- @publishers = {}
6
-
7
- def self.register_default(publisher_class)
8
- @default_publishers << publisher_class
9
- end
10
-
11
- def self.register(publisher_class, model_class:)
12
- @publishers[model_class.name] ||= Set.new
13
- @publishers[model_class.name] << publisher_class
14
- end
15
-
16
- def self.for(model, event)
17
- publisher_classes = @publishers[model.class.name] || @default_publishers
18
- publisher_classes.map { |c| c.new(model, event) }
19
- end
20
-
21
- def self.clear
22
- @default_publishers = []
23
- @publishers = {}
24
- end
25
- end
26
- end
27
- end