trophonius 1.4.3.4 → 1.4.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4d52cbe0f01bc7cb86fdd330790404ecf956631db54c0997b00a2418dfe681d9
4
- data.tar.gz: e8f4d3da5dc60152dcd9ea8e88d6b6511b6bb62fc197158d4eadc63b3596fbf7
3
+ metadata.gz: 1bf03ee96abeebc7cf0bd49e76e0a678f9b083d53b08e1f524406ddfe6d5334d
4
+ data.tar.gz: 9ffce8e42068d7312fa7aa2be4f55451456a97aa2f99cca90d5e18374721e5cb
5
5
  SHA512:
6
- metadata.gz: 97fbbbeacba35f6bd111a4ab3ec424954aa3e75a344f0afe508da30f2ec58b8ec5ed23e5be9bfb5051661d101edc13f99e65ae81b395766a6ca4ee584d4b6cc6
7
- data.tar.gz: b80e60772da1d002dd648852231adff14195087ba96d4551095446e129e128073a9d54ecad69602ab47e66381e50954064f8f066b9a9fd81be2fdcfffde84073
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
@@ -70,14 +70,21 @@ module Trophonius
70
70
  }
71
71
  )
72
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}"
73
78
 
74
79
  begin
75
- parsed = JSON.parse(temp.response_body)
80
+ parsed = JSON.parse(body)
76
81
  rescue Exception => e
82
+ puts e
83
+ puts e.backtrace
77
84
  Error.throw_error('1631')
78
85
  end
79
86
  Error.throw_error(parsed['messages'][0]['code']) if parsed['messages'][0]['code'] != '0'
80
- return parsed['response']['token']
87
+ parsed['response']['token']
81
88
  end
82
89
 
83
90
  ##
@@ -116,14 +123,14 @@ module Trophonius
116
123
  Trophonius::RedisManager.disconnect! if Trophonius.config.redis_connection
117
124
  @token = nil
118
125
  @last_connection = nil
119
- return true
126
+ true
120
127
  end
121
128
 
122
129
  ##
123
130
  # Returns the last received token
124
131
  # @return [String] the last valid *token* used to connect with the FileMaker data api
125
132
  def self.token
126
- return Trophonius.config.redis_connection ? Trophonius::RedisManager.get_key(key: 'token') : @token
133
+ Trophonius.config.redis_connection ? Trophonius::RedisManager.get_key(key: 'token') : @token
127
134
  end
128
135
 
129
136
  ##
@@ -157,7 +164,7 @@ module Trophonius
157
164
  temp = request.run
158
165
  JSON.parse(temp.response_body)['messages'][0]['code'] == '0'
159
166
  rescue StandardError
160
- return false
167
+ false
161
168
  end
162
169
  end
163
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,7 +175,7 @@ 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
179
  uri = URI::RFC2396_Parser.new
180
180
  url =
181
181
  URI(
@@ -187,11 +187,11 @@ module Trophonius
187
187
  )
188
188
  new_field_data = {}
189
189
  create_translations if @configuration.translations.keys.empty?
190
- fieldData.keys.each do |k|
190
+ field_data.keys.each do |k|
191
191
  if @configuration.translations.keys.include?(k.to_s)
192
- 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] })
193
193
  else
194
- new_field_data.merge!({ "#{k}" => fieldData[k] })
194
+ new_field_data.merge!({ k.to_s => field_data[k] })
195
195
  end
196
196
  end
197
197
 
@@ -200,34 +200,21 @@ module Trophonius
200
200
  new_portal_data.merge!(
201
201
  portal_name =>
202
202
  portal_values.map do |record|
203
- record.inject({}) do |new_hash, (key, value)|
203
+ record.each_with_object({}) do |(key, value), new_hash|
204
204
  new_hash["#{portal_name}::#{key}"] = value
205
- new_hash
206
205
  end
207
206
  end
208
207
  )
209
208
  end
210
209
 
211
210
  body =
212
- if new_portal_data != {}
213
- "{\"fieldData\": #{new_field_data.to_json}, \"portalData\": #{new_portal_data.to_json}}"
214
- else
211
+ if new_portal_data == {}
215
212
  "{\"fieldData\": #{new_field_data.to_json} }"
