kafka-rest-rb 0.1.0.alpha3 → 0.1.0.alpha4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 62669def0b5abd426e87fd604d686d80bb7b35cb
4
- data.tar.gz: 34b0f48d653206b00b66d323bf70907eb9a6235c
3
+ metadata.gz: 0e943787c23ecd8a91ccbe8dd0af4da7b5cc4d6d
4
+ data.tar.gz: c067af79eca968aa0400006ec11af42afc5cb868
5
5
  SHA512:
6
- metadata.gz: 1d3b74192ffd3bc11cb8493c0b1688cbcf973b20f3c572ae38a9edc1024bd334d3e4e2a32a360aeb512230f186a7cc849e23dd9a608aafc2a60686ef6d3ac043
7
- data.tar.gz: e382353163f1fe427a970051e50476713f1f794efdacfdf7e23ce8b201cac596489211f46020e1750a4e504cf74a50a81006dfd405ece307f4645fcc34ac8da5
6
+ metadata.gz: 29a226688e4184daa8fbb636c7e6e2f59631faddfacb15d3c162cd315f1c6b38bf6fe8d683ea35fc42f0af457e79dadec48341223caa4e1eb2f5cb95a4fc7eef
7
+ data.tar.gz: 0ec544e2efd18df718d9676baaeafea0773ac8c86b0f526d89e87b4f8f568c4efeaf49875f0da333148a0dcaa3fc4ec68d430623416c384ee9ed1840e31b6b07
@@ -4,19 +4,6 @@ require 'multi_json'
4
4
 
5
5
  module KafkaRest
6
6
  class Client
7
- class KafkaRestClientException < StandardError
8
- attr_reader :body, :status
9
-
10
- def initialize(resp)
11
- @body = resp.body
12
- @status = resp.status
13
-
14
- super "#{@body['message']}" +
15
- " (HTTP Status: #{@status}; " +
16
- "error code: #{@body['error_code']})"
17
- end
18
- end
19
-
20
7
  class DefaultHeaders < Faraday::Middleware
21
8
  def initialize(app = nil, default_headers = {})
22
9
  @default_headers = default_headers
@@ -50,7 +37,7 @@ module KafkaRest
50
37
  response = @app.call(env)
51
38
  response.on_complete do
52
39
  unless response.success?
53
- raise KafkaRestClientException.new(response)
40
+ raise ClientError.new(response)
54
41
  end
55
42
  end
56
43
  end
@@ -5,7 +5,8 @@ module KafkaRest
5
5
  :serialization_adapter,
6
6
  :worker_min_threads,
7
7
  :worker_max_threads,
8
- :worker_max_queue
8
+ :worker_max_queue,
9
+ :sender
9
10
 
10
11
  def initialize
11
12
  @url = 'http://localhost:8082'
@@ -14,6 +15,15 @@ module KafkaRest
14
15
  @worker_min_threads = 4
15
16
  @worker_max_threads = 4
16
17
  @worker_max_queue = nil
18
+ @sender = KafkaRest::Sender::KafkaSender
19
+ end
20
+
21
+ def sender=(_sender)
22
+ if s.respond_to?(:send!)
23
+ @sender = _sender
24
+ else
25
+ raise InvalidConfigValue.new("sender", _sender, "Sender be a child of `KafkaRest::Sender`")
26
+ end
17
27
  end
18
28
  end
19
29
 
@@ -0,0 +1,29 @@
1
+ module KafkaRest
2
+ class InvalidConfigValue < StandardError
3
+ def initialize(name, val, msg = nil)
4
+ message = "Invalid config for `#{name}`: #{val.to_s}"
5
+ message << ". #{msg}" if msg
6
+
7
+ super message
8
+ end
9
+ end
10
+
11
+ class ClientError < StandardError
12
+ attr_reader :body, :status, :error_code
13
+
14
+ def initialize(resp)
15
+ @body = resp.body
16
+ @status = resp.status
17
+ @error_code = @body['error_code']
18
+
19
+ super "#{@body['message']}" +
20
+ " (HTTP Status: #{@status}; " +
21
+ "error code: #{@status})"
22
+ end
23
+ end
24
+
25
+ class ProducerSendError < StandardError
26
+ end
27
+
28
+ class ConsumerError < StandardError; end
29
+ end
@@ -0,0 +1,27 @@
1
+ module KafkaRest
2
+ module Producer
3
+ class Message
4
+ attr_reader :topic, :payload, :format, :params
5
+
6
+ def initialize(producer, obj, opts = {})
7
+ @topic = producer.get_topic.to_s
8
+ @payload = Payload.new(producer, obj, opts).build
9
+ @format = producer.get_format.to_s
10
+ @params = build_params(producer)
11
+ end
12
+
13
+ private
14
+
15
+ # add schemas if format == 'avro'
16
+ def build_params(producer)
17
+ {}.tap do |params|
18
+ if @format == 'avro'
19
+ has_key = !producer.get_key.nil?
20
+ params[:key_schema] = producer.get_key_schema if has_key
21
+ params[:value_schema] = producer.get_value_schema
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,5 +1,5 @@
1
1
  module KafkaRest
2
- class Sender
2
+ module Producer
3
3
  class Payload
4
4
  class AvroBuilder < Builder
5
5
  # TODO: get rid of this
@@ -1,7 +1,7 @@
1
1
  require 'base64'
2
2
 
3
3
  module KafkaRest
4
- class Sender
4
+ module Producer
5
5
  class Payload
6
6
  class BinaryBuilder < Builder
7
7
  def build
@@ -1,5 +1,5 @@
1
1
  module KafkaRest
2
- class Sender
2
+ module Producer
3
3
  class Payload
4
4
  class Builder
5
5
  def initialize(payload)
@@ -1,5 +1,5 @@
1
1
  module KafkaRest
2
- class Sender
2
+ module Producer
3
3
  class Payload
4
4
  class JsonBuilder < Builder
5
5
  def build
@@ -1,10 +1,10 @@
1
- require 'kafka_rest/sender/payload/builder'
2
- require 'kafka_rest/sender/payload/avro_builder'
3
- require 'kafka_rest/sender/payload/json_builder'
4
- require 'kafka_rest/sender/payload/binary_builder'
1
+ require 'kafka_rest/producer/payload/builder'
2
+ require 'kafka_rest/producer/payload/avro_builder'
3
+ require 'kafka_rest/producer/payload/json_builder'
4
+ require 'kafka_rest/producer/payload/binary_builder'
5
5
 
6
6
  module KafkaRest
7
- class Sender
7
+ module Producer
8
8
  class Payload
9
9
  attr_reader :klass
10
10
 
@@ -1,4 +1,5 @@
1
1
  require 'kafka_rest/dsl'
2
+ require 'kafka_rest/producer/payload'
2
3
 
3
4
  module KafkaRest
4
5
  module Producer
@@ -60,9 +61,15 @@ module KafkaRest
60
61
  end
61
62
 
62
63
  module ClassMethods
63
- def send!(obj, opts = {}, producer = nil)
64
- (producer || KafkaRest::Sender.instance)
65
- .send!(self, obj, opts)
64
+ def build_message(obj, opts = {})
65
+ Message.new(self, obj, opts = {})
66
+ end
67
+
68
+ def send!(obj, opts = {}, sender = nil)
69
+ sender = sender || KafkaRest.config.sender
70
+ message = build_message(obj, opts)
71
+
72
+ sender.send!(message)
66
73
  end
67
74
  end
68
75
  end
@@ -0,0 +1,84 @@
1
+ module KafkaRest
2
+ module Sender
3
+ class KafkaSender
4
+
5
+ @@instance = nil
6
+
7
+ class << self
8
+ def instance
9
+ @@instance ||= self.new(Client.new)
10
+ end
11
+
12
+ def send!(message)
13
+ instance.send!(message)
14
+ end
15
+ end
16
+
17
+ attr_reader :key_schema_cache, :value_schema_cache
18
+
19
+ def initialize(client, opts = {})
20
+ @lock = Mutex.new
21
+ @client = client
22
+ @key_schema_cache = {}
23
+ @value_schema_cache = {}
24
+ end
25
+
26
+ # TODO: back-off retry if offset[i].errors is a retriable error
27
+ def send!(message)
28
+ send_produce_request!(
29
+ message.topic,
30
+ message.payload,
31
+ message.format,
32
+ build_params(message)
33
+ )
34
+ end
35
+
36
+ private
37
+
38
+ # replace key and value schemas with
39
+ # their ids if those are found in cache
40
+ def build_params(message)
41
+ return message.params unless message.format == 'avro'
42
+
43
+ topic, params, format = message.topic, message.params, message.format
44
+
45
+ {}.tap do |_p|
46
+ if format == 'avro'
47
+ if key_schema = params[:key_schema]
48
+ if key_schema_id = @key_schema_cache[topic]
49
+ _p[:key_schema_id] = key_schema_id
50
+ else
51
+ _p[:key_schema] = key_schema
52
+ end
53
+ end
54
+
55
+ if value_schema_id = @value_schema_cache[topic]
56
+ _p[:value_schema_id] = value_schema_id
57
+ else
58
+ _p[:value_schema] = params[:value_schema]
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ def send_produce_request!(topic, payload, format, params)
65
+ @client.topic_produce_message(topic, payload, format, params).body.tap do |re|
66
+ # this too (line 27)
67
+ cache_schema_ids!(re, topic) if format == 'avro'
68
+ end['offsets']
69
+ end
70
+
71
+ def cache_schema_ids!(resp, topic)
72
+ @lock.synchronize do
73
+ if @key_schema_cache[topic].nil? && kid = resp['key_schema_id']
74
+ @key_schema_cache[topic] = kid
75
+ end
76
+
77
+ if @value_schema_cache[topic].nil? && vid = resp['value_schema_id']
78
+ @value_schema_cache[topic] = vid
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,13 @@
1
+ module KafkaRest
2
+ module Sender
3
+ class LogSender
4
+ def initialize(logger = nil)
5
+ @logger = logger || Logging.logger
6
+ end
7
+
8
+ def send!(msg)
9
+ @logger.info msg # todo
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,28 @@
1
+ module KafkaRest
2
+ module Sender
3
+ class TestSender
4
+ attr_reader :messages
5
+
6
+ def initialize
7
+ @lock = Mutex.new
8
+ @messages = {}
9
+ end
10
+
11
+ def send!(message)
12
+ @lock.synchronize do
13
+ topic = message.topic
14
+ @messages[topic] ||= []
15
+ @messages[topic] << message
16
+ end
17
+ end
18
+
19
+ def last_for(topic)
20
+ @messages[topic].last
21
+ end
22
+
23
+ def reset!
24
+ @messages = {}
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,81 +1,13 @@
1
1
  require 'thread'
2
- require 'kafka_rest/sender/payload'
3
2
 
4
3
  module KafkaRest
5
- class Sender
6
- @@lock = Mutex.new
4
+ module Sender
5
+ require 'kafka_rest/sender/kafka_sender'
6
+ require 'kafka_rest/sender/log_sender'
7
+ require 'kafka_rest/sender/test_sender'
7
8
 
8
- class << self
9
- def instance
10
- @@lock.synchronize do
11
- @instance ||= self.new(Client.new, lock: @@lock)
12
- end
13
- end
14
- end
15
-
16
- attr_reader :key_schema_cache, :value_schema_cache
17
-
18
- # TODO: buffering???
19
- def initialize(client, opts = {})
20
- @lock = opts[:lock] || Mutex.new
21
- @client = client
22
- @key_schema_cache = {}
23
- @value_schema_cache = {}
24
- end
25
-
26
- # TODO: back-off retry if offset[i].errors is a retriable error
27
- def send!(klass, obj, opts = {})
28
- topic, payload, format, params = build_request(klass, obj, opts)
29
- send_produce_request!(topic, payload, format, params)
30
- end
31
-
32
- private
33
-
34
- def build_request(klass, obj, opts)
35
- # TODO: oooh, dirty and weird - this should not be here.
36
- # come up with something good!
37
- topic = klass.get_topic.to_s
38
- key = klass.get_key
39
- payload = Payload.new(klass, obj, opts).build
40
- format = klass.get_format.to_s
41
- params = {}.tap do |_p|
42
- if format == 'avro'
43
- unless key.nil?
44
- if kid = @key_schema_cache[topic]
45
- _p[:key_schema_id] = kid
46
- else
47
- _p[:key_schema] = klass.get_key_schema
48
- end
49
- end
50
-
51
- if vid = @value_schema_cache[topic]
52
- _p[:value_schema_id] = vid
53
- else
54
- _p[:value_schema] = klass.get_value_schema
55
- end
56
- end
57
- end
58
-
59
- [topic, payload, format, params]
60
- end
61
-
62
- def send_produce_request!(topic, payload, format, params)
63
- @client.topic_produce_message(topic, payload, format, params).body.tap do |re|
64
- # this too (line 27)
65
- cache_schema_ids!(re, topic) if format == 'avro'
66
- end['offsets']
67
- end
68
-
69
- def cache_schema_ids!(resp, topic)
70
- @lock.synchronize do
71
- if @key_schema_cache[topic].nil? && kid = resp['key_schema_id']
72
- @key_schema_cache[topic] = kid
73
- end
74
-
75
- if @value_schema_cache[topic].nil? && vid = resp['value_schema_id']
76
- @value_schema_cache[topic] = vid
77
- end
78
- end
9
+ def self.valid?(sender)
10
+ sender.respond_to? :send!
79
11
  end
80
12
  end
81
13
  end
@@ -1,3 +1,3 @@
1
1
  module KafkaRest
2
- VERSION = '0.1.0.alpha3'
2
+ VERSION = '0.1.0.alpha4'
3
3
  end
data/lib/kafka_rest.rb CHANGED
@@ -1,10 +1,14 @@
1
+ module KafkaRest; end
2
+
3
+ require 'kafka_rest/exceptions'
4
+ require 'kafka_rest/sender'
1
5
  require 'kafka_rest/config'
2
6
  require 'kafka_rest/logging'
3
7
  require 'kafka_rest/client'
4
8
  require 'kafka_rest/worker'
5
9
  require 'kafka_rest/producer'
10
+ require 'kafka_rest/producer/message'
6
11
  require 'kafka_rest/producer/serialization/adapter'
7
- require 'kafka_rest/sender'
8
12
  require 'kafka_rest/consumer'
9
13
 
10
14
  KafkaRest.configure do |c|
metadata CHANGED
@@ -1,153 +1,153 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kafka-rest-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.alpha3
4
+ version: 0.1.0.alpha4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Theodore Konukhov
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-18 00:00:00.000000000 Z
11
+ date: 2016-10-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
+ name: faraday
14
15
  requirement: !ruby/object:Gem::Requirement
15
16
  requirements:
16
- - - ~>
17
+ - - "~>"
17
18
  - !ruby/object:Gem::Version
18
19
  version: '0.9'
19
- name: faraday
20
- prerelease: false
21
20
  type: :runtime
21
+ prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.9'
27
27
  - !ruby/object:Gem::Dependency
28
+ name: net-http-persistent
28
29
  requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
- - - ~>
31
+ - - "~>"
31
32
  - !ruby/object:Gem::Version
32
33
  version: '2.9'
33
- name: net-http-persistent
34
- prerelease: false
35
34
  type: :runtime
35
+ prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.9'
41
41
  - !ruby/object:Gem::Dependency
42
+ name: faraday_middleware
42
43
  requirement: !ruby/object:Gem::Requirement
43
44
  requirements:
44
- - - ~>
45
+ - - "~>"
45
46
  - !ruby/object:Gem::Version
46
47
  version: '0.10'
47
- name: faraday_middleware
48
- prerelease: false
49
48
  type: :runtime
49
+ prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.10'
55
55
  - !ruby/object:Gem::Dependency
56
+ name: concurrent-ruby
56
57
  requirement: !ruby/object:Gem::Requirement
57
58
  requirements:
58
- - - ~>
59
+ - - "~>"
59
60
  - !ruby/object:Gem::Version
60
61
  version: '1.0'
61
- name: concurrent-ruby
62
- prerelease: false
63
62
  type: :runtime
63
+ prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.0'
69
69
  - !ruby/object:Gem::Dependency
70
+ name: multi_json
70
71
  requirement: !ruby/object:Gem::Requirement
71
72
  requirements:
72
- - - ~>
73
+ - - "~>"
73
74
  - !ruby/object:Gem::Version
74
75
  version: '1.12'
75
- name: multi_json
76
- prerelease: false
77
76
  type: :runtime
77
+ prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '1.12'
83
83
  - !ruby/object:Gem::Dependency
84
+ name: connection_pool
84
85
  requirement: !ruby/object:Gem::Requirement
85
86
  requirements:
86
- - - ~>
87
+ - - "~>"
87
88
  - !ruby/object:Gem::Version
88
89
  version: '2.2'
89
- name: connection_pool
90
- prerelease: false
91
90
  type: :runtime
91
+ prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ~>
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '2.2'
97
97
  - !ruby/object:Gem::Dependency
98
+ name: oj
98
99
  requirement: !ruby/object:Gem::Requirement
99
100
  requirements:
100
- - - ~>
101
+ - - ">="
101
102
  - !ruby/object:Gem::Version
102
- version: 0.3.4
103
- name: jrjackson
104
- prerelease: false
103
+ version: '2.9'
105
104
  type: :runtime
105
+ prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ~>
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: 0.3.4
110
+ version: '2.9'
111
111
  - !ruby/object:Gem::Dependency
112
+ name: bundler
112
113
  requirement: !ruby/object:Gem::Requirement
113
114
  requirements:
114
- - - ~>
115
+ - - "~>"
115
116
  - !ruby/object:Gem::Version
