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 +4 -4
- data/lib/trophonius_connection.rb +14 -7
- data/lib/trophonius_error.rb +46 -26
- data/lib/trophonius_model.rb +87 -89
- data/lib/trophonius_record.rb +102 -78
- data/lib/trophonius_request.rb +4 -4
- data/lib/trophonius_single.rb +10 -9
- metadata +12 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1bf03ee96abeebc7cf0bd49e76e0a678f9b083d53b08e1f524406ddfe6d5334d
|
4
|
+
data.tar.gz: 9ffce8e42068d7312fa7aa2be4f55451456a97aa2f99cca90d5e18374721e5cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
17
|
-
|
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(
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
167
|
+
false
|
161
168
|
end
|
162
169
|
end
|
163
170
|
|
data/lib/trophonius_error.rb
CHANGED
@@ -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
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
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
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
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
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
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
|
-
|
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"
|
data/lib/trophonius_model.rb
CHANGED
@@ -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
|
-
{
|
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
|
-
|
123
|
+
first
|
124
124
|
end
|
125
125
|
@configuration.translations
|
126
126
|
end
|
127
127
|
|
128
|
-
def self.method_missing(method, *args
|
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
|
-
|
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(
|
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!(
|
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(
|
167
|
-
@current_query.build_query[0].merge!(
|
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(
|
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
|
-
|
190
|
+
field_data.keys.each do |k|
|
191
191
|
if @configuration.translations.keys.include?(k.to_s)
|
192
|
-
new_field_data.merge!({
|
192
|
+
new_field_data.merge!({ @configuration.translations[k.to_s].to_s => field_data[k] })
|
193
193
|
else
|
194
|
-
new_field_data.merge!({
|
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.
|
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']
|
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
|
-
|
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(
|
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/#{
|
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
|
-
|
263
|
+
field_data.keys.each do |k|
|
265
264
|
if @configuration.translations.keys.include?(k.to_s)
|
266
|
-
new_field_data.merge!({
|
265
|
+
new_field_data.merge!({ @configuration.translations[k.to_s].to_s => field_data[k] })
|
267
266
|
else
|
268
|
-
new_field_data.merge!({
|
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']
|
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(
|
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
|
-
|
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']
|
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
|
-
|
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']
|
334
|
-
|
333
|
+
if response['messages'][0]['code'] == '0'
|
334
|
+
true
|
335
335
|
else
|
336
|
-
|
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,
|
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
|
-
|
360
|
+
field_data.keys.each do |k|
|
361
361
|
if @configuration.translations.keys.include?(k.to_s)
|
362
|
-
new_field_data.merge!({
|
362
|
+
new_field_data.merge!({ @configuration.translations[k.to_s].to_s => field_data[k] })
|
363
363
|
else
|
364
|
-
new_field_data.merge!({
|
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']
|
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
|
-
{
|
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].
|
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
|
-
|
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']
|
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
|
-
|
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
|
-
|
463
|
-
|
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
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
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
|
-
|
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']
|
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(
|
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
|
-
|
505
|
+
ret_val
|
506
|
+
else
|
507
|
+
Error.throw_error(results['messages'][0]['code'])
|
510
508
|
end
|
511
509
|
end
|
512
510
|
end
|
data/lib/trophonius_record.rb
CHANGED
@@ -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
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
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
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
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']
|
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
|
-
|
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
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
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
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
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']
|
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
|
-
|
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
|
-
|
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']
|
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']
|
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]
|
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(
|
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
|
-
|
251
|
-
|
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
|
-
|
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']
|
257
|
-
Error.throw_error('102')
|
258
|
-
else
|
281
|
+
if results['messages'][0]['code'] == '0'
|
259
282
|
r_results = results['response']['data']
|
260
|
-
|
261
|
-
|
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
|
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']
|
315
|
+
response['messages'][0]['code'] == '0' ? true : Error.throw_error(response['messages'][0]['code'])
|
292
316
|
end
|
293
317
|
end
|
294
318
|
end
|
data/lib/trophonius_request.rb
CHANGED
@@ -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
|
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=
|
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
|
)
|
data/lib/trophonius_single.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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,
|
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
|
-
|
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
|
-
{
|
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].
|
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
|
-
|
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
|
-
|
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
|
-
|
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.
|
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:
|
11
|
+
date: 2022-06-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: redis
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
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: '
|
26
|
+
version: '4.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: typhoeus
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
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: '
|
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: '
|
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: '
|
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:
|