tdl-client-ruby 0.22.1 → 0.25.1
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 +4 -4
- data/README.md +74 -9
- data/lib/tdl/previous_version.rb +1 -1
- data/lib/tdl/queue/abstractions/processing_rule.rb +2 -3
- data/lib/tdl/queue/abstractions/response/fatal_error_response.rb +1 -7
- data/lib/tdl/queue/abstractions/response/valid_response.rb +2 -3
- data/lib/tdl/queue/implementation_runner_config.rb +15 -4
- data/lib/tdl/queue/processing_rules.rb +5 -6
- data/lib/tdl/queue/queue_based_implementation_runner.rb +23 -9
- data/lib/tdl/queue/queue_based_implementation_runner_builder.rb +3 -4
- data/lib/tdl/queue/transport/remote_broker.rb +3 -4
- data/lib/tdl/runner/runner_action.rb +4 -9
- data/startExternalDependencies.sh +19 -0
- data/stopExternalDependencies.sh +32 -0
- metadata +5 -7
- data/lib/tdl/queue/actions/client_actions.rb +0 -20
- data/lib/tdl/queue/actions/publish_action.rb +0 -17
- data/lib/tdl/queue/actions/publish_and_stop_action.rb +0 -16
- data/lib/tdl/queue/actions/stop_action.rb +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eda7242d36229737d1741218dd19edd41df6ae474812d331db1988fa038c1196
|
4
|
+
data.tar.gz: df6675ee0971590ed474ede8bf2e5ec22c1669ced60da14bad725c792c4f4ff6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 05f39cfbb1c9613d7dc91d0a937c895a0b6429054d2ae24cb50c6785407954f74ab3e0afef7f0a51ea49ce3c84bd60618e5b64c3f49f17111eb62ce167fac082
|
7
|
+
data.tar.gz: 4f614415157a702d1a26c2654cd8b188978c1a71615e84550b16e8d0e33ee656c911352f4019048cd0fc11119487af972805d74a37a4c5099cb4883d40c8b541
|
data/README.md
CHANGED
@@ -5,22 +5,75 @@
|
|
5
5
|
|
6
6
|
# tdl-client-ruby
|
7
7
|
|
8
|
+
### Submodules
|
9
|
+
|
10
|
+
Project contains submodules as mentioned in the `.gitmodules` file:
|
11
|
+
|
12
|
+
- broker
|
13
|
+
- tdl/client-spec (gets cloned into features/spec)
|
14
|
+
- wiremock
|
15
|
+
|
16
|
+
Use the below command to update the submodules of the project:
|
17
|
+
|
8
18
|
```
|
9
|
-
|
19
|
+
git submodule update --init
|
20
|
+
```
|
21
|
+
|
22
|
+
### Getting started
|
23
|
+
|
24
|
+
Ruby client to connect to the central kata server.
|
25
|
+
|
26
|
+
### Installing
|
27
|
+
|
28
|
+
#### Install RVM
|
29
|
+
```bash
|
10
30
|
curl -sSL https://get.rvm.io | bash -s stable
|
11
|
-
echo
|
31
|
+
echo "source $HOME/.rvm/scripts/rvm" >> .bash_profile
|
32
|
+
```
|
12
33
|
|
13
|
-
|
34
|
+
#### Install ruby
|
35
|
+
```bash
|
14
36
|
rvm install ruby-2.2.2
|
15
37
|
rvm use ruby-2.2.2
|
38
|
+
```
|
16
39
|
|
17
|
-
|
40
|
+
#### Install bundler
|
41
|
+
```bash
|
18
42
|
gem install bundler
|
19
43
|
```
|
20
44
|
|
21
|
-
|
45
|
+
#### Install coveralls
|
46
|
+
```bash
|
47
|
+
gem install coveralls
|
48
|
+
```
|
49
|
+
|
50
|
+
#### Install cucumber
|
51
|
+
```bash
|
52
|
+
gem install cucumber
|
53
|
+
```
|
54
|
+
|
55
|
+
#### Install all the gems in the project
|
56
|
+
```bash
|
57
|
+
bundle install
|
58
|
+
```
|
59
|
+
|
60
|
+
#### Manual
|
61
|
+
|
62
|
+
Stopping the wiremocks and broker services would be the same, using the `stop` command instead of the `start` command.
|
63
|
+
|
64
|
+
#### Automatic (via script)
|
65
|
+
|
66
|
+
Start and stop the wiremocks and broker services with the below:
|
67
|
+
|
68
|
+
```bash
|
69
|
+
./startExternalDependencies.sh
|
70
|
+
```
|
22
71
|
|
23
|
-
|
72
|
+
```bash
|
73
|
+
./stopExternalDependencies.sh
|
74
|
+
```
|
75
|
+
|
76
|
+
### Testing
|
24
77
|
|
25
78
|
All test require the ActiveMQ broker to be started.
|
26
79
|
The following commands are available for the broker.
|
@@ -31,11 +84,17 @@ python wiremock/wiremock-wrapper.py start 41375
|
|
31
84
|
python wiremock/wiremock-wrapper.py start 8222
|
32
85
|
```
|
33
86
|
|
87
|
+
or
|
88
|
+
|
89
|
+
```bash
|
90
|
+
./startExternalDependencies.sh
|
91
|
+
```
|
92
|
+
|
34
93
|
Run tests with `rake features`.
|
35
94
|
To run a single scenario execute `cucumber path/to/file.feature:line_no`
|
36
95
|
Recommendation is to use the cucumber command instead of rake always outside of CI.
|
37
96
|
|
38
|
-
|
97
|
+
### Cleanup
|
39
98
|
|
40
99
|
Stop external dependencies
|
41
100
|
```
|
@@ -44,10 +103,16 @@ python wiremock/wiremock-wrapper.py stop 41375
|
|
44
103
|
python wiremock/wiremock-wrapper.py stop 8222
|
45
104
|
```
|
46
105
|
|
106
|
+
or
|
47
107
|
|
48
|
-
|
108
|
+
```bash
|
109
|
+
./stopExternalDependencies.sh
|
110
|
+
```
|
111
|
+
|
112
|
+
|
113
|
+
## To release
|
49
114
|
|
50
115
|
Run
|
51
116
|
```
|
52
117
|
./release.sh
|
53
|
-
```
|
118
|
+
```
|
data/lib/tdl/previous_version.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
module TDL
|
2
2
|
class ProcessingRule
|
3
|
-
attr_reader :user_implementation
|
3
|
+
attr_reader :user_implementation
|
4
4
|
|
5
|
-
def initialize(user_implementation
|
5
|
+
def initialize(user_implementation)
|
6
6
|
@user_implementation = user_implementation
|
7
|
-
@client_action = client_action
|
8
7
|
end
|
9
8
|
end
|
10
9
|
end
|
@@ -2,12 +2,11 @@ require 'tdl/util'
|
|
2
2
|
|
3
3
|
module TDL
|
4
4
|
class ValidResponse
|
5
|
-
attr_reader :id, :result
|
5
|
+
attr_reader :id, :result
|
6
6
|
|
7
|
-
def initialize(id, result
|
7
|
+
def initialize(id, result)
|
8
8
|
@id = id
|
9
9
|
@result = result
|
10
|
-
@client_action = client_action
|
11
10
|
end
|
12
11
|
|
13
12
|
def to_h
|
@@ -8,6 +8,8 @@ module TDL
|
|
8
8
|
@port = 61613
|
9
9
|
@time_to_wait_for_requests = 500
|
10
10
|
@audit_stream = ConsoleAuditStream.new
|
11
|
+
@request_queue_name = ''
|
12
|
+
@response_queue_name = ''
|
11
13
|
end
|
12
14
|
|
13
15
|
def set_hostname(hostname)
|
@@ -20,8 +22,13 @@ module TDL
|
|
20
22
|
self
|
21
23
|
end
|
22
24
|
|
23
|
-
def
|
24
|
-
@
|
25
|
+
def set_request_queue_name(queue_name)
|
26
|
+
@request_queue_name = queue_name
|
27
|
+
self
|
28
|
+
end
|
29
|
+
|
30
|
+
def set_response_queue_name(queue_name)
|
31
|
+
@response_queue_name = queue_name
|
25
32
|
self
|
26
33
|
end
|
27
34
|
|
@@ -43,8 +50,12 @@ module TDL
|
|
43
50
|
@port
|
44
51
|
end
|
45
52
|
|
46
|
-
def
|
47
|
-
@
|
53
|
+
def get_request_queue_name
|
54
|
+
@request_queue_name
|
55
|
+
end
|
56
|
+
|
57
|
+
def get_response_queue_name
|
58
|
+
@response_queue_name
|
48
59
|
end
|
49
60
|
|
50
61
|
def get_time_to_wait_for_requests
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'tdl/queue/abstractions/processing_rule'
|
2
2
|
require 'tdl/queue/abstractions/response/fatal_error_response'
|
3
3
|
require 'tdl/queue/abstractions/response/valid_response'
|
4
|
-
require 'tdl/queue/actions/client_actions'
|
5
4
|
|
6
5
|
module TDL
|
7
6
|
class ProcessingRules
|
@@ -13,8 +12,8 @@ module TDL
|
|
13
12
|
|
14
13
|
# ~~~~ Builders
|
15
14
|
|
16
|
-
def add(method_name, user_implementation
|
17
|
-
@rules[method_name] = ProcessingRule.new(user_implementation
|
15
|
+
def add(method_name, user_implementation)
|
16
|
+
@rules[method_name] = ProcessingRule.new(user_implementation)
|
18
17
|
end
|
19
18
|
|
20
19
|
def on(method_name)
|
@@ -33,8 +32,8 @@ module TDL
|
|
33
32
|
self
|
34
33
|
end
|
35
34
|
|
36
|
-
def
|
37
|
-
@instance.add(@method_name, @user_implementation
|
35
|
+
def build()
|
36
|
+
@instance.add(@method_name, @user_implementation)
|
38
37
|
end
|
39
38
|
end
|
40
39
|
|
@@ -54,7 +53,7 @@ module TDL
|
|
54
53
|
user_implementation = processing_rule.user_implementation
|
55
54
|
result = user_implementation.call(*request.params)
|
56
55
|
|
57
|
-
return ValidResponse.new(request.id, result
|
56
|
+
return ValidResponse.new(request.id, result)
|
58
57
|
rescue Exception => e
|
59
58
|
message = '"user implementation raised exception"'
|
60
59
|
@logger.warn("#{message}, #{e.message}")
|
@@ -19,7 +19,8 @@ module TDL
|
|
19
19
|
remote_broker = RemoteBroker.new(
|
20
20
|
@config.get_hostname,
|
21
21
|
@config.get_port,
|
22
|
-
@config.
|
22
|
+
@config.get_request_queue_name,
|
23
|
+
@config.get_response_queue_name,
|
23
24
|
@config.get_time_to_wait_for_requests)
|
24
25
|
remote_broker.subscribe(ApplyProcessingRules.new(@deploy_processing_rules))
|
25
26
|
@logger.info 'Waiting for requests.'
|
@@ -59,17 +60,30 @@ module TDL
|
|
59
60
|
# Obtain response from user
|
60
61
|
response = @processing_rules.get_response_for(request)
|
61
62
|
@audit.log(response)
|
62
|
-
|
63
|
-
# Obtain action
|
64
|
-
client_action = response.client_action
|
65
|
-
|
63
|
+
|
66
64
|
# Act
|
67
|
-
|
68
|
-
|
65
|
+
after_response(remote_broker, request, response)
|
66
|
+
|
69
67
|
@audit.end_line
|
70
|
-
|
68
|
+
|
69
|
+
prepare_for_next_request(remote_broker, response)
|
70
|
+
end
|
71
|
+
|
72
|
+
def after_response(remote_broker, request, response)
|
73
|
+
if response.instance_of? FatalErrorResponse
|
74
|
+
# Do nothing
|
75
|
+
else
|
76
|
+
remote_broker.respond_to(request, response)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def prepare_for_next_request(remote_broker, response)
|
81
|
+
if response.instance_of? FatalErrorResponse
|
82
|
+
remote_broker.close
|
83
|
+
else
|
84
|
+
# Do nothing
|
85
|
+
end
|
71
86
|
end
|
72
|
-
|
73
87
|
end
|
74
88
|
end
|
75
89
|
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'tdl/queue/queue_based_implementation_runner'
|
2
|
-
require 'tdl/queue/actions/client_actions'
|
3
2
|
|
4
3
|
module TDL
|
5
4
|
|
@@ -14,11 +13,11 @@ module TDL
|
|
14
13
|
self
|
15
14
|
end
|
16
15
|
|
17
|
-
def with_solution_for(method_name, user_implementation
|
16
|
+
def with_solution_for(method_name, user_implementation)
|
18
17
|
@deploy_processing_rules
|
19
18
|
.on(method_name)
|
20
19
|
.call(user_implementation)
|
21
|
-
.
|
20
|
+
.build()
|
22
21
|
self
|
23
22
|
end
|
24
23
|
|
@@ -31,7 +30,7 @@ module TDL
|
|
31
30
|
deploy_processing_rules
|
32
31
|
.on('display_description')
|
33
32
|
.call(-> (*params) {'OK'})
|
34
|
-
.
|
33
|
+
.build()
|
35
34
|
deploy_processing_rules
|
36
35
|
end
|
37
36
|
|
@@ -4,11 +4,10 @@ require 'tdl/queue/serialization/json_rpc_serialization_provider'
|
|
4
4
|
|
5
5
|
module TDL
|
6
6
|
class RemoteBroker
|
7
|
-
def initialize(hostname, port,
|
7
|
+
def initialize(hostname, port, request_queue_name, response_queue_name, request_timeout_millis)
|
8
8
|
@stomp_client = Stomp::Client.new('', '', hostname, port)
|
9
|
-
@
|
10
|
-
@
|
11
|
-
@response_queue = "/queue/#{@unique_id}.resp"
|
9
|
+
@request_queue = "/queue/#{request_queue_name}"
|
10
|
+
@response_queue = "/queue/#{response_queue_name}"
|
12
11
|
@serialization_provider = JSONRPCSerializationProvider.new
|
13
12
|
@timer = ThreadTimer.new(request_timeout_millis, lambda = ->() { close unless closed? })
|
14
13
|
@timer.start
|
@@ -1,25 +1,20 @@
|
|
1
|
-
require 'tdl/queue/actions/client_actions'
|
2
|
-
|
3
|
-
include TDL::ClientActions
|
4
|
-
|
5
1
|
class RunnerAction
|
6
|
-
attr_reader :short_name, :name
|
2
|
+
attr_reader :short_name, :name
|
7
3
|
|
8
|
-
def initialize(short_name, name
|
4
|
+
def initialize(short_name, name)
|
9
5
|
@short_name = short_name
|
10
6
|
@name = name
|
11
|
-
@client_action = client_action
|
12
7
|
end
|
13
8
|
|
14
9
|
end
|
15
10
|
|
16
11
|
module RunnerActions
|
17
12
|
def get_new_round_description
|
18
|
-
RunnerAction.new('new', 'get_new_round_description'
|
13
|
+
RunnerAction.new('new', 'get_new_round_description')
|
19
14
|
end
|
20
15
|
|
21
16
|
def deploy_to_production
|
22
|
-
RunnerAction.new('deploy', 'deploy_to_production'
|
17
|
+
RunnerAction.new('deploy', 'deploy_to_production')
|
23
18
|
end
|
24
19
|
|
25
20
|
def all
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
set -e
|
4
|
+
set -u
|
5
|
+
set -o pipefail
|
6
|
+
|
7
|
+
startWiremocks() {
|
8
|
+
echo "~~~~~~~~~~ Starting Wiremocks on ports 41375 and 8222 ~~~~~~~~~"
|
9
|
+
python wiremock/wiremock-wrapper.py start 41375
|
10
|
+
python wiremock/wiremock-wrapper.py start 8222
|
11
|
+
}
|
12
|
+
|
13
|
+
startBroker() {
|
14
|
+
echo "~~~~~~~~~~ Starting Broker ~~~~~~~~~"
|
15
|
+
python broker/activemq-wrapper.py start
|
16
|
+
}
|
17
|
+
|
18
|
+
startWiremocks
|
19
|
+
startBroker
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
set -e
|
4
|
+
set -u
|
5
|
+
set -o pipefail
|
6
|
+
|
7
|
+
stopProcessAtPort() {
|
8
|
+
PORT=$1
|
9
|
+
PID=$(netstat -tulpn | grep :${PORT} | awk '{print $7}' | tr -d "/java" || true)
|
10
|
+
if [[ -z "${PID}" ]]; then
|
11
|
+
echo "~~~~~~~~~~ Process on port ${PORT} stopped ~~~~~~~~~"
|
12
|
+
else
|
13
|
+
kill -9 ${PID}
|
14
|
+
echo "~~~~~~~~~~ Process on port ${PORT} killed ~~~~~~~~~"
|
15
|
+
fi
|
16
|
+
}
|
17
|
+
|
18
|
+
stopWiremocks() {
|
19
|
+
echo "~~~~~~~~~~ Stopping Wiremocks listening on ports 41375 and 8222 ~~~~~~~~~"
|
20
|
+
python wiremock/wiremock-wrapper.py stop || true
|
21
|
+
|
22
|
+
stopProcessAtPort 41375
|
23
|
+
stopProcessAtPort 8222
|
24
|
+
}
|
25
|
+
|
26
|
+
stopBroker() {
|
27
|
+
echo "~~~~~~~~~~ Stoping Broker ~~~~~~~~~"
|
28
|
+
python broker/activemq-wrapper.py stop || true
|
29
|
+
}
|
30
|
+
|
31
|
+
stopWiremocks
|
32
|
+
stopBroker
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tdl-client-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.25.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Julian Ghionoiu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-10-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: stomp
|
@@ -217,10 +217,6 @@ files:
|
|
217
217
|
- lib/tdl/queue/abstractions/request.rb
|
218
218
|
- lib/tdl/queue/abstractions/response/fatal_error_response.rb
|
219
219
|
- lib/tdl/queue/abstractions/response/valid_response.rb
|
220
|
-
- lib/tdl/queue/actions/client_actions.rb
|
221
|
-
- lib/tdl/queue/actions/publish_action.rb
|
222
|
-
- lib/tdl/queue/actions/publish_and_stop_action.rb
|
223
|
-
- lib/tdl/queue/actions/stop_action.rb
|
224
220
|
- lib/tdl/queue/implementation_runner_config.rb
|
225
221
|
- lib/tdl/queue/processing_rules.rb
|
226
222
|
- lib/tdl/queue/queue_based_implementation_runner.rb
|
@@ -237,13 +233,15 @@ files:
|
|
237
233
|
- lib/tdl/thread_timer.rb
|
238
234
|
- lib/tdl/util.rb
|
239
235
|
- release.sh
|
236
|
+
- startExternalDependencies.sh
|
237
|
+
- stopExternalDependencies.sh
|
240
238
|
- tdl-client-ruby.gemspec
|
241
239
|
- tdl-client-ruby.iml
|
242
240
|
homepage: https://github.com/julianghionoiu/tdl-client-ruby
|
243
241
|
licenses:
|
244
242
|
- GPL-3.0
|
245
243
|
metadata:
|
246
|
-
previous_version: 0.
|
244
|
+
previous_version: 0.22.1
|
247
245
|
post_install_message:
|
248
246
|
rdoc_options: []
|
249
247
|
require_paths:
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'tdl/queue/actions/publish_action'
|
2
|
-
require 'tdl/queue/actions/stop_action'
|
3
|
-
require 'tdl/queue/actions/publish_and_stop_action'
|
4
|
-
|
5
|
-
module TDL
|
6
|
-
module ClientActions
|
7
|
-
|
8
|
-
def publish
|
9
|
-
PublishAction.new
|
10
|
-
end
|
11
|
-
|
12
|
-
def stop
|
13
|
-
StopAction.new
|
14
|
-
end
|
15
|
-
|
16
|
-
def publish_and_stop
|
17
|
-
PublishAndStopAction.new
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module TDL
|
2
|
-
class PublishAction
|
3
|
-
|
4
|
-
def audit_text
|
5
|
-
''
|
6
|
-
end
|
7
|
-
|
8
|
-
def after_response(remote_broker, request, response)
|
9
|
-
remote_broker.respond_to(request, response)
|
10
|
-
end
|
11
|
-
|
12
|
-
def prepare_for_next_request(remote_broker)
|
13
|
-
# DO nothing
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module TDL
|
2
|
-
class PublishAndStopAction
|
3
|
-
|
4
|
-
def audit_text
|
5
|
-
''
|
6
|
-
end
|
7
|
-
|
8
|
-
def after_response(remote_broker, request, response)
|
9
|
-
remote_broker.respond_to(request, response)
|
10
|
-
end
|
11
|
-
|
12
|
-
def prepare_for_next_request(remote_broker)
|
13
|
-
remote_broker.close
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module TDL
|
2
|
-
class StopAction
|
3
|
-
|
4
|
-
def audit_text
|
5
|
-
'(NOT PUBLISHED)'
|
6
|
-
end
|
7
|
-
|
8
|
-
def after_response(remote_broker, request, response)
|
9
|
-
# do nothing
|
10
|
-
end
|
11
|
-
|
12
|
-
def prepare_for_next_request(remote_broker)
|
13
|
-
remote_broker.close
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
end
|