213
+ else
214
+ "{\"fieldData\": #{new_field_data.to_json}, \"portalData\": #{new_portal_data.to_json}}"
216
215
  end
217
216
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'post', body)
218
- if response['messages'][0]['code'] != '0'
219
- if response['messages'][0]['code'] == '102'
220
- results = Request.retrieve_first(layout_name)
221
- if results['messages'][0]['code'] != '0'
222
- Error.throw_error('102')
223
- else
224
- r_results = results['response']['data']
225
- ret_val = r_results.empty? ? Error.throw_error('102') : r_results[0]['fieldData']
226
- Error.throw_error('102', (new_field_data.keys.map(&:downcase) - ret_val.keys.map(&:downcase)).flatten.join(', '), layout_name)
227
- end
228
- end
229
- Error.throw_error(response['messages'][0]['code'])
230
- else
217
+ if response['messages'][0]['code'] == '0'
231
218
  url =
232
219
  URI(
233
220
  uri.escape(
@@ -238,7 +225,19 @@ module Trophonius
238
225
  )
239
226
  ret_val = build_result(Request.make_request(url, "Bearer #{Request.get_token}", 'get', '{}')['response']['data'][0])
240
227
  ret_val.send(:define_singleton_method, 'result_count') { 1 }
241
- 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'])
242
241
  end
243
242
  end
244
243
 
@@ -249,41 +248,42 @@ module Trophonius
249
248
  #
250
249
  # @return [Record] a Record object that correspond to FileMaker record fitting the find request
251
250
  # Model.find_by(fieldOne: "Data")
252
- def self.find_by(fieldData)
251
+ def self.find_by(field_data)
253
252
  uri = URI::RFC2396_Parser.new
254
253
  url =
255
254
  URI(
256
255
  uri.escape(
257
256
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
258
257
  Trophonius.config.database
259
- }/layouts/#{self.layout_name}/_find?_limit=1"
258
+ }/layouts/#{layout_name}/_find?_limit=1"
260
259
  )
261
260
  )
262
261
  new_field_data = {}
263
262
  create_translations if @configuration.translations.keys.empty?
264
- fieldData.keys.each do |k|
263
+ field_data.keys.each do |k|
265
264
  if @configuration.translations.keys.include?(k.to_s)
266
- 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] })
267
266
  else
268
- new_field_data.merge!({ "#{k}" => fieldData[k] })
267
+ new_field_data.merge!({ k.to_s => field_data[k] })
269
268
  end
270
269
  end
271
270
  body = { query: [new_field_data], limit: '100000' }.to_json
272
271
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'post', body)
273
272
 
274
- if response['messages'][0]['code'] != '0'
275
- if response['messages'][0]['code'] == '101' || response['messages'][0]['code'] == '401'
276
- return RecordSet.new(self.layout_name, self.non_modifiable_fields)
277
- end
278
- Error.throw_error(response['messages'][0]['code'])
279
- else
273
+ if response['messages'][0]['code'] == '0'
280
274
  r_results = response['response']['data']
281
- ret_val = RecordSet.new(self.layout_name, self.non_modifiable_fields)
275
+ ret_val = RecordSet.new(layout_name, non_modifiable_fields)
282
276
  r_results.each do |r|
283
277
  hash = build_result(r)
284
278
  ret_val << hash
285
279
  end
286
- 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'])
287
287
  end
288
288
  end
289
289
 
@@ -304,12 +304,12 @@ module Trophonius
304
304
  )
305
305
  )
306
306
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'get', '{}')
307
- if response['messages'][0]['code'] != '0'
308
- Error.throw_error(response['messages'][0]['code'], record_id)
309
- else
307
+ if response['messages'][0]['code'] == '0'
310
308
  ret_val = build_result(response['response']['data'][0])
311
309
  ret_val.send(:define_singleton_method, 'result_count') { 1 }
312
- return ret_val
310
+ ret_val
311
+ else
312
+ Error.throw_error(response['messages'][0]['code'], record_id)
313
313
  end
314
314
  end
315
315
 
@@ -330,10 +330,10 @@ module Trophonius
330
330
  )
331
331
  )
332
332
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'delete', '{}')
333
- if response['messages'][0]['code'] != '0'
334
- Error.throw_error(response['messages'][0]['code'])
333
+ if response['messages'][0]['code'] == '0'
334
+ true
335
335
  else
336
- return true
336
+ Error.throw_error(response['messages'][0]['code'])
337
337
  end
338
338
  end
339
339
 
@@ -345,7 +345,7 @@ module Trophonius
345
345
  # @param [Hash] fieldData: A hash containing the fields to edit and the new data to fill them with
346
346
  #
347
347
  # @return [Boolean] True if the delete was successful
348
- def self.edit(record_id, fieldData)
348
+ def self.edit(record_id, field_data)
349
349
  uri = URI::RFC2396_Parser.new
350
350
  url =
351
351
  URI(
@@ -357,16 +357,16 @@ module Trophonius
357
357
  )
358
358
  new_field_data = {}
359
359
  create_translations if @configuration.translations.keys.empty?
360
- fieldData.keys.each do |k|
360
+ field_data.keys.each do |k|
361
361
  if @configuration.translations.keys.include?(k.to_s)
362
- 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] })
363
363
  else
364
- new_field_data.merge!({ "#{k}" => fieldData[k] })
364
+ new_field_data.merge!({ k.to_s => field_data[k] })
365
365
  end
366
366
  end
367
367
  body = "{\"fieldData\": #{new_field_data.to_json}}"
368
368
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'patch', body)
369
- 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'])
370
370
  end
371
371
 
372
372
  ##
@@ -376,7 +376,7 @@ module Trophonius
376
376
  #
377
377
  # @return [Record] A Record with singleton_methods for the fields where possible
378
378
  def self.build_result(result)
379
- hash = Trophonius::Record.new
379
+ hash = Trophonius::Record.new(name)
380
380
  hash.record_id = result['recordId']
381
381
  hash.layout_name = layout_name
382
382
  hash.model_name = name
@@ -384,7 +384,7 @@ module Trophonius
384
384
  result['fieldData'].keys.each do |key|
385
385
  # unless key[/\s/] || key[/\W/]
386
386
  @configuration.translations.merge!(
387
- { "#{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 }
388
388
  )
389
389
  hash.send(:define_singleton_method, ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(key.to_s), separator: '_')) do
390
390
  hash[key]
@@ -413,7 +413,7 @@ module Trophonius
413
413
  hash[key]
414
414
  end
415
415
  end
416
- result['portalData'][key].each_with_index do |inner_hash|
416
+ result['portalData'][key].each do |inner_hash|
417
417
  inner_hash.keys.each do |inner_key|
418
418
  inner_method =
419
419
  ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(inner_key.gsub(/\w+::/, '').to_s), separator: '_')
@@ -425,7 +425,7 @@ module Trophonius
425
425
  end
426
426
  hash.merge!({ key => result['portalData'][key] })
427
427
  end
428
- return hash
428
+ hash
429
429
  end
430
430
 
431
431
  ##
@@ -434,13 +434,13 @@ module Trophonius
434
434
  # @return [Record]: a Record corresponding to the FileMaker record.
435
435
  def self.first
436
436
  results = Request.retrieve_first(layout_name)
437
- if results['messages'][0]['code'] != '0'
438
- Error.throw_error(results['messages'][0]['code'])
439
- else
437
+ if results['messages'][0]['code'] == '0'
440
438
  r_results = results['response']['data']
441
439
  ret_val = r_results.empty? ? Trophonius::Record.new : build_result(r_results[0])
442
440
  ret_val.send(:define_singleton_method, 'result_count') { r_results.empty? ? 0 : 1 }
443
- return ret_val
441
+ ret_val
442
+ else
443
+ Error.throw_error(results['messages'][0]['code'])
444
444
  end
445
445
  end
446
446
 
@@ -459,8 +459,8 @@ module Trophonius
459
459
  elsif result['response']['scriptResult'] == '403'
460
460
  Error.throw_error(403)
461
461
  else
462
- ret_val = result['response']['scriptResult']
463
- return ret_val
462
+ result['response']['scriptResult']
463
+
464
464
  end
465
465
  end
466
466
 
@@ -474,39 +474,37 @@ module Trophonius
474
474
  uri = URI::RFC2396_Parser.new
475
475
  results = Request.retrieve_all(layout_name, sort)
476
476
  count = results['response']['scriptResult'].to_i
