trophonius 1.2.6.1 → 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.
- checksums.yaml +4 -4
- data/lib/trophonius.rb +2 -0
- data/lib/trophonius_config.rb +1 -0
- data/lib/trophonius_connection.rb +13 -8
- data/lib/trophonius_date.rb +7 -0
- data/lib/trophonius_date_time.rb +5 -0
- data/lib/trophonius_model.rb +50 -25
- data/lib/trophonius_query.rb +5 -3
- data/lib/trophonius_record.rb +30 -18
- data/lib/trophonius_request.rb +69 -21
- data/lib/trophonius_single.rb +184 -0
- data/lib/trophonius_time.rb +6 -0
- metadata +10 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7b4fa3606dce996196ab6530704a27b93fbbf3e2134add785319b7b7921696cb
|
|
4
|
+
data.tar.gz: 16042983fe5510c9a29986aab3b77018033063980f1191d5fbf4234aa6bd229c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 36fa65b8130dfe29303627c0727fb8504e832ac50e7b5d74f574f810efeaf9842a55898f68595ba7e2931afefabc4db0f98ec12e0d7aa8d790cde86672b1a614
|
|
7
|
+
data.tar.gz: ebdd54e6f7486fedb7cb03cdf87cf6d1df28ce7c06ab6bc3afaa8320bb9a6f94244cb68a59a158bf4059a578795c1cc932092b7e6c40f5dabc1ca7d71bbffbea
|
data/lib/trophonius.rb
CHANGED
data/lib/trophonius_config.rb
CHANGED
|
@@ -13,6 +13,7 @@ module Trophonius
|
|
|
13
13
|
config_accessor(:username) { 'Admin' }
|
|
14
14
|
config_accessor(:password) { '' }
|
|
15
15
|
config_accessor(:ssl) { true }
|
|
16
|
+
config_accessor(:fm_18) { false }
|
|
16
17
|
config_accessor(:count_result_script) { '' }
|
|
17
18
|
config_accessor(:layout_name) { '' }
|
|
18
19
|
config_accessor(:non_modifiable_fields) { [] }
|
|
@@ -38,7 +38,9 @@ module Trophonius
|
|
|
38
38
|
ssl_verifypeer = !Trophonius.config.local_network
|
|
39
39
|
url =
|
|
40
40
|
URI(
|
|
41
|
-
|
|
41
|
+
URI.escape(
|
|
42
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{Trophonius.config.database}/sessions"
|
|
43
|
+
)
|
|
42
44
|
)
|
|
43
45
|
request =
|
|
44
46
|
Typhoeus::Request.new(
|
|
@@ -83,11 +85,12 @@ module Trophonius
|
|
|
83
85
|
def self.disconnect
|
|
84
86
|
url =
|
|
85
87
|
URI(
|
|
86
|
-
|
|
87
|
-
Trophonius.config.
|
|
88
|
-
|
|
88
|
+
URI.escape(
|
|
89
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
90
|
+
Trophonius.config.database
|
|
91
|
+
}/sessions/#{Trophonius.config.redis_connection ? Trophonius::RedisManager.get_key(key: 'token') : @token}"
|
|
92
|
+
)
|
|
89
93
|
)
|
|
90
|
-
puts url
|
|
91
94
|
ssl_verifyhost = Trophonius.config.local_network ? 0 : 2
|
|
92
95
|
ssl_verifypeer = !Trophonius.config.local_network
|
|
93
96
|
|
|
@@ -136,9 +139,11 @@ module Trophonius
|
|
|
136
139
|
def self.test_connection
|
|
137
140
|
url =
|
|
138
141
|
URI(
|
|
139
|
-
|
|
140
|
-
Trophonius.config.
|
|
141
|
-
|
|
142
|
+
URI.escape(
|
|
143
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
144
|
+
Trophonius.config.database
|
|
145
|
+
}/layouts/#{Trophonius.config.layout_name}/records?_limit=1"
|
|
146
|
+
)
|
|
142
147
|
)
|
|
143
148
|
begin
|
|
144
149
|
request =
|
data/lib/trophonius_model.rb
CHANGED
|
@@ -112,7 +112,16 @@ module Trophonius
|
|
|
112
112
|
#
|
|
113
113
|
# @return [Hash] translations of the fields Rails -> FileMaker
|
|
114
114
|
def self.create_translations
|
|
115
|
-
|
|
115
|
+
if Trophonius.config.fm_18
|
|
116
|
+
field_names = Trophonius::Request.get_layout_field_names(layout_name)
|
|
117
|
+
field_names.each do |field|
|
|
118
|
+
@configuration.translations.merge!(
|
|
119
|
+
{ "#{ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(field.to_s), separator: '_').downcase}" => "#{field}" }
|
|
120
|
+
)
|
|
121
|
+
end
|
|
122
|
+
else
|
|
123
|
+
self.first
|
|
124
|
+
end
|
|
116
125
|
@configuration.translations
|
|
117
126
|
end
|
|
118
127
|
|
|
@@ -169,9 +178,11 @@ module Trophonius
|
|
|
169
178
|
def self.create(fieldData)
|
|
170
179
|
url =
|
|
171
180
|
URI(
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
181
|
+
URI.escape(
|
|
182
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
183
|
+
Trophonius.config.database
|
|
184
|
+
}/layouts/#{layout_name}/records"
|
|
185
|
+
)
|
|
175
186
|
)
|
|
176
187
|
new_field_data = {}
|
|
177
188
|
create_translations if @configuration.translations.keys.empty?
|
|
@@ -199,9 +210,11 @@ module Trophonius
|
|
|
199
210
|
else
|
|
200
211
|
url =
|
|
201
212
|
URI(
|
|
202
|
-
|
|
203
|
-
Trophonius.config.
|
|
204
|
-
|
|
213
|
+
URI.escape(
|
|
214
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
215
|
+
Trophonius.config.database
|
|
216
|
+
}/layouts/#{layout_name}/records/#{response['response']['recordId']}"
|
|
217
|
+
)
|
|
205
218
|
)
|
|
206
219
|
ret_val = build_result(Request.make_request(url, "Bearer #{Request.get_token}", 'get', '{}')['response']['data'][0])
|
|
207
220
|
ret_val.send(:define_singleton_method, 'result_count') { 1 }
|
|
@@ -219,9 +232,11 @@ module Trophonius
|
|
|
219
232
|
def self.find_by(fieldData)
|
|
220
233
|
url =
|
|
221
234
|
URI(
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
235
|
+
URI.escape(
|
|
236
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
237
|
+
Trophonius.config.database
|
|
238
|
+
}/layouts/#{self.layout_name}/_find?_limit=1"
|
|
239
|
+
)
|
|
225
240
|
)
|
|
226
241
|
new_field_data = {}
|
|
227
242
|
create_translations if @configuration.translations.keys.empty?
|
|
@@ -260,9 +275,11 @@ module Trophonius
|
|
|
260
275
|
def self.find(record_id)
|
|
261
276
|
url =
|
|
262
277
|
URI(
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
278
|
+
URI.escape(
|
|
279
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
280
|
+
Trophonius.config.database
|
|
281
|
+
}/layouts/#{layout_name}/records/#{record_id}"
|
|
282
|
+
)
|
|
266
283
|
)
|
|
267
284
|
response = Request.make_request(url, "Bearer #{Request.get_token}", 'get', '{}')
|
|
268
285
|
if response['messages'][0]['code'] != '0'
|
|
@@ -283,9 +300,11 @@ module Trophonius
|
|
|
283
300
|
def self.delete(record_id)
|
|
284
301
|
url =
|
|
285
302
|
URI(
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
303
|
+
URI.escape(
|
|
304
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
305
|
+
Trophonius.config.database
|
|
306
|
+
}/layouts/#{layout_name}/records/#{record_id}"
|
|
307
|
+
)
|
|
289
308
|
)
|
|
290
309
|
response = Request.make_request(url, "Bearer #{Request.get_token}", 'delete', '{}')
|
|
291
310
|
if response['messages'][0]['code'] != '0'
|
|
@@ -306,9 +325,11 @@ module Trophonius
|
|
|
306
325
|
def self.edit(record_id, fieldData)
|
|
307
326
|
url =
|
|
308
327
|
URI(
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
328
|
+
URI.escape(
|
|
329
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
330
|
+
Trophonius.config.database
|
|
331
|
+
}/layouts/#{layout_name}/records/#{record_id}"
|
|
332
|
+
)
|
|
312
333
|
)
|
|
313
334
|
new_field_data = {}
|
|
314
335
|
create_translations if @configuration.translations.keys.empty?
|
|
@@ -431,16 +452,20 @@ module Trophonius
|
|
|
431
452
|
unless @limit.empty? || @offset.empty?
|
|
432
453
|
url =
|
|
433
454
|
URI(
|
|
434
|
-
|
|
435
|
-
Trophonius.config.
|
|
436
|
-
|
|
455
|
+
URI.escape(
|
|
456
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
457
|
+
Trophonius.config.database
|
|
458
|
+
}/layouts/#{layout_name}/records?_offset=#{@offset}&_limit=#{@limit}"
|
|
459
|
+
)
|
|
437
460
|
)
|
|
438
461
|
else
|
|
439
462
|
url =
|
|
440
463
|
URI(
|
|
441
|
-
|
|
442
|
-
Trophonius.config.
|
|
443
|
-
|
|
464
|
+
URI.escape(
|
|
465
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
466
|
+
Trophonius.config.database
|
|
467
|
+
}/layouts/#{layout_name}/records?_limit=#{count == 0 ? 1_000_000 : count}"
|
|
468
|
+
)
|
|
444
469
|
)
|
|
445
470
|
end
|
|
446
471
|
@limit = ''
|
data/lib/trophonius_query.rb
CHANGED
|
@@ -101,9 +101,11 @@ module Trophonius
|
|
|
101
101
|
def run_query(method, *args, &block)
|
|
102
102
|
url =
|
|
103
103
|
URI(
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
URI.escape(
|
|
105
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
106
|
+
Trophonius.config.database
|
|
107
|
+
}/layouts/#{@trophonius_model.layout_name}/_find"
|
|
108
|
+
)
|
|
107
109
|
)
|
|
108
110
|
new_field_data = @current_query.map { |_q| {} }
|
|
109
111
|
|
data/lib/trophonius_record.rb
CHANGED
|
@@ -34,9 +34,11 @@ module Trophonius
|
|
|
34
34
|
|
|
35
35
|
url =
|
|
36
36
|
URI(
|
|
37
|
-
|
|
38
|
-
Trophonius.config.
|
|
39
|
-
|
|
37
|
+
URI.escape(
|
|
38
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
39
|
+
Trophonius.config.database
|
|
40
|
+
}/layouts/#{layout}/_find"
|
|
41
|
+
)
|
|
40
42
|
)
|
|
41
43
|
|
|
42
44
|
if model.translations.key?(relation[:foreign_key])
|
|
@@ -94,9 +96,11 @@ module Trophonius
|
|
|
94
96
|
|
|
95
97
|
url =
|
|
96
98
|
URI(
|
|
97
|
-
|
|
98
|
-
Trophonius.config.
|
|
99
|
-
|
|
99
|
+
URI.escape(
|
|
100
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
101
|
+
Trophonius.config.database
|
|
102
|
+
}/layouts/#{layout}/_find"
|
|
103
|
+
)
|
|
100
104
|
)
|
|
101
105
|
|
|
102
106
|
if fk_model.translations.key?(relation[:foreign_key])
|
|
@@ -156,9 +160,11 @@ module Trophonius
|
|
|
156
160
|
def save
|
|
157
161
|
url =
|
|
158
162
|
URI(
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
163
|
+
URI.escape(
|
|
164
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
165
|
+
Trophonius.config.database
|
|
166
|
+
}/layouts/#{layout_name}/records/#{record_id}"
|
|
167
|
+
)
|
|
162
168
|
)
|
|
163
169
|
body = "{\"fieldData\": #{modified_fields.to_json}}"
|
|
164
170
|
response = Request.make_request(url, "Bearer #{Request.get_token}", 'patch', body)
|
|
@@ -173,9 +179,11 @@ module Trophonius
|
|
|
173
179
|
def delete
|
|
174
180
|
url =
|
|
175
181
|
URI(
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
182
|
+
URI.escape(
|
|
183
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
184
|
+
Trophonius.config.database
|
|
185
|
+
}/layouts/#{layout_name}/records/#{record_id}"
|
|
186
|
+
)
|
|
179
187
|
)
|
|
180
188
|
response = Request.make_request(url, "Bearer #{Request.get_token}", 'delete', '{}')
|
|
181
189
|
response['messages'][0]['code'] != '0' ? Error.throw_error(response['messages'][0]['code']) : true
|
|
@@ -191,9 +199,11 @@ module Trophonius
|
|
|
191
199
|
def update(fieldData)
|
|
192
200
|
url =
|
|
193
201
|
URI(
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
202
|
+
URI.escape(
|
|
203
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
204
|
+
Trophonius.config.database
|
|
205
|
+
}/layouts/#{layout_name}/records/#{record_id}"
|
|
206
|
+
)
|
|
197
207
|
)
|
|
198
208
|
fieldData.keys.each { |field| modifiable_fields[field] = fieldData[field] }
|
|
199
209
|
body = "{\"fieldData\": #{fieldData.to_json}}"
|
|
@@ -227,9 +237,11 @@ module Trophonius
|
|
|
227
237
|
def upload(container_name:, container_repetition: 1, file:)
|
|
228
238
|
url =
|
|
229
239
|
URI(
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
240
|
+
URI.escape(
|
|
241
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
242
|
+
Trophonius.config.database
|
|
243
|
+
}/layouts/#{layout_name}/records/#{record_id}/containers/#{container_name}/#{container_repetition}"
|
|
244
|
+
)
|
|
233
245
|
)
|
|
234
246
|
|
|
235
247
|
response = Request.upload_file_request(url, "Bearer #{Request.get_token}", file)
|
data/lib/trophonius_request.rb
CHANGED
|
@@ -4,7 +4,6 @@ require 'base64'
|
|
|
4
4
|
require 'trophonius_connection'
|
|
5
5
|
require 'uri'
|
|
6
6
|
require 'net/http'
|
|
7
|
-
|
|
8
7
|
module Trophonius
|
|
9
8
|
module Trophonius::Request
|
|
10
9
|
##
|
|
@@ -24,19 +23,20 @@ module Trophonius
|
|
|
24
23
|
def self.make_request(url_param, auth, method, body, params = '')
|
|
25
24
|
ssl_verifyhost = Trophonius.config.local_network ? 0 : 2
|
|
26
25
|
ssl_verifypeer = !Trophonius.config.local_network
|
|
27
|
-
request =
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
26
|
+
request =
|
|
27
|
+
Typhoeus::Request.new(
|
|
28
|
+
url_param,
|
|
29
|
+
method: method.to_sym,
|
|
30
|
+
body: body,
|
|
31
|
+
params: params,
|
|
32
|
+
ssl_verifyhost: ssl_verifyhost,
|
|
33
|
+
ssl_verifypeer: ssl_verifypeer,
|
|
34
|
+
headers: { 'Content-Type' => 'application/json', Authorization: auth.to_s }
|
|
35
|
+
)
|
|
36
36
|
temp = request.run
|
|
37
37
|
begin
|
|
38
38
|
JSON.parse(temp.response_body)
|
|
39
|
-
rescue Exception
|
|
39
|
+
rescue Exception => e
|
|
40
40
|
Error.throw_error('1631')
|
|
41
41
|
end
|
|
42
42
|
end
|
|
@@ -52,7 +52,7 @@ module Trophonius
|
|
|
52
52
|
#
|
|
53
53
|
# @return [JSON] parsed json of the response
|
|
54
54
|
def self.upload_file_request(url_param, auth, file)
|
|
55
|
-
url = URI(url_param)
|
|
55
|
+
url = URI(url_param.to_s)
|
|
56
56
|
|
|
57
57
|
https = Net::HTTP.new(url.host, url.port)
|
|
58
58
|
https.use_ssl = true
|
|
@@ -75,11 +75,7 @@ module Trophonius
|
|
|
75
75
|
#
|
|
76
76
|
# @return [String] a valid FileMaker token
|
|
77
77
|
def self.get_token
|
|
78
|
-
|
|
79
|
-
Connection.token
|
|
80
|
-
else
|
|
81
|
-
Connection.connect
|
|
82
|
-
end
|
|
78
|
+
Connection.valid_connection? ? Connection.token : Connection.connect
|
|
83
79
|
end
|
|
84
80
|
|
|
85
81
|
##
|
|
@@ -87,16 +83,50 @@ module Trophonius
|
|
|
87
83
|
#
|
|
88
84
|
# @return [JSON] The first record from FileMaker
|
|
89
85
|
def self.retrieve_first(layout_name)
|
|
90
|
-
url =
|
|
86
|
+
url =
|
|
87
|
+
URI(
|
|
88
|
+
URI.escape(
|
|
89
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
90
|
+
Trophonius.config.database
|
|
91
|
+
}/layouts/#{layout_name}/records?_limit=1"
|
|
92
|
+
)
|
|
93
|
+
)
|
|
91
94
|
make_request(url, "Bearer #{get_token}", 'get', '{}')
|
|
92
95
|
end
|
|
93
96
|
|
|
97
|
+
##
|
|
98
|
+
# Retrieves the fieldnames of a layout
|
|
99
|
+
#
|
|
100
|
+
# @return [JSON] The fieldnames of a layout
|
|
101
|
+
def self.get_layout_field_names(layout_name)
|
|
102
|
+
url =
|
|
103
|
+
URI(
|
|
104
|
+
URI.escape(
|
|
105
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
106
|
+
Trophonius.config.database
|
|
107
|
+
}/layouts/#{layout_name}"
|
|
108
|
+
)
|
|
109
|
+
)
|
|
110
|
+
begin
|
|
111
|
+
make_request(url, "Bearer #{get_token}", 'get', '{}')['response']['fieldMetaData'].map { |field| field['name'] }
|
|
112
|
+
rescue Exception
|
|
113
|
+
Error.throw_error('1631')
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
94
117
|
##
|
|
95
118
|
# Runs a FileMaker script
|
|
96
119
|
#
|
|
97
120
|
# @return [JSON] The script result from FileMaker
|
|
98
121
|
def self.run_script(script, scriptparameter, layout_name)
|
|
99
|
-
url =
|
|
122
|
+
url =
|
|
123
|
+
URI(
|
|
124
|
+
URI.escape(
|
|
125
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
126
|
+
Trophonius.config.database
|
|
127
|
+
}/layouts/#{layout_name}/records?_limit=1&script=#{script}&script.param=#{scriptparameter}"
|
|
128
|
+
)
|
|
129
|
+
)
|
|
100
130
|
make_request(url, "Bearer #{get_token}", 'get', '{}')
|
|
101
131
|
end
|
|
102
132
|
|
|
@@ -107,9 +137,27 @@ module Trophonius
|
|
|
107
137
|
def self.retrieve_all(layout_name, sort)
|
|
108
138
|
if !sort.empty?
|
|
109
139
|
sort_order = sort.to_json.to_s
|
|
110
|
-
url =
|
|
140
|
+
url =
|
|
141
|
+
URI(
|
|
142
|
+
URI.escape(
|
|
143
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
144
|
+
Trophonius.config.database
|
|
145
|
+
}/layouts/#{layout_name}/records?_limit=10000000_sort=#{sort_order}#{
|
|
146
|
+
Trophonius.config.count_result_script == '' ? '' : "&script=#{Trophonius.config.count_result_script}"
|
|
147
|
+
}"
|
|
148
|
+
)
|
|
149
|
+
)
|
|
111
150
|
else
|
|
112
|
-
url =
|
|
151
|
+
url =
|
|
152
|
+
URI(
|
|
153
|
+
URI.escape(
|
|
154
|
+
"http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
|
|
155
|
+
Trophonius.config.database
|
|
156
|
+
}/layouts/#{layout_name}/records?_limit=10000000#{
|
|
157
|
+
Trophonius.config.count_result_script == '' ? '' : "&script=#{Trophonius.config.count_result_script}"
|
|
158
|
+
}"
|
|
159
|
+
)
|
|
160
|
+
)
|
|
113
161
|
end
|
|
114
162
|
make_request(url, "Bearer #{get_token}", 'get', '{}')
|
|
115
163
|
end
|
|
@@ -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.
|
|
4
|
+
version: 1.2.7.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kempen Automatisering
|
|
@@ -44,16 +44,16 @@ dependencies:
|
|
|
44
44
|
requirements:
|
|
45
45
|
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version:
|
|
47
|
+
version: '5.0'
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version:
|
|
55
|
-
description:
|
|
56
|
-
Data-API.
|
|
54
|
+
version: '5.0'
|
|
55
|
+
description: A lightweight, easy to use link between Ruby (on Rails) and FileMaker
|
|
56
|
+
using the FileMaker Data-API.
|
|
57
57
|
email:
|
|
58
58
|
executables: []
|
|
59
59
|
extensions: []
|
|
@@ -62,6 +62,8 @@ files:
|
|
|
62
62
|
- lib/trophonius.rb
|
|
63
63
|
- lib/trophonius_config.rb
|
|
64
64
|
- lib/trophonius_connection.rb
|
|
65
|
+
- lib/trophonius_date.rb
|
|
66
|
+
- lib/trophonius_date_time.rb
|
|
65
67
|
- lib/trophonius_error.rb
|
|
66
68
|
- lib/trophonius_model.rb
|
|
67
69
|
- lib/trophonius_query.rb
|
|
@@ -69,6 +71,8 @@ files:
|
|
|
69
71
|
- lib/trophonius_recordset.rb
|
|
70
72
|
- lib/trophonius_redis_manager.rb
|
|
71
73
|
- lib/trophonius_request.rb
|
|
74
|
+
- lib/trophonius_single.rb
|
|
75
|
+
- lib/trophonius_time.rb
|
|
72
76
|
homepage: https://github.com/Willem-Jan/Trophonius
|
|
73
77
|
licenses:
|
|
74
78
|
- MIT
|
|
@@ -88,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
88
92
|
- !ruby/object:Gem::Version
|
|
89
93
|
version: '0'
|
|
90
94
|
requirements: []
|
|
91
|
-
rubygems_version: 3.0.
|
|
95
|
+
rubygems_version: 3.0.3
|
|
92
96
|
signing_key:
|
|
93
97
|
specification_version: 4
|
|
94
98
|
summary: Link between Ruby (on Rails) and FileMaker.
|