rule_engine_client 0.1.9 → 0.1.12

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 +64 -38
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bbb8d1d41bc3a3349d3833e43067ea0a88d6a86987099df2f2cb44c035b805a8
4
- data.tar.gz: 4e63551f1046d994e701bc252915ba67b607bc25e0b1ccc0272e7c5baa47e433
3
+ metadata.gz: d27373373d63062d4e321ae93cc1fdaf9bc73a40f146abe7aece2cb83f3e2be5
4
+ data.tar.gz: f00cdf230eaafba55cf74e6d0879c689bd4bbdd3e70f106ea8d14361d49f74ce
5
5
  SHA512:
6
- metadata.gz: 745d7961b437e8778116261b8d44f5fb464e16adc795d210ce5b96237619c661abf309c2710b4229b33f87491192d740aab74145ac81e6156b8c0ff8df783bb0
7
- data.tar.gz: 24d66a7ba9655df2a4f37d282e0695ab58f478096b555f7a26352a72a0fd0f065563bedd56d893b7ed9e35e4254143794ade498a1bbfa7bfc61f127a50c718fc
6
+ metadata.gz: d2b034aa852ffc8d54b227cd48fd00ddecdb05ede88cc79f41671b1ef39dfe0478d7d5f59f2d24d7a7193d6211109bcea581a577751259c3a0b9237655a979bb
7
+ data.tar.gz: 54e3c4104a48073c822ba807c4e53743f388da0e2496a1534a006d0b0c0682d10cdf99903dd305717f33f319afeafc4a31f1e52c00ed4db4cc5dbe7b6f01f17b
@@ -10,42 +10,54 @@ class RuleEngineClient
10
10
  @verbose = verbose
11
11
  @logger = Logger.new($stdout)
12
12
  @request_timeout_in_s = request_timeout_in_s
13
- log("rule engine '#{server}' client is initialized")
13
+ log("'#{server}' client is initialized")
14
14
  end
15
15
 
16
16
  def evaluate(engine, params, mode = 'production')
17
17
  url = URI.parse("#{@server}/run?e=#{engine}&m=#{mode}")
18
- log("Will send post request: #{url}")
19
- begin
20
- Timeout.timeout(@request_timeout_in_s) do
21
- @result = create_request(url, 'post', params)
22
- respone = response_builder
23
- log("respone #{respone}")
24
- respone
25
- end
26
- rescue Timeout::Error
27
- log('HTTP Gatway timeout!')
28
- @time_out = true
29
- response_builder
30
- end
18
+ log("params #{params}")
19
+ params = params_mapper(params, engine)
20
+ @result = create_request(url, 'POST', params)
21
+ response = response_builder
22
+ log("response #{response}")
23
+ response
31
24
  end
32
25
 
33
- def engine_exists?(engine)
26
+ def engine_exists(engine)
34
27
  log("checking if engine (#{engine}) exists")
35
- url = URI.parse("#{@server}/engine/export?e=#{engine}")
36
- log("Will send get request: #{url}")
37
- begin
38
- Timeout.timeout(@request_timeout_in_s) do
39
- response = create_request(url, 'get')
40
- engine_exists = response.code == '200'
41
- log_message = engine_exists ? "engine #{engine} exists" : "engine #{engine} not found"
42
- log(log_message)
43
- engine_exists
28
+ response = export_engine(engine)
29
+ response['body'] = {
30
+ 'exists' => !response['body'].empty?
31
+ }
32
+ response
33
+ end
34
+
35
+ def get_engine_models(engine)
36
+ log("get engine (#{engine}) models")
37
+ response = export_engine(engine)
38
+ models = response['body']['model']
39
+ log("models #{models}")
40
+ models
41
+ end
42
+
43
+ def params_mapper(params, engine)
44
+ models = get_engine_models(engine)
45
+ models_keys = models.keys
46
+ params_keys = params.keys
47
+ params_keys.each do |key|
48
+ if models_keys.include? key
49
+ props = models[key]['properties'].map do |prop|
50
+ prop['name']
51
+ end
52
+ params[key].keys.each do |el|
53
+ params[key].delete(el) unless props.include? el
54
+ end
55
+ else
56
+ params.delete(key)
44
57
  end
45
- rescue Timeout::Error
46
- log('HTTP Gateway timeout!')
47
- false
48
58
  end
59
+ log("filtered params #{params}")
60
+ params
49
61
  end
50
62
 
51
63
  private
@@ -70,7 +82,7 @@ class RuleEngineClient
70
82
 
71
83
  def response_builder
72
84
  if @time_out
73
- errors = ['HTTP Gatway timeout!']
85
+ errors = ['HTTP Gateway timeout!']
74
86
  body = {}
75
87
  code = 504
76
88
  elsif @result.code == '502'
@@ -91,16 +103,30 @@ class RuleEngineClient
91
103
  end
92
104
 
93
105
  def create_request(url, request_type, params = {})
94
- http = Net::HTTP.new(url.host, url.port)
95
- http.use_ssl = true if url.instance_of? URI::HTTPS
96
- if request_type == 'GET'
97
- request = Net::HTTP::Get.new(url.request_uri)
98
- else
99
- request = Net::HTTP::Post.new(url.request_uri)
100
- request.body = params.to_json
101
- log("request body created #{request.body} ")
106
+ Timeout.timeout(@request_timeout_in_s) do
107
+ http = Net::HTTP.new(url.host, url.port)
108
+ http.use_ssl = true if url.instance_of? URI::HTTPS
109
+ if request_type == 'GET'
110
+ log("Will send get request: #{url}")
111
+ request = Net::HTTP::Get.new(url.request_uri)
112
+ else
113
+ log("Will send post request: #{url}")
114
+ request = Net::HTTP::Post.new(url.request_uri)
115
+ request.body = params.to_json
116
+ log("request body created #{request.body} ")
117
+ end
118
+ request['Content-Type'] = 'application/json'
119
+ request['Accept'] = 'application/json'
120
+ http.request(request)
102
121
  end
103
- request['Content-Type'] = 'application/json'
104
- http.request(request)
122
+ rescue Timeout::Error
123
+ log('HTTP Gateway timeout!')
124
+ @time_out = true
125
+ end
126
+
127
+ def export_engine(engine)
128
+ url = URI.parse("#{@server}/engine/export?e=#{engine}")
129
+ @result = create_request(url, 'GET')
130
+ response_builder
105
131
  end
106
132
  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.9
4
+ version: 0.1.12
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 00:00:00.000000000 Z
11
+ date: 2022-08-18 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: integration with rule server
14
14
  email: