trophonius 1.2.7 → 1.2.7.1

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/trophonius_single.rb +184 -0
  3. metadata +2 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 36a94743894d1780d9502732ea12d63065c0d45df4553d84dc37a766600a7dc4
4
- data.tar.gz: d3aa3192857584c40fefe7596998039cf3c9497f88532985ee7d0b36cf4dc1db
3
+ metadata.gz: 7b4fa3606dce996196ab6530704a27b93fbbf3e2134add785319b7b7921696cb
4
+ data.tar.gz: 16042983fe5510c9a29986aab3b77018033063980f1191d5fbf4234aa6bd229c
5
5
  SHA512:
6
- metadata.gz: c7fefc47d7faaadc70d2dbe0ff406164eee1e8994dfaf8dd32991c35223ffe545d815585b42aeb6a121046dbc0ba472e4600ab84f62fa114ffd953f9c91d1598
7
- data.tar.gz: 7623409b3827a3e5fee64302a593d232761ef3a84f6212371121e7100b8d3fa70bcacf12eaca95d4f85fd542da255a547c256b8fece821471061f9eba323a4d3
6
+ metadata.gz: 36fa65b8130dfe29303627c0727fb8504e832ac50e7b5d74f574f810efeaf9842a55898f68595ba7e2931afefabc4db0f98ec12e0d7aa8d790cde86672b1a614
7
+ data.tar.gz: ebdd54e6f7486fedb7cb03cdf87cf6d1df28ce7c06ab6bc3afaa8320bb9a6f94244cb68a59a158bf4059a578795c1cc932092b7e6c40f5dabc1ca7d71bbffbea
@@ -0,0 +1,184 @@
1
+ require 'trophonius_date'
2
+ require 'trophonius_time'
3
+ require 'trophonius_error'
4
+ require 'trophonius_record'
5
+ require 'trophonius_recordset'
6
+
7
+ module Trophonius
8
+ class Trophonius::Single
9
+ attr_reader :query
10
+ def initialize(config:)
11
+ @config = config
12
+ @query = {}
13
+ @translations = {}
14
+ @all_fields = {}
15
+ end
16
+
17
+ def where(fieldData)
18
+ url =
19
+ URI(
20
+ URI.escape(
21
+ "http#{@config[:ssl] == true ? 's' : ''}://#{@config[:host]}/fmi/data/v1/databases/#{@config[:database]}/layouts/#{
22
+ @config[:layout_name]
23
+ }/_find"
24
+ )
25
+ )
26
+ @query.merge!(query: [fieldData])
27
+ @query.merge!(limit: '10000000')
28
+ token = setup_connection
29
+ response = make_request(url, token, 'post', @query.to_json)
30
+
31
+ r_results = response['response']['data']
32
+ if response['messages'][0]['code'] != '0' && response['messages'][0]['code'] != '401'
33
+ Error.throw_error(response['messages'][0]['code'])
34
+ elsif response['messages'][0]['code'] == '401'
35
+ return RecordSet.new(@config[:layout_name], @config[:non_modifiable_fields])
36
+ else
37
+ ret_val = RecordSet.new(@config[:layout_name], @config[:non_modifiable_fields])
38
+ r_results.each do |r|
39
+ hash = build_result(r)
40
+ ret_val << hash
41
+ end
42
+ end
43
+ @query = {}
44
+ close_connection(token)
45
+
46
+ return ret_val
47
+ end
48
+
49
+ private
50
+
51
+ def build_result(result)
52
+ hash = Trophonius::Record.new
53
+ hash.record_id = result['recordId']
54
+ hash.layout_name = @config[:layout_name]
55
+ hash.model_name = 'Single'
56
+
57
+ result['fieldData'].keys.each do |key|
58
+ # unless key[/\s/] || key[/\W/]
59
+ @translations.merge!(
60
+ { "#{ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(key.to_s), separator: '_').downcase}" => "#{key}" }
61
+ )
62
+ hash.send(:define_singleton_method, ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(key.to_s), separator: '_')) do
63
+ hash[key]
64
+ end
65
+ unless @config[:non_modifiable_fields]&.include?(key)
66
+ @all_fields.merge!(
67
+ ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(key.to_s), separator: '_').downcase =>
68
+ ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(key.to_s), separator: '_')
69
+ )
70
+ hash.send(
71
+ :define_singleton_method,
72
+ "#{ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(key.to_s), separator: '_')}="
73
+ ) do |new_val|
74
+ hash[key] = new_val
75
+ hash.modifiable_fields[key] = new_val
76
+ hash.modified_fields[key] = new_val
77
+ end
78
+ end
79
+ # end
80
+ hash.merge!({ key => result['fieldData'][key] })
81
+ hash.modifiable_fields.merge!({ key => result['fieldData'][key] }) unless @config[:non_modifiable_fields]&.include?(key)
82
+ end
83
+ result['portalData'].keys.each do |key|
84
+ unless key[/\s/] || key[/\W/]
85
+ hash.send(:define_singleton_method, ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(key.to_s), separator: '_')) do
86
+ hash[key]
87
+ end
88
+ end
89
+ result['portalData'][key].each_with_index do |inner_hash|
90
+ inner_hash.keys.each do |inner_key|
91
+ inner_method =
92
+ ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(inner_key.gsub(/\w+::/, '').to_s), separator: '_')
93
+ unless inner_method[/\s/] || inner_method[/\W/]
94
+ inner_hash.send(:define_singleton_method, inner_method.to_s) { inner_hash[inner_key] }
95
+ inner_hash.send(:define_singleton_method, 'record_id') { inner_hash['recordId'] }
96
+ end
97
+ end
98
+ end
99
+ hash.merge!({ key => result['portalData'][key] })
100
+ end
101
+ return hash
102
+ end
103
+
104
+ def make_request(url_param, token, method, body, params = '')
105
+ ssl_verifyhost = @config[:local_network] ? 0 : 2
106
+ ssl_verifypeer = !@config[:local_network]
107
+ request =
108
+ Typhoeus::Request.new(
109
+ url_param,
110
+ method: method.to_sym,
111
+ body: body,
112
+ params: params,
113
+ ssl_verifyhost: ssl_verifyhost,
114
+ ssl_verifypeer: ssl_verifypeer,
115
+ headers: { 'Content-Type' => 'application/json', Authorization: "Bearer #{token}" }
116
+ )
117
+ temp = request.run
118
+ begin
119
+ JSON.parse(temp.response_body)
120
+ rescue Exception => e
121
+ Error.throw_error('1631')
122
+ end
123
+ end
124
+
125
+ def setup_connection
126
+ ssl_verifyhost = @config[:local_network] ? 0 : 2
127
+ ssl_verifypeer = !@config[:local_network]
128
+ url = URI(URI.escape("http#{@config[:ssl] == true ? 's' : ''}://#{@config[:host]}/fmi/data/v1/databases/#{@config[:database]}/sessions"))
129
+ request =
130
+ Typhoeus::Request.new(
131
+ url,
132
+ method: :post,
133
+ body:
134
+ if @config[:external_name].nil? || @config[:external_name].empty?
135
+ {}
136
+ else
137
+ {
138
+ fmDataSource: [{ database: @config[:external_name], username: @config[:external_username], password: @config[:external_password] }]
139
+ }.to_json
140
+ end,
141
+ params: {},
142
+ ssl_verifyhost: ssl_verifyhost,
143
+ ssl_verifypeer: ssl_verifypeer,
144
+ headers: {
145
+ 'Content-Type' => 'application/json', Authorization: "Basic #{Base64.strict_encode64("#{@config[:username]}:#{@config[:password]}")}"
146
+ }
147
+ )
148
+ temp = request.run
149
+ begin
150
+ parsed = JSON.parse(temp.response_body)
151
+ rescue Exception => e
152
+ Error.throw_error('1631')
153
+ end
154
+ Error.throw_error(parsed['messages'][0]['code']) if parsed['messages'][0]['code'] != '0'
155
+ return parsed['response']['token']
156
+ end
157
+
158
+ def close_connection(token)
159
+ url =
160
+ URI(URI.escape("http#{@config[:ssl] == true ? 's' : ''}://#{@config[:host]}/fmi/data/v1/databases/#{@config[:database]}/sessions/#{token}"))
161
+ ssl_verifyhost = @config[:local_network] ? 0 : 2
162
+ ssl_verifypeer = !@config[:local_network]
163
+
164
+ request =
165
+ Typhoeus::Request.new(
166
+ url,
167
+ method: :delete,
168
+ params: {},
169
+ ssl_verifyhost: ssl_verifyhost,
170
+ ssl_verifypeer: ssl_verifypeer,
171
+ headers: { 'Content-Type' => 'application/json' }
172
+ )
173
+ temp = request.run
174
+
175
+ begin
176
+ parsed = JSON.parse(temp.response_body)
177
+ rescue Exception => e
178
+ Error.throw_error('1631')
179
+ end
180
+ Error.throw_error(parsed['messages'][0]['code']) if parsed['messages'][0]['code'] != '0'
181
+ return true
182
+ end
183
+ end
184
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trophonius
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.7
4
+ version: 1.2.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kempen Automatisering
@@ -71,6 +71,7 @@ files:
71
71
  - lib/trophonius_recordset.rb
72
72
  - lib/trophonius_redis_manager.rb
73
73
  - lib/trophonius_request.rb
74
+ - lib/trophonius_single.rb
74
75
  - lib/trophonius_time.rb
75
76
  homepage: https://github.com/Willem-Jan/Trophonius
76
77
  licenses: