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 +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:
|