477
- unless @limit.empty? || @offset.empty?
478
- url =
479
- URI(
480
- uri.escape(
481
- "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
482
- Trophonius.config.database
483
- }/layouts/#{layout_name}/records?_offset=#{@offset}&_limit=#{@limit}"
484
- )
485
- )
486
- else
487
- url =
488
- URI(
489
- uri.escape(
490
- "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/#{
491
481
  Trophonius.config.database
492
482
  }/layouts/#{layout_name}/records?_limit=#{count == 0 ? 1_000_000 : count}"
493
- )
494
- )
495
- 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
496
494
  @limit = ''
497
495
  @offset = ''
498
496
  results = Request.make_request(url, "Bearer #{Request.get_token}", 'get', '{}')
499
- if results['messages'][0]['code'] != '0'
500
- Error.throw_error(results['messages'][0]['code'])
501
- else
497
+ if results['messages'][0]['code'] == '0'
502
498
  r_results = results['response']['data']
503
- ret_val = RecordSet.new(self.layout_name, self.non_modifiable_fields)
499
+ ret_val = RecordSet.new(layout_name, non_modifiable_fields)
504
500
  r_results.each do |r|
505
501
  hash = build_result(r)
506
502
  ret_val << hash
507
503
  end
508
504
  ret_val.result_count = count
509
- return ret_val
505
+ ret_val
506
+ else
507
+ Error.throw_error(results['messages'][0]['code'])
510
508
  end
511
509
  end
512
510
  end
@@ -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)
@@ -42,40 +46,22 @@ module Trophonius
42
46
  )
43
47
  )
44
48
 
45
- if model.translations.key?(relation[:foreign_key])
46
- foreign_key_field = model.translations[relation[:foreign_key]].to_s
47
- else
48
- foreign_key_field = relation[:foreign_key].to_s
49
- 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
50
54
 
51
- if pk_model.translations.key?(relation[:primary_key])
52
- primary_key_field = pk_model.translations[relation[:primary_key]].to_s
53
- else
54
- primary_key_field = relation[:primary_key].to_s
55
- 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
56
60
 
57
61
  body = { query: [{ foreign_key_field => self[primary_key_field].to_s }], limit: 100_000 }.to_json
58
62
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'post', body)
59
63
 
60
- if response['messages'][0]['code'] != '0'
61
- if response['messages'][0]['code'] == '101' || response['messages'][0]['code'] == '401'
62
- resp = RecordSet.new(layout, model.non_modifiable_fields)
63
- return resp
64
- else
65
- if response['messages'][0]['code'] == '102'
66
- results = Request.retrieve_first(layout)
67
- if results['messages'][0]['code'] != '0'
68
- Error.throw_error('102')
69
- else
70
- r_results = results['response']['data']
71
- ret_val = r_results.empty? ? Error.throw_error('102') : r_results[0]['fieldData']
72
- query_keys = [foreign_key_field]
73
- Error.throw_error('102', (query_keys - ret_val.keys.map(&:downcase)).flatten.join(', '), layout)
74
- end
75
- end
76
- Error.throw_error(response['messages'][0]['code'])
77
- end
78
- else
64
+ if response['messages'][0]['code'] == '0'
79
65
  r_results = response['response']['data']
80
66
  ret_val = RecordSet.new(layout, model.non_modifiable_fields)
81
67
  r_results.each do |r|
@@ -83,7 +69,23 @@ module Trophonius
83
69
  ret_val << hash
84
70
  end
85
71
  @response = ret_val
86
- 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'])
87
89
  end
88
90
  end
89
91
  elsif ActiveSupport::Inflector.constantize(ActiveSupport::Inflector.classify(ActiveSupport::Inflector.singularize(method))).respond_to?('first')
@@ -105,40 +107,22 @@ module Trophonius
105
107
  )
106
108
  )
107
109
 
108
- if fk_model.translations.key?(relation[:foreign_key])
109
- foreign_key_field = fk_model.translations[relation[:foreign_key]].to_s
110
- else
111
- foreign_key_field = relation[:foreign_key].to_s
112
- 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
113
115
 
114
- if pk_model.translations.key?(relation[:primary_key])
115
- primary_key_field = pk_model.translations[relation[:primary_key]].to_s
116
- else
117
- primary_key_field = relation[:primary_key].to_s
118
- 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
119
121
 
120
122
  body = { query: [{ primary_key_field => self[foreign_key_field].to_s }], limit: 1 }.to_json
121
123
 
122
124
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'post', body)
123
- if response['messages'][0]['code'] != '0'
124
- if response['messages'][0]['code'] == '101' || response['messages'][0]['code'] == '401'
125
- resp = RecordSet.new(layout, pk_model.non_modifiable_fields)
126
- return resp
127
- else
128
- if response['messages'][0]['code'] == '102'
129
- results = Request.retrieve_first(layout)
130
- if results['messages'][0]['code'] != '0'
131
- Error.throw_error('102')
132
- else
133
- r_results = results['response']['data']
134
- ret_val = r_results.empty? ? Error.throw_error('102') : r_results[0]['fieldData']
135
- query_keys = [primary_key_field]
136
- Error.throw_error('102', (query_keys - ret_val.keys.map(&:downcase)).flatten.join(', '), layout)
137
- end
138
- end
139
- Error.throw_error(response['messages'][0]['code'])
140
- end
141
- else
125
+ if response['messages'][0]['code'] == '0'
142
126
  r_results = response['response']['data']
143
127
  ret_val = RecordSet.new(layout, pk_model.non_modifiable_fields)
144
128
  r_results.each do |r|
@@ -146,7 +130,23 @@ module Trophonius
146
130
  ret_val << hash
147
131
  end
148
132
  @response = ret_val
149
- 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'])
150
150
  end
151
151
  end
152
152
  else
@@ -187,7 +187,7 @@ module Trophonius
187
187
  Error.throw_error(403)
188
188
  else
189
189
  ret_val = result['response']['scriptResult']
190
- return ret_val || true
190
+ ret_val || true
191
191
  end
192
192
  end
193
193
 
@@ -208,7 +208,7 @@ module Trophonius
208
208
  )
209
209
  body = "{\"fieldData\": #{modified_fields.to_json}}"
210
210
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'patch', body)
211
- 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'])
212
212
  end
213
213
 
214
214
  ##
@@ -227,17 +227,17 @@ module Trophonius
227
227
  )
228
228
  )
229
229
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'delete', '{}')
230
- 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'])
231
231
  end
232
232
 
233
233
  ##
234
234
  # Changes and saves the corresponding record in FileMaker
235
235
  # Throws a FileMaker error if save failed
236
236
  #
237
- # @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
238
238
  #
239
239
  # @return [True] if successful
240
- def update(fieldData)
240
+ def update(field_data, portal_data: {})
241
241
  uri = URI::RFC2396_Parser.new
242
242
  url =
243
243
  URI(
@@ -247,23 +247,47 @@ module Trophonius
247
247
  }/layouts/#{layout_name}/records/#{record_id}"
248
248
  )
249
249
  )
250
- fieldData.keys.each { |field| modifiable_fields[field] = fieldData[field] }
251
- 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}"
252
274
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'patch', body)
253
- if response['messages'][0]['code'] != '0'
275
+ puts "RESPONSE FROM FILEMAKER WAS: #{response}"
276
+ if response['messages'][0]['code'] == '0'
277
+ true
278
+ else
254
279
  if response['messages'][0]['code'] == '102'
255
280
  results = Request.retrieve_first(layout_name)
256
- if results['messages'][0]['code'] != '0'
257
- Error.throw_error('102')
258
- else
281
+ if results['messages'][0]['code'] == '0'
259
282
  r_results = results['response']['data']
260
- ret_val = r_results.empty? ? Error.throw_error('102') : r_results[0]['fieldData']
261
- 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')
262
288
  end
263
289
  end
264
290
  Error.throw_error(response['messages'][0]['code'])
265
- else
266
- true
267
291
  end
268
292
  end
269
293
 
@@ -276,7 +300,7 @@ module Trophonius
276
300
  # @param [Tempfile or File] file: File to upload
277
301
  #
278
302
  # @return [True] if successful
279
- def upload(container_name:, container_repetition: 1, file:)
303
+ def upload(container_name:, file:, container_repetition: 1)
280
304
  uri = URI::RFC2396_Parser.new
281
305
  url =
282
306
  URI(
@@ -288,7 +312,7 @@ module Trophonius
288
312
  )
289
313
 
290
314
  response = Request.upload_file_request(url, "Bearer #{Request.get_token}", file)
291
- 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'])
292
316
  end
293
317
  end
294
318
  end
@@ -139,25 +139,25 @@ module Trophonius
139
139
  # @return [JSON] The first 10000000 records from FileMaker
140
140
  def self.retrieve_all(layout_name, sort)
141
141
  uri = URI::RFC2396_Parser.new
142
- if !sort.empty?
143
- sort_order = sort.to_json.to_s
142
+ if sort.empty?
144
143
  url =
145
144
  URI(
146
145
  uri.escape(
147
146
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
148
147
  Trophonius.config.database
149
- }/layouts/#{layout_name}/records?_limit=10000000_sort=#{sort_order}#{
148
+ }/layouts/#{layout_name}/records?_limit=10000000#{
150
149
  Trophonius.config.count_result_script == '' ? '' : "&script=#{Trophonius.config.count_result_script}"
151
150
  }"
152
151
  )
153
152
  )
154
153
  else
154
+ sort_order = sort.to_json.to_s
155
155
  url =
156
156
  URI(
157
157
  uri.escape(
158
158
  "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
159
159
  Trophonius.config.database
160
- }/layouts/#{layout_name}/records?_limit=10000000#{
160
+ }/layouts/#{layout_name}/records?_limit=10000000&_sort=#{sort_order}#{
161
161
  Trophonius.config.count_result_script == '' ? '' : "&script=#{Trophonius.config.count_result_script}"
162
162
  }"
163
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 = {}
@@ -46,7 +47,7 @@ module Trophonius
46
47
  @query = {}
47
48
  close_connection(token)
48
49
 
49
- return ret_val
50
+ ret_val
50
51
  end
51
52
 
52
53
  def first
@@ -79,7 +80,7 @@ module Trophonius
79
80
  end
80
81
  close_connection(token)
81
82
 
82
- return ret_val
83
+ ret_val
83
84
  end
84
85
 
85
86
  def run_script(script:, scriptparameter:)
@@ -94,7 +95,7 @@ module Trophonius
94
95
  )
95
96
 
96
97
  token = setup_connection
97
- result = make_request(url, "#{token}", 'get', '{}')
98
+ result = make_request(url, token.to_s, 'get', '{}')
98
99
  ret_val = ''
99
100
 
100
101
  if result['messages'][0]['code'] != '0'
@@ -109,7 +110,7 @@ module Trophonius
109
110
 
110
111
  close_connection(token)
111
112
 
112
- return ret_val
113
+ ret_val
113
114
  end
114
115
 
115
116
  private
@@ -123,7 +124,7 @@ module Trophonius
123
124
  result['fieldData'].keys.each do |key|
124
125
  # unless key[/\s/] || key[/\W/]
125
126
  @translations.merge!(
126
- { "#{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 }
127
128
  )
128
129
  hash.send(:define_singleton_method, ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(key.to_s), separator: '_')) do
129
130
  hash[key]
@@ -152,7 +153,7 @@ module Trophonius
152
153
  hash[key]
153
154
  end
154
155
  end
155
- result['portalData'][key].each_with_index do |inner_hash|
156
+ result['portalData'][key].each do |inner_hash|
156
157
  inner_hash.keys.each do |inner_key|
157
158
  inner_method =
158
159
  ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(inner_key.gsub(/\w+::/, '').to_s), separator: '_')
@@ -164,7 +165,7 @@ module Trophonius
164
165
  end
165
166
  hash.merge!({ key => result['portalData'][key] })
166
167
  end
167
- return hash
168
+ hash
168
169
  end
169
170
 
170
171
  def make_request(url_param, token, method, body, params = '')
@@ -220,7 +221,7 @@ module Trophonius
220
221
  Error.throw_error('1631')
221
222
  end
222
223
  Error.throw_error(parsed['messages'][0]['code']) if parsed['messages'][0]['code'] != '0'
223
- return parsed['response']['token']
224
+ parsed['response']['token']
224
225
  end
225
226
 
226
227
  def close_connection(token)
@@ -247,7 +248,7 @@ module Trophonius
247
248
  Error.throw_error('1631')
248
249
  end
249
250
  Error.throw_error(parsed['messages'][0]['code']) if parsed['messages'][0]['code'] != '0'
250
- return true
251
+ true
251
252
  end
252
253
  end
253
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.4
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: