rule_engine_client 0.1.15 → 0.1.16
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 +69 -25
- 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: 6698e5437993a11e71039e2c8b98050d8cd3784e2efcc1cacb72220cddf4528d
|
4
|
+
data.tar.gz: 7d5aa87bd97116c920811330a216140dee70efc3e3dfeb73b36bd0ba4efcc79a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a7bfcde500e54a62845534f633841fefca67f66b71ee284a8af6e9d6bba1f14d46f710674dee502a2bc8d999ec0173db832c92abcc311ed7f8ac2e7db1ddb98
|
7
|
+
data.tar.gz: 99642690f3a3885c1401d3bdf3af99092c03af8d84c899dbddbd388752babbbc3e325bafb1861fe2a41a8c59804c0eada86a070339743a18ac77632a61bfebc6
|
data/lib/rule_engine_client.rb
CHANGED
@@ -14,16 +14,57 @@ class RuleEngineClient
|
|
14
14
|
log("'#{server}' client is initialized")
|
15
15
|
end
|
16
16
|
|
17
|
-
def evaluate(engine,
|
17
|
+
def evaluate(engine, request_body, mode = 'production')
|
18
18
|
url = URI.parse("#{@server}/run?e=#{engine}&m=#{mode}")
|
19
|
-
|
20
|
-
|
21
|
-
@result = create_request(url, 'POST', params)
|
19
|
+
request_body = filter_input_for_engine(request_body, engine)
|
20
|
+
@result = create_request(url, 'POST', request_body)
|
22
21
|
response = response_builder
|
23
|
-
log("response #{response}")
|
24
22
|
response
|
25
23
|
end
|
26
24
|
|
25
|
+
# action is one of [open, commit, rollback]
|
26
|
+
def sandbox(action, engine, user)
|
27
|
+
url = URI.parse("#{@server}/sandbox/#{action}?e=#{engine}&user=#{user}")
|
28
|
+
@result = create_request(url, 'GET')
|
29
|
+
response_builder
|
30
|
+
end
|
31
|
+
|
32
|
+
def setup_engine(name, server, username)
|
33
|
+
url = URI.parse("#{@server}/setup/engine?name=#{name}&server=#{server}&username=#{username}")
|
34
|
+
@result = create_request(url, 'POST')
|
35
|
+
response_builder
|
36
|
+
end
|
37
|
+
|
38
|
+
def reload_engine(engine)
|
39
|
+
url = URI.parse("#{@server}/engine/reload?e=#{engine}")
|
40
|
+
@result = create_request(url, 'GET')
|
41
|
+
response_builder
|
42
|
+
end
|
43
|
+
|
44
|
+
def setup_concept(engine, request_body)
|
45
|
+
url = URI.parse("#{@server}/setup/concept?e=#{engine}")
|
46
|
+
@result = create_request(url, 'POST', request_body)
|
47
|
+
response_builder
|
48
|
+
end
|
49
|
+
|
50
|
+
def setup_constant(engine, request_body)
|
51
|
+
url = URI.parse("#{@server}/setup/constant?e=#{engine}")
|
52
|
+
@result = create_request(url, 'POST', request_body)
|
53
|
+
response_builder
|
54
|
+
end
|
55
|
+
|
56
|
+
def setup_switch_rule(engine, request_body)
|
57
|
+
url = URI.parse("#{@server}/setup/rule/switch?e=#{engine}")
|
58
|
+
@result = create_request(url, 'POST', request_body)
|
59
|
+
response_builder
|
60
|
+
end
|
61
|
+
|
62
|
+
def setup_condition_rule(engine, request_body)
|
63
|
+
url = URI.parse("#{@server}/setup/rule/condition?e=#{engine}")
|
64
|
+
@result = create_request(url, 'POST', request_body)
|
65
|
+
response_builder
|
66
|
+
end
|
67
|
+
|
27
68
|
def engine_exists(engine)
|
28
69
|
log("checking if engine (#{engine}) exists")
|
29
70
|
response = export_engine(engine)
|
@@ -43,6 +84,8 @@ class RuleEngineClient
|
|
43
84
|
models
|
44
85
|
end
|
45
86
|
|
87
|
+
private
|
88
|
+
|
46
89
|
def get_nested_object(models, props)
|
47
90
|
props.each do |prop|
|
48
91
|
if prop['typeconcept'] && (prop['typeconcept'].is_a? String)
|
@@ -52,8 +95,6 @@ class RuleEngineClient
|
|
52
95
|
end
|
53
96
|
end
|
54
97
|
|
55
|
-
private
|
56
|
-
|
57
98
|
def log(message)
|
58
99
|
@logger.debug("rule engine: #{message}") if @verbose
|
59
100
|
end
|
@@ -91,10 +132,12 @@ class RuleEngineClient
|
|
91
132
|
body = body.except('errors', 'status')
|
92
133
|
code = @result.code
|
93
134
|
end
|
94
|
-
response_hash(code, body, errors)
|
135
|
+
response = response_hash(code, body, errors)
|
136
|
+
log("response #{response}")
|
137
|
+
response
|
95
138
|
end
|
96
139
|
|
97
|
-
def create_request(url, request_type,
|
140
|
+
def create_request(url, request_type, body = {})
|
98
141
|
Timeout.timeout(@request_timeout_in_s) do
|
99
142
|
http = Net::HTTP.new(url.host, url.port)
|
100
143
|
http.use_ssl = true if url.instance_of? URI::HTTPS
|
@@ -104,8 +147,8 @@ class RuleEngineClient
|
|
104
147
|
else
|
105
148
|
log("Will send post request: #{url}")
|
106
149
|
request = Net::HTTP::Post.new(url.request_uri)
|
107
|
-
request.body =
|
108
|
-
log("request body created #{request.body}
|
150
|
+
request.body = body.to_json
|
151
|
+
log("request body created #{request.body}")
|
109
152
|
end
|
110
153
|
# request.basic_auth(@user_name, @password)
|
111
154
|
request['Content-Type'] = 'application/json'
|
@@ -123,39 +166,40 @@ class RuleEngineClient
|
|
123
166
|
response_builder
|
124
167
|
end
|
125
168
|
|
126
|
-
def
|
169
|
+
def filter_input_for_engine(request_body, engine)
|
170
|
+
log("initial request body: #{request_body}")
|
127
171
|
@models = get_engine_models(engine)
|
128
172
|
@models_keys = @models.keys
|
129
|
-
|
130
|
-
|
173
|
+
request_body_keys = request_body.keys
|
174
|
+
request_body_keys.each do |key|
|
131
175
|
if !@models_keys.include? key
|
132
|
-
|
176
|
+
request_body.delete(key)
|
133
177
|
else
|
134
178
|
props = @models[key]['properties'].map do |prop|
|
135
179
|
prop['name']
|
136
180
|
end
|
137
|
-
|
181
|
+
filter_nested_props(request_body, key, props)
|
138
182
|
end
|
139
183
|
end
|
140
|
-
log("filtered
|
141
|
-
|
184
|
+
log("filtered request body: #{request_body}")
|
185
|
+
request_body
|
142
186
|
end
|
143
187
|
|
144
|
-
def
|
145
|
-
keys =
|
188
|
+
def filter_nested_props(request_body, key, props)
|
189
|
+
keys = request_body[key].keys
|
146
190
|
keys.each do |el|
|
147
191
|
if !props.include? el
|
148
|
-
|
149
|
-
elsif
|
192
|
+
request_body[key].delete(el)
|
193
|
+
elsif request_body[key][el].is_a? Hash
|
150
194
|
nested_el = @models[key]['properties'].find { |obj| obj['name'] == el }
|
151
195
|
if nested_el['datatype'] != 'object'
|
152
|
-
|
196
|
+
request_body[key].delete(el)
|
153
197
|
elsif nested_el && !nested_el['typeconcept']['any']
|
154
198
|
el_props = nested_el['typeconcept']['properties']
|
155
|
-
|
199
|
+
filter_nested_props(request_body[key], el, el_props) if el_props.length
|
156
200
|
end
|
157
201
|
end
|
158
202
|
end
|
159
|
-
|
203
|
+
request_body
|
160
204
|
end
|
161
205
|
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.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Areej Nour
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-01-
|
11
|
+
date: 2023-01-18 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: integration with rule server
|
14
14
|
email:
|