rule_engine_client 0.1.10 → 0.1.14
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/lib/rule_engine_client.rb +78 -16
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b1a8c9b6eb9a607d635b566a2af02cc2d030a6167fd62b4bb6f85c2ace1bbef
|
4
|
+
data.tar.gz: dc62fc28e9c85659cbb069484f129fdc2577bd285e06b99c6ee23378215e5429
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5630592647ac4066156880b42a6ebe8b75f938a1fdbd02a6fed0f1f84db21363148600e4816ee7736b8ccf8ec1bca561fb268b4a2511b1706ef5f93ad492fa3d
|
7
|
+
data.tar.gz: 63aabb4250fb31f68419211894eaab84f0fc0c28941f66839131c69b4cd95abc4d0fd8550074f3b47b6c0c0d22cd4e1bc10066eced3bca081699fd4c140d5bdc
|
data/lib/rule_engine_client.rb
CHANGED
@@ -2,6 +2,7 @@ require 'net/http'
|
|
2
2
|
require 'json'
|
3
3
|
require 'logger'
|
4
4
|
require 'timeout'
|
5
|
+
require 'digest/md5'
|
5
6
|
|
6
7
|
# rule engine client class
|
7
8
|
class RuleEngineClient
|
@@ -10,31 +11,47 @@ class RuleEngineClient
|
|
10
11
|
@verbose = verbose
|
11
12
|
@logger = Logger.new($stdout)
|
12
13
|
@request_timeout_in_s = request_timeout_in_s
|
13
|
-
|
14
|
+
@user_name = 'areej'
|
15
|
+
@password = '123456'
|
16
|
+
log("'#{server}' client is initialized")
|
14
17
|
end
|
15
18
|
|
16
19
|
def evaluate(engine, params, mode = 'production')
|
17
20
|
url = URI.parse("#{@server}/run?e=#{engine}&m=#{mode}")
|
18
|
-
log("
|
21
|
+
log("params #{params}")
|
22
|
+
params = params_mapper(params, engine)
|
19
23
|
@result = create_request(url, 'POST', params)
|
20
|
-
|
21
|
-
log("
|
22
|
-
|
24
|
+
response = response_builder
|
25
|
+
log("response #{response}")
|
26
|
+
response
|
23
27
|
end
|
24
28
|
|
25
|
-
def engine_exists
|
29
|
+
def engine_exists(engine)
|
26
30
|
log("checking if engine (#{engine}) exists")
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
31
|
+
response = export_engine(engine)
|
32
|
+
response['body'] = {
|
33
|
+
'exists' => !response['body'].empty?
|
34
|
+
}
|
35
|
+
response
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_engine_models(engine)
|
39
|
+
response = export_engine(engine)
|
40
|
+
models = !response['body'].empty? ? response['body']['model'] : {}
|
41
|
+
models_keys = models.keys
|
42
|
+
models_keys.each do |key|
|
43
|
+
get_nested_object(models, models[key]['properties'])
|
44
|
+
end
|
45
|
+
models
|
46
|
+
end
|
47
|
+
|
48
|
+
def get_nested_object(models, props)
|
49
|
+
props.each do |prop|
|
50
|
+
if prop['typeconcept'] && (prop['typeconcept'].is_a? String)
|
51
|
+
prop['typeconcept'] = models[prop['typeconcept']]
|
52
|
+
prop['typeconcept']['properties'] = get_nested_object(models, prop['typeconcept']['properties'])
|
53
|
+
end
|
36
54
|
end
|
37
|
-
engine_exists
|
38
55
|
end
|
39
56
|
|
40
57
|
private
|
@@ -84,12 +101,15 @@ class RuleEngineClient
|
|
84
101
|
http = Net::HTTP.new(url.host, url.port)
|
85
102
|
http.use_ssl = true if url.instance_of? URI::HTTPS
|
86
103
|
if request_type == 'GET'
|
104
|
+
log("Will send get request: #{url}")
|
87
105
|
request = Net::HTTP::Get.new(url.request_uri)
|
88
106
|
else
|
107
|
+
log("Will send post request: #{url}")
|
89
108
|
request = Net::HTTP::Post.new(url.request_uri)
|
90
109
|
request.body = params.to_json
|
91
110
|
log("request body created #{request.body} ")
|
92
111
|
end
|
112
|
+
request.basic_auth(@user_name, @password)
|
93
113
|
request['Content-Type'] = 'application/json'
|
94
114
|
request['Accept'] = 'application/json'
|
95
115
|
http.request(request)
|
@@ -98,4 +118,46 @@ class RuleEngineClient
|
|
98
118
|
log('HTTP Gateway timeout!')
|
99
119
|
@time_out = true
|
100
120
|
end
|
121
|
+
|
122
|
+
def export_engine(engine)
|
123
|
+
url = URI.parse("#{@server}/engine/export?e=#{engine}")
|
124
|
+
@result = create_request(url, 'GET')
|
125
|
+
response_builder
|
126
|
+
end
|
127
|
+
|
128
|
+
def params_mapper(params, engine)
|
129
|
+
@models = get_engine_models(engine)
|
130
|
+
@models_keys = @models.keys
|
131
|
+
params_keys = params.keys
|
132
|
+
params_keys.each do |key|
|
133
|
+
if !@models_keys.include? key
|
134
|
+
params.delete(key)
|
135
|
+
else
|
136
|
+
props = @models[key]['properties'].map do |prop|
|
137
|
+
prop['name']
|
138
|
+
end
|
139
|
+
filter_nested_params(params, key, props)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
log("filtered params #{params}")
|
143
|
+
params
|
144
|
+
end
|
145
|
+
|
146
|
+
def filter_nested_params(params, key, props)
|
147
|
+
keys = params[key].keys
|
148
|
+
keys.each do |el|
|
149
|
+
if !props.include? el
|
150
|
+
params[key].delete(el)
|
151
|
+
elsif params[key][el].is_a? Hash
|
152
|
+
nested_el = @models[key]['properties'].find { |obj| obj['name'] == el }
|
153
|
+
if nested_el['datatype'] != 'object'
|
154
|
+
params[key].delete(el)
|
155
|
+
elsif nested_el && !nested_el['typeconcept']['any']
|
156
|
+
el_props = nested_el['typeconcept']['properties']
|
157
|
+
filter_nested_params(params[key], el, el_props) if el_props.length
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
params
|
162
|
+
end
|
101
163
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rule_engine_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Areej Nour
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-08-
|
11
|
+
date: 2022-08-29 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: integration with rule server
|
14
14
|
email:
|