trophonius 1.4.3.2 → 1.4.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9d92b08e8204f1d2647b419cd5457f0aa756072526f528f868148f9bbcbd4316
4
- data.tar.gz: 70df9b9746b4a07d34ab9a9cda2cc837cc5c6f9c359701da51f1958ee2425fb2
3
+ metadata.gz: 1bf03ee96abeebc7cf0bd49e76e0a678f9b083d53b08e1f524406ddfe6d5334d
4
+ data.tar.gz: 9ffce8e42068d7312fa7aa2be4f55451456a97aa2f99cca90d5e18374721e5cb
5
5
  SHA512:
6
- metadata.gz: d49725b94357cd94c4286ece7b2f2039899067ca4171685a8dd199daaa71a73a7ec2c1d8efe1a07eaa475232e0a08b7fe2d9d289ca932d269f1f5c1b2d422068
7
- data.tar.gz: bb80ab56647654628ae70753b7f92600ad1aa79a9ecf00fa97db33fe009c870daa77807f00d4882d7b9341bb51cbcedb405e2887ed48009f8f9f3e3b16ef759e
6
+ metadata.gz: 7d03bd618f06ee984613254b9885857c78a4048a5fb2b5bb24ca378af44a05955afb4fc9f723bba5786eaede62c04c9ad41600e21f0b3ccd5f8991169bf25e88
7
+ data.tar.gz: cca1ac1dbcb0a89cb44912591085ebfacdf3a80cf0d681013c14e6c8afd710f1a55b8d76bf258648c668232235c50c9dc3c187abb1844bc32f053bc9be9bf630
@@ -13,8 +13,8 @@ module Trophonius
13
13
  if Trophonius.config.redis_connection
14
14
  Trophonius::RedisManager.set_key(key: 'token', value: setup_connection)
15
15
  Trophonius::RedisManager.set_key(key: 'last_connection', value: Time.now)
16
- token = Trophonius::RedisManager.get_key(key: 'token')
17
- token
16
+ Trophonius::RedisManager.get_key(key: 'token')
17
+
18
18
  else
19
19
  @token = setup_connection
20
20
  @last_connection = Time.now
@@ -36,9 +36,10 @@ module Trophonius
36
36
  end
37
37
  ssl_verifyhost = Trophonius.config.local_network ? 0 : 2
38
38
  ssl_verifypeer = !Trophonius.config.local_network
39
+ uri = URI::RFC2396_Parser.new
39
40
  url =
40
41
  URI(
41
- URI.escape(
42
+ uri.escape(
42
43
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{Trophonius.config.database}/sessions"
43
44
  )
44
45
  )
@@ -69,23 +70,31 @@ module Trophonius
69
70
  }
70
71
  )
71
72
  temp = request.run
73
+ body = temp.response_body
74
+ headers = temp.headers
75
+ code = temp.code
76
+
77
+ puts "RESPONSE FROM FILEMAKER (CONNECT) WAS #{body}"
72
78
 
73
79
  begin
74
- parsed = JSON.parse(temp.response_body)
80
+ parsed = JSON.parse(body)
75
81
  rescue Exception => e
82
+ puts e
83
+ puts e.backtrace
76
84
  Error.throw_error('1631')
77
85
  end
78
86
  Error.throw_error(parsed['messages'][0]['code']) if parsed['messages'][0]['code'] != '0'
79
- return parsed['response']['token']
87
+ parsed['response']['token']
80
88
  end
81
89
 
82
90
  ##
83
91
  # Disconnects from the FileMaker server
84
92
  #
85
93
  def self.disconnect
94
+ uri = URI::RFC2396_Parser.new
86
95
  url =
87
96
  URI(
88
- URI.escape(
97
+ uri.escape(
89
98
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
90
99
  Trophonius.config.database
91
100
  }/sessions/#{Trophonius.config.redis_connection ? Trophonius::RedisManager.get_key(key: 'token') : @token}"
@@ -114,14 +123,14 @@ module Trophonius
114
123
  Trophonius::RedisManager.disconnect! if Trophonius.config.redis_connection
115
124
  @token = nil
116
125
  @last_connection = nil
117
- return true
126
+ true
118
127
  end
119
128
 
120
129
  ##
121
130
  # Returns the last received token
122
131
  # @return [String] the last valid *token* used to connect with the FileMaker data api
123
132
  def self.token
124
- return Trophonius.config.redis_connection ? Trophonius::RedisManager.get_key(key: 'token') : @token
133
+ Trophonius.config.redis_connection ? Trophonius::RedisManager.get_key(key: 'token') : @token
125
134
  end
126
135
 
127
136
  ##
@@ -137,9 +146,10 @@ module Trophonius
137
146
  # Tests whether the FileMaker token is still valid
138
147
  # @return [Boolean] True if the token is valid False if invalid
139
148
  def self.test_connection
149
+ uri = URI::RFC2396_Parser.new
140
150
  url =
141
151
  URI(
142
- URI.escape(
152
+ uri.escape(
143
153
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
144
154
  Trophonius.config.database
145
155
  }/layouts/#{Trophonius.config.layout_name}/records?_limit=1"
@@ -154,7 +164,7 @@ module Trophonius
154
164
  temp = request.run
155
165
  JSON.parse(temp.response_body)['messages'][0]['code'] == '0'
156
166
  rescue StandardError
157
- return false
167
+ false
158
168
  end
159
169
  end
160
170
 
@@ -9,6 +9,7 @@ module Trophonius
9
9
  class LayoutUnexistingError < NoMethodError; end # :nodoc:
10
10
  class InvalidTokenError < StandardError; end # :nodoc:
11
11
  class UnauthenticatedError < StandardError; end # :nodoc:
12
+ class AuthenticationError < StandardError; end # :nodoc:
12
13
  class FieldNotModifiableError < StandardError; end # :nodoc:
13
14
  class ResponseNotYetImplementedError < StandardError; end # :nodoc:
14
15
  class UnknownFileMakerError < StandardError; end # :nodoc:
@@ -25,8 +26,12 @@ module Trophonius
25
26
  class ValueOutOfRangeError < ValidationError; end # :nodoc:
26
27
  class ValueNotUniqueError < ValidationError; end # :nodoc:
27
28
  class ValueNotExistingError < ValidationError; end # :nodoc:
29
+ class ValueListNotExistingError < ValidationError; end # :nodoc:
28
30
  class ValueNotInValuelistError < ValidationError; end # :nodoc:
29
31
  class ValueFailedCalculationError < ValidationError; end # :nodoc:
32
+ class RecordLockedError < ValidationError; end # :nodoc:
33
+ class EntityLockedError < ValidationError; end # :nodoc:
34
+ class MissingEntityError < ValidationError; end # :nodoc:
30
35
 
31
36
  ##
32
37
  # Throws an error corresponding to the error number
@@ -55,38 +60,52 @@ module Trophonius
55
60
  raise RecordNotFoundError.new, 'Empty result'
56
61
  when '9'
57
62
  raise UnauthenticatedError.new, 'User has insufficient privileges'
58
- # when "10"
59
- # when "11"
60
- # when "12"
61
- # when "13"
62
- # when "14"
63
- # when "15"
64
- # when "16"
65
- # when "17"
66
- # when "16"
67
- # when "18"
68
- # when "19"
69
- # when "09"
70
- # when "20"
71
- # when "21"
72
- # when "100"
63
+ when '10'
64
+ raise MissingEntityError.new, 'Requested data is missing'
65
+ when '11'
66
+ raise ValidationError.new, 'Name is not valid'
67
+ when '12'
68
+ raise ValidationError.new, 'Name already exists'
69
+ when '13'
70
+ raise EntityLockedError.new, 'File or object is in use'
71
+ when '14'
72
+ raise ValueOutOfRangeError.new, 'Out of range'
73
+ when '15'
74
+ raise NumberValueError.new, 'Cant divide by zero'
75
+ when '16'
76
+ raise CommandError.new, 'Operation failed; request retry (for example, a user query)'
77
+ when '17'
78
+ raise ValidationError.new, 'Attempt to convert foreign character set to UTF-16 failed'
79
+ when '18'
80
+ raise AuthenticationError.new, 'Client must provide account information to proceed'
81
+ when '19'
82
+ raise ValidationError.new, 'String contains characters other than A-Z, a-z, 0-9 (ASCII)'
83
+ when '20'
84
+ raise CommandError.new, 'Command/operation canceled by triggered script'
85
+ when '21'
86
+ raise CommandError.new, 'Request not supported (for example, when creating a hard link on a file system that does not support hard links)'
87
+ when '100'
88
+ raise MissingEntityError.new, 'File is missing'
73
89
  when '101'
74
90
  raise RecordNotFoundError.new, "Record #{more_info} was not found"
75
91
  when '102'
76
- if more_info != 0
77
- raise FieldUnexistingError.new, "Following field(s) #{more_info} do not exist on layout #{layout_info}"
78
- else
79
- raise FieldUnexistingError.new, 'Field does not exist'
80
- end
81
- # when "103"
92
+ raise FieldUnexistingError.new, 'Field does not exist' if more_info.zero?
93
+
94
+ raise FieldUnexistingError.new, "Following field(s) #{more_info} do not exist on layout #{layout_info}"
95
+ when '103'
96
+ raise MissingEntityError.new, 'Relationship is missing'
82
97
  when '104'
83
98
  raise ScriptUnexistingError.new, 'Script does not exist'
84
99
  when '105'
85
100
  raise LayoutUnexistingError.new, 'Layout does not exist'
86
- # when "106"
87
- # when "107"
88
- # when "108"
89
- # when "109"
101
+ when '106'
102
+ raise MissingEntityError.new, 'Table is missing'
103
+ when '107'
104
+ raise MissingEntityError.new, 'Index is missing'
105
+ when '108'
106
+ raise ValueListNotExistingError.new, 'ValueList does not exist'
107
+ when '109'
108
+ raise MissingEntityError.new, 'Privilege set is missing'
90
109
  # when "110"
91
110
  # when "111"
92
111
  # when "112"
@@ -119,7 +138,8 @@ module Trophonius
119
138
  # when "217"
120
139
  # when "218"
121
140
  # when "300"
122
- # when "301"
141
+ when '301'
142
+ raise RecordLockedError.new, 'Record is locked by a FileMaker client'
123
143
  # when "302"
124
144
  # when "303"
125
145
  # when "304"
@@ -62,7 +62,7 @@ module Trophonius
62
62
  #
63
63
  # @return [Trophonius::Model] Self
64
64
  def self.paginate(page, limit)
65
- @offset = ((page * limit - limit) + 1).to_s
65
+ @offset = (((page * limit) - limit) + 1).to_s
66
66
  @limit = limit.to_s
67
67
  self
68
68
  end
@@ -116,16 +116,16 @@ module Trophonius
116
116
  field_names = Trophonius::Request.get_layout_field_names(layout_name)
117
117
  field_names.each do |field|
118
118
  @configuration.translations.merge!(
119
- { "#{ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(field.to_s), separator: '_').downcase}" => "#{field}" }
119
+ { ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(field.to_s), separator: '_').downcase.to_s => field.to_s }
120
120
  )
121
121
  end
122
122
  else
123
- self.first
123
+ first
124
124
  end
125
125
  @configuration.translations
126
126
  end
127
127
 
128
- def self.method_missing(method, *args, &block)
128
+ def self.method_missing(method, *args)
129
129
  new_instance = Trophonius::Model.new(config: @configuration)
130
130
  new_instance.current_query = Trophonius::Query.new(trophonius_model: self, limit: @limit, offset: @offset)
131
131
  args << new_instance
@@ -140,7 +140,7 @@ module Trophonius
140
140
  ret_val = @current_query.run_query(method, *args, &block)
141
141
  @limit = ''
142
142
  @offset = ''
143
- return ret_val
143
+ ret_val
144
144
  end
145
145
  end
146
146
 
@@ -149,10 +149,10 @@ module Trophonius
149
149
  # @param [Hash] fieldData: the data to find
150
150
  #
151
151
  # @return [Trophonius::Model] new instance of the model
152
- def self.where(fieldData)
152
+ def self.where(field_data)
153
153
  new_instance = Trophonius::Model.new(config: @configuration)
154
154
  new_instance.current_query = Trophonius::Query.new(trophonius_model: self, limit: @limit, offset: @offset)
155
- new_instance.current_query.build_query[0].merge!(fieldData)
155
+ new_instance.current_query.build_query[0].merge!(field_data)
156
156
  new_instance
157
157
  end
158
158
 
@@ -163,8 +163,8 @@ module Trophonius
163
163
  # @param [Hash] fieldData: the data to find
164
164
  #
165
165
  # @return [Trophonius::Model] new instance of the model
166
- def where(fieldData)
167
- @current_query.build_query[0].merge!(fieldData)
166
+ def where(field_data)
167
+ @current_query.build_query[0].merge!(field_data)
168
168
  self
169
169
  end
170
170
 
@@ -175,10 +175,11 @@ module Trophonius
175
175
  #
176
176
  # @return [Record] the created record
177
177
  # Model.create(fieldOne: "Data")
178
- def self.create(fieldData, portalData: {})
178
+ def self.create(field_data, portalData: {})
179
+ uri = URI::RFC2396_Parser.new
179
180
  url =
180
181
  URI(
181
- URI.escape(
182
+ uri.escape(
182
183
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
183
184
  Trophonius.config.database
184
185
  }/layouts/#{layout_name}/records"
@@ -186,11 +187,11 @@ module Trophonius
186
187
  )
187
188
  new_field_data = {}
188
189
  create_translations if @configuration.translations.keys.empty?
189
- fieldData.keys.each do |k|
190
+ field_data.keys.each do |k|
190
191
  if @configuration.translations.keys.include?(k.to_s)
191
- new_field_data.merge!({ "#{@configuration.translations[k.to_s]}" => fieldData[k] })
192
+ new_field_data.merge!({ @configuration.translations[k.to_s].to_s => field_data[k] })
192
193
  else
193
- new_field_data.merge!({ "#{k}" => fieldData[k] })
194
+ new_field_data.merge!({ k.to_s => field_data[k] })
194
195
  end
195
196
  end
196
197
 
@@ -199,37 +200,24 @@ module Trophonius
199
200
  new_portal_data.merge!(
200
201
  portal_name =>
201
202
  portal_values.map do |record|
202
- record.inject({}) do |new_hash, (key, value)|
203
+ record.each_with_object({}) do |(key, value), new_hash|
203
204
  new_hash["#{portal_name}::#{key}"] = value
204
- new_hash
205
205
  end
206
206
  end
207
207
  )
208
208
  end
209
209
 
210
210
  body =
211
- if new_portal_data != {}
212
- "{\"fieldData\": #{new_field_data.to_json}, \"portalData\": #{new_portal_data.to_json}}"
213
- else
211
+ if new_portal_data == {}
214
212
  "{\"fieldData\": #{new_field_data.to_json} }"
213
+ else
214
+ "{\"fieldData\": #{new_field_data.to_json}, \"portalData\": #{new_portal_data.to_json}}"
215
215
  end
216
216
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'post', body)
217
- if response['messages'][0]['code'] != '0'
218
- if response['messages'][0]['code'] == '102'
219
- results = Request.retrieve_first(layout_name)
220
- if results['messages'][0]['code'] != '0'
221
- Error.throw_error('102')
222
- else
223
- r_results = results['response']['data']
224
- ret_val = r_results.empty? ? Error.throw_error('102') : r_results[0]['fieldData']
225
- Error.throw_error('102', (new_field_data.keys.map(&:downcase) - ret_val.keys.map(&:downcase)).flatten.join(', '), layout_name)
226
- end
227
- end
228
- Error.throw_error(response['messages'][0]['code'])
229
- else
217
+ if response['messages'][0]['code'] == '0'
230
218
  url =
231
219
  URI(
232
- URI.escape(
220
+ uri.escape(
233
221
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
234
222
  Trophonius.config.database
235
223
  }/layouts/#{layout_name}/records/#{response['response']['recordId']}"
@@ -237,7 +225,19 @@ module Trophonius
237
225
  )
238
226
  ret_val = build_result(Request.make_request(url, "Bearer #{Request.get_token}", 'get', '{}')['response']['data'][0])
239
227
  ret_val.send(:define_singleton_method, 'result_count') { 1 }
240
- return ret_val
228
+ ret_val
229
+ else
230
+ if response['messages'][0]['code'] == '102'
231
+ results = Request.retrieve_first(layout_name)
232
+ if results['messages'][0]['code'] == '0'
233
+ r_results = results['response']['data']
234
+ ret_val = r_results.empty? ? Error.throw_error('102') : r_results[0]['fieldData']
235
+ Error.throw_error('102', (new_field_data.keys.map(&:downcase) - ret_val.keys.map(&:downcase)).flatten.join(', '), layout_name)
236
+ else
237
+ Error.throw_error('102')
238
+ end
239
+ end
240
+ Error.throw_error(response['messages'][0]['code'])
241
241
  end
242
242
  end
243
243
 
@@ -248,40 +248,42 @@ module Trophonius
248
248
  #
249
249
  # @return [Record] a Record object that correspond to FileMaker record fitting the find request
250
250
  # Model.find_by(fieldOne: "Data")
251
- def self.find_by(fieldData)
251
+ def self.find_by(field_data)
252
+ uri = URI::RFC2396_Parser.new
252
253
  url =
253
254
  URI(
254
- URI.escape(
255
+ uri.escape(
255
256
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
256
257
  Trophonius.config.database
257
- }/layouts/#{self.layout_name}/_find?_limit=1"
258
+ }/layouts/#{layout_name}/_find?_limit=1"
258
259
  )
259
260
  )
260
261
  new_field_data = {}
261
262
  create_translations if @configuration.translations.keys.empty?
262
- fieldData.keys.each do |k|
263
+ field_data.keys.each do |k|
263
264
  if @configuration.translations.keys.include?(k.to_s)
264
- new_field_data.merge!({ "#{@configuration.translations[k.to_s]}" => fieldData[k] })
265
+ new_field_data.merge!({ @configuration.translations[k.to_s].to_s => field_data[k] })
265
266
  else
266
- new_field_data.merge!({ "#{k}" => fieldData[k] })
267
+ new_field_data.merge!({ k.to_s => field_data[k] })
267
268
  end
268
269
  end
269
270
  body = { query: [new_field_data], limit: '100000' }.to_json
270
271
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'post', body)
271
272
 
272
- if response['messages'][0]['code'] != '0'
273
- if response['messages'][0]['code'] == '101' || response['messages'][0]['code'] == '401'
274
- return RecordSet.new(self.layout_name, self.non_modifiable_fields)
275
- end
276
- Error.throw_error(response['messages'][0]['code'])
277
- else
273
+ if response['messages'][0]['code'] == '0'
278
274
  r_results = response['response']['data']
279
- ret_val = RecordSet.new(self.layout_name, self.non_modifiable_fields)
275
+ ret_val = RecordSet.new(layout_name, non_modifiable_fields)
280
276
  r_results.each do |r|
281
277
  hash = build_result(r)
282
278
  ret_val << hash
283
279
  end
284
- return ret_val.first
280
+ ret_val.first
281
+ else
282
+ if response['messages'][0]['code'] == '101' || response['messages'][0]['code'] == '401'
283
+ return RecordSet.new(layout_name, non_modifiable_fields)
284
+ end
285
+
286
+ Error.throw_error(response['messages'][0]['code'])
285
287
  end
286
288
  end
287
289
 
@@ -292,21 +294,22 @@ module Trophonius
292
294
  #
293
295
  # @return [Record] the record
294
296
  def self.find(record_id)
297
+ uri = URI::RFC2396_Parser.new
295
298
  url =
296
299
  URI(
297
- URI.escape(
300
+ uri.escape(
298
301
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
299
302
  Trophonius.config.database
300
303
  }/layouts/#{layout_name}/records/#{record_id}"
301
304
  )
302
305
  )
303
306
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'get', '{}')
304
- if response['messages'][0]['code'] != '0'
305
- Error.throw_error(response['messages'][0]['code'], record_id)
306
- else
307
+ if response['messages'][0]['code'] == '0'
307
308
  ret_val = build_result(response['response']['data'][0])
308
309
  ret_val.send(:define_singleton_method, 'result_count') { 1 }
309
- return ret_val
310
+ ret_val
311
+ else
312
+ Error.throw_error(response['messages'][0]['code'], record_id)
310
313
  end
311
314
  end
312
315
 
@@ -317,19 +320,20 @@ module Trophonius
317
320
  #
318
321
  # @return [Boolean] True if the delete was successful
319
322
  def self.delete(record_id)
323
+ uri = URI::RFC2396_Parser.new
320
324
  url =
321
325
  URI(
322
- URI.escape(
326
+ uri.escape(
323
327
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
324
328
  Trophonius.config.database
325
329
  }/layouts/#{layout_name}/records/#{record_id}"
326
330
  )
327
331
  )
328
332
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'delete', '{}')
329
- if response['messages'][0]['code'] != '0'
330
- Error.throw_error(response['messages'][0]['code'])
333
+ if response['messages'][0]['code'] == '0'
334
+ true
331
335
  else
332
- return true
336
+ Error.throw_error(response['messages'][0]['code'])
333
337
  end
334
338
  end
335
339
 
@@ -341,10 +345,11 @@ module Trophonius
341
345
  # @param [Hash] fieldData: A hash containing the fields to edit and the new data to fill them with
342
346
  #
343
347
  # @return [Boolean] True if the delete was successful
344
- def self.edit(record_id, fieldData)
348
+ def self.edit(record_id, field_data)
349
+ uri = URI::RFC2396_Parser.new
345
350
  url =
346
351
  URI(
347
- URI.escape(
352
+ uri.escape(
348
353
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
349
354
  Trophonius.config.database
350
355
  }/layouts/#{layout_name}/records/#{record_id}"
@@ -352,16 +357,16 @@ module Trophonius
352
357
  )
353
358
  new_field_data = {}
354
359
  create_translations if @configuration.translations.keys.empty?
355
- fieldData.keys.each do |k|
360
+ field_data.keys.each do |k|
356
361
  if @configuration.translations.keys.include?(k.to_s)
357
- new_field_data.merge!({ "#{@configuration.translations[k.to_s]}" => fieldData[k] })
362
+ new_field_data.merge!({ @configuration.translations[k.to_s].to_s => field_data[k] })
358
363
  else
359
- new_field_data.merge!({ "#{k}" => fieldData[k] })
364
+ new_field_data.merge!({ k.to_s => field_data[k] })
360
365
  end
361
366
  end
362
367
  body = "{\"fieldData\": #{new_field_data.to_json}}"
363
368
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'patch', body)
364
- response['messages'][0]['code'] != '0' ? Error.throw_error(response['messages'][0]['code']) : true
369
+ response['messages'][0]['code'] == '0' ? true : Error.throw_error(response['messages'][0]['code'])
365
370
  end
366
371
 
367
372
  ##
@@ -371,7 +376,7 @@ module Trophonius
371
376
  #
372
377
  # @return [Record] A Record with singleton_methods for the fields where possible
373
378
  def self.build_result(result)
374
- hash = Trophonius::Record.new
379
+ hash = Trophonius::Record.new(name)
375
380
  hash.record_id = result['recordId']
376
381
  hash.layout_name = layout_name
377
382
  hash.model_name = name
@@ -379,7 +384,7 @@ module Trophonius
379
384
  result['fieldData'].keys.each do |key|
380
385
  # unless key[/\s/] || key[/\W/]
381
386
  @configuration.translations.merge!(
382
- { "#{ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(key.to_s), separator: '_').downcase}" => "#{key}" }
387
+ { ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(key.to_s), separator: '_').downcase.to_s => key.to_s }
383
388
  )
384
389
  hash.send(:define_singleton_method, ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(key.to_s), separator: '_')) do
385
390
  hash[key]
@@ -408,7 +413,7 @@ module Trophonius
408
413
  hash[key]
409
414
  end
410
415
  end
411
- result['portalData'][key].each_with_index do |inner_hash|
416
+ result['portalData'][key].each do |inner_hash|
412
417
  inner_hash.keys.each do |inner_key|
413
418
  inner_method =
414
419
  ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(inner_key.gsub(/\w+::/, '').to_s), separator: '_')
@@ -420,7 +425,7 @@ module Trophonius
420
425
  end
421
426
  hash.merge!({ key => result['portalData'][key] })
422
427
  end
423
- return hash
428
+ hash
424
429
  end
425
430
 
426
431
  ##
@@ -429,13 +434,13 @@ module Trophonius
429
434
  # @return [Record]: a Record corresponding to the FileMaker record.
430
435
  def self.first
431
436
  results = Request.retrieve_first(layout_name)
432
- if results['messages'][0]['code'] != '0'
433
- Error.throw_error(results['messages'][0]['code'])
434
- else
437
+ if results['messages'][0]['code'] == '0'
435
438
  r_results = results['response']['data']
436
439
  ret_val = r_results.empty? ? Trophonius::Record.new : build_result(r_results[0])
437
440
  ret_val.send(:define_singleton_method, 'result_count') { r_results.empty? ? 0 : 1 }
438
- return ret_val
441
+ ret_val
442
+ else
443
+ Error.throw_error(results['messages'][0]['code'])
439
444
  end
440
445
  end
441
446
 
@@ -454,8 +459,8 @@ module Trophonius
454
459
  elsif result['response']['scriptResult'] == '403'
455
460
  Error.throw_error(403)
456
461
  else
457
- ret_val = result['response']['scriptResult']
458
- return ret_val
462
+ result['response']['scriptResult']
463
+
459
464
  end
460
465
  end
461
466
 
@@ -466,41 +471,40 @@ module Trophonius
466
471
  #
467
472
  # @return [RecordSet]: a RecordSet containing all the Record objects that correspond to the FileMaker records.
468
473
  def self.all(sort: {})
474
+ uri = URI::RFC2396_Parser.new
469
475
  results = Request.retrieve_all(layout_name, sort)
470
476
  count = results['response']['scriptResult'].to_i
471
- unless @limit.empty? || @offset.empty?
472
- url =
473
- URI(
474
- URI.escape(
475
- "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
476
- Trophonius.config.database
477
- }/layouts/#{layout_name}/records?_offset=#{@offset}&_limit=#{@limit}"
478
- )
479
- )
480
- else
481
- url =
482
- URI(
483
- URI.escape(
484
- "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
477
+ url = if @limit.empty? || @offset.empty?
478
+ URI(
479
+ uri.escape(
480
+ "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
485
481
  Trophonius.config.database
486
482
  }/layouts/#{layout_name}/records?_limit=#{count == 0 ? 1_000_000 : count}"
487
- )
488
- )
489
- end
483
+ )
484
+ )
485
+ else
486
+ URI(
487
+ uri.escape(
488
+ "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
489
+ Trophonius.config.database
490
+ }/layouts/#{layout_name}/records?_offset=#{@offset}&_limit=#{@limit}"
491
+ )
492
+ )
493
+ end
490
494
  @limit = ''
491
495
  @offset = ''
492
496
  results = Request.make_request(url, "Bearer #{Request.get_token}", 'get', '{}')
493
- if results['messages'][0]['code'] != '0'
494
- Error.throw_error(results['messages'][0]['code'])
495
- else
497
+ if results['messages'][0]['code'] == '0'
496
498
  r_results = results['response']['data']
497
- ret_val = RecordSet.new(self.layout_name, self.non_modifiable_fields)
499
+ ret_val = RecordSet.new(layout_name, non_modifiable_fields)
498
500
  r_results.each do |r|
499
501
  hash = build_result(r)
500
502
  ret_val << hash
501
503
  end
502
504
  ret_val.result_count = count
503
- return ret_val
505
+ ret_val
506
+ else
507
+ Error.throw_error(results['messages'][0]['code'])
504
508
  end
505
509
  end
506
510
  end
@@ -184,9 +184,10 @@ module Trophonius
184
184
  #
185
185
  # @return Response of the called method
186
186
  def run_query(method, *args, &block)
187
+ uri = URI::RFC2396_Parser.new
187
188
  url =
188
189
  URI(
189
- URI.escape(
190
+ uri.escape(
190
191
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
191
192
  Trophonius.config.database
192
193
  }/layouts/#{@trophonius_model.layout_name}/_find"
@@ -221,12 +222,12 @@ module Trophonius
221
222
  end
222
223
 
223
224
  if @prerequest_script.present?
224
- body.merge!(script: @prerequest_script)
225
+ body.merge!("script.prerequest" => @prerequest_script)
225
226
  body.merge!('script.prerequest.param' => @prerequest_scriptparam) if @prerequest_scriptparam.present?
226
227
  end
227
228
 
228
229
  if @presort_script.present?
229
- body.merge!(script: @presort_script)
230
+ body.merge!("script.presort" => @presort_script)
230
231
  body.merge!('script.presort.param' => @presort_scriptparam) if @presort_scriptparam.present?
231
232
  end
232
233
 
@@ -12,9 +12,13 @@ module Trophonius
12
12
 
13
13
  ##
14
14
  # Initializes a new Record
15
- def initialize
15
+ def initialize(model = '')
16
16
  @modifiable_fields = {}
17
17
  @modified_fields = {}
18
+ model_name = model
19
+ @model = ActiveSupport::Inflector.constantize(ActiveSupport::Inflector.classify(ActiveSupport::Inflector.singularize(model_name)))
20
+
21
+ super
18
22
  end
19
23
 
20
24
  def []=(field, new_val)
@@ -32,49 +36,32 @@ module Trophonius
32
36
  layout = model.layout_name
33
37
  model.create_translations if model.translations.keys.empty?
34
38
 
39
+ uri = URI::RFC2396_Parser.new
35
40
  url =
36
41
  URI(
37
- URI.escape(
42
+ uri.escape(
38
43
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
39
44
  Trophonius.config.database
40
45
  }/layouts/#{layout}/_find"
41
46
  )
42
47
  )
43
48
 
44
- if model.translations.key?(relation[:foreign_key])
45
- foreign_key_field = model.translations[relation[:foreign_key]].to_s
46
- else
47
- foreign_key_field = relation[:foreign_key].to_s
48
- end
49
+ foreign_key_field = if model.translations.key?(relation[:foreign_key])
50
+ model.translations[relation[:foreign_key]].to_s
51
+ else
52
+ relation[:foreign_key].to_s
53
+ end
49
54
 
50
- if pk_model.translations.key?(relation[:primary_key])
51
- primary_key_field = pk_model.translations[relation[:primary_key]].to_s
52
- else
53
- primary_key_field = relation[:primary_key].to_s
54
- end
55
+ primary_key_field = if pk_model.translations.key?(relation[:primary_key])
56
+ pk_model.translations[relation[:primary_key]].to_s
57
+ else
58
+ relation[:primary_key].to_s
59
+ end
55
60
 
56
61
  body = { query: [{ foreign_key_field => self[primary_key_field].to_s }], limit: 100_000 }.to_json
57
62
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'post', body)
58
63
 
59
- if response['messages'][0]['code'] != '0'
60
- if response['messages'][0]['code'] == '101' || response['messages'][0]['code'] == '401'
61
- resp = RecordSet.new(layout, model.non_modifiable_fields)
62
- return resp
63
- else
64
- if response['messages'][0]['code'] == '102'
65
- results = Request.retrieve_first(layout)
66
- if results['messages'][0]['code'] != '0'
67
- Error.throw_error('102')
68
- else
69
- r_results = results['response']['data']
70
- ret_val = r_results.empty? ? Error.throw_error('102') : r_results[0]['fieldData']
71
- query_keys = [foreign_key_field]
72
- Error.throw_error('102', (query_keys - ret_val.keys.map(&:downcase)).flatten.join(', '), layout)
73
- end
74
- end
75
- Error.throw_error(response['messages'][0]['code'])
76
- end
77
- else
64
+ if response['messages'][0]['code'] == '0'
78
65
  r_results = response['response']['data']
79
66
  ret_val = RecordSet.new(layout, model.non_modifiable_fields)
80
67
  r_results.each do |r|
@@ -82,7 +69,23 @@ module Trophonius
82
69
  ret_val << hash
83
70
  end
84
71
  @response = ret_val
85
- return @response
72
+ @response
73
+ elsif response['messages'][0]['code'] == '101' || response['messages'][0]['code'] == '401'
74
+ RecordSet.new(layout, model.non_modifiable_fields)
75
+
76
+ else
77
+ if response['messages'][0]['code'] == '102'
78
+ results = Request.retrieve_first(layout)
79
+ if results['messages'][0]['code'] == '0'
80
+ r_results = results['response']['data']
81
+ ret_val = r_results.empty? ? Error.throw_error('102') : r_results[0]['fieldData']
82
+ query_keys = [foreign_key_field]
83
+ Error.throw_error('102', (query_keys - ret_val.keys.map(&:downcase)).flatten.join(', '), layout)
84
+ else
85
+ Error.throw_error('102')
86
+ end
87
+ end
88
+ Error.throw_error(response['messages'][0]['code'])
86
89
  end
87
90
  end
88
91
  elsif ActiveSupport::Inflector.constantize(ActiveSupport::Inflector.classify(ActiveSupport::Inflector.singularize(method))).respond_to?('first')
@@ -94,49 +97,32 @@ module Trophonius
94
97
  layout = pk_model.layout_name
95
98
  pk_model.create_translations if pk_model.translations.keys.empty?
96
99
 
100
+ uri = URI::RFC2396_Parser.new
97
101
  url =
98
102
  URI(
99
- URI.escape(
103
+ uri.escape(
100
104
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
101
105
  Trophonius.config.database
102
106
  }/layouts/#{layout}/_find"
103
107
  )
104
108
  )
105
109
 
106
- if fk_model.translations.key?(relation[:foreign_key])
107
- foreign_key_field = fk_model.translations[relation[:foreign_key]].to_s
108
- else
109
- foreign_key_field = relation[:foreign_key].to_s
110
- end
110
+ foreign_key_field = if fk_model.translations.key?(relation[:foreign_key])
111
+ fk_model.translations[relation[:foreign_key]].to_s
112
+ else
113
+ relation[:foreign_key].to_s
114
+ end
111
115
 
112
- if pk_model.translations.key?(relation[:primary_key])
113
- primary_key_field = pk_model.translations[relation[:primary_key]].to_s
114
- else
115
- primary_key_field = relation[:primary_key].to_s
116
- end
116
+ primary_key_field = if pk_model.translations.key?(relation[:primary_key])
117
+ pk_model.translations[relation[:primary_key]].to_s
118
+ else
119
+ relation[:primary_key].to_s
120
+ end
117
121
 
118
122
  body = { query: [{ primary_key_field => self[foreign_key_field].to_s }], limit: 1 }.to_json
119
123
 
120
124
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'post', body)
121
- if response['messages'][0]['code'] != '0'
122
- if response['messages'][0]['code'] == '101' || response['messages'][0]['code'] == '401'
123
- resp = RecordSet.new(layout, pk_model.non_modifiable_fields)
124
- return resp
125
- else
126
- if response['messages'][0]['code'] == '102'
127
- results = Request.retrieve_first(layout)
128
- if results['messages'][0]['code'] != '0'
129
- Error.throw_error('102')
130
- else
131
- r_results = results['response']['data']
132
- ret_val = r_results.empty? ? Error.throw_error('102') : r_results[0]['fieldData']
133
- query_keys = [primary_key_field]
134
- Error.throw_error('102', (query_keys - ret_val.keys.map(&:downcase)).flatten.join(', '), layout)
135
- end
136
- end
137
- Error.throw_error(response['messages'][0]['code'])
138
- end
139
- else
125
+ if response['messages'][0]['code'] == '0'
140
126
  r_results = response['response']['data']
141
127
  ret_val = RecordSet.new(layout, pk_model.non_modifiable_fields)
142
128
  r_results.each do |r|
@@ -144,7 +130,23 @@ module Trophonius
144
130
  ret_val << hash
145
131
  end
146
132
  @response = ret_val
147
- return @response.first
133
+ @response.first
134
+ elsif response['messages'][0]['code'] == '101' || response['messages'][0]['code'] == '401'
135
+ RecordSet.new(layout, pk_model.non_modifiable_fields)
136
+
137
+ else
138
+ if response['messages'][0]['code'] == '102'
139
+ results = Request.retrieve_first(layout)
140
+ if results['messages'][0]['code'] == '0'
141
+ r_results = results['response']['data']
142
+ ret_val = r_results.empty? ? Error.throw_error('102') : r_results[0]['fieldData']
143
+ query_keys = [primary_key_field]
144
+ Error.throw_error('102', (query_keys - ret_val.keys.map(&:downcase)).flatten.join(', '), layout)
145
+ else
146
+ Error.throw_error('102')
147
+ end
148
+ end
149
+ Error.throw_error(response['messages'][0]['code'])
148
150
  end
149
151
  end
150
152
  else
@@ -167,9 +169,10 @@ module Trophonius
167
169
  #
168
170
  # @return [String]: string representing the script result returned by FileMaker
169
171
  def run_script(script: '', scriptparameter: '')
172
+ uri = URI::RFC2396_Parser.new
170
173
  url =
171
174
  URI(
172
- URI.escape(
175
+ uri.escape(
173
176
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
174
177
  Trophonius.config.database
175
178
  }/layouts/#{layout_name}/records/#{record_id}?script=#{script}&script.param=#{scriptparameter}"
@@ -184,7 +187,7 @@ module Trophonius
184
187
  Error.throw_error(403)
185
188
  else
186
189
  ret_val = result['response']['scriptResult']
187
- return ret_val || true
190
+ ret_val || true
188
191
  end
189
192
  end
190
193
 
@@ -194,9 +197,10 @@ module Trophonius
194
197
  #
195
198
  # @return [True] if successful
196
199
  def save
200
+ uri = URI::RFC2396_Parser.new
197
201
  url =
198
202
  URI(
199
- URI.escape(
203
+ uri.escape(
200
204
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
201
205
  Trophonius.config.database
202
206
  }/layouts/#{layout_name}/records/#{record_id}"
@@ -204,7 +208,7 @@ module Trophonius
204
208
  )
205
209
  body = "{\"fieldData\": #{modified_fields.to_json}}"
206
210
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'patch', body)
207
- response['messages'][0]['code'] != '0' ? Error.throw_error(response['messages'][0]['code']) : true
211
+ response['messages'][0]['code'] == '0' ? true : Error.throw_error(response['messages'][0]['code'])
208
212
  end
209
213
 
210
214
  ##
@@ -213,51 +217,77 @@ module Trophonius
213
217
  #
214
218
  # @return [True] if successful
215
219
  def delete
220
+ uri = URI::RFC2396_Parser.new
216
221
  url =
217
222
  URI(
218
- URI.escape(
223
+ uri.escape(
219
224
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
220
225
  Trophonius.config.database
221
226
  }/layouts/#{layout_name}/records/#{record_id}"
222
227
  )
223
228
  )
224
229
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'delete', '{}')
225
- response['messages'][0]['code'] != '0' ? Error.throw_error(response['messages'][0]['code']) : true
230
+ response['messages'][0]['code'] == '0' ? true : Error.throw_error(response['messages'][0]['code'])
226
231
  end
227
232
 
228
233
  ##
229
234
  # Changes and saves the corresponding record in FileMaker
230
235
  # Throws a FileMaker error if save failed
231
236
  #
232
- # @param [Hash] fieldData: Fields to be changed and data to fill the fields with
237
+ # @param [Hash] field_data: Fields to be changed and data to fill the fields with
233
238
  #
234
239
  # @return [True] if successful
235
- def update(fieldData)
240
+ def update(field_data, portal_data: {})
241
+ uri = URI::RFC2396_Parser.new
236
242
  url =
237
243
  URI(
238
- URI.escape(
244
+ uri.escape(
239
245
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
240
246
  Trophonius.config.database
241
247
  }/layouts/#{layout_name}/records/#{record_id}"
242
248
  )
243
249
  )
244
- fieldData.keys.each { |field| modifiable_fields[field] = fieldData[field] }
245
- body = "{\"fieldData\": #{fieldData.to_json}}"
250
+ field_data.each_key { |field| modifiable_fields[field] = field_data[field] }
251
+ new_portal_data = {}
252
+ portal_data.each do |portal_name, portal_values|
253
+ new_portal_data.merge!(
254
+ portal_name =>
255
+ portal_values.map do |record|
256
+ record.each_with_object({}) do |(key, value), new_hash|
257
+ if key.to_s.downcase.include?('id') && key.to_s.downcase.include?('record')
258
+ new_hash['recordId'] = value
259
+ else
260
+ new_hash["#{portal_name}::#{key}"] = value
261
+ end
262
+ end
263
+ end
264
+ )
265
+ end
266
+ body =
267
+ if new_portal_data == {}
268
+ "{\"fieldData\": #{field_data.to_json} }"
269
+ else
270
+ "{\"fieldData\": #{field_data.to_json}, \"portalData\": #{new_portal_data.to_json}}"
271
+ end
272
+
273
+ puts "BODY SENT TO FILEMAKER WAS: #{body}"
246
274
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'patch', body)
247
- if response['messages'][0]['code'] != '0'
275
+ puts "RESPONSE FROM FILEMAKER WAS: #{response}"
276
+ if response['messages'][0]['code'] == '0'
277
+ true
278
+ else
248
279
  if response['messages'][0]['code'] == '102'
249
280
  results = Request.retrieve_first(layout_name)
250
- if results['messages'][0]['code'] != '0'
251
- Error.throw_error('102')
252
- else
281
+ if results['messages'][0]['code'] == '0'
253
282
  r_results = results['response']['data']
254
- ret_val = r_results.empty? ? Error.throw_error('102') : r_results[0]['fieldData']
255
- Error.throw_error('102', (fieldData.keys.map(&:downcase) - ret_val.keys.map(&:downcase)).flatten.join(', '), layout_name)
283
+ Error.throw_error('102') if r_results.empty?
284
+ ret_val = r_results[0]['fieldData']
285
+ Error.throw_error('102', (field_data.keys.map { |key| key.to_s.downcase } - ret_val.keys.map(&:downcase)).flatten.join(', '), layout_name)
286
+ else
287
+ Error.throw_error('102')
256
288
  end
257
289
  end
258
290
  Error.throw_error(response['messages'][0]['code'])
259
- else
260
- true
261
291
  end
262
292
  end
263
293
 
@@ -270,10 +300,11 @@ module Trophonius
270
300
  # @param [Tempfile or File] file: File to upload
271
301
  #
272
302
  # @return [True] if successful
273
- def upload(container_name:, container_repetition: 1, file:)
303
+ def upload(container_name:, file:, container_repetition: 1)
304
+ uri = URI::RFC2396_Parser.new
274
305
  url =
275
306
  URI(
276
- URI.escape(
307
+ uri.escape(
277
308
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
278
309
  Trophonius.config.database
279
310
  }/layouts/#{layout_name}/records/#{record_id}/containers/#{container_name}/#{container_repetition}"
@@ -281,7 +312,7 @@ module Trophonius
281
312
  )
282
313
 
283
314
  response = Request.upload_file_request(url, "Bearer #{Request.get_token}", file)
284
- response['messages'][0]['code'] != '0' ? Error.throw_error(response['messages'][0]['code']) : true
315
+ response['messages'][0]['code'] == '0' ? true : Error.throw_error(response['messages'][0]['code'])
285
316
  end
286
317
  end
287
318
  end
@@ -83,9 +83,10 @@ module Trophonius
83
83
  #
84
84
  # @return [JSON] The first record from FileMaker
85
85
  def self.retrieve_first(layout_name)
86
+ uri = URI::RFC2396_Parser.new
86
87
  url =
87
88
  URI(
88
- URI.escape(
89
+ uri.escape(
89
90
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
90
91
  Trophonius.config.database
91
92
  }/layouts/#{layout_name}/records?_limit=1"
@@ -99,9 +100,10 @@ module Trophonius
99
100
  #
100
101
  # @return [JSON] The fieldnames of a layout
101
102
  def self.get_layout_field_names(layout_name)
103
+ uri = URI::RFC2396_Parser.new
102
104
  url =
103
105
  URI(
104
- URI.escape(
106
+ uri.escape(
105
107
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
106
108
  Trophonius.config.database
107
109
  }/layouts/#{layout_name}"
@@ -119,9 +121,10 @@ module Trophonius
119
121
  #
120
122
  # @return [JSON] The script result from FileMaker
121
123
  def self.run_script(script, scriptparameter, layout_name)
124
+ uri = URI::RFC2396_Parser.new
122
125
  url =
123
126
  URI(
124
- URI.escape(
127
+ uri.escape(
125
128
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
126
129
  Trophonius.config.database
127
130
  }/layouts/#{layout_name}/records?_limit=1&script=#{script}&script.param=#{scriptparameter}"
@@ -135,25 +138,26 @@ module Trophonius
135
138
  #
136
139
  # @return [JSON] The first 10000000 records from FileMaker
137
140
  def self.retrieve_all(layout_name, sort)
138
- if !sort.empty?
139
- sort_order = sort.to_json.to_s
141
+ uri = URI::RFC2396_Parser.new
142
+ if sort.empty?
140
143
  url =
141
144
  URI(
142
- URI.escape(
145
+ uri.escape(
143
146
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
144
147
  Trophonius.config.database
145
- }/layouts/#{layout_name}/records?_limit=10000000_sort=#{sort_order}#{
148
+ }/layouts/#{layout_name}/records?_limit=10000000#{
146
149
  Trophonius.config.count_result_script == '' ? '' : "&script=#{Trophonius.config.count_result_script}"
147
150
  }"
148
151
  )
149
152
  )
150
153
  else
154
+ sort_order = sort.to_json.to_s
151
155
  url =
152
156
  URI(
153
- URI.escape(
157
+ uri.escape(
154
158
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
155
159
  Trophonius.config.database
156
- }/layouts/#{layout_name}/records?_limit=10000000#{
160
+ }/layouts/#{layout_name}/records?_limit=10000000&_sort=#{sort_order}#{
157
161
  Trophonius.config.count_result_script == '' ? '' : "&script=#{Trophonius.config.count_result_script}"
158
162
  }"
159
163
  )
@@ -7,6 +7,7 @@ require 'trophonius_recordset'
7
7
  module Trophonius
8
8
  class Trophonius::Single
9
9
  attr_reader :query
10
+
10
11
  def initialize(config:)
11
12
  @config = config
12
13
  @query = {}
@@ -15,9 +16,10 @@ module Trophonius
15
16
  end
16
17
 
17
18
  def where(fieldData)
19
+ uri = URI::RFC2396_Parser.new
18
20
  url =
19
21
  URI(
20
- URI.escape(
22
+ uri.escape(
21
23
  "http#{@config[:ssl] == true ? 's' : ''}://#{@config[:host]}/fmi/data/v1/databases/#{@config[:database]}/layouts/#{
22
24
  @config[:layout_name]
23
25
  }/_find"
@@ -45,13 +47,14 @@ module Trophonius
45
47
  @query = {}
46
48
  close_connection(token)
47
49
 
48
- return ret_val
50
+ ret_val
49
51
  end
50
52
 
51
53
  def first
54
+ uri = URI::RFC2396_Parser.new
52
55
  url =
53
56
  URI(
54
- URI.escape(
57
+ uri.escape(
55
58
  "http#{@config[:ssl] == true ? 's' : ''}://#{@config[:host]}/fmi/data/v1/databases/#{@config[:database]}/layouts/#{
56
59
  @config[:layout_name]
57
60
  }/records?_limit=1"
@@ -77,13 +80,14 @@ module Trophonius
77
80
  end
78
81
  close_connection(token)
79
82
 
80
- return ret_val
83
+ ret_val
81
84
  end
82
85
 
83
86
  def run_script(script:, scriptparameter:)
87
+ uri = URI::RFC2396_Parser.new
84
88
  url =
85
89
  URI(
86
- URI.escape(
90
+ uri.escape(
87
91
  "http#{@config[:ssl] == true ? 's' : ''}://#{@config[:host]}/fmi/data/v1/databases/#{@config[:database]}/layouts/#{
88
92
  @config[:layout_name]
89
93
  }/records?_limit=1&script=#{script}&script.param=#{scriptparameter}"
@@ -91,7 +95,7 @@ module Trophonius
91
95
  )
92
96
 
93
97
  token = setup_connection
94
- result = make_request(url, "#{token}", 'get', '{}')
98
+ result = make_request(url, token.to_s, 'get', '{}')
95
99
  ret_val = ''
96
100
 
97
101
  if result['messages'][0]['code'] != '0'
@@ -106,7 +110,7 @@ module Trophonius
106
110
 
107
111
  close_connection(token)
108
112
 
109
- return ret_val
113
+ ret_val
110
114
  end
111
115
 
112
116
  private
@@ -120,7 +124,7 @@ module Trophonius
120
124
  result['fieldData'].keys.each do |key|
121
125
  # unless key[/\s/] || key[/\W/]
122
126
  @translations.merge!(
123
- { "#{ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(key.to_s), separator: '_').downcase}" => "#{key}" }
127
+ { ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(key.to_s), separator: '_').downcase.to_s => key.to_s }
124
128
  )
125
129
  hash.send(:define_singleton_method, ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(key.to_s), separator: '_')) do
126
130
  hash[key]
@@ -149,7 +153,7 @@ module Trophonius
149
153
  hash[key]
150
154
  end
151
155
  end
152
- result['portalData'][key].each_with_index do |inner_hash|
156
+ result['portalData'][key].each do |inner_hash|
153
157
  inner_hash.keys.each do |inner_key|
154
158
  inner_method =
155
159
  ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(inner_key.gsub(/\w+::/, '').to_s), separator: '_')
@@ -161,7 +165,7 @@ module Trophonius
161
165
  end
162
166
  hash.merge!({ key => result['portalData'][key] })
163
167
  end
164
- return hash
168
+ hash
165
169
  end
166
170
 
167
171
  def make_request(url_param, token, method, body, params = '')
@@ -189,7 +193,8 @@ module Trophonius
189
193
  def setup_connection
190
194
  ssl_verifyhost = @config[:local_network] ? 0 : 2
191
195
  ssl_verifypeer = !@config[:local_network]
192
- url = URI(URI.escape("http#{@config[:ssl] == true ? 's' : ''}://#{@config[:host]}/fmi/data/v1/databases/#{@config[:database]}/sessions"))
196
+ uri = URI::RFC2396_Parser.new
197
+ url = URI(uri.escape("http#{@config[:ssl] == true ? 's' : ''}://#{@config[:host]}/fmi/data/v1/databases/#{@config[:database]}/sessions"))
193
198
  request =
194
199
  Typhoeus::Request.new(
195
200
  url,
@@ -216,12 +221,13 @@ module Trophonius
216
221
  Error.throw_error('1631')
217
222
  end
218
223
  Error.throw_error(parsed['messages'][0]['code']) if parsed['messages'][0]['code'] != '0'
219
- return parsed['response']['token']
224
+ parsed['response']['token']
220
225
  end
221
226
 
222
227
  def close_connection(token)
228
+ uri = URI::RFC2396_Parser.new
223
229
  url =
224
- URI(URI.escape("http#{@config[:ssl] == true ? 's' : ''}://#{@config[:host]}/fmi/data/v1/databases/#{@config[:database]}/sessions/#{token}"))
230
+ URI(uri.escape("http#{@config[:ssl] == true ? 's' : ''}://#{@config[:host]}/fmi/data/v1/databases/#{@config[:database]}/sessions/#{token}"))
225
231
  ssl_verifyhost = @config[:local_network] ? 0 : 2
226
232
  ssl_verifypeer = !@config[:local_network]
227
233
 
@@ -242,7 +248,7 @@ module Trophonius
242
248
  Error.throw_error('1631')
243
249
  end
244
250
  Error.throw_error(parsed['messages'][0]['code']) if parsed['messages'][0]['code'] != '0'
245
- return true
251
+ true
246
252
  end
247
253
  end
248
254
  end
metadata CHANGED
@@ -1,57 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trophonius
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.3.2
4
+ version: 1.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kempen Automatisering
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-16 00:00:00.000000000 Z
11
+ date: 2022-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: typhoeus
14
+ name: redis
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.3'
19
+ version: '4.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.3'
26
+ version: '4.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: redis
28
+ name: typhoeus
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '4.0'
33
+ version: '1.3'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '4.0'
40
+ version: '1.3'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: activesupport
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '5.0'
47
+ version: '7.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: '5.0'
54
+ version: '7.0'
55
55
  description: A lightweight, easy to use link between Ruby (on Rails) and FileMaker
56
56
  using the FileMaker Data-API.
57
57
  email:
@@ -78,7 +78,8 @@ files:
78
78
  homepage: https://github.com/Willem-Jan/Trophonius
79
79
  licenses:
80
80
  - MIT
81
- metadata: {}
81
+ metadata:
82
+ rubygems_mfa_required: 'true'
82
83
  post_install_message:
83
84
  rdoc_options: []
84
85
  require_paths:
@@ -94,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
95
  - !ruby/object:Gem::Version
95
96
  version: '0'
96
97
  requirements: []
97
- rubygems_version: 3.0.3
98
+ rubygems_version: 3.0.9
98
99
  signing_key:
99
100
  specification_version: 4
100
101
  summary: Link between Ruby (on Rails) and FileMaker.