116
117
  version: '1.12'
117
- name: bundler
118
- prerelease: false
119
118
  type: :development
119
+ prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ~>
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '1.12'
125
125
  - !ruby/object:Gem::Dependency
126
+ name: rake
126
127
  requirement: !ruby/object:Gem::Requirement
127
128
  requirements:
128
- - - ~>
129
+ - - "~>"
129
130
  - !ruby/object:Gem::Version
130
131
  version: '10.0'
131
- name: rake
132
- prerelease: false
133
132
  type: :development
133
+ prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ~>
136
+ - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: '10.0'
139
139
  - !ruby/object:Gem::Dependency
140
+ name: rspec
140
141
  requirement: !ruby/object:Gem::Requirement
141
142
  requirements:
142
- - - ~>
143
+ - - "~>"
143
144
  - !ruby/object:Gem::Version
144
145
  version: '3.0'
145
- name: rspec
146
- prerelease: false
147
146
  type: :development
147
+ prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - ~>
150
+ - - "~>"
151
151
  - !ruby/object:Gem::Version
152
152
  version: '3.0'
153
153
  description: Kafka-REST client, DSLs and consumer workers for Ruby.
@@ -158,9 +158,9 @@ executables:
158
158
  extensions: []
159
159
  extra_rdoc_files: []
160
160
  files:
161
- - .gitignore
162
- - .rspec
163
- - .travis.yml
161
+ - ".gitignore"
162
+ - ".rspec"
163
+ - ".travis.yml"
164
164
  - CODE_OF_CONDUCT.md
165
165
  - Gemfile
166
166
  - LICENSE.txt
@@ -177,17 +177,22 @@ files:
177
177
  - lib/kafka_rest/config.rb
178
178
  - lib/kafka_rest/consumer.rb
179
179
  - lib/kafka_rest/dsl.rb
180
+ - lib/kafka_rest/exceptions.rb
180
181
  - lib/kafka_rest/logging.rb
181
182
  - lib/kafka_rest/producer.rb
183
+ - lib/kafka_rest/producer/message.rb
184
+ - lib/kafka_rest/producer/payload.rb
185
+ - lib/kafka_rest/producer/payload/avro_builder.rb
186
+ - lib/kafka_rest/producer/payload/binary_builder.rb
187
+ - lib/kafka_rest/producer/payload/builder.rb
188
+ - lib/kafka_rest/producer/payload/json_builder.rb
182
189
  - lib/kafka_rest/producer/serialization/active_model.rb
183
190
  - lib/kafka_rest/producer/serialization/adapter.rb
184
191
  - lib/kafka_rest/producer/serialization/noop.rb
185
192
  - lib/kafka_rest/sender.rb
186
- - lib/kafka_rest/sender/payload.rb
187
- - lib/kafka_rest/sender/payload/avro_builder.rb
188
- - lib/kafka_rest/sender/payload/binary_builder.rb
189
- - lib/kafka_rest/sender/payload/builder.rb
190
- - lib/kafka_rest/sender/payload/json_builder.rb
193
+ - lib/kafka_rest/sender/kafka_sender.rb
194
+ - lib/kafka_rest/sender/log_sender.rb
195
+ - lib/kafka_rest/sender/test_sender.rb
191
196
  - lib/kafka_rest/version.rb
192
197
  - lib/kafka_rest/worker.rb
193
198
  - lib/kafka_rest/worker/consumer_manager.rb
@@ -196,24 +201,24 @@ homepage: https://github.com/konukhov/kafka-rest-rb
196
201
  licenses:
197
202
  - MIT
198
203
  metadata: {}
199
- post_install_message:
204
+ post_install_message:
200
205
  rdoc_options: []
201
206
  require_paths:
202
207
  - lib
203
208
  required_ruby_version: !ruby/object:Gem::Requirement
204
209
  requirements:
205
- - - '>='
210
+ - - ">="
206
211
  - !ruby/object:Gem::Version
207
212
  version: '0'
208
213
  required_rubygems_version: !ruby/object:Gem::Requirement
209
214
  requirements:
210
- - - '>'
215
+ - - ">"
211
216
  - !ruby/object:Gem::Version
212
217
  version: 1.3.1
213
218
  requirements: []
214
- rubyforge_project:
215
- rubygems_version: 2.1.9
216
- signing_key:
219
+ rubyforge_project:
220
+ rubygems_version: 2.5.1
221
+ signing_key:
217
222
  specification_version: 4
218
223
  summary: Kafka-REST proxy client for Ruby on Rails.
219
224
  test_files: []