trophonius 1.4.3.4 → 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: 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: