messaging 0.0.2 → 3.4.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 +4 -4
- data/.circleci/config.yml +68 -0
- data/.gitignore +11 -0
- data/.rspec +2 -0
- data/.ruby-version +1 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +222 -0
- data/README.md +53 -0
- data/Rakefile +5 -30
- data/_config.yml +1 -0
- data/bin/console +11 -0
- data/bin/setup +8 -0
- data/exe/messaging +11 -0
- data/lib/messaging.rb +62 -11
- data/lib/messaging/adapters.rb +35 -0
- data/lib/messaging/adapters/kafka.rb +55 -0
- data/lib/messaging/adapters/kafka/consumer.rb +101 -0
- data/lib/messaging/adapters/kafka/producer.rb +52 -0
- data/lib/messaging/adapters/postgres.rb +23 -0
- data/lib/messaging/adapters/postgres/advisory_transaction_lock.rb +28 -0
- data/lib/messaging/adapters/postgres/serialized_message.rb +74 -0
- data/lib/messaging/adapters/postgres/store.rb +66 -0
- data/lib/messaging/adapters/postgres/stream.rb +37 -0
- data/lib/messaging/adapters/postgres/streams.rb +27 -0
- data/lib/messaging/adapters/test.rb +59 -0
- data/lib/messaging/adapters/test/consumer.rb +46 -0
- data/lib/messaging/adapters/test/store.rb +67 -0
- data/lib/messaging/adapters/test/stream.rb +21 -0
- data/lib/messaging/base_handler.rb +45 -0
- data/lib/messaging/cli.rb +62 -0
- data/lib/messaging/config.rb +66 -0
- data/lib/messaging/consumer_supervisor.rb +63 -0
- data/lib/messaging/exception_handler.rb +15 -0
- data/lib/messaging/expected_version.rb +31 -0
- data/lib/messaging/instrumentation.rb +21 -0
- data/lib/messaging/message.rb +103 -0
- data/lib/messaging/message/from_json.rb +31 -0
- data/lib/messaging/meter.rb +113 -0
- data/lib/messaging/middleware.rb +14 -0
- data/lib/messaging/middleware/after_active_record_transaction.rb +13 -0
- data/lib/messaging/middleware/rails_wrapper.rb +22 -0
- data/lib/messaging/publish.rb +33 -0
- data/lib/messaging/rails/railtie.rb +36 -0
- data/lib/messaging/resque_worker.rb +11 -0
- data/lib/messaging/routes.rb +50 -0
- data/lib/messaging/routing.rb +67 -0
- data/lib/messaging/routing/background_job_subscriber.rb +11 -0
- data/lib/messaging/routing/enqueue_message_handler.rb +15 -0
- data/lib/messaging/routing/message_matcher.rb +62 -0
- data/lib/messaging/routing/subscriber.rb +35 -0
- data/lib/messaging/sidekiq_worker.rb +12 -0
- data/lib/messaging/version.rb +1 -1
- data/messaging.gemspec +40 -0
- metadata +299 -102
- data/MIT-LICENSE +0 -20
- data/app/models/message.rb +0 -5
- data/app/models/receipt.rb +0 -13
- data/app/uploaders/attachment_uploader.rb +0 -9
- data/db/migrate/20130801214110_initial_migration.rb +0 -22
- data/lib/generators/messaging/install_generator.rb +0 -26
- data/lib/generators/messaging/templates/initializer.rb +0 -11
- data/lib/messaging/concerns/configurable_mailer.rb +0 -13
- data/lib/messaging/engine.rb +0 -9
- data/lib/messaging/models/messageable.rb +0 -24
- data/lib/tasks/messaging_tasks.rake +0 -4
- data/test/dummy/README.rdoc +0 -28
- data/test/dummy/Rakefile +0 -6
- data/test/dummy/app/assets/javascripts/application.js +0 -13
- data/test/dummy/app/assets/stylesheets/application.css +0 -13
- data/test/dummy/app/controllers/application_controller.rb +0 -5
- data/test/dummy/app/helpers/application_helper.rb +0 -2
- data/test/dummy/app/views/layouts/application.html.erb +0 -14
- data/test/dummy/bin/bundle +0 -3
- data/test/dummy/bin/rails +0 -4
- data/test/dummy/bin/rake +0 -4
- data/test/dummy/config.ru +0 -4
- data/test/dummy/config/application.rb +0 -23
- data/test/dummy/config/boot.rb +0 -5
- data/test/dummy/config/database.yml +0 -25
- data/test/dummy/config/environment.rb +0 -5
- data/test/dummy/config/environments/development.rb +0 -29
- data/test/dummy/config/environments/production.rb +0 -80
- data/test/dummy/config/environments/test.rb +0 -36
- data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/test/dummy/config/initializers/filter_parameter_logging.rb +0 -4
- data/test/dummy/config/initializers/inflections.rb +0 -16
- data/test/dummy/config/initializers/mime_types.rb +0 -5
- data/test/dummy/config/initializers/secret_token.rb +0 -12
- data/test/dummy/config/initializers/session_store.rb +0 -3
- data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/test/dummy/config/locales/en.yml +0 -23
- data/test/dummy/config/routes.rb +0 -56
- data/test/dummy/public/404.html +0 -58
- data/test/dummy/public/422.html +0 -58
- data/test/dummy/public/500.html +0 -57
- data/test/dummy/public/favicon.ico +0 -0
- data/test/messaging_test.rb +0 -7
- data/test/test_helper.rb +0 -15
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'rails/railtie'
|
2
|
+
require 'messaging/middleware/after_active_record_transaction'
|
3
|
+
require 'messaging/middleware/rails_wrapper'
|
4
|
+
|
5
|
+
module Messaging
|
6
|
+
module Rails
|
7
|
+
class Railtie < ::Rails::Railtie
|
8
|
+
config.after_initialize do
|
9
|
+
# Add the wrapper before any middlewares that may have been added by the initializer
|
10
|
+
# in the Rails app.
|
11
|
+
Messaging.config.consumer.middlewares.prepend(Middleware::RailsWrapper.new(::Rails.application))
|
12
|
+
|
13
|
+
# Run dispatchers after the current transaction has commited
|
14
|
+
Messaging.config.dispatcher.middlewares.prepend(Middleware::AfterActiveRecordTransaction)
|
15
|
+
|
16
|
+
# Eager load handlers for development mode to define consumers.
|
17
|
+
# This is needed as long as we use old style handlers that uses "listen_on"
|
18
|
+
# When we only use routing we don't need to eager load.
|
19
|
+
#
|
20
|
+
# Uses require_dependency as normal eager_load with Rails breaks code reloading.
|
21
|
+
next unless ::Rails.env.development?
|
22
|
+
|
23
|
+
Dir.glob("#{::Rails.root}/app/models/*.rb").each { |h| require_dependency h }
|
24
|
+
Dir.glob("#{::Rails.root}/{app,lib}/**/handlers/**/*.rb").each { |h| require_dependency h }
|
25
|
+
end
|
26
|
+
|
27
|
+
# As the consumer has a reference to the handler we need to clear that after
|
28
|
+
# the class has been unloaded and update the consumer with the reloaded classes.
|
29
|
+
initializer 'messaging.add_reloader' do |app|
|
30
|
+
app.reloader.after_class_unload do
|
31
|
+
Messaging.routes.reload_consumer_subscriptions!
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Messaging
|
2
|
+
# Public: Used by Messaging.routes to setup the routes for matching messages to callables
|
3
|
+
#
|
4
|
+
# See routing.rb for more information.
|
5
|
+
class Routes
|
6
|
+
include Routing
|
7
|
+
|
8
|
+
# Creates a consumer for the default adapter
|
9
|
+
#
|
10
|
+
# @param name [Symbol] the name of the consumer.
|
11
|
+
def consumer(name, **options, &block)
|
12
|
+
consumer_definitions[name] = { options: options, block: block }
|
13
|
+
end
|
14
|
+
|
15
|
+
def define_consumers!
|
16
|
+
return unless consumers.empty?
|
17
|
+
|
18
|
+
consumer_definitions.each do |name, definition|
|
19
|
+
c = Messaging.consumer_adapter.create_consumer(name, definition.fetch(:options))
|
20
|
+
definition.fetch(:block)&.call(c)
|
21
|
+
consumers << c
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Keeps the consumers, but reload their subscriptions so code reloading works.
|
26
|
+
# The consumer has a reference to the class name of each of its handlers,
|
27
|
+
# if the handler is reloaded the reference would point to an old instance.
|
28
|
+
def reload_consumer_subscriptions!
|
29
|
+
consumers.each do |c|
|
30
|
+
c.clear_subscribers!
|
31
|
+
consumer_definitions[c.name].fetch(:block)&.call(c)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def consumers
|
36
|
+
@consumers ||= []
|
37
|
+
end
|
38
|
+
|
39
|
+
# Public: Evaluate route definition.
|
40
|
+
def draw(&block)
|
41
|
+
instance_eval(&block)
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def consumer_definitions
|
47
|
+
@consumer_definitions ||= {}
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'messaging/routing/message_matcher'
|
2
|
+
require 'messaging/routing/subscriber'
|
3
|
+
require 'messaging/routing/background_job_subscriber'
|
4
|
+
require 'messaging/routing/enqueue_message_handler'
|
5
|
+
|
6
|
+
module Messaging
|
7
|
+
module Routing
|
8
|
+
# Public: Sets up subscribers for the events that matches the given pattern
|
9
|
+
#
|
10
|
+
# pattern - Which messages to subscribe to. Can be a string, a regexp,
|
11
|
+
# a Message class, a module or anything that responds to call.
|
12
|
+
#
|
13
|
+
# call: - Any object that responds to call.
|
14
|
+
# Will be called immediately for matching messages.
|
15
|
+
#
|
16
|
+
# enqueue: - A constant that responds to call.
|
17
|
+
# Will be enqueued with Sidekiq for matching messages.
|
18
|
+
# Needs to be a constant that Sidekiq can serialize to a string
|
19
|
+
# and back again to a constant as you can't store procs in Redis.
|
20
|
+
#
|
21
|
+
# block - An optional block that will be called with each matching message.
|
22
|
+
#
|
23
|
+
#
|
24
|
+
# Examples
|
25
|
+
#
|
26
|
+
# Messaging.routes.draw do
|
27
|
+
# on 'Events::BidPlaced', call: NotifyOtherBidders
|
28
|
+
#
|
29
|
+
# on Events::BidPlaced, enqueue: NotifyOtherBidders
|
30
|
+
#
|
31
|
+
# on Events, do |event|
|
32
|
+
# puts event.inspect
|
33
|
+
# end
|
34
|
+
#
|
35
|
+
# on /.*Updated$/, enqueue: AuditChanges
|
36
|
+
#
|
37
|
+
# on ->(m) { m.topic == 'my-topic' }, call: DoSometing, enqueue: DoSomethingElseWithSidekiq
|
38
|
+
# end
|
39
|
+
#
|
40
|
+
def on(pattern = /.*/, topic: nil, call: nil, enqueue: nil, &block)
|
41
|
+
subscribers << Subscriber.new(pattern, topic, call) if call
|
42
|
+
subscribers << Subscriber.new(pattern, topic, block) if block_given?
|
43
|
+
subscribers << BackgroundJobSubscriber.new(pattern, topic, enqueue) if enqueue
|
44
|
+
end
|
45
|
+
|
46
|
+
# Internal: Handles the message with the matching subscribers
|
47
|
+
def handle(message)
|
48
|
+
subscribers.map { |subscriber| subscriber.call(message) }
|
49
|
+
message
|
50
|
+
end
|
51
|
+
|
52
|
+
# Internal: Used by Rails reloading in development.
|
53
|
+
def clear_subscribers!
|
54
|
+
@subscribers = Set.new
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def subscribers
|
60
|
+
@subscribers ||= Set.new
|
61
|
+
end
|
62
|
+
|
63
|
+
def topics
|
64
|
+
subscribers.flat_map(&:topics).map(&:to_s).uniq
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Messaging
|
2
|
+
module Routing
|
3
|
+
# Internal: Used for enqueing background jobs instead of calling the handler directly
|
4
|
+
class BackgroundJobSubscriber < Subscriber
|
5
|
+
def initialize(pattern, topic, handler)
|
6
|
+
super
|
7
|
+
@handler = EnqueueMessageHandler.new(handler)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'dry-equalizer'
|
2
|
+
module Messaging
|
3
|
+
module Routing
|
4
|
+
# Internal: Used by subscribers to match messages.
|
5
|
+
class MessageMatcher
|
6
|
+
include Dry::Equalizer(:pattern, :topic_pattern)
|
7
|
+
|
8
|
+
attr_accessor :pattern
|
9
|
+
attr_accessor :topic_pattern
|
10
|
+
|
11
|
+
def initialize(pattern:, topic: nil)
|
12
|
+
self.pattern = pattern
|
13
|
+
self.topic_pattern = topic
|
14
|
+
end
|
15
|
+
|
16
|
+
# Internal: See routing.rb for examples on how it is used.
|
17
|
+
|
18
|
+
# Med case statement
|
19
|
+
def matches?(message)
|
20
|
+
matches_topic?(message) && matches_pattern?(message)
|
21
|
+
end
|
22
|
+
|
23
|
+
def matches_pattern?(message)
|
24
|
+
case pattern
|
25
|
+
when Regexp
|
26
|
+
pattern =~ message.message_type
|
27
|
+
when Class, Module
|
28
|
+
/^#{pattern}/ =~ message.message_type
|
29
|
+
when Proc
|
30
|
+
pattern.call(message)
|
31
|
+
else
|
32
|
+
false
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def matches_topic?(message)
|
37
|
+
return true unless topic_pattern
|
38
|
+
|
39
|
+
case message.topic.to_s
|
40
|
+
when topic_pattern then true
|
41
|
+
else
|
42
|
+
false
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def call(message)
|
47
|
+
matches?(message)
|
48
|
+
end
|
49
|
+
|
50
|
+
def all_matching_messages
|
51
|
+
Messaging.defined_messages.select(&method(:matches?))
|
52
|
+
end
|
53
|
+
|
54
|
+
# Internal: Get all topics that the matcher would need to match a message.
|
55
|
+
#
|
56
|
+
# Used by the Kafka adapter to setup consumers.
|
57
|
+
def topics
|
58
|
+
(Array(topic_pattern) + all_matching_messages.map(&:topic)).uniq
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'dry-equalizer'
|
2
|
+
|
3
|
+
module Messaging
|
4
|
+
module Routing
|
5
|
+
# Internal: Used by routing to match a pattern against a callable (handler)
|
6
|
+
class Subscriber
|
7
|
+
include Dry::Equalizer(:matcher, :handler)
|
8
|
+
|
9
|
+
attr_reader :matcher
|
10
|
+
attr_reader :handler
|
11
|
+
|
12
|
+
def initialize(pattern, topic, handler)
|
13
|
+
@matcher = MessageMatcher.new(pattern: pattern, topic: topic)
|
14
|
+
@handler = handler
|
15
|
+
verify_handler!
|
16
|
+
end
|
17
|
+
|
18
|
+
def call(message)
|
19
|
+
return unless @matcher.matches?(message)
|
20
|
+
|
21
|
+
@handler.call(message)
|
22
|
+
end
|
23
|
+
|
24
|
+
def topics
|
25
|
+
matcher.topics
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def verify_handler!
|
31
|
+
raise ArgumentError, 'Handler must be callable' unless handler.respond_to? :call
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Messaging
|
2
|
+
class SidekiqWorker
|
3
|
+
include Sidekiq::Worker
|
4
|
+
sidekiq_options queue: 'messaging'
|
5
|
+
|
6
|
+
def perform(raw_message, handler_name)
|
7
|
+
message = Messaging::Message::FromJson.(raw_message)
|
8
|
+
handler = handler_name.constantize
|
9
|
+
handler.call message
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/messaging/version.rb
CHANGED
data/messaging.gemspec
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require 'messaging/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "messaging"
|
7
|
+
spec.version = Messaging::VERSION
|
8
|
+
spec.authors = ["Bukowskis"]
|
9
|
+
spec.email = ["developers@bukowskis.com"]
|
10
|
+
spec.summary = %q( A library for decoupling applications by using messaging to communicate between components. )
|
11
|
+
spec.homepage = "https://bukowskis.github.io/messaging/"
|
12
|
+
|
13
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
14
|
+
f.match(%r{^(test|spec|features)/})
|
15
|
+
end
|
16
|
+
|
17
|
+
spec.bindir = 'exe'
|
18
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_dependency 'activerecord'
|
22
|
+
spec.add_dependency 'activesupport'
|
23
|
+
spec.add_dependency 'bukowskis_after_transaction'
|
24
|
+
spec.add_dependency 'method_object'
|
25
|
+
spec.add_dependency 'concurrent-ruby', '>= 1.0.2'
|
26
|
+
spec.add_dependency 'concurrent-ruby-ext', '>= 1.0.2'
|
27
|
+
spec.add_dependency 'dry-configurable'
|
28
|
+
spec.add_dependency 'dry-container'
|
29
|
+
spec.add_dependency 'dry-equalizer'
|
30
|
+
spec.add_dependency 'dry-initializer'
|
31
|
+
spec.add_dependency 'meter', '>= 1.2.1'
|
32
|
+
spec.add_dependency 'ruby-kafka', '>= 0.5.3'
|
33
|
+
spec.add_dependency 'virtus'
|
34
|
+
|
35
|
+
spec.add_development_dependency 'bundler', '~> 1.14'
|
36
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
37
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
38
|
+
spec.add_development_dependency 'rspec-rails'
|
39
|
+
spec.add_development_dependency 'simplecov'
|
40
|
+
end
|
metadata
CHANGED
@@ -1,100 +1,329 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: messaging
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Bukowskis
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-10-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bukowskis_after_transaction
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: method_object
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: concurrent-ruby
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.0.2
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.0.2
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: concurrent-ruby-ext
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.0.2
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.0.2
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: dry-configurable
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: dry-container
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: dry-equalizer
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: dry-initializer
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: meter
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: 1.2.1
|
20
160
|
type: :runtime
|
21
161
|
prerelease: false
|
22
162
|
version_requirements: !ruby/object:Gem::Requirement
|
23
163
|
requirements:
|
24
|
-
- -
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: 1.2.1
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: ruby-kafka
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 0.5.3
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: 0.5.3
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: virtus
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :runtime
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: bundler
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - "~>"
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '1.14'
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - "~>"
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '1.14'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: rake
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - "~>"
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '10.0'
|
216
|
+
type: :development
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - "~>"
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '10.0'
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: rspec
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - "~>"
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '3.0'
|
230
|
+
type: :development
|
231
|
+
prerelease: false
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - "~>"
|
25
235
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
236
|
+
version: '3.0'
|
27
237
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
238
|
+
name: rspec-rails
|
29
239
|
requirement: !ruby/object:Gem::Requirement
|
30
240
|
requirements:
|
31
|
-
- -
|
241
|
+
- - ">="
|
32
242
|
- !ruby/object:Gem::Version
|
33
243
|
version: '0'
|
34
244
|
type: :development
|
35
245
|
prerelease: false
|
36
246
|
version_requirements: !ruby/object:Gem::Requirement
|
37
247
|
requirements:
|
38
|
-
- -
|
248
|
+
- - ">="
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: '0'
|
251
|
+
- !ruby/object:Gem::Dependency
|
252
|
+
name: simplecov
|
253
|
+
requirement: !ruby/object:Gem::Requirement
|
254
|
+
requirements:
|
255
|
+
- - ">="
|
39
256
|
- !ruby/object:Gem::Version
|
40
257
|
version: '0'
|
41
|
-
|
258
|
+
type: :development
|
259
|
+
prerelease: false
|
260
|
+
version_requirements: !ruby/object:Gem::Requirement
|
261
|
+
requirements:
|
262
|
+
- - ">="
|
263
|
+
- !ruby/object:Gem::Version
|
264
|
+
version: '0'
|
265
|
+
description:
|
42
266
|
email:
|
43
|
-
-
|
44
|
-
executables:
|
267
|
+
- developers@bukowskis.com
|
268
|
+
executables:
|
269
|
+
- messaging
|
45
270
|
extensions: []
|
46
271
|
extra_rdoc_files: []
|
47
272
|
files:
|
48
|
-
-
|
49
|
-
-
|
50
|
-
-
|
51
|
-
-
|
52
|
-
-
|
53
|
-
-
|
54
|
-
-
|
55
|
-
- lib/messaging/engine.rb
|
56
|
-
- lib/messaging/models/messageable.rb
|
57
|
-
- lib/messaging/version.rb
|
58
|
-
- lib/messaging.rb
|
59
|
-
- lib/tasks/messaging_tasks.rake
|
60
|
-
- MIT-LICENSE
|
273
|
+
- ".circleci/config.yml"
|
274
|
+
- ".gitignore"
|
275
|
+
- ".rspec"
|
276
|
+
- ".ruby-version"
|
277
|
+
- Gemfile
|
278
|
+
- Gemfile.lock
|
279
|
+
- README.md
|
61
280
|
- Rakefile
|
62
|
-
-
|
63
|
-
-
|
64
|
-
-
|
65
|
-
-
|
66
|
-
-
|
67
|
-
-
|
68
|
-
-
|
69
|
-
-
|
70
|
-
-
|
71
|
-
-
|
72
|
-
-
|
73
|
-
-
|
74
|
-
-
|
75
|
-
-
|
76
|
-
-
|
77
|
-
-
|
78
|
-
-
|
79
|
-
-
|
80
|
-
-
|
81
|
-
-
|
82
|
-
-
|
83
|
-
-
|
84
|
-
-
|
85
|
-
-
|
86
|
-
-
|
87
|
-
-
|
88
|
-
-
|
89
|
-
-
|
90
|
-
-
|
91
|
-
-
|
92
|
-
-
|
93
|
-
-
|
94
|
-
-
|
95
|
-
|
96
|
-
|
97
|
-
-
|
281
|
+
- _config.yml
|
282
|
+
- bin/console
|
283
|
+
- bin/setup
|
284
|
+
- exe/messaging
|
285
|
+
- lib/messaging.rb
|
286
|
+
- lib/messaging/adapters.rb
|
287
|
+
- lib/messaging/adapters/kafka.rb
|
288
|
+
- lib/messaging/adapters/kafka/consumer.rb
|
289
|
+
- lib/messaging/adapters/kafka/producer.rb
|
290
|
+
- lib/messaging/adapters/postgres.rb
|
291
|
+
- lib/messaging/adapters/postgres/advisory_transaction_lock.rb
|
292
|
+
- lib/messaging/adapters/postgres/serialized_message.rb
|
293
|
+
- lib/messaging/adapters/postgres/store.rb
|
294
|
+
- lib/messaging/adapters/postgres/stream.rb
|
295
|
+
- lib/messaging/adapters/postgres/streams.rb
|
296
|
+
- lib/messaging/adapters/test.rb
|
297
|
+
- lib/messaging/adapters/test/consumer.rb
|
298
|
+
- lib/messaging/adapters/test/store.rb
|
299
|
+
- lib/messaging/adapters/test/stream.rb
|
300
|
+
- lib/messaging/base_handler.rb
|
301
|
+
- lib/messaging/cli.rb
|
302
|
+
- lib/messaging/config.rb
|
303
|
+
- lib/messaging/consumer_supervisor.rb
|
304
|
+
- lib/messaging/exception_handler.rb
|
305
|
+
- lib/messaging/expected_version.rb
|
306
|
+
- lib/messaging/instrumentation.rb
|
307
|
+
- lib/messaging/message.rb
|
308
|
+
- lib/messaging/message/from_json.rb
|
309
|
+
- lib/messaging/meter.rb
|
310
|
+
- lib/messaging/middleware.rb
|
311
|
+
- lib/messaging/middleware/after_active_record_transaction.rb
|
312
|
+
- lib/messaging/middleware/rails_wrapper.rb
|
313
|
+
- lib/messaging/publish.rb
|
314
|
+
- lib/messaging/rails/railtie.rb
|
315
|
+
- lib/messaging/resque_worker.rb
|
316
|
+
- lib/messaging/routes.rb
|
317
|
+
- lib/messaging/routing.rb
|
318
|
+
- lib/messaging/routing/background_job_subscriber.rb
|
319
|
+
- lib/messaging/routing/enqueue_message_handler.rb
|
320
|
+
- lib/messaging/routing/message_matcher.rb
|
321
|
+
- lib/messaging/routing/subscriber.rb
|
322
|
+
- lib/messaging/sidekiq_worker.rb
|
323
|
+
- lib/messaging/version.rb
|
324
|
+
- messaging.gemspec
|
325
|
+
homepage: https://bukowskis.github.io/messaging/
|
326
|
+
licenses: []
|
98
327
|
metadata: {}
|
99
328
|
post_install_message:
|
100
329
|
rdoc_options: []
|
@@ -102,51 +331,19 @@ require_paths:
|
|
102
331
|
- lib
|
103
332
|
required_ruby_version: !ruby/object:Gem::Requirement
|
104
333
|
requirements:
|
105
|
-
- -
|
334
|
+
- - ">="
|
106
335
|
- !ruby/object:Gem::Version
|
107
336
|
version: '0'
|
108
337
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
338
|
requirements:
|
110
|
-
- -
|
339
|
+
- - ">="
|
111
340
|
- !ruby/object:Gem::Version
|
112
341
|
version: '0'
|
113
342
|
requirements: []
|
114
343
|
rubyforge_project:
|
115
|
-
rubygems_version: 2.
|
344
|
+
rubygems_version: 2.5.1
|
116
345
|
signing_key:
|
117
346
|
specification_version: 4
|
118
|
-
summary:
|
119
|
-
|
120
|
-
|
121
|
-
- test/dummy/app/assets/stylesheets/application.css
|
122
|
-
- test/dummy/app/controllers/application_controller.rb
|
123
|
-
- test/dummy/app/helpers/application_helper.rb
|
124
|
-
- test/dummy/app/views/layouts/application.html.erb
|
125
|
-
- test/dummy/bin/bundle
|
126
|
-
- test/dummy/bin/rails
|
127
|
-
- test/dummy/bin/rake
|
128
|
-
- test/dummy/config/application.rb
|
129
|
-
- test/dummy/config/boot.rb
|
130
|
-
- test/dummy/config/database.yml
|
131
|
-
- test/dummy/config/environment.rb
|
132
|
-
- test/dummy/config/environments/development.rb
|
133
|
-
- test/dummy/config/environments/production.rb
|
134
|
-
- test/dummy/config/environments/test.rb
|
135
|
-
- test/dummy/config/initializers/backtrace_silencers.rb
|
136
|
-
- test/dummy/config/initializers/filter_parameter_logging.rb
|
137
|
-
- test/dummy/config/initializers/inflections.rb
|
138
|
-
- test/dummy/config/initializers/mime_types.rb
|
139
|
-
- test/dummy/config/initializers/secret_token.rb
|
140
|
-
- test/dummy/config/initializers/session_store.rb
|
141
|
-
- test/dummy/config/initializers/wrap_parameters.rb
|
142
|
-
- test/dummy/config/locales/en.yml
|
143
|
-
- test/dummy/config/routes.rb
|
144
|
-
- test/dummy/config.ru
|
145
|
-
- test/dummy/public/404.html
|
146
|
-
- test/dummy/public/422.html
|
147
|
-
- test/dummy/public/500.html
|
148
|
-
- test/dummy/public/favicon.ico
|
149
|
-
- test/dummy/Rakefile
|
150
|
-
- test/dummy/README.rdoc
|
151
|
-
- test/messaging_test.rb
|
152
|
-
- test/test_helper.rb
|
347
|
+
summary: A library for decoupling applications by using messaging to communicate between
|
348
|
+
components.
|
349
|
+
test_files: []
|