micro-rb 0.1.0.rc2 → 0.1.0.rc3

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: d4214b295604dcf084cac803a951262200ec128b
4
- data.tar.gz: e345620800f3507ba539a95ed35c703fd0643229
3
+ metadata.gz: d1b9ae456a543d65ed8a7d4d65edded21fffdf94
4
+ data.tar.gz: 03e81e3baa4a7985dd955d041347c9bc8140edcd
5
5
  SHA512:
6
- metadata.gz: 06afa4711aa6ea7414a3974c1f84a09dc31f325dd5e107cfefb702c5febbc054064e652ac6ca7acad8b3b117e9baa8326341f69fb5c40d5a64a4aa1d6b0d487f
7
- data.tar.gz: 74063eab50bcd01092800c9003f6ee30bb53a657537b0607f18528dbf006708f1918791d79b1f595927b0f31c65c5c98245157056ae8f0d080d4931e3f2981c2
6
+ metadata.gz: c9f1f7428fc1e2b9339e2ea837b8ecff2bf43a28a6c29b5aa13470c66fdfe5f0f8aa50cb5d3f8b04f849564ec65ec8e92f2e1575b52c2cbef71953a2cde09b62
7
+ data.tar.gz: 65e6b5381fe0c9f9c57f24afd047596986cf6af00355fc8c8db8c111e1d302af742ba6cb7aa0c1f8a7006d3bd27328c2eede70a295c3d9a4fa936c265944b2dd
data/.rubocop.yml CHANGED
@@ -1305,7 +1305,7 @@ Metrics/ModuleLength:
1305
1305
  Max: 100
1306
1306
 
1307
1307
  Metrics/ParameterLists:
1308
- Max: 5
1308
+ Max: 6
1309
1309
  CountKeywordArgs: true
1310
1310
 
1311
1311
  Metrics/PerceivedComplexity:
data/Gemfile CHANGED
@@ -8,3 +8,5 @@ gemspec
8
8
  gem 'awesome_print'
9
9
  gem 'puma'
10
10
  gem 'rubocop', '~> 0.48.1', require: false
11
+
12
+ gem 'celluloid-io'
data/README.md CHANGED
@@ -67,8 +67,10 @@ class MyHandler
67
67
  end
68
68
  end
69
69
 
70
- server = MicroRb::Servers::Web.new(:test, debug: true)
71
- server.add_handler MyHandler.new
70
+ service_config = MicroRb::ServiceConfiguration.new(name: :test)
71
+ service_config.add_handler(MyHandler.new)
72
+
73
+ server = MicroRb::Servers::Web.new(service_config)
72
74
  server.start!
73
75
 
74
76
  ```
@@ -81,7 +83,7 @@ Configuration has the following defaults for sidecar endpoint.
81
83
 
82
84
  `Registy: "/registry"`
83
85
 
84
- Configuration has the following defaults for api gateway.
86
+ Configuration has the following defaults for the micro api.
85
87
 
86
88
  `Host: http://127.0.0.1`
87
89
 
@@ -97,9 +99,9 @@ MicroRb::Configuration.configure do |c|
97
99
  c.sidecar_port = '8080'
98
100
  c.sidecar_registry = '/awesome_registry'
99
101
 
100
- c.gateway_host = 'http://mysite.com'
101
- c.gateway_port = '8080'
102
- c.gateway_rpc = '/awesome_micro_rb'
102
+ c.api_host = 'http://mysite.com'
103
+ c.api_port = '8080'
104
+ c.api_rpc = '/awesome_micro_rb'
103
105
  end
104
106
  ```
105
107
 
@@ -108,7 +110,8 @@ This works with thin etc because we just pass the options along to the rack serv
108
110
 
109
111
  ```ruby
110
112
  require 'rack/handler/puma'
111
- server = MicroRb::Servers::Web.new(:test, debug: true, server: :puma)
113
+ service_config = MicroRb::ServiceConfiguration.new(name: :test, server: :puma)
114
+ server = MicroRb::Servers::Web.new(service_config)
112
115
  ```
113
116
 
114
117
  Every handler must setup the following requirements at a minimum.
@@ -123,7 +126,7 @@ Every handler must include a prtobuf module that has `Request` and `Response` co
123
126
  ![alt text](https://github.com/amedeiros/micro-rb/blob/master/sum.png)
124
127
 
125
128
 
126
- ## Micro API Gateway
129
+ ## Micro API
127
130
 
128
131
  `micro api --address 0.0.0.0:3002`
129
132
 
@@ -6,10 +6,10 @@ module MicroRb
6
6
  class Rpc
7
7
  include Base
8
8
 
9
- base_uri MicroRb::Configuration.instance.gateway_uri
9
+ base_uri MicroRb::Configuration.instance.api_uri
10
10
 
11
11
  def self.call(service:, method:, params:, klass_response: nil)
12
- response = post(MicroRb::Configuration.instance.gateway_rpc,
12
+ response = post(MicroRb::Configuration.instance.api_rpc,
13
13
  options(service: service, method: method, request: params))
14
14
 
15
15
  return klass_response.new(response.to_h.symbolize_keys!) if klass_response
@@ -0,0 +1,39 @@
1
+ # coding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ require 'celluloid/current'
5
+ require 'celluloid/io'
6
+
7
+ module MicroRb
8
+ module Clients
9
+ class TCP
10
+ attr_reader :host, :port
11
+
12
+ def initialize(host, port)
13
+ @host = host
14
+ @port = port
15
+ end
16
+
17
+ def call(service:, method:, params:, klass_response: nil)
18
+ response = nil
19
+
20
+ Celluloid::IO::TCPSocket.open(host, port) do |sock|
21
+ msg = { service: service, method: method, params: params }
22
+ json = MultiJson.encode(msg)
23
+ sock.write(json)
24
+ response = MultiJson.decode(sock.readpartial(4096))
25
+ end
26
+
27
+ return klass_response.new(response.to_h.symbolize_keys!) if klass_response
28
+
29
+ response
30
+ end
31
+
32
+ def self.call(service:, method:, params:, host:, port:, klass_response: nil)
33
+ new(host, port)
34
+ .call(service: service, method: method,
35
+ params: params, klass_response: klass_response)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -8,8 +8,8 @@ module MicroRb
8
8
  # Sidecar settings
9
9
  attr_accessor :sidecar_registry, :sidecar_host, :sidecar_port
10
10
 
11
- # API gateway settings
12
- attr_accessor :gateway_host, :gateway_port, :gateway_rpc
11
+ # Micro API settings
12
+ attr_accessor :api_host, :api_port, :api_rpc
13
13
 
14
14
  def self.configure
15
15
  yield(instance) if block_given?
@@ -23,12 +23,12 @@ module MicroRb
23
23
  "#{sidecar_uri}#{sidecar_registry}"
24
24
  end
25
25
 
26
- def gateway_uri
27
- "#{gateway_host}:#{gateway_port}"
26
+ def api_uri
27
+ "#{api_host}:#{api_port}"
28
28
  end
29
29
 
30
- def gateway_rpc_uri
31
- "#{gateway_uri}#{gateway_rpc}"
30
+ def api_rpc_uri
31
+ "#{api_uri}#{api_rpc}"
32
32
  end
33
33
 
34
34
  private
@@ -41,10 +41,10 @@ module MicroRb
41
41
  self.sidecar_registry ||= '/registry'
42
42
  self.sidecar_port ||= '8081'
43
43
 
44
- # Default API gateway settings
45
- self.gateway_host ||= 'http://127.0.0.1'
46
- self.gateway_rpc ||= '/rpc'
47
- self.gateway_port ||= '3002'
44
+ # Default micro API settings
45
+ self.api_host ||= 'http://127.0.0.1'
46
+ self.api_rpc ||= '/rpc'
47
+ self.api_port ||= '3002'
48
48
  end
49
49
  end
50
50
  end
@@ -37,8 +37,10 @@ class FibHandler
37
37
  end
38
38
  end
39
39
 
40
- server = MicroRb::Servers::Web.new(:test, debug: true, metadata: { example: 'Fib Service' }, server: :puma)
41
- server.add_handler FibHandler.new
40
+ service_config = MicroRb::ServiceConfiguration.new(name: :test, metadata: { example: 'Fib Service' }, server: :puma)
41
+ service_config.add_handler(FibHandler.new)
42
+
43
+ server = MicroRb::Servers::Web.new(service_config)
42
44
  server.start!
43
45
 
44
46
  # MicroRb::Clients::Rpc.call(service: :test, method: 'FibHandler.fibonacci', params: { n: 15 } )
@@ -17,6 +17,8 @@ class MyHandler
17
17
  end
18
18
  end
19
19
 
20
- server = MicroRb::Servers::Web.new(:test, debug: true, metadata: { example: 'Service' })
21
- server.add_handler MyHandler.new
20
+ service_config = MicroRb::ServiceConfiguration.new(name: :test, metadata: { example: 'Service' })
21
+ service_config.add_handler(MyHandler.new)
22
+
23
+ server = MicroRb::Servers::Web.new(service_config)
22
24
  server.start!
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../../../lib/microrb'
5
+ require_relative '../examples/proto/sum_pb'
6
+
7
+ class TcpSumExample
8
+ include MicroRb::Handler
9
+ include MicroRb::SumHandler
10
+
11
+ handler name: :test, metadata: { hello: 'Micro-Rb' }, rpc_method: :sum
12
+
13
+ def sum(request: Request.new, response: Response.new)
14
+ response.total = request.a + request.b
15
+
16
+ response
17
+ end
18
+ end
19
+
20
+ service_config = MicroRb::ServiceConfiguration.new(name: :tcp_example)
21
+ service_config.add_handler(TcpSumExample.new)
22
+
23
+ server = MicroRb::Servers::TCP.new(service_config)
24
+ server.start!
@@ -0,0 +1,79 @@
1
+ # coding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ module MicroRb
5
+ class RequestManager
6
+ attr_reader :handler_manager
7
+
8
+ REQUIRED_TYPES = { method: [String], params: [Hash, Array],
9
+ id: [String, Integer, NilClass] }.freeze
10
+
11
+ REQUIRED_KEYS = ['method'].freeze
12
+
13
+ def initialize(handler_manager = MicroRb::HandlerManager.new)
14
+ @handler_manager = handler_manager
15
+ # Add the default debug handler
16
+ handler_manager.add_handler(MicroRb::Handlers::Debug.new)
17
+ end
18
+
19
+ def handle_request(request)
20
+ response = nil
21
+
22
+ begin
23
+ request = decode(request)
24
+ response = create_response(request) if valid_request?(request)
25
+ response ||= error_response(MicroRb::Servers::Error::InvalidRequest.new, request)
26
+ rescue MultiJson::ParseError => e
27
+ MicroRb.logger.warn(e)
28
+ response = error_response(MicroRb::Servers::Error::ParseError.new)
29
+ rescue StandardError => e
30
+ MicroRb.logger.warn(e)
31
+ response = error_response(MicroRb::Servers::Error::InternalError.new(e), request)
32
+ end
33
+
34
+ MultiJson.encode(response)
35
+ end
36
+
37
+ private
38
+
39
+ def create_response(request)
40
+ method = request[:method].strip.to_sym
41
+ params = Array.wrap(request[:params]).map(&:symbolize_keys)
42
+
43
+ unless handler_manager.rpc_method?(method)
44
+ return error_response(MicroRb::Servers::Error::MethodNotFound.new(method), request)
45
+ end
46
+
47
+ response = handler_manager.call_rpc_method(method, params)
48
+
49
+ success_response(request, response)
50
+ end
51
+
52
+ def valid_request?(request)
53
+ return false unless request.is_a?(Hash)
54
+
55
+ REQUIRED_KEYS.each do |key|
56
+ return false unless request.key?(key)
57
+ end
58
+
59
+ REQUIRED_TYPES.each do |key, types|
60
+ return false if request.key?(key) &&
61
+ types.none? { |type| request[key].is_a?(type) }
62
+ end
63
+
64
+ true
65
+ end
66
+
67
+ def success_response(request, result)
68
+ { result: result, id: request['id'] }
69
+ end
70
+
71
+ def error_response(error, request = {})
72
+ { error: error.to_h, id: request['id'] }
73
+ end
74
+
75
+ def decode(request)
76
+ MultiJson.decode(request).with_indifferent_access
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,48 @@
1
+ # coding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ require 'celluloid/current'
5
+ require 'celluloid/io'
6
+
7
+ module MicroRb
8
+ module Servers
9
+ class TCP
10
+ include Celluloid::IO
11
+
12
+ attr_reader :server, :service_config
13
+
14
+ finalizer :shutdown
15
+
16
+ def initialize(service_config)
17
+ @service_config = service_config
18
+ @server = TCPServer.new(service_config.host, service_config.port)
19
+ end
20
+
21
+ def shutdown
22
+ @server&.close
23
+ end
24
+
25
+ def start!
26
+ service_config.register!
27
+ loop { async.handle_connection @server.accept }
28
+ end
29
+
30
+ private
31
+
32
+ def handle_connection(socket)
33
+ _, port, host = socket.peeraddr
34
+ MicroRb.logger.debug("*** Received connection from #{host}:#{port}")
35
+
36
+ loop do
37
+ request = socket.readpartial(4096)
38
+ response = service_config.request_manager.handle_request(request)
39
+ socket.write(response)
40
+ socket.flush
41
+ end
42
+ rescue EOFError => e
43
+ MicroRb.logger.debug("*** #{host}:#{port} disconnected", e)
44
+ socket.close
45
+ end
46
+ end
47
+ end
48
+ end
@@ -4,70 +4,21 @@
4
4
  require 'rack'
5
5
  require 'rack/request'
6
6
  require 'rack/response'
7
- require 'multi_json'
8
7
 
9
8
  module MicroRb
10
9
  module Servers
11
10
  class Web
12
- attr_accessor :host, :port, :show_errors, :debug, :metadata, :version,
13
- :handler_manager, :name, :node_id, :server
11
+ attr_accessor :service_config, :server
14
12
 
15
- REQUIRED_TYPES = { method: [String], params: [Hash, Array],
16
- id: [String, Integer, NilClass] }.freeze
17
-
18
- REQUIRED_KEYS = ['method'].freeze
19
-
20
- def initialize(name, opts = {})
21
- self.port = opts.delete(:port) || 3000
22
- self.host = opts.delete(:host) || '0.0.0.0'
23
- self.metadata = opts.delete(:metadata) || {}
24
- self.version = opts.delete(:version) || '0.0.1'
25
- self.debug = opts.delete(:debug)
26
- self.name = name
27
- self.node_id = "#{name}-#{SecureRandom.uuid}"
28
- self.handler_manager = MicroRb::HandlerManager.new
29
-
30
- server_opts = opts.merge(Host: host, Port: port, app: self)
13
+ def initialize(service_config)
14
+ self.service_config = service_config
15
+ server_opts = service_config.options.merge(Host: service_config.host, Port: service_config.port, app: self)
31
16
  self.server = Rack::Server.new(server_opts)
32
17
  end
33
18
 
34
- def add_handler(handler)
35
- handler_manager.add_handler(handler)
36
- end
37
-
38
19
  def start!
39
- # Register the debug handler. This is kinda poor.
40
- add_handler(MicroRb::Handlers::Debug.new)
41
-
42
- # Value will raise an error on anything not 2XX
43
- MicroRb::Clients::Sidecar.register(self).response.value
44
-
45
- if debug
46
- MicroRb.logger
47
- .debug("Registered #{name}:#{host}:#{port} with sidecar.")
48
- end
49
-
50
- add_finalizer_hook!
20
+ service_config.register!
51
21
  server.start
52
- rescue Net::HTTPFatalError => e
53
- msg = "Sidecar error: #{e.message}"
54
- MicroRb.logger.warn(msg)
55
-
56
- raise MicroRb::Servers::Error::ServerError.new(-32_000, msg)
57
- end
58
-
59
- def to_h
60
- {
61
- version: version,
62
- metadata: metadata,
63
- name: name,
64
- nodes: [{ id: node_id, address: host, port: port }],
65
- endpoints: handler_manager.endpoints
66
- }
67
- end
68
-
69
- def to_json
70
- to_h.to_json
71
22
  end
72
23
 
73
24
  #
@@ -79,73 +30,11 @@ module MicroRb
79
30
 
80
31
  return resp.finish unless req.post?
81
32
 
82
- resp.write handle_request(req.body.read)
83
- resp.finish
84
- end
33
+ request = req.body.read
34
+ response = service_config.request_manager.handle_request(request)
85
35
 
86
- def create_response(request)
87
- method = request['method'].strip.to_sym
88
- params = request['params'].map(&:symbolize_keys!)
89
-
90
- return error_response(Error::MethodNotFound.new(method), request) unless handler_manager.rpc_method?(method)
91
-
92
- response = handler_manager.call_rpc_method(method, params)
93
-
94
- success_response(request, response)
95
- end
96
-
97
- def handle_request(request)
98
- request = parse_request(request)
99
- response = nil
100
-
101
- begin
102
- response = create_response(request) if valid_request?(request)
103
- response ||= error_response(Error::InvalidRequest.new, request)
104
- rescue MultiJson::ParseError => e
105
- MicroRb.logger.warn(e)
106
- response = error_response(Error::ParseError.new)
107
- rescue StandardError => e
108
- MicroRb.logger.warn(e)
109
- response = error_response(Error::InternalError.new(e), request)
110
- end
111
-
112
- MultiJson.encode(response)
113
- end
114
-
115
- private
116
-
117
- def valid_request?(request)
118
- return false unless request.is_a?(Hash)
119
-
120
- REQUIRED_KEYS.each do |key|
121
- return false unless request.key?(key)
122
- end
123
-
124
- REQUIRED_TYPES.each do |key, types|
125
- return false if request.key?(key) &&
126
- types.none? { |type| request[key].is_a?(type) }
127
- end
128
-
129
- true
130
- end
131
-
132
- def success_response(request, result)
133
- { result: result, id: request['id'] }
134
- end
135
-
136
- def error_response(error, request = {})
137
- { error: error.to_h, id: request['id'] }
138
- end
139
-
140
- def add_finalizer_hook!
141
- at_exit do
142
- MicroRb.logger.debug("Shutting down #{name}:#{host}:#{port}") if debug
143
- MicroRb::Clients::Sidecar.remove(self)
144
- end
145
- end
146
-
147
- def parse_request(request)
148
- MultiJson.decode(request)
36
+ resp.write(response)
37
+ resp.finish
149
38
  end
150
39
  end
151
40
  end
@@ -0,0 +1,61 @@
1
+ # coding: utf-8
2
+ # frozen_string_literal: true
3
+
4
+ module MicroRb
5
+ class ServiceConfiguration
6
+ attr_accessor :name, :port, :host, :metadata,
7
+ :version, :node_id, :options, :request_manager
8
+
9
+ def initialize(options = {})
10
+ self.port = options.delete(:port) || 3000
11
+ self.host = options.delete(:host) || '0.0.0.0'
12
+ self.metadata = options.delete(:metadata) || {}
13
+ self.version = options.delete(:version) || '0.0.1'
14
+ self.name = options.delete(:name)
15
+ self.node_id = "#{name}-#{SecureRandom.uuid}"
16
+ self.options = options
17
+ self.request_manager = MicroRb::RequestManager.new
18
+ end
19
+
20
+ def add_handler(handler)
21
+ request_manager.handler_manager.add_handler(handler)
22
+ end
23
+
24
+ def to_h
25
+ {
26
+ version: version,
27
+ metadata: metadata,
28
+ name: name,
29
+ nodes: [{ id: node_id, address: host, port: port }],
30
+ endpoints: request_manager.handler_manager.endpoints
31
+ }
32
+ end
33
+
34
+ def to_json
35
+ to_h.to_json
36
+ end
37
+
38
+ def register!
39
+ # Value will raise an error on anything not 2XX
40
+ MicroRb::Clients::Sidecar.register(self).response.value
41
+
42
+ MicroRb.logger.debug("Registered #{name}:#{host}:#{port} with sidecar.")
43
+
44
+ add_finalizer_hook!
45
+ rescue Net::HTTPFatalError => e
46
+ msg = "Sidecar error: #{e.message}"
47
+ MicroRb.logger.warn(msg)
48
+
49
+ raise MicroRb::Servers::Error::ServerError.new(-32_000, msg)
50
+ end
51
+
52
+ private
53
+
54
+ def add_finalizer_hook!
55
+ at_exit do
56
+ MicroRb.logger.debug("Shutting down #{name}:#{host}:#{port}")
57
+ MicroRb::Clients::Sidecar.remove(self)
58
+ end
59
+ end
60
+ end
61
+ end
data/lib/micro/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module MicroRb
5
- VERSION = '0.1.0.rc2'
5
+ VERSION = '0.1.0.rc3'
6
6
  end
data/lib/microrb.rb CHANGED
@@ -4,6 +4,7 @@
4
4
  require 'bundler/setup'
5
5
  require 'active_support/all'
6
6
  require 'semantic_logger'
7
+ require 'multi_json'
7
8
 
8
9
  module MicroRb
9
10
  include SemanticLogger::Loggable
@@ -15,12 +16,16 @@ end
15
16
 
16
17
  require 'micro/version'
17
18
  require 'micro/configuration'
19
+ require 'micro/service_configuration'
18
20
  require 'micro/clients/base'
19
21
  require 'micro/clients/sidecar'
20
22
  require 'micro/clients/rpc'
21
23
  require 'micro/clients/http'
24
+ require 'micro/clients/tcp'
22
25
  require 'micro/handler'
23
26
  require 'micro/handler_manager'
27
+ require 'micro/request_manager'
24
28
  require 'micro/servers/web'
25
29
  require 'micro/servers/error'
30
+ require 'micro/servers/tcp'
26
31
  require 'micro/handlers/debug'
data/micro-rb.gemspec CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency 'minitest', '~> 5.0'
28
28
  spec.add_development_dependency 'minitest-reporters', '~> 1.1'
29
29
  spec.add_development_dependency 'shoulda', '~> 3.5'
30
+ spec.add_development_dependency 'mocha', '~> 1.2'
30
31
 
31
32
  spec.add_runtime_dependency 'activesupport', '~> 5.1', '>= 5.1.0'
32
33
  spec.add_runtime_dependency 'httparty', '~> 0.14.0'
data/templates/bin/app CHANGED
@@ -12,6 +12,9 @@ ActiveRecord::Base.establish_connection(
12
12
  password: ENV[:DB_PASSWORD]
13
13
  )
14
14
  <% end %>
15
- server = MicroRb::Servers::Web.new(:example_service, debug: true)
16
- server.add_handler <%= @class_name %>::ExampleHandler.new
15
+
16
+ service_config = MicroRb::ServiceConfiguration(name: :example_service)
17
+ service_config.add_handler(<%= @class_name %>::ExampleHandler.new)
18
+
19
+ server = MicroRb::Servers::Web.new(service_config)
17
20
  server.start!
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: micro-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.rc2
4
+ version: 0.1.0.rc3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Medeiros
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-12 00:00:00.000000000 Z
11
+ date: 2017-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '3.5'
83
+ - !ruby/object:Gem::Dependency
84
+ name: mocha
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.2'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.2'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: activesupport
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -221,6 +235,7 @@ files:
221
235
  - lib/micro/clients/http.rb
222
236
  - lib/micro/clients/rpc.rb
223
237
  - lib/micro/clients/sidecar.rb
238
+ - lib/micro/clients/tcp.rb
224
239
  - lib/micro/configuration.rb
225
240
  - lib/micro/examples/fib.rb
226
241
  - lib/micro/examples/proto/fib.proto
@@ -228,14 +243,18 @@ files:
228
243
  - lib/micro/examples/proto/sum.proto
229
244
  - lib/micro/examples/proto/sum_pb.rb
230
245
  - lib/micro/examples/sum.rb
246
+ - lib/micro/examples/sum_tcp.rb
231
247
  - lib/micro/handler.rb
232
248
  - lib/micro/handler_manager.rb
233
249
  - lib/micro/handlers/debug.rb
234
250
  - lib/micro/project_generator.rb
235
251
  - lib/micro/proto/debug.proto
236
252
  - lib/micro/proto/debug_pb.rb
253
+ - lib/micro/request_manager.rb
237
254
  - lib/micro/servers/error.rb
255
+ - lib/micro/servers/tcp.rb
238
256
  - lib/micro/servers/web.rb
257
+ - lib/micro/service_configuration.rb
239
258
  - lib/micro/version.rb
240
259
  - lib/microrb.rb
241
260
  - micro-rb.gemspec