deimos-ruby 1.24.3 → 2.0.0.pre.alpha1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +0 -17
- data/.tool-versions +1 -0
- data/CHANGELOG.md +1 -1
- data/README.md +287 -498
- data/deimos-ruby.gemspec +4 -4
- data/docs/CONFIGURATION.md +133 -227
- data/docs/UPGRADING.md +237 -0
- data/lib/deimos/active_record_consume/batch_consumption.rb +28 -29
- data/lib/deimos/active_record_consume/message_consumption.rb +15 -21
- data/lib/deimos/active_record_consumer.rb +36 -26
- data/lib/deimos/active_record_producer.rb +28 -9
- data/lib/deimos/backends/base.rb +4 -35
- data/lib/deimos/backends/kafka.rb +6 -22
- data/lib/deimos/backends/kafka_async.rb +6 -22
- data/lib/deimos/backends/{db.rb → outbox.rb} +13 -9
- data/lib/deimos/config/configuration.rb +116 -385
- data/lib/deimos/consume/batch_consumption.rb +24 -124
- data/lib/deimos/consume/message_consumption.rb +36 -63
- data/lib/deimos/consumer.rb +16 -75
- data/lib/deimos/ext/consumer_route.rb +35 -0
- data/lib/deimos/ext/producer_middleware.rb +94 -0
- data/lib/deimos/ext/producer_route.rb +22 -0
- data/lib/deimos/ext/redraw.rb +29 -0
- data/lib/deimos/ext/routing_defaults.rb +72 -0
- data/lib/deimos/ext/schema_route.rb +70 -0
- data/lib/deimos/kafka_message.rb +2 -2
- data/lib/deimos/kafka_source.rb +2 -7
- data/lib/deimos/kafka_topic_info.rb +1 -1
- data/lib/deimos/logging.rb +71 -0
- data/lib/deimos/message.rb +2 -11
- data/lib/deimos/metrics/datadog.rb +40 -1
- data/lib/deimos/metrics/provider.rb +4 -4
- data/lib/deimos/producer.rb +39 -116
- data/lib/deimos/railtie.rb +6 -0
- data/lib/deimos/schema_backends/avro_base.rb +21 -21
- data/lib/deimos/schema_backends/avro_schema_registry.rb +1 -2
- data/lib/deimos/schema_backends/avro_validation.rb +2 -2
- data/lib/deimos/schema_backends/base.rb +19 -12
- data/lib/deimos/schema_backends/mock.rb +6 -1
- data/lib/deimos/schema_backends/plain.rb +47 -0
- data/lib/deimos/schema_class/base.rb +2 -2
- data/lib/deimos/schema_class/enum.rb +1 -1
- data/lib/deimos/schema_class/record.rb +2 -2
- data/lib/deimos/test_helpers.rb +95 -320
- data/lib/deimos/tracing/provider.rb +6 -6
- data/lib/deimos/transcoder.rb +88 -0
- data/lib/deimos/utils/db_poller/base.rb +16 -14
- data/lib/deimos/utils/db_poller/state_based.rb +3 -3
- data/lib/deimos/utils/db_poller/time_based.rb +4 -4
- data/lib/deimos/utils/db_poller.rb +1 -1
- data/lib/deimos/utils/deadlock_retry.rb +1 -1
- data/lib/deimos/utils/{db_producer.rb → outbox_producer.rb} +16 -47
- data/lib/deimos/utils/schema_class.rb +0 -7
- data/lib/deimos/version.rb +1 -1
- data/lib/deimos.rb +79 -26
- data/lib/generators/deimos/{db_backend_generator.rb → outbox_backend_generator.rb} +4 -4
- data/lib/generators/deimos/schema_class_generator.rb +0 -1
- data/lib/generators/deimos/v2/templates/karafka.rb.tt +149 -0
- data/lib/generators/deimos/v2_generator.rb +193 -0
- data/lib/tasks/deimos.rake +5 -7
- data/spec/active_record_batch_consumer_association_spec.rb +22 -13
- data/spec/active_record_batch_consumer_spec.rb +84 -65
- data/spec/active_record_consume/batch_consumption_spec.rb +10 -10
- data/spec/active_record_consume/batch_slicer_spec.rb +12 -12
- data/spec/active_record_consumer_spec.rb +29 -13
- data/spec/active_record_producer_spec.rb +36 -26
- data/spec/backends/base_spec.rb +0 -23
- data/spec/backends/kafka_async_spec.rb +1 -3
- data/spec/backends/kafka_spec.rb +1 -3
- data/spec/backends/{db_spec.rb → outbox_spec.rb} +14 -20
- data/spec/batch_consumer_spec.rb +66 -116
- data/spec/consumer_spec.rb +53 -147
- data/spec/deimos_spec.rb +10 -126
- data/spec/kafka_source_spec.rb +19 -52
- data/spec/karafka/karafka.rb +69 -0
- data/spec/karafka_config/karafka_spec.rb +97 -0
- data/spec/logging_spec.rb +25 -0
- data/spec/message_spec.rb +9 -9
- data/spec/producer_spec.rb +112 -254
- data/spec/rake_spec.rb +1 -3
- data/spec/schema_backends/avro_validation_spec.rb +1 -1
- data/spec/schemas/com/my-namespace/MySchemaWithTitle.avsc +22 -0
- data/spec/snapshots/consumers-no-nest.snap +49 -0
- data/spec/snapshots/consumers.snap +49 -0
- data/spec/snapshots/consumers_and_producers-no-nest.snap +49 -0
- data/spec/snapshots/consumers_and_producers.snap +49 -0
- data/spec/snapshots/consumers_circular-no-nest.snap +49 -0
- data/spec/snapshots/consumers_circular.snap +49 -0
- data/spec/snapshots/consumers_complex_types-no-nest.snap +49 -0
- data/spec/snapshots/consumers_complex_types.snap +49 -0
- data/spec/snapshots/consumers_nested-no-nest.snap +49 -0
- data/spec/snapshots/consumers_nested.snap +49 -0
- data/spec/snapshots/namespace_folders.snap +49 -0
- data/spec/snapshots/namespace_map.snap +49 -0
- data/spec/snapshots/producers_with_key-no-nest.snap +49 -0
- data/spec/snapshots/producers_with_key.snap +49 -0
- data/spec/spec_helper.rb +61 -29
- data/spec/utils/db_poller_spec.rb +49 -39
- data/spec/utils/{db_producer_spec.rb → outbox_producer_spec.rb} +17 -184
- metadata +58 -67
- data/lib/deimos/batch_consumer.rb +0 -7
- data/lib/deimos/config/phobos_config.rb +0 -164
- data/lib/deimos/instrumentation.rb +0 -95
- data/lib/deimos/monkey_patches/phobos_cli.rb +0 -35
- data/lib/deimos/utils/inline_consumer.rb +0 -158
- data/lib/deimos/utils/lag_reporter.rb +0 -186
- data/lib/deimos/utils/schema_controller_mixin.rb +0 -129
- data/spec/config/configuration_spec.rb +0 -329
- data/spec/kafka_listener_spec.rb +0 -55
- data/spec/phobos.bad_db.yml +0 -73
- data/spec/phobos.yml +0 -77
- data/spec/utils/inline_consumer_spec.rb +0 -31
- data/spec/utils/lag_reporter_spec.rb +0 -76
- data/spec/utils/platform_schema_validation_spec.rb +0 -0
- data/spec/utils/schema_controller_mixin_spec.rb +0 -84
- /data/lib/generators/deimos/{db_backend → outbox_backend}/templates/migration +0 -0
- /data/lib/generators/deimos/{db_backend → outbox_backend}/templates/rails3_migration +0 -0
@@ -1,84 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'deimos/utils/schema_controller_mixin'
|
4
|
-
require 'deimos/schema_backends/avro_local'
|
5
|
-
|
6
|
-
RSpec.describe Deimos::Utils::SchemaControllerMixin, type: :controller do
|
7
|
-
|
8
|
-
before(:each) do
|
9
|
-
Deimos.configure do
|
10
|
-
schema.backend(:avro_local)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
controller(ActionController::Base) do
|
15
|
-
include Deimos::Utils::SchemaControllerMixin # rubocop:disable RSpec/DescribedClass
|
16
|
-
|
17
|
-
request_namespace 'com.my-namespace.request'
|
18
|
-
response_namespace 'com.my-namespace.response'
|
19
|
-
schemas :index, :show
|
20
|
-
schemas create: 'CreateTopic'
|
21
|
-
schemas :update, request: 'UpdateRequest', response: 'UpdateResponse'
|
22
|
-
|
23
|
-
# :nodoc:
|
24
|
-
def index
|
25
|
-
render_schema({ 'response_id' => payload[:request_id] + ' mom' })
|
26
|
-
end
|
27
|
-
|
28
|
-
# :nodoc:
|
29
|
-
def show
|
30
|
-
render_schema({ 'response_id' => payload[:request_id] + ' dad' })
|
31
|
-
end
|
32
|
-
|
33
|
-
# :nodoc:
|
34
|
-
def create
|
35
|
-
render_schema({ 'response_id' => payload[:request_id] + ' bro' })
|
36
|
-
end
|
37
|
-
|
38
|
-
# :nodoc:
|
39
|
-
def update
|
40
|
-
render_schema({ 'update_response_id' => payload[:update_request_id] + ' sis' })
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
it 'should render the correct response for index' do
|
45
|
-
request_backend = Deimos.schema_backend(schema: 'Index',
|
46
|
-
namespace: 'com.my-namespace.request')
|
47
|
-
response_backend = Deimos.schema_backend(schema: 'Index',
|
48
|
-
namespace: 'com.my-namespace.response')
|
49
|
-
request.content_type = 'avro/binary'
|
50
|
-
get :index, body: request_backend.encode({ 'request_id' => 'hi' })
|
51
|
-
expect(response_backend.decode(response.body)).to eq({ 'response_id' => 'hi mom' })
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'should render the correct response for show' do
|
55
|
-
request_backend = Deimos.schema_backend(schema: 'Index',
|
56
|
-
namespace: 'com.my-namespace.request')
|
57
|
-
response_backend = Deimos.schema_backend(schema: 'Index',
|
58
|
-
namespace: 'com.my-namespace.response')
|
59
|
-
request.content_type = 'avro/binary'
|
60
|
-
get :show, params: { id: 1 }, body: request_backend.encode({ 'request_id' => 'hi' })
|
61
|
-
expect(response_backend.decode(response.body)).to eq({ 'response_id' => 'hi dad' })
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'should render the correct response for update' do
|
65
|
-
request_backend = Deimos.schema_backend(schema: 'UpdateRequest',
|
66
|
-
namespace: 'com.my-namespace.request')
|
67
|
-
response_backend = Deimos.schema_backend(schema: 'UpdateResponse',
|
68
|
-
namespace: 'com.my-namespace.response')
|
69
|
-
request.content_type = 'avro/binary'
|
70
|
-
post :update, params: { id: 1 }, body: request_backend.encode({ 'update_request_id' => 'hi' })
|
71
|
-
expect(response_backend.decode(response.body)).to eq({ 'update_response_id' => 'hi sis' })
|
72
|
-
end
|
73
|
-
|
74
|
-
it 'should render the correct response for create' do
|
75
|
-
request_backend = Deimos.schema_backend(schema: 'CreateTopic',
|
76
|
-
namespace: 'com.my-namespace.request')
|
77
|
-
response_backend = Deimos.schema_backend(schema: 'CreateTopic',
|
78
|
-
namespace: 'com.my-namespace.response')
|
79
|
-
request.content_type = 'avro/binary'
|
80
|
-
post :create, params: { id: 1 }, body: request_backend.encode({ 'request_id' => 'hi' })
|
81
|
-
expect(response_backend.decode(response.body)).to eq({ 'response_id' => 'hi bro' })
|
82
|
-
end
|
83
|
-
|
84
|
-
end
|
File without changes
|
File without changes
|