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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rule_engine_client.rb +78 -16
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d1b95bd4b0bd8099878d8b57f32a032dea0053c8e83832f01a8e3342c7d56081
4
- data.tar.gz: 3c0fc92094388561886b7a4c9c8a2715bf30fd6011ccd36dc194f7b753df3a4a
3
+ metadata.gz: 9b1a8c9b6eb9a607d635b566a2af02cc2d030a6167fd62b4bb6f85c2ace1bbef
4
+ data.tar.gz: dc62fc28e9c85659cbb069484f129fdc2577bd285e06b99c6ee23378215e5429
5
5
  SHA512:
6
- metadata.gz: a013886767656956cc8dd7b40603289c9bfe70e300341b755212f93fd0fe3c8579c110c6615647085bb0b3bfcf3b4896bdb60b0f0658f4273f9db3237f7c5a8b
7
- data.tar.gz: 19472829863cd6e47b91a3ba1d88c4e475778e0432b4979311bdc9e0b76d7ba71b8d9f5fbf4c1c4e1c90a2ad8faec50a8f4492ff1bd81950b2db80dd295210cb
6
+ metadata.gz: 5630592647ac4066156880b42a6ebe8b75f938a1fdbd02a6fed0f1f84db21363148600e4816ee7736b8ccf8ec1bca561fb268b4a2511b1706ef5f93ad492fa3d
7
+ data.tar.gz: 63aabb4250fb31f68419211894eaab84f0fc0c28941f66839131c69b4cd95abc4d0fd8550074f3b47b6c0c0d22cd4e1bc10066eced3bca081699fd4c140d5bdc
@@ -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
- log("rule engine '#{server}' client is initialized")
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("Will send post request: #{url}")
21
+ log("params #{params}")
22
+ params = params_mapper(params, engine)
19
23
  @result = create_request(url, 'POST', params)
20
- respone = response_builder
21
- log("respone #{respone}")
22
- respone
24
+ response = response_builder
25
+ log("response #{response}")
26
+ response
23
27
  end
24
28
 
25
- def engine_exists?(engine)
29
+ def engine_exists(engine)
26
30
  log("checking if engine (#{engine}) exists")
27
- url = URI.parse("#{@server}/engine/export?e=#{engine}")
28
- log("Will send get request: #{url}")
29
- response = create_request(url, 'GET')
30
- if @time_out
31
- engine_exists = false
32
- else
33
- engine_exists = response.code == '200'
34
- log_message = engine_exists ? "engine #{engine} exists" : "engine #{engine} not found"
35
- log(log_message)
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.10
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-14 00:00:00.000000000 Z
11
+ date: 2022-08-29 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: integration with rule server
14
14
  email: