teneo_grpc 0.1.4 → 0.1.6

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
  SHA256:
3
- metadata.gz: db8177c0e02dc57dd2b1d808bb4ae19f32b737a47bf6cd01f9f19e3a593ba90a
4
- data.tar.gz: c648519b5914a39d0fd5187e4872e65cfe6487458b5897c0da6bcdff01266d26
3
+ metadata.gz: 12432238a9422f1a3c5726c0750b1771710271fffc898e1f1fe39fb4a856e305
4
+ data.tar.gz: 82067e9dd7db3312dd5f32ec7be962d5a57c459f09b8ced7e7af266b56ef501d
5
5
  SHA512:
6
- metadata.gz: e58fecea1e9a9d0078d1202df6e68eb9bd575a32d0f63d0cda86c06d69c04300be8633be8d232816ae90ededdf1a23c9481ad9e59c9be4210e1150bc55706d06
7
- data.tar.gz: cc2cd9bebd13a82b45ee4562efe6f67d44cda7852110044df15cda5004cddbcab8f24bc40dc004fdec05d4e18e408f8cb9602baaee286a26239fc7a949a976cc
6
+ metadata.gz: beba697be0259b03345587363640f2c5fbe5ff687c3bb7746a8e22e88d563653c2cb96b2333996463f1fe20b6e429fff43fa95709628cc0360e018f0106466d1
7
+ data.tar.gz: fca4b1c4ae17d1b4bd5dc60c1fee94c258ef81c4a7a186dede6fbe646b14fa7790a737181c3d06b388f98283a2a196adc5bb65b0825d3588af1731506fe5a384
data/Rakefile CHANGED
@@ -10,16 +10,8 @@ RSpec::Core::RakeTask.new(:spec)
10
10
 
11
11
  RuboCop::RakeTask.new
12
12
 
13
- task default: %w[spec rubocop run]
14
-
15
- task :setup do
16
- sh 'bundle install'
17
- end
13
+ task default: %w[spec rubocop]
18
14
 
19
15
  task :proto do
20
16
  sh 'grpc_tools_ruby_protoc -I proto --ruby_out=lib/teneo/proto --grpc_out=lib/teneo/proto proto/*.proto'
21
17
  end
22
-
23
- task :run do
24
- ruby 'bin/app.rb'
25
- end
@@ -1,80 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'cloud_event_helpers/cloud_event_helper'
3
+ require_relative 'util/convert'
4
4
  require_relative 'grpc_services/cloud_event_enum'
5
5
  require_relative 'proto/cloud_event_services_pb'
6
6
 
7
7
  # Sends data to gRPC services
8
8
  class Client
9
- attr_accessor :socket
9
+ attr_accessor :socket, :stub
10
10
 
11
11
  def initialize(socket:)
12
12
  @socket = socket
13
13
  @stub = CloudEvents::Stub.new(@socket, :this_channel_is_insecure)
14
14
  end
15
-
16
- # Example function that sends 1 request and receives 1 response
17
- def send_1req_1resp(data:)
18
- puts "sending to socket #{@socket}"
19
-
20
- begin
21
- event = CloudEventHelper.convert(text_data: data)
22
- response = @stub.get_cloud_event(event)
23
- rescue GRPC::Unavailable
24
- puts "ERROR: failed to connect to host '#{@socket}'"
25
- rescue StandardError => e
26
- p e
27
- end
28
-
29
- response
30
- end
31
-
32
- # Example function that sends 1 request and receives a stream of responses
33
- def send_1req_streamresp(data:)
34
- puts "sending to socket #{@socket}"
35
-
36
- begin
37
- event = CloudEventHelper.convert(text_data: data)
38
- responses = @stub.send_cloud_events(event)
39
- rescue GRPC::Unavailable
40
- puts "ERROR: failed to connect to host '#{@socket}'"
41
- rescue StandardError => e
42
- p e
43
- end
44
-
45
- responses
46
- end
47
-
48
- # Example function that sends a stream of requests and receives 1 response
49
- def send_streamreq_1resp(data:)
50
- puts "sending to socket #{@socket}"
51
-
52
- begin
53
- requests = CloudEventEnum.new(data: data, amount: 3)
54
- response = @stub.get_cloud_events(requests.each)
55
- rescue GRPC::Unavailable
56
- puts "ERROR: failed to connect to host '#{@socket}'"
57
- rescue StandardError => e
58
- p e
59
- end
60
-
61
- response
62
- end
63
-
64
- # Example function that sends a stream of requests
65
- # and receives a stream of responses
66
- def send_streamreq_streamresp(data:)
67
- puts "sending to socket #{@socket}"
68
-
69
- begin
70
- requests = CloudEventEnum.new(data: data, amount: 3)
71
- responses = @stub.chat(requests.each)
72
- rescue GRPC::Unavailable
73
- puts "ERROR: failed to connect to host '#{@socket}'"
74
- rescue StandardError => e
75
- p e
76
- end
77
-
78
- responses
79
- end
80
15
  end
@@ -4,21 +4,20 @@ require 'securerandom'
4
4
 
5
5
  # CloudEventEnum provides an Enumerator of cloud events
6
6
  class CloudEventEnum
7
- def initialize(data:, amount:)
8
- @data = data
9
- @amount = amount
7
+ def initialize(array:)
8
+ @array = array
10
9
  end
11
10
 
12
11
  def each
13
12
  return enum_for(:each) unless block_given?
14
13
 
15
- (1..@amount).each do
14
+ @array.each do |element|
16
15
  yield CloudEvent.new(
17
16
  id: SecureRandom.uuid,
18
17
  source: '/server-context',
19
18
  spec_version: '1.0',
20
19
  type: 'com.example.server-event',
21
- text_data: @data
20
+ text_data: element
22
21
  )
23
22
  end
24
23
  end
@@ -2,7 +2,6 @@
2
2
 
3
3
  require_relative 'client'
4
4
  require_relative 'service_orchestrator'
5
- require_relative 'grpc_services/cloud_events_service'
6
5
 
7
6
  # Encapsulating class for all gRPC communication
8
7
  class Server
@@ -20,7 +19,10 @@ class Server
20
19
 
21
20
  @orchestrator = ServiceOrchestrator.new(socket: @socket)
22
21
  @orchestrator.initialize_listener
23
- @orchestrator.add(CloudEventsService.new(socket: @socket, clients: @clients))
22
+ end
23
+
24
+ def register_service(service:)
25
+ @orchestrator.add(service)
24
26
  end
25
27
 
26
28
  def start_listening_for_data
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+
5
+ require_relative '../proto/cloud_event_services_pb'
6
+ require_relative '../grpc_services/cloud_event_enum'
7
+
8
+ # The Convert module provides functionality on custom data conversion operations.
9
+ module Convert
10
+ def self.text_to_cloudevent(data:)
11
+ CloudEvent.new(
12
+ id: SecureRandom.uuid,
13
+ source: '/context',
14
+ spec_version: '1.0',
15
+ type: 'com.example.event',
16
+ text_data: data
17
+ )
18
+ end
19
+
20
+ def self.array_to_cloudevent_enum(array:)
21
+ CloudEventEnum.new(array: array)
22
+ end
23
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: teneo_grpc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruben Vanoverschelde
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-02-24 00:00:00.000000000 Z
11
+ date: 2025-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grpc
@@ -24,7 +24,8 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
- description: Microservices communication with gRPC and CloudEvents.
27
+ description: This gem can be used to implement gRPC and CloudEvents communication
28
+ between microservices.
28
29
  email:
29
30
  executables: []
30
31
  extensions: []
@@ -57,15 +58,13 @@ files:
57
58
  - bin/thor
58
59
  - lib/teneo_grpc.rb
59
60
  - lib/teneo_grpc/client.rb
60
- - lib/teneo_grpc/cloud_event_helpers/cloud_event_helper.rb
61
61
  - lib/teneo_grpc/error_classes/socket_format_error.rb
62
- - lib/teneo_grpc/grpc_services/cloud_event_chat_enum.rb
63
62
  - lib/teneo_grpc/grpc_services/cloud_event_enum.rb
64
- - lib/teneo_grpc/grpc_services/cloud_events_service.rb
65
63
  - lib/teneo_grpc/proto/cloud_event_pb.rb
66
64
  - lib/teneo_grpc/proto/cloud_event_services_pb.rb
67
65
  - lib/teneo_grpc/server.rb
68
66
  - lib/teneo_grpc/service_orchestrator.rb
67
+ - lib/teneo_grpc/util/convert.rb
69
68
  homepage: https://github.com/libis/teneo-grpc_skeleton_ruby
70
69
  licenses:
71
70
  - MIT
@@ -89,5 +88,5 @@ requirements: []
89
88
  rubygems_version: 3.3.5
90
89
  signing_key:
91
90
  specification_version: 4
92
- summary: Microservices communication with gRPC and CloudEvents.
91
+ summary: Provides communication logic using the gRPC protocol and CloudEvents format.
93
92
  test_files: []
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'securerandom'
4
-
5
- require_relative '../proto/cloud_event_services_pb'
6
-
7
- # Helper module for all thing CloudEvent related
8
- module CloudEventHelper
9
- def self.convert(text_data:)
10
- CloudEvent.new(
11
- id: SecureRandom.uuid,
12
- source: '/context',
13
- spec_version: '1.0',
14
- type: 'com.example.event',
15
- text_data: text_data
16
- )
17
- end
18
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../cloud_event_helpers/cloud_event_helper'
4
-
5
- # CloudEventChatEnum provides an Enumerator for bidirectional communication
6
- class CloudEventChatEnum
7
- def initialize(requests:, default_response:)
8
- @requests = requests
9
- @default_response = default_response
10
- end
11
-
12
- def each
13
- return enum_for(:each) unless block_given?
14
-
15
- @requests.each do |request|
16
- puts "Received request: '#{request}'"
17
- yield CloudEventHelper.convert(text_data: @default_response)
18
- # Pause 1 second between messages to show how the messages get exchanged
19
- sleep 1
20
- end
21
- end
22
- end
@@ -1,74 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../cloud_event_helpers/cloud_event_helper'
4
- require_relative '../proto/cloud_event_services_pb'
5
- require_relative 'cloud_event_chat_enum'
6
- require_relative 'cloud_event_enum'
7
-
8
- # Implements the CloudEvents service defined in proto/cloud_event.proto
9
- class CloudEventsService < CloudEvents::Service
10
- def initialize(socket:, clients:) # rubocop:disable Lint/MissingSuper
11
- @socket = socket
12
- @message = "ping from #{@socket}"
13
- @clients = clients
14
- end
15
-
16
- def get_cloud_event(request, _call)
17
- puts "Received request: '#{request}'"
18
-
19
- # Forward request to other services if message equals "forward"
20
- if request.text_data == 'forward'
21
- @clients.each do |client|
22
- response = client.send_1req_1resp(data: @message)
23
- puts "Reply from: '#{response}'"
24
- end
25
- end
26
-
27
- CloudEventHelper.convert(text_data: @message)
28
- end
29
-
30
- def send_cloud_events(request, _call)
31
- puts "Received request: '#{request}'"
32
-
33
- # Forward request to other services if message equals "forward"
34
- if request.text_data == 'forward'
35
- @clients.each do |client|
36
- responses = client.send_1req_streamresp(data: @message)
37
-
38
- responses.each do |response|
39
- puts "Reply from: '#{response}'"
40
- end
41
- end
42
- end
43
-
44
- CloudEventEnum.new(data: @message, amount: 3).each
45
- end
46
-
47
- def forward_to_services?(call)
48
- forward = true
49
- call.each_remote_read do |request|
50
- puts "Received request: '#{request}'"
51
- forward = false unless request.text_data == 'forward'
52
- end
53
-
54
- forward
55
- end
56
-
57
- def get_cloud_events(call)
58
- forward = forward_to_services?(call)
59
-
60
- # Forward request to other services if message equals "forward"
61
- if forward
62
- @clients.each do |client|
63
- response = client.send_streamreq_1resp(data: @message)
64
- puts "Reply from: '#{response}'"
65
- end
66
- end
67
-
68
- CloudEventHelper.convert(text_data: @message)
69
- end
70
-
71
- def chat(call)
72
- CloudEventChatEnum.new(requests: call, default_response: @message).each
73
- end
74
- end