flipp-ruby-kafka-temp-fork 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +97 -0
  3. data/.dockerignore +2 -0
  4. data/.gitignore +41 -0
  5. data/.gitmodules +0 -0
  6. data/.rspec +1 -0
  7. data/.rubocop.yml +56 -0
  8. data/.ruby-gemset +1 -0
  9. data/.ruby-version +1 -0
  10. data/CHANGELOG.md +466 -0
  11. data/Dockerfile +21 -0
  12. data/Gemfile +6 -0
  13. data/Gemfile.lock +207 -0
  14. data/Guardfile +22 -0
  15. data/README.md +102 -0
  16. data/Rakefile +13 -0
  17. data/bin/flipp_ruby_kafka +4 -0
  18. data/deploy/artifactory.sh +8 -0
  19. data/deploy/config.json +4 -0
  20. data/docker-compose.yml +89 -0
  21. data/docs/UPGRADE_1.0.md +39 -0
  22. data/flipp-ruby-kafka.gemspec +34 -0
  23. data/kafkateria/factories/my_schema.rb +16 -0
  24. data/kafkateria/factories/my_schema_with_id.rb +16 -0
  25. data/lib/flipp_ruby_kafka.rb +73 -0
  26. data/lib/flipp_ruby_kafka/flipp_datadog_metrics.rb +15 -0
  27. data/lib/flipp_ruby_kafka/test_helpers.rb +59 -0
  28. data/lib/flipp_ruby_kafka/utils/platform_schema_validation.rb +77 -0
  29. data/lib/flipp_ruby_kafka/utils/platform_topic_validation.rb +41 -0
  30. data/lib/flipp_ruby_kafka/version.rb +5 -0
  31. data/lib/generators/flipp_ruby_kafka/schema_validation/schema_validation_generator.rb +23 -0
  32. data/lib/generators/flipp_ruby_kafka/topic_validation/topic_validation_generator.rb +22 -0
  33. data/spec/flipp_ruby_kafka_spec.rb +8 -0
  34. data/spec/integration/send_kafka_spec.rb +63 -0
  35. data/spec/phobos.yml +73 -0
  36. data/spec/schemas/com/my-namespace/MySchema-key.avsc +13 -0
  37. data/spec/schemas/com/my-namespace/MySchema.avsc +18 -0
  38. data/spec/schemas/com/my-namespace/MySchemaWithDateTimes.avsc +33 -0
  39. data/spec/schemas/com/my-namespace/MySchemaWithId.avsc +28 -0
  40. data/spec/spec_helper.rb +39 -0
  41. data/spec/utils/platform_schema_validation_spec.rb +54 -0
  42. data/spec/utils/platform_topic_validation_spec.rb +50 -0
  43. metadata +262 -0
@@ -0,0 +1,63 @@
1
+ require 'net/http'
2
+
3
+ # frozen_string_literal: true
4
+
5
+ RSpec.describe 'integration spec', integration: true do # rubocop:disable RSpec/DescribeClass
6
+ let(:producer_class) do
7
+ Class.new(FlippRubyKafka::Producer) do
8
+ schema 'MySchema'
9
+ namespace 'com.my-namespace'
10
+ topic 'my_consume_topic'
11
+ key_config field: 'test_id'
12
+ end
13
+ end
14
+
15
+ let(:producer_class_with_id) do
16
+ Class.new(FlippRubyKafka::Producer) do
17
+ schema 'MySchemaWithId'
18
+ namespace 'com.my-namespace'
19
+ topic 'my_consume_topic_with_id'
20
+ key_config schema: 'MySchema-key'
21
+ end
22
+ end
23
+
24
+ prepend_before(:each) do
25
+ kafkateria_delete_topic('my_consume_topic')
26
+ end
27
+
28
+ it 'should publish a keyed Kafka msg' do
29
+ payload = { 'test_id' => 'foo', 'some_int' => 5 }
30
+ producer_class.publish(payload)
31
+ sleep(1)
32
+ messages = kafkateria_get_messages(topic: 'my_consume_topic')
33
+ puts messages
34
+ expect(messages.size).to eq(1)
35
+ expect(messages[0][:payload]).to eq(payload)
36
+ end
37
+
38
+ it 'should send original and updated kafka messages for non keyed Kafka msg' do
39
+ payload = { 'test_id' => 'foobar', 'some_int' => 6 }
40
+ payload_update = { 'test_id' => 'foobar', 'some_int' => 7 }
41
+ producer_class.publish(payload)
42
+ producer_class.publish(payload_update)
43
+ sleep(1)
44
+ messages = kafkateria_get_messages(topic: 'my_consume_topic')
45
+ puts messages.size
46
+ expect(messages.size).to eq(2)
47
+ expect(messages[0][:payload]).to eq(payload)
48
+ expect(messages[1][:payload]).to eq(payload_update)
49
+ end
50
+
51
+ it 'should send only updated kafka messages for keyed Kafka msg' do
52
+ payload = { 'test_id' => 'foo', 'some_int' => 6, :payload_key => { 'test_id' => 'foo_key' } }
53
+ payload_update = { 'test_id' => 'foobar', 'some_int' => 7, :payload_key => { 'test_id' => 'foo_key' } }
54
+ producer_class_with_id.publish(payload)
55
+ producer_class_with_id.publish(payload_update)
56
+ sleep(1)
57
+ messages = kafkateria_get_messages(topic: 'my_consume_topic_with_id')
58
+ puts messages.size
59
+ expect(messages.size).to eq(1)
60
+ expect(messages[0][:payload]).to eq(payload_update)
61
+ end
62
+
63
+ end
data/spec/phobos.yml ADDED
@@ -0,0 +1,73 @@
1
+ logger:
2
+ # Optional log file, set to false or remove to disable it
3
+ file: log/phobos.log
4
+ # Optional output format for stdout, default is false (human readable).
5
+ # Set to true to enable json output.
6
+ stdout_json: false
7
+ level: debug
8
+ # Comment the block to disable ruby-kafka logs
9
+ ruby_kafka:
10
+ level: debug
11
+
12
+ kafka:
13
+ # identifier for this application
14
+ client_id: phobos
15
+ # timeout setting for connecting to brokers
16
+ connect_timeout: 15
17
+ # timeout setting for socket connections
18
+ socket_timeout: 15
19
+
20
+ producer:
21
+ # number of seconds a broker can wait for replicas to acknowledge
22
+ # a write before responding with a timeout
23
+ ack_timeout: 5
24
+ # number of replicas that must acknowledge a write, or `:all`
25
+ # if all in-sync replicas must acknowledge
26
+ required_acks: :all
27
+ # number of retries that should be attempted before giving up sending
28
+ # messages to the cluster. Does not include the original attempt
29
+ max_retries: 2
30
+ # number of seconds to wait between retries
31
+ retry_backoff: 1
32
+ # number of messages allowed in the buffer before new writes will
33
+ # raise {BufferOverflow} exceptions
34
+ max_buffer_size: 10000
35
+ # maximum size of the buffer in bytes. Attempting to produce messages
36
+ # when the buffer reaches this size will result in {BufferOverflow} being raised
37
+ max_buffer_bytesize: 10000000
38
+ # name of the compression codec to use, or nil if no compression should be performed.
39
+ # Valid codecs: `:snappy` and `:gzip`
40
+ compression_codec:
41
+ # number of messages that needs to be in a message set before it should be compressed.
42
+ # Note that message sets are per-partition rather than per-topic or per-producer
43
+ compression_threshold: 1
44
+ # maximum number of messages allowed in the queue. Only used for async_producer
45
+ max_queue_size: 10000
46
+ # if greater than zero, the number of buffered messages that will automatically
47
+ # trigger a delivery. Only used for async_producer
48
+ delivery_threshold: 0
49
+ # if greater than zero, the number of seconds between automatic message
50
+ # deliveries. Only used for async_producer
51
+ delivery_interval: 0
52
+
53
+ consumer:
54
+ # number of seconds after which, if a client hasn't contacted the Kafka cluster,
55
+ # it will be kicked out of the group
56
+ session_timeout: 300
57
+ # interval between offset commits, in seconds
58
+ offset_commit_interval: 10
59
+ # number of messages that can be processed before their offsets are committed.
60
+ # If zero, offset commits are not triggered by message processing
61
+ offset_commit_threshold: 0
62
+ # interval between heartbeats; must be less than the session window
63
+ heartbeat_interval: 10
64
+
65
+ backoff:
66
+ min_ms: 1000
67
+ max_ms: 60000
68
+
69
+ listeners:
70
+ - handler: ConsumerTest::MyConsumer
71
+ topic: my_consume_topic
72
+ group_id: my_group_id
73
+ max_bytes_per_partition: 524288 # 512 KB
@@ -0,0 +1,13 @@
1
+ {
2
+ "namespace": "com.my-namespace",
3
+ "name": "MySchema-key",
4
+ "type": "record",
5
+ "doc": "Test schema",
6
+ "fields": [
7
+ {
8
+ "name": "test_id",
9
+ "type": "string",
10
+ "doc": "test string"
11
+ }
12
+ ]
13
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "namespace": "com.my-namespace",
3
+ "name": "MySchema",
4
+ "type": "record",
5
+ "doc": "Test schema",
6
+ "fields": [
7
+ {
8
+ "name": "test_id",
9
+ "type": "string",
10
+ "doc": "test string"
11
+ },
12
+ {
13
+ "name": "some_int",
14
+ "type": "int",
15
+ "doc": "test int"
16
+ }
17
+ ]
18
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "namespace": "com.my-namespace",
3
+ "name": "MySchemaWithDateTimes",
4
+ "type": "record",
5
+ "doc": "Test schema",
6
+ "fields": [
7
+ {
8
+ "name": "test_id",
9
+ "type": "string",
10
+ "doc": "test string"
11
+ },
12
+ {
13
+ "name": "updated_at",
14
+ "type": ["int", "null"]
15
+ },
16
+ {
17
+ "name": "some_int",
18
+ "type": ["null", "int"],
19
+ "doc": "test int"
20
+ },
21
+ {
22
+ "name": "some_datetime_int",
23
+ "type": ["null", "int"],
24
+ "doc": "test datetime"
25
+ },
26
+ {
27
+ "name": "timestamp",
28
+ "type": "string",
29
+ "doc": "ISO timestamp",
30
+ "default": ""
31
+ }
32
+ ]
33
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "namespace": "com.my-namespace",
3
+ "name": "MySchemaWithId",
4
+ "type": "record",
5
+ "doc": "Test schema",
6
+ "fields": [
7
+ {
8
+ "name": "test_id",
9
+ "type": "string",
10
+ "doc": "test string"
11
+ },
12
+ {
13
+ "name": "some_int",
14
+ "type": "int",
15
+ "doc": "test int"
16
+ },
17
+ {
18
+ "name": "message_id",
19
+ "type": "string",
20
+ "doc": "UUID"
21
+ },
22
+ {
23
+ "name": "timestamp",
24
+ "type": "string",
25
+ "doc": "timestamp"
26
+ }
27
+ ]
28
+ }
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.unshift(File.expand_path('../lib', __dir__))
4
+ require 'flipp_ruby_kafka'
5
+ require 'flipp_ruby_kafka/test_helpers'
6
+ require 'deimos/test_helpers'
7
+ require 'deimos/metrics/mock'
8
+ require 'deimos/tracing/mock'
9
+ require 'active_support/testing/time_helpers'
10
+
11
+ RSpec.configure do |config|
12
+ config.full_backtrace = true
13
+
14
+ # true by default for RSpec 4.0
15
+ config.shared_context_metadata_behavior = :apply_to_host_groups
16
+
17
+ config.include FlippRubyKafka::TestHelpers
18
+ config.include ActiveSupport::Testing::TimeHelpers
19
+ config.before(:suite) do
20
+ Time.zone = 'EST'
21
+ end
22
+
23
+ config.before(:each) do |ex|
24
+ stub_producers_and_consumers! unless ex.metadata[:integration]
25
+
26
+ FlippRubyKafka.configure do
27
+ logger ActiveSupport::TaggedLogging.new(Logger.new(STDOUT))
28
+ metrics Deimos::Metrics::Mock
29
+ tracer Deimos::Tracing::Mock
30
+ schema.path(File.join(File.expand_path(__dir__), 'schemas'))
31
+ kafkateria_url ENV['KAFKATERIA_URL'] || 'http://localhost:3000'
32
+ end
33
+ end
34
+
35
+ config.after(:each) do
36
+ FlippRubyKafka.config.reset!
37
+ end
38
+
39
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'flipp_ruby_kafka/utils/platform_schema_validation'
4
+
5
+ describe(FlippRubyKafka::Utils::PlatformSchemaValidation) do
6
+ prepend_before(:each) do
7
+ # :nodoc:
8
+ consumer_class = Class.new(FlippRubyKafka::Consumer) do
9
+ # :nodoc:
10
+ def consume
11
+ end
12
+ end
13
+ stub_const('ConsumerTest::MyConsumer', consumer_class)
14
+
15
+ producer_class = Class.new(FlippRubyKafka::Producer)
16
+ stub_const('MyProducer', producer_class)
17
+ end
18
+
19
+ before(:each) do
20
+
21
+ FlippRubyKafka.configure do
22
+ producer do
23
+ class_name 'MyProducer'
24
+ schema 'MySchema'
25
+ namespace 'com.my-namespace'
26
+ topic 'my-topic'
27
+ key_config field: 'test_id'
28
+ end
29
+ consumer do
30
+ class_name 'ConsumerTest::MyConsumer'
31
+ schema 'MySchemaWithDateTimes'
32
+ namespace 'com.my-namespace'
33
+ key_config plain: true
34
+ topic 'my_consume_topic'
35
+ group_id 'my-group-id'
36
+ end
37
+ end
38
+
39
+ end
40
+
41
+ specify '#generate_config' do
42
+ base_path = File.join(File.expand_path('..', __dir__), 'schemas')
43
+ validator = described_class.new(base_path: base_path)
44
+ config = validator.generate_config
45
+ expect(config[:environments][:default]).to include(
46
+ 'file' => "#{base_path}/com/my-namespace/MySchema.avsc",
47
+ 'subject' => 'my-topic-value'
48
+ )
49
+ expect(config[:environments][:default]).to include(
50
+ 'file' => "#{base_path}/com/my-namespace/MySchemaWithDateTimes.avsc",
51
+ 'subject' => 'my_consume_topic-value'
52
+ )
53
+ end
54
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'flipp_ruby_kafka/utils/platform_topic_validation'
4
+
5
+ describe(FlippRubyKafka::Utils::PlatformTopicValidation) do
6
+ prepend_before(:each) do
7
+ # :nodoc:
8
+ consumer_class = Class.new(FlippRubyKafka::Consumer) do
9
+ # :nodoc:
10
+ def consume
11
+ end
12
+ end
13
+ stub_const('ConsumerTest::MyConsumer', consumer_class)
14
+
15
+ producer_class = Class.new(FlippRubyKafka::Producer)
16
+ stub_const('MyProducer', producer_class)
17
+ end
18
+
19
+ before(:each) do
20
+
21
+ FlippRubyKafka.configure do
22
+ producer do
23
+ class_name 'MyProducer'
24
+ schema 'MySchema'
25
+ namespace 'com.my-namespace'
26
+ topic 'my-topic'
27
+ key_config field: 'test_id'
28
+ end
29
+ consumer do
30
+ class_name 'ConsumerTest::MyConsumer'
31
+ schema 'MySchemaWithDateTimes'
32
+ namespace 'com.my-namespace'
33
+ key_config plain: true
34
+ topic 'my_consume_topic'
35
+ group_id 'my-group-id'
36
+ end
37
+ end
38
+
39
+ end
40
+
41
+ specify '#generate_config' do
42
+ config = described_class.generate_config('my-service')
43
+ expect(config).
44
+ to eq(
45
+ acls: [{ role: 'producer', topic: 'my-topic' },
46
+ { role: 'consumer', topic: 'my_consume_topic' }],
47
+ service: 'my-service'
48
+ )
49
+ end
50
+ end
metadata ADDED
@@ -0,0 +1,262 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: flipp-ruby-kafka-temp-fork
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Daniel Orner
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-08-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ddtrace
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0.11'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0.11'
27
+ - !ruby/object:Gem::Dependency
28
+ name: deimos-temp-fork
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.0.2
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 0.0.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: flipp-ruby-dogstatsd
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: railties
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '3'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: flipp_ruby_style
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: guard
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2'
97
+ - !ruby/object:Gem::Dependency
98
+ name: guard-rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '4'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '4'
111
+ - !ruby/object:Gem::Dependency
112
+ name: guard-rubocop
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '3'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '3'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rspec_junit_formatter
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '0.3'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '0.3'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '0.58'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '0.58'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rubocop-rspec
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '1.27'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '1.27'
181
+ description: Write a longer description. Optional.
182
+ email:
183
+ - daniel.orner@wishabi.com
184
+ executables:
185
+ - flipp_ruby_kafka
186
+ extensions: []
187
+ extra_rdoc_files: []
188
+ files:
189
+ - ".circleci/config.yml"
190
+ - ".dockerignore"
191
+ - ".gitignore"
192
+ - ".gitmodules"
193
+ - ".rspec"
194
+ - ".rubocop.yml"
195
+ - ".ruby-gemset"
196
+ - ".ruby-version"
197
+ - CHANGELOG.md
198
+ - Dockerfile
199
+ - Gemfile
200
+ - Gemfile.lock
201
+ - Guardfile
202
+ - README.md
203
+ - Rakefile
204
+ - bin/flipp_ruby_kafka
205
+ - deploy/artifactory.sh
206
+ - deploy/config.json
207
+ - docker-compose.yml
208
+ - docs/UPGRADE_1.0.md
209
+ - flipp-ruby-kafka.gemspec
210
+ - kafkateria/factories/my_schema.rb
211
+ - kafkateria/factories/my_schema_with_id.rb
212
+ - lib/flipp_ruby_kafka.rb
213
+ - lib/flipp_ruby_kafka/flipp_datadog_metrics.rb
214
+ - lib/flipp_ruby_kafka/test_helpers.rb
215
+ - lib/flipp_ruby_kafka/utils/platform_schema_validation.rb
216
+ - lib/flipp_ruby_kafka/utils/platform_topic_validation.rb
217
+ - lib/flipp_ruby_kafka/version.rb
218
+ - lib/generators/flipp_ruby_kafka/schema_validation/schema_validation_generator.rb
219
+ - lib/generators/flipp_ruby_kafka/topic_validation/topic_validation_generator.rb
220
+ - spec/flipp_ruby_kafka_spec.rb
221
+ - spec/integration/send_kafka_spec.rb
222
+ - spec/phobos.yml
223
+ - spec/schemas/com/my-namespace/MySchema-key.avsc
224
+ - spec/schemas/com/my-namespace/MySchema.avsc
225
+ - spec/schemas/com/my-namespace/MySchemaWithDateTimes.avsc
226
+ - spec/schemas/com/my-namespace/MySchemaWithId.avsc
227
+ - spec/spec_helper.rb
228
+ - spec/utils/platform_schema_validation_spec.rb
229
+ - spec/utils/platform_topic_validation_spec.rb
230
+ homepage: ''
231
+ licenses: []
232
+ metadata: {}
233
+ post_install_message:
234
+ rdoc_options: []
235
+ require_paths:
236
+ - lib
237
+ required_ruby_version: !ruby/object:Gem::Requirement
238
+ requirements:
239
+ - - ">="
240
+ - !ruby/object:Gem::Version
241
+ version: '0'
242
+ required_rubygems_version: !ruby/object:Gem::Requirement
243
+ requirements:
244
+ - - ">="
245
+ - !ruby/object:Gem::Version
246
+ version: '0'
247
+ requirements: []
248
+ rubygems_version: 3.2.3
249
+ signing_key:
250
+ specification_version: 4
251
+ summary: Flipp Kafka libraries for Ruby.
252
+ test_files:
253
+ - spec/flipp_ruby_kafka_spec.rb
254
+ - spec/integration/send_kafka_spec.rb
255
+ - spec/phobos.yml
256
+ - spec/schemas/com/my-namespace/MySchema-key.avsc
257
+ - spec/schemas/com/my-namespace/MySchema.avsc
258
+ - spec/schemas/com/my-namespace/MySchemaWithDateTimes.avsc
259
+ - spec/schemas/com/my-namespace/MySchemaWithId.avsc
260
+ - spec/spec_helper.rb
261
+ - spec/utils/platform_schema_validation_spec.rb
262
+ - spec/utils/platform_topic_validation_spec.rb