nulogy_message_bus_producer 2.0.0 → 3.2.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/README.md +188 -15
- data/Rakefile +6 -2
- data/db/migrate/20201005150212_rename_tenant_id_and_public.rb +6 -0
- data/lib/nulogy_message_bus_producer.rb +47 -19
- data/lib/nulogy_message_bus_producer/{base_public_subscription.rb → base_subscription.rb} +1 -1
- data/lib/nulogy_message_bus_producer/config.rb +6 -0
- data/lib/nulogy_message_bus_producer/repopulate_replication_slots.rb +25 -0
- data/lib/nulogy_message_bus_producer/subscriber_graphql_schema_validator.rb +1 -1
- data/lib/nulogy_message_bus_producer/{public_subscription.rb → subscription.rb} +1 -2
- data/lib/nulogy_message_bus_producer/{public_subscription_event.rb → subscription_event.rb} +1 -1
- data/lib/nulogy_message_bus_producer/subscriptions/no_variables.rb +43 -0
- data/lib/nulogy_message_bus_producer/subscriptions/postgres_transport.rb +85 -0
- data/lib/nulogy_message_bus_producer/subscriptions/risky_subscription_blocker.rb +70 -0
- data/lib/nulogy_message_bus_producer/version.rb +1 -1
- data/lib/tasks/engine/message_bus_producer.rake +11 -0
- data/spec/dummy/config/database.yml +1 -1
- data/spec/dummy/config/puma.rb +2 -2
- data/spec/dummy/db/migrate/20201005164116_create_active_storage_tables.active_storage.rb +5 -0
- data/spec/dummy/db/schema.rb +3 -5
- data/spec/dummy/log/development.log +510 -0
- data/spec/dummy/log/test.log +18126 -0
- data/spec/integration/lib/nulogy_message_bus_producer/repopulate_replication_slots_spec.rb +141 -0
- data/spec/integration/lib/nulogy_message_bus_producer/subscriber_graphql_schema_validator_spec.rb +49 -0
- data/spec/integration/lib/nulogy_message_bus_producer/subscription_spec.rb +61 -0
- data/spec/integration/lib/nulogy_message_bus_producer/subscriptions/no_variables_spec.rb +46 -0
- data/spec/integration/lib/nulogy_message_bus_producer/subscriptions/postgres_transport_spec.rb +135 -0
- data/spec/integration/lib/nulogy_message_bus_producer/subscriptions/risky_subscription_blocker_spec.rb +49 -0
- data/spec/integration_spec_helper.rb +5 -0
- data/spec/spec_helper.rb +0 -40
- data/spec/support/kafka.rb +105 -0
- data/spec/support/kafka_connect.rb +31 -0
- data/spec/support/spec_utils.rb +16 -0
- data/spec/support/sql_helpers.rb +45 -0
- data/spec/support/subscription_helpers.rb +52 -0
- data/spec/support/test_graphql_schema.rb +48 -0
- metadata +89 -38
- data/lib/nulogy_message_bus_producer/postgres_public_subscriptions.rb +0 -117
- data/spec/integration/lib/graphql_api/postgres_public_subscriptions_spec.rb +0 -122
- data/spec/integration/lib/graphql_api/validators/subscriber_graphql_schema_validator_spec.rb +0 -76
- data/spec/unit/lib/graphql_api/models/public_subscription_spec.rb +0 -66
- data/spec/unit_spec_helper.rb +0 -6
@@ -6,6 +6,7 @@ ENV["RAILS_ENV"] ||= "test"
|
|
6
6
|
require File.expand_path("dummy/config/environment.rb", __dir__)
|
7
7
|
|
8
8
|
require "rspec/rails"
|
9
|
+
require "rspec/json_expectations"
|
9
10
|
require "active_record"
|
10
11
|
require "spec_helper"
|
11
12
|
|
@@ -33,4 +34,8 @@ RSpec.configure do |config|
|
|
33
34
|
config.expect_with(:rspec) do |c|
|
34
35
|
c.max_formatted_output_length = 1_000_000
|
35
36
|
end
|
37
|
+
|
38
|
+
config.include(SpecUtils)
|
39
|
+
config.include(SqlHelpers)
|
40
|
+
config.include(SubscriptionHelpers)
|
36
41
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,43 +1,3 @@
|
|
1
|
-
# Some test GraphQL objects for testing
|
2
|
-
module NulogyMessageBusProducer
|
3
|
-
module Specs
|
4
|
-
class TestObject < GraphQL::Schema::Object
|
5
|
-
graphql_name "testObject"
|
6
|
-
|
7
|
-
field :id, type: NulogyGraphqlApi::Types::UUID, null: false
|
8
|
-
end
|
9
|
-
|
10
|
-
class TestQuery < GraphQL::Schema::Object
|
11
|
-
graphql_name "testQuery"
|
12
|
-
|
13
|
-
field :foo, TestObject, null: false do
|
14
|
-
argument :id, type: NulogyGraphqlApi::Types::UUID, required: false
|
15
|
-
end
|
16
|
-
|
17
|
-
def foo(id:)
|
18
|
-
OpenStruct.new(id: id)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
class TestCreated < NulogyMessageBusProducer::BasePublicSubscription
|
23
|
-
field :description, String, null: false
|
24
|
-
end
|
25
|
-
|
26
|
-
class TestSubscription < GraphQL::Schema::Object
|
27
|
-
extend GraphQL::Subscriptions::SubscriptionRoot
|
28
|
-
|
29
|
-
field :test_created, subscription: TestCreated
|
30
|
-
end
|
31
|
-
|
32
|
-
class TestSchema < GraphQL::Schema
|
33
|
-
use NulogyMessageBusProducer::PostgresPublicSubscriptions
|
34
|
-
|
35
|
-
query TestQuery
|
36
|
-
subscription TestSubscription
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
1
|
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
42
2
|
RSpec.configure do |config|
|
43
3
|
config.expect_with(:rspec) do |expectations|
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require "open3"
|
2
|
+
require "rdkafka"
|
3
|
+
|
4
|
+
module Kafka
|
5
|
+
module_function
|
6
|
+
|
7
|
+
def kafka_config
|
8
|
+
config = {
|
9
|
+
"auto.offset.reset": "beginning",
|
10
|
+
"bootstrap.servers": test_bootstrap_servers,
|
11
|
+
"enable.auto.commit": false,
|
12
|
+
"group.id": random_consumer_group
|
13
|
+
}
|
14
|
+
|
15
|
+
Rdkafka::Config.new(config)
|
16
|
+
end
|
17
|
+
|
18
|
+
def random_topic_name
|
19
|
+
"test-topic-#{SecureRandom.uuid}"
|
20
|
+
end
|
21
|
+
|
22
|
+
def random_consumer_group
|
23
|
+
"ruby-test-consumer-group-#{SecureRandom.uuid}"
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_bootstrap_servers
|
27
|
+
"localhost:9092"
|
28
|
+
end
|
29
|
+
|
30
|
+
def setup_kafka_producer
|
31
|
+
kafka_config.producer
|
32
|
+
end
|
33
|
+
|
34
|
+
def setup_kafka_consumer(topic_name)
|
35
|
+
consumer = kafka_config.consumer
|
36
|
+
consumer.subscribe(topic_name)
|
37
|
+
wait_for_assignment(consumer)
|
38
|
+
consumer
|
39
|
+
end
|
40
|
+
|
41
|
+
def get_all_messages(consumer, timeout: 500)
|
42
|
+
messages = []
|
43
|
+
|
44
|
+
loop do
|
45
|
+
message = consumer.poll(timeout)
|
46
|
+
|
47
|
+
return messages unless message
|
48
|
+
|
49
|
+
messages << message
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def wait_for_messages(consumer)
|
54
|
+
messages = []
|
55
|
+
SpecUtils.wait_for(attempts: 10) do
|
56
|
+
messages = Kafka.get_all_messages(consumer)
|
57
|
+
messages.present?
|
58
|
+
end
|
59
|
+
messages
|
60
|
+
end
|
61
|
+
|
62
|
+
def create_topic(topic_name)
|
63
|
+
cmd = [
|
64
|
+
"docker-compose exec",
|
65
|
+
"-T kafka kafka-topics",
|
66
|
+
"--zookeeper zookeeper:2181",
|
67
|
+
"--create",
|
68
|
+
"--replication-factor 1",
|
69
|
+
"--partitions 3",
|
70
|
+
"--if-not-exists --topic #{topic_name}"
|
71
|
+
]
|
72
|
+
run(cmd.join(" "))
|
73
|
+
end
|
74
|
+
|
75
|
+
def delete_topic(topic_name)
|
76
|
+
run("docker-compose exec -T kafka kafka-topics --zookeeper zookeeper:2181 --delete --topic #{topic_name}")
|
77
|
+
end
|
78
|
+
|
79
|
+
def list_topics
|
80
|
+
topics = run("docker-compose exec -T kafka kafka-topics --zookeeper zookeeper:2181 --list")
|
81
|
+
topics.split(" ")
|
82
|
+
end
|
83
|
+
|
84
|
+
def run(command)
|
85
|
+
stdout, stderr, status = Open3.capture3(command)
|
86
|
+
raise <<~OUTPUT if status != 0
|
87
|
+
Command `#{command}` failed with:
|
88
|
+
STDOUT:
|
89
|
+
#{stdout}
|
90
|
+
|
91
|
+
STDERR:
|
92
|
+
#{stderr}
|
93
|
+
OUTPUT
|
94
|
+
|
95
|
+
stdout
|
96
|
+
end
|
97
|
+
|
98
|
+
def wait_for_assignment(consumer)
|
99
|
+
SpecUtils.wait_for { !consumer.assignment.empty? }
|
100
|
+
end
|
101
|
+
|
102
|
+
def wait_for_unassignment(consumer)
|
103
|
+
SpecUtils.wait_for { consumer.assignment.empty? }
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class KafkaConnect
|
2
|
+
def initialize(host, connector_name)
|
3
|
+
uri = URI(host)
|
4
|
+
@http = Net::HTTP.new(uri.host, uri.port)
|
5
|
+
@connector_name = connector_name
|
6
|
+
end
|
7
|
+
|
8
|
+
def configure(config)
|
9
|
+
request = Net::HTTP::Put.new("/connectors/#{@connector_name}/config")
|
10
|
+
request.body = config.to_json
|
11
|
+
request.content_type = "application/json"
|
12
|
+
@http.request(request)
|
13
|
+
end
|
14
|
+
|
15
|
+
def delete
|
16
|
+
request = Net::HTTP::Delete.new("/connectors/#{@connector_name}")
|
17
|
+
@http.request(request)
|
18
|
+
end
|
19
|
+
|
20
|
+
def info
|
21
|
+
request = Net::HTTP::Get.new("/connectors/#{@connector_name}")
|
22
|
+
response = @http.request(request)
|
23
|
+
JSON.parse(response.body, symbolize_names: true)
|
24
|
+
end
|
25
|
+
|
26
|
+
def status
|
27
|
+
request = Net::HTTP::Get.new("/connectors/#{@connector_name}/status")
|
28
|
+
response = @http.request(request)
|
29
|
+
JSON.parse(response.body, symbolize_names: true)
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module SpecUtils
|
2
|
+
module_function
|
3
|
+
|
4
|
+
def wait_for(attempts: 100, interval: 0.1)
|
5
|
+
attempts.times do
|
6
|
+
return if yield
|
7
|
+
|
8
|
+
sleep interval
|
9
|
+
end
|
10
|
+
raise "Waited for #{attempts} times but it never resolved"
|
11
|
+
end
|
12
|
+
|
13
|
+
def uuid(entity_number)
|
14
|
+
format("00000000-0000-0000-0000-%<id>12.12d", id: entity_number)
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module SqlHelpers
|
2
|
+
def without_transaction
|
3
|
+
ActiveRecord::Base.connection.rollback_transaction
|
4
|
+
yield
|
5
|
+
ensure
|
6
|
+
truncate_db
|
7
|
+
end
|
8
|
+
|
9
|
+
def truncate_db
|
10
|
+
# Hit any tables that were used via active record
|
11
|
+
ActiveRecord::Base.connection.tables.each do |table|
|
12
|
+
ActiveRecord::Base.connection.execute("TRUNCATE #{table}")
|
13
|
+
end
|
14
|
+
|
15
|
+
# Just incase these models weren't loaded, do them explicitly
|
16
|
+
ActiveRecord::Base.connection.execute("TRUNCATE #{NulogyMessageBusProducer::SubscriptionEvent.table_name}")
|
17
|
+
ActiveRecord::Base.connection.execute("TRUNCATE #{NulogyMessageBusProducer::Subscription.table_name}")
|
18
|
+
end
|
19
|
+
|
20
|
+
def replication_slots
|
21
|
+
results = ActiveRecord::Base.connection.exec_query(<<~SQL)
|
22
|
+
SELECT slot_name FROM pg_replication_slots
|
23
|
+
SQL
|
24
|
+
|
25
|
+
results.to_a.map { |result| result["slot_name"] }
|
26
|
+
end
|
27
|
+
|
28
|
+
def drop_replication_slot(slot_name)
|
29
|
+
ActiveRecord::Base.connection.execute(<<~SQL)
|
30
|
+
SELECT pg_drop_replication_slot('#{slot_name}')
|
31
|
+
SQL
|
32
|
+
end
|
33
|
+
|
34
|
+
def wait_for_replication_slot(slot_name)
|
35
|
+
wait_for do
|
36
|
+
replication_slots.any? { |replication_slot| replication_slot == slot_name }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def wait_for_replication_slot_cleanup(slot_name)
|
41
|
+
wait_for do
|
42
|
+
replication_slots.none? { |replication_slot| replication_slot == slot_name }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module SubscriptionHelpers
|
2
|
+
def subscribe_to(
|
3
|
+
schema: NulogyMessageBusProducer::Specs::TestSchema,
|
4
|
+
subscription_id: SecureRandom.uuid,
|
5
|
+
**query_args
|
6
|
+
)
|
7
|
+
gql = subscription_query(subscription_id: subscription_id, **query_args)
|
8
|
+
|
9
|
+
expect do
|
10
|
+
gql_response = execute_graphql(gql, schema)
|
11
|
+
expect(gql_response).to eq(data: {})
|
12
|
+
end.to change(NulogyMessageBusProducer::Subscription, :count).by(1)
|
13
|
+
|
14
|
+
NulogyMessageBusProducer::Subscription.find(subscription_id)
|
15
|
+
end
|
16
|
+
|
17
|
+
def subscription_query(
|
18
|
+
event_type: "testCreated",
|
19
|
+
query: "foo { id }",
|
20
|
+
subscription_id: SecureRandom.uuid,
|
21
|
+
subscription_group_id: SecureRandom.uuid,
|
22
|
+
topic_name: "some_topic"
|
23
|
+
)
|
24
|
+
<<~GRAPHQL
|
25
|
+
subscription {
|
26
|
+
#{event_type} (
|
27
|
+
subscriptionId: "#{subscription_id}",
|
28
|
+
subscriptionGroupId: "#{subscription_group_id}",
|
29
|
+
topicName: "#{topic_name}"
|
30
|
+
) {
|
31
|
+
#{query}
|
32
|
+
}
|
33
|
+
}
|
34
|
+
GRAPHQL
|
35
|
+
end
|
36
|
+
|
37
|
+
def execute_graphql(query, schema, variables: {}, context: {})
|
38
|
+
response = schema.execute(
|
39
|
+
query,
|
40
|
+
variables: variables,
|
41
|
+
context: context,
|
42
|
+
operation_name: nil
|
43
|
+
)
|
44
|
+
|
45
|
+
response.to_h.deep_symbolize_keys
|
46
|
+
end
|
47
|
+
|
48
|
+
def trigger_event(event_type, root_object)
|
49
|
+
schema = NulogyMessageBusProducer::Specs::TestSchema
|
50
|
+
NulogyMessageBusProducer.trigger_event(schema, event_type, root_object)
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# Some test GraphQL objects for testing
|
2
|
+
NulogyMessageBusProducer.config.register_schema(
|
3
|
+
schema: "NulogyMessageBusProducer::Specs::TestSchema",
|
4
|
+
key: "test"
|
5
|
+
)
|
6
|
+
|
7
|
+
module NulogyMessageBusProducer
|
8
|
+
module Specs
|
9
|
+
class TestObject < GraphQL::Schema::Object
|
10
|
+
graphql_name "testObject"
|
11
|
+
|
12
|
+
field :id, type: String, null: false
|
13
|
+
field :field_with_arguments, type: String, null: false do
|
14
|
+
argument :first, String, required: false
|
15
|
+
end
|
16
|
+
field :context_data, type: String, null: false
|
17
|
+
|
18
|
+
def context_data
|
19
|
+
context[:context_data]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class TestQuery < GraphQL::Schema::Object
|
24
|
+
field :dummy_value, String, null: false
|
25
|
+
end
|
26
|
+
|
27
|
+
class TestCreated < NulogyMessageBusProducer::BaseSubscription
|
28
|
+
field :foo, TestObject, null: false
|
29
|
+
field :foo_list, [TestObject], null: false
|
30
|
+
end
|
31
|
+
|
32
|
+
class TestSubscription < GraphQL::Schema::Object
|
33
|
+
field :test_created, subscription: TestCreated
|
34
|
+
end
|
35
|
+
|
36
|
+
class TestSchema < GraphQL::Schema
|
37
|
+
use GraphQL::Execution::Interpreter
|
38
|
+
use GraphQL::Analysis::AST
|
39
|
+
use NulogyMessageBusProducer::Subscriptions::PostgresTransport
|
40
|
+
|
41
|
+
query TestQuery
|
42
|
+
subscription TestSubscription
|
43
|
+
|
44
|
+
query_analyzer NulogyMessageBusProducer::Subscriptions::RiskySubscriptionBlocker
|
45
|
+
query_analyzer NulogyMessageBusProducer::Subscriptions::NoVariables
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
metadata
CHANGED
@@ -1,57 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nulogy_message_bus_producer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 3.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nulogy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: graphql
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.11.4
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.11.4
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: rails
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '5'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: strong_migrations
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - '='
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 0.5.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.5.0
|
40
|
+
version: '5'
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: pg
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,6 +94,48 @@ dependencies:
|
|
108
94
|
- - '='
|
109
95
|
- !ruby/object:Gem::Version
|
110
96
|
version: 13.0.1
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rake-release
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 1.2.1
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.2.1
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rdkafka
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
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: rspec-json_expectations
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - '='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 2.2.0
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - '='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 2.2.0
|
111
139
|
- !ruby/object:Gem::Dependency
|
112
140
|
name: rspec-rails
|
113
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -188,16 +216,21 @@ files:
|
|
188
216
|
- README.md
|
189
217
|
- Rakefile
|
190
218
|
- db/migrate/20200611150212_create_public_subscriptions_and_events_tables.rb
|
219
|
+
- db/migrate/20201005150212_rename_tenant_id_and_public.rb
|
191
220
|
- lib/nulogy_message_bus_producer.rb
|
192
221
|
- lib/nulogy_message_bus_producer/application_record.rb
|
193
|
-
- lib/nulogy_message_bus_producer/
|
222
|
+
- lib/nulogy_message_bus_producer/base_subscription.rb
|
194
223
|
- lib/nulogy_message_bus_producer/config.rb
|
195
224
|
- lib/nulogy_message_bus_producer/engine.rb
|
196
|
-
- lib/nulogy_message_bus_producer/
|
197
|
-
- lib/nulogy_message_bus_producer/public_subscription.rb
|
198
|
-
- lib/nulogy_message_bus_producer/public_subscription_event.rb
|
225
|
+
- lib/nulogy_message_bus_producer/repopulate_replication_slots.rb
|
199
226
|
- lib/nulogy_message_bus_producer/subscriber_graphql_schema_validator.rb
|
227
|
+
- lib/nulogy_message_bus_producer/subscription.rb
|
228
|
+
- lib/nulogy_message_bus_producer/subscription_event.rb
|
229
|
+
- lib/nulogy_message_bus_producer/subscriptions/no_variables.rb
|
230
|
+
- lib/nulogy_message_bus_producer/subscriptions/postgres_transport.rb
|
231
|
+
- lib/nulogy_message_bus_producer/subscriptions/risky_subscription_blocker.rb
|
200
232
|
- lib/nulogy_message_bus_producer/version.rb
|
233
|
+
- lib/tasks/engine/message_bus_producer.rake
|
201
234
|
- spec/dummy/Rakefile
|
202
235
|
- spec/dummy/app/assets/config/manifest.js
|
203
236
|
- spec/dummy/app/assets/javascripts/application.js
|
@@ -242,6 +275,7 @@ files:
|
|
242
275
|
- spec/dummy/config/routes.rb
|
243
276
|
- spec/dummy/config/secrets.yml
|
244
277
|
- spec/dummy/config/spring.rb
|
278
|
+
- spec/dummy/db/migrate/20201005164116_create_active_storage_tables.active_storage.rb
|
245
279
|
- spec/dummy/db/schema.rb
|
246
280
|
- spec/dummy/log/development.log
|
247
281
|
- spec/dummy/log/test.log
|
@@ -252,12 +286,20 @@ files:
|
|
252
286
|
- spec/dummy/public/apple-touch-icon-precomposed.png
|
253
287
|
- spec/dummy/public/apple-touch-icon.png
|
254
288
|
- spec/dummy/public/favicon.ico
|
255
|
-
- spec/integration/lib/
|
256
|
-
- spec/integration/lib/
|
289
|
+
- spec/integration/lib/nulogy_message_bus_producer/repopulate_replication_slots_spec.rb
|
290
|
+
- spec/integration/lib/nulogy_message_bus_producer/subscriber_graphql_schema_validator_spec.rb
|
291
|
+
- spec/integration/lib/nulogy_message_bus_producer/subscription_spec.rb
|
292
|
+
- spec/integration/lib/nulogy_message_bus_producer/subscriptions/no_variables_spec.rb
|
293
|
+
- spec/integration/lib/nulogy_message_bus_producer/subscriptions/postgres_transport_spec.rb
|
294
|
+
- spec/integration/lib/nulogy_message_bus_producer/subscriptions/risky_subscription_blocker_spec.rb
|
257
295
|
- spec/integration_spec_helper.rb
|
258
296
|
- spec/spec_helper.rb
|
259
|
-
- spec/
|
260
|
-
- spec/
|
297
|
+
- spec/support/kafka.rb
|
298
|
+
- spec/support/kafka_connect.rb
|
299
|
+
- spec/support/spec_utils.rb
|
300
|
+
- spec/support/sql_helpers.rb
|
301
|
+
- spec/support/subscription_helpers.rb
|
302
|
+
- spec/support/test_graphql_schema.rb
|
261
303
|
homepage: https://github.com/nulogy/message-bus/tree/master/gems/nulogy_message_bus_producer
|
262
304
|
licenses: []
|
263
305
|
metadata: {}
|
@@ -267,9 +309,9 @@ require_paths:
|
|
267
309
|
- lib
|
268
310
|
required_ruby_version: !ruby/object:Gem::Requirement
|
269
311
|
requirements:
|
270
|
-
- - "
|
312
|
+
- - "~>"
|
271
313
|
- !ruby/object:Gem::Version
|
272
|
-
version: '0'
|
314
|
+
version: '2.0'
|
273
315
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
274
316
|
requirements:
|
275
317
|
- - ">="
|
@@ -282,7 +324,6 @@ specification_version: 4
|
|
282
324
|
summary: Nulogy's code for producing to the Message Bus
|
283
325
|
test_files:
|
284
326
|
- spec/spec_helper.rb
|
285
|
-
- spec/unit/lib/graphql_api/models/public_subscription_spec.rb
|
286
327
|
- spec/dummy/app/mailers/application_mailer.rb
|
287
328
|
- spec/dummy/app/models/application_record.rb
|
288
329
|
- spec/dummy/app/jobs/application_job.rb
|
@@ -335,9 +376,19 @@ test_files:
|
|
335
376
|
- spec/dummy/public/apple-touch-icon-precomposed.png
|
336
377
|
- spec/dummy/package.json
|
337
378
|
- spec/dummy/db/schema.rb
|
379
|
+
- spec/dummy/db/migrate/20201005164116_create_active_storage_tables.active_storage.rb
|
338
380
|
- spec/dummy/log/test.log
|
339
381
|
- spec/dummy/log/development.log
|
340
382
|
- spec/integration_spec_helper.rb
|
341
|
-
- spec/integration/lib/
|
342
|
-
- spec/integration/lib/
|
343
|
-
- spec/
|
383
|
+
- spec/integration/lib/nulogy_message_bus_producer/repopulate_replication_slots_spec.rb
|
384
|
+
- spec/integration/lib/nulogy_message_bus_producer/subscriptions/risky_subscription_blocker_spec.rb
|
385
|
+
- spec/integration/lib/nulogy_message_bus_producer/subscriptions/postgres_transport_spec.rb
|
386
|
+
- spec/integration/lib/nulogy_message_bus_producer/subscriptions/no_variables_spec.rb
|
387
|
+
- spec/integration/lib/nulogy_message_bus_producer/subscription_spec.rb
|
388
|
+
- spec/integration/lib/nulogy_message_bus_producer/subscriber_graphql_schema_validator_spec.rb
|
389
|
+
- spec/support/kafka_connect.rb
|
390
|
+
- spec/support/subscription_helpers.rb
|
391
|
+
- spec/support/kafka.rb
|
392
|
+
- spec/support/spec_utils.rb
|
393
|
+
- spec/support/sql_helpers.rb
|
394
|
+
- spec/support/test_graphql_schema.rb
|