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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rule_engine_client.rb +69 -25
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 43f25de086c6b5cc8a77bb6c456e8f6d9a00a2648608ba8480289af653522590
4
- data.tar.gz: a8bd4f5f717195d9f89a06c5ba4c9e4d4f854160af4ac13e8ac56e175fa20b92
3
+ metadata.gz: 6698e5437993a11e71039e2c8b98050d8cd3784e2efcc1cacb72220cddf4528d
4
+ data.tar.gz: 7d5aa87bd97116c920811330a216140dee70efc3e3dfeb73b36bd0ba4efcc79a
5
5
  SHA512:
6
- metadata.gz: 886543fd56e1aeb6d4d4f40c2e94c2f6635a45d755b32e7c4bed3e77c28cccd7a2e190417c79211a041a7fa00dfa66d4f24b7a57479410575908f04e01b8ee69
7
- data.tar.gz: fd0a3f8011a6952bea2593d28b7c4d73d5e16408acd8ddcffc68456405b058d66d9970b8bdf4fddee0862416cf651ef0792539f60064d8d72cb5d71eea2a8f8d
6
+ metadata.gz: 0a7bfcde500e54a62845534f633841fefca67f66b71ee284a8af6e9d6bba1f14d46f710674dee502a2bc8d999ec0173db832c92abcc311ed7f8ac2e7db1ddb98
7
+ data.tar.gz: 99642690f3a3885c1401d3bdf3af99092c03af8d84c899dbddbd388752babbbc3e325bafb1861fe2a41a8c59804c0eada86a070339743a18ac77632a61bfebc6
@@ -14,16 +14,57 @@ class RuleEngineClient
14
14
  log("'#{server}' client is initialized")
15
15
  end
16
16
 
17
- def evaluate(engine, params, mode = 'production')
17
+ def evaluate(engine, request_body, mode = 'production')
18
18
  url = URI.parse("#{@server}/run?e=#{engine}&m=#{mode}")
19
- log("params #{params}")
20
- params = params_mapper(params, engine)
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, params = {})
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 = params.to_json
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 params_mapper(params, engine)
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
- params_keys = params.keys
130
- params_keys.each do |key|
173
+ request_body_keys = request_body.keys
174
+ request_body_keys.each do |key|
131
175
  if !@models_keys.include? key
132
- params.delete(key)
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
- filter_nested_params(params, key, props)
181
+ filter_nested_props(request_body, key, props)
138
182
  end
139
183
  end
140
- log("filtered params #{params}")
141
- params
184
+ log("filtered request body: #{request_body}")
185
+ request_body
142
186
  end
143
187
 
144
- def filter_nested_params(params, key, props)
145
- keys = params[key].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
- params[key].delete(el)
149
- elsif params[key][el].is_a? Hash
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
- params[key].delete(el)
196
+ request_body[key].delete(el)
153
197
  elsif nested_el && !nested_el['typeconcept']['any']
154
198
  el_props = nested_el['typeconcept']['properties']
155
- filter_nested_params(params[key], el, el_props) if el_props.length
199
+ filter_nested_props(request_body[key], el, el_props) if el_props.length
156
200
  end
157
201
  end
158
202
  end
159
- params
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.15
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-03 00:00:00.000000000 Z
11
+ date: 2023-01-18 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: integration with rule server
14
14
  email: