trophonius 1.0.10 → 1.1.0
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.rb +1 -0
- data/lib/trophonius_model.rb +81 -20
- data/lib/trophonius_query.rb +99 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 21d0e929509f72eea54b627ad8a221d067799a50a0018cabfe1822f81af59e98
|
4
|
+
data.tar.gz: 8f3b25aa6e74b6d8de7aa79df84eb309644fd5cffc5546e12286cbad6adfcb37
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2cd21fb288d2148692f5b4173fca976a65a4d4a1ab8768fd08c38aae7bb917b70941c3efd5e4d10e8dc1362d0519135d7811cbd81ac334dc970f55bf34e8f167
|
7
|
+
data.tar.gz: dad64504f016d6ffc426f38fcec744530810b9e4d8dfc33c725820f737ea33230fdaed536ebf2e9675c9f655f39c31772193c53df4273cc8d60f209e85723f1c
|
data/lib/trophonius.rb
CHANGED
data/lib/trophonius_model.rb
CHANGED
@@ -2,14 +2,21 @@ require "json"
|
|
2
2
|
require "trophonius_config"
|
3
3
|
require "trophonius_record"
|
4
4
|
require "trophonius_recordset"
|
5
|
+
require "trophonius_query"
|
5
6
|
require "trophonius_error"
|
6
7
|
|
7
8
|
module Trophonius
|
8
9
|
# This class will retrieve the records from the FileMaker database and build a RecordSet filled with Record objects. One Record object represents a record in FileMaker.
|
9
10
|
class Trophonius::Model
|
11
|
+
attr_reader :configuration
|
12
|
+
attr_accessor :current_query
|
13
|
+
|
14
|
+
def initialize(config:)
|
15
|
+
@configuration = config
|
16
|
+
end
|
10
17
|
|
11
18
|
##
|
12
|
-
# Sets up the configuration for the model.
|
19
|
+
# Sets up the configuration for the model.
|
13
20
|
#
|
14
21
|
# @param [Hash] configuration: the hash containing the config to setup the model correctly.
|
15
22
|
# configuration = {layout_name: "theFileMakerLayoutForThisModel", non_modifiable_fields: ["an", "array", "containing", "calculation_fields", "etc."]}
|
@@ -23,29 +30,83 @@ module Trophonius
|
|
23
30
|
|
24
31
|
##
|
25
32
|
# Returns the FileMaker layout this Model corresponds to
|
33
|
+
#
|
34
|
+
# @return [String] layout name of the model
|
26
35
|
def self.layout_name
|
27
36
|
@configuration.layout_name
|
28
37
|
end
|
29
|
-
|
38
|
+
|
30
39
|
##
|
31
40
|
# Returns the fields that FileMaker won't allow us to modify
|
41
|
+
#
|
42
|
+
# @return [[Array]] fields that FileMaker won't allow us to modify
|
32
43
|
def self.non_modifiable_fields
|
33
44
|
@configuration.non_modifiable_fields
|
34
45
|
end
|
35
46
|
|
36
47
|
##
|
37
48
|
# Returns the translations of the fields
|
49
|
+
#
|
50
|
+
# @return [Hash] translations of the fields Rails -> FileMaker
|
38
51
|
def self.translations
|
39
52
|
@configuration.translations
|
40
53
|
end
|
41
|
-
|
54
|
+
|
55
|
+
##
|
56
|
+
# creates Rails -> FileMaker field translations by requesting the first record
|
57
|
+
#
|
58
|
+
# @return [Hash] translations of the fields Rails -> FileMaker
|
42
59
|
def self.create_translations
|
43
60
|
self.first
|
61
|
+
@configuration.translations
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.method_missing(method, *args, &block)
|
65
|
+
new_instance = Trophonius::Model.new(config: @configuration)
|
66
|
+
new_instance.current_query = Trophonius::Query.new(trophonius_model: self)
|
67
|
+
# new_instance.current_query.build_query[0].merge!(fieldData)
|
68
|
+
args << new_instance
|
69
|
+
if new_instance.current_query.respond_to?(method)
|
70
|
+
new_instance.current_query.send(method, args)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def method_missing(method, *args, &block)
|
75
|
+
if @current_query.respond_to?(method)
|
76
|
+
args << self
|
77
|
+
@current_query.send(method, args)
|
78
|
+
elsif @current_query.response.respond_to?(method)
|
79
|
+
@current_query.run_query(method, *args, &block)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
##
|
84
|
+
# Finds all records in FileMaker corresponding to the requested query
|
85
|
+
# @param [Hash] fieldData: the data to find
|
86
|
+
#
|
87
|
+
# @return [Trophonius::Model] new instance of the model
|
88
|
+
def self.where(fieldData)
|
89
|
+
new_instance = Trophonius::Model.new(config: @configuration)
|
90
|
+
new_instance.current_query = Trophonius::Query.new(trophonius_model: self)
|
91
|
+
new_instance.current_query.build_query[0].merge!(fieldData)
|
92
|
+
new_instance
|
93
|
+
end
|
94
|
+
|
95
|
+
##
|
96
|
+
# Finds all records in FileMaker corresponding to the requested query
|
97
|
+
# This method is created to enable where chaining
|
98
|
+
#
|
99
|
+
# @param [Hash] fieldData: the data to find
|
100
|
+
#
|
101
|
+
# @return [Trophonius::Model] new instance of the model
|
102
|
+
def where(fieldData)
|
103
|
+
@current_query.build_query[0].merge!(fieldData)
|
104
|
+
self
|
44
105
|
end
|
45
106
|
|
46
107
|
##
|
47
108
|
# Creates and saves a record in FileMaker
|
48
|
-
#
|
109
|
+
#
|
49
110
|
# @param [Hash] fieldData: the fields to fill with the data
|
50
111
|
#
|
51
112
|
# @return [Record] the created record
|
@@ -76,16 +137,16 @@ module Trophonius
|
|
76
137
|
return ret_val
|
77
138
|
end
|
78
139
|
end
|
79
|
-
|
140
|
+
|
80
141
|
##
|
81
|
-
# Finds and returns
|
82
|
-
#
|
142
|
+
# Finds and returns the first Record containing fitting the find request
|
143
|
+
#
|
83
144
|
# @param [Hash] fieldData: the data to find
|
84
145
|
#
|
85
|
-
# @return [
|
86
|
-
# Model.
|
87
|
-
def self.
|
88
|
-
url = URI("http#{Trophonius.config.ssl == true ? "s" : ""}://#{Trophonius.config.host}/fmi/data/v1/databases/#{Trophonius.config.database}/layouts/#{self.layout_name}/_find")
|
146
|
+
# @return [Record] a Record object that correspond to FileMaker record fitting the find request
|
147
|
+
# Model.find_by(fieldOne: "Data")
|
148
|
+
def self.find_by(fieldData)
|
149
|
+
url = URI("http#{Trophonius.config.ssl == true ? "s" : ""}://#{Trophonius.config.host}/fmi/data/v1/databases/#{Trophonius.config.database}/layouts/#{self.layout_name}/_find?_limit=1")
|
89
150
|
new_field_data = {}
|
90
151
|
if @configuration.translations.keys.empty?
|
91
152
|
create_translations
|
@@ -109,15 +170,15 @@ module Trophonius
|
|
109
170
|
hash = build_result(r)
|
110
171
|
ret_val << hash
|
111
172
|
end
|
112
|
-
return ret_val
|
173
|
+
return ret_val.first
|
113
174
|
end
|
114
175
|
end
|
115
176
|
|
116
177
|
##
|
117
178
|
# Finds and returns a Record corresponding to the record_id
|
118
|
-
#
|
179
|
+
#
|
119
180
|
# @param [Integer] record_id: the record id to retrieve from FileMaker
|
120
|
-
#
|
181
|
+
#
|
121
182
|
# @return [Record] the record
|
122
183
|
def self.find(record_id)
|
123
184
|
url = URI("http#{Trophonius.config.ssl == true ? "s" : ""}://#{Trophonius.config.host}/fmi/data/v1/databases/#{Trophonius.config.database}/layouts/#{layout_name}/records/#{record_id}")
|
@@ -135,10 +196,10 @@ module Trophonius
|
|
135
196
|
|
136
197
|
##
|
137
198
|
# Deletes a record from FileMaker
|
138
|
-
#
|
199
|
+
#
|
139
200
|
# @param [Integer] record_id: the record id to retrieve from FileMaker
|
140
201
|
#
|
141
|
-
# @return [Boolean] True if the delete was successful
|
202
|
+
# @return [Boolean] True if the delete was successful
|
142
203
|
def self.delete(record_id)
|
143
204
|
url = URI("http#{Trophonius.config.ssl == true ? "s" : ""}://#{Trophonius.config.host}/fmi/data/v1/databases/#{Trophonius.config.database}/layouts/#{layout_name}/records/#{record_id}")
|
144
205
|
response = Request.make_request(url, "Bearer #{Request.get_token}", "delete", "{}")
|
@@ -151,7 +212,7 @@ module Trophonius
|
|
151
212
|
|
152
213
|
##
|
153
214
|
# Edits a record in FileMaker
|
154
|
-
#
|
215
|
+
#
|
155
216
|
# @param [Integer] record_id: the record id to edit in FileMaker
|
156
217
|
#
|
157
218
|
# @param [Hash] fieldData: A hash containing the fields to edit and the new data to fill them with
|
@@ -181,7 +242,7 @@ module Trophonius
|
|
181
242
|
|
182
243
|
##
|
183
244
|
# Builds the resulting Record
|
184
|
-
#
|
245
|
+
#
|
185
246
|
# @param [JSON] result: the HTTP result from FileMaker
|
186
247
|
#
|
187
248
|
# @return [Record] A Record with singleton_methods for the fields where possible
|
@@ -250,7 +311,7 @@ module Trophonius
|
|
250
311
|
##
|
251
312
|
# Runs a FileMaker script from the context of the Model.
|
252
313
|
#
|
253
|
-
# @param [String] script: the FileMaker script to run
|
314
|
+
# @param [String] script: the FileMaker script to run
|
254
315
|
#
|
255
316
|
# @param [String] scriptparameter: the parameter required by the FileMaker script
|
256
317
|
#
|
@@ -270,7 +331,7 @@ module Trophonius
|
|
270
331
|
##
|
271
332
|
# Retrieve the first 10000000 records from FileMaker from the context of the Model.
|
272
333
|
#
|
273
|
-
# @param [Hash] sort: a hash containing the fields to sort by and the direction to sort in (optional)
|
334
|
+
# @param [Hash] sort: a hash containing the fields to sort by and the direction to sort in (optional)
|
274
335
|
#
|
275
336
|
# @return [RecordSet]: a RecordSet containing all the Record objects that correspond to the FileMaker records.
|
276
337
|
def self.all(sort: {})
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require "json"
|
2
|
+
require "trophonius_config"
|
3
|
+
require "trophonius_record"
|
4
|
+
require "trophonius_recordset"
|
5
|
+
require "trophonius_error"
|
6
|
+
|
7
|
+
module Trophonius
|
8
|
+
class Trophonius::Query
|
9
|
+
attr_reader :response
|
10
|
+
|
11
|
+
##
|
12
|
+
# Creates a new instance of the Trophonius::Query class
|
13
|
+
#
|
14
|
+
# @param [Trophonius::Model] base model for the new query
|
15
|
+
# @return [Trophonius::Query] new instance of Trophonius::Query
|
16
|
+
def initialize(trophonius_model:)
|
17
|
+
@response = RecordSet.new(trophonius_model.layout_name, trophonius_model.non_modifiable_fields)
|
18
|
+
@trophonius_model = trophonius_model
|
19
|
+
end
|
20
|
+
|
21
|
+
##
|
22
|
+
# Returns the current query, creates an empty query if no current query exists
|
23
|
+
#
|
24
|
+
# @return [Array[Hash]] array representing the FileMaker find request
|
25
|
+
def build_query
|
26
|
+
@current_query ||= [{}]
|
27
|
+
end
|
28
|
+
|
29
|
+
def inspect
|
30
|
+
@current_query
|
31
|
+
end
|
32
|
+
|
33
|
+
##
|
34
|
+
# Adds a find request to the original query, resulting in an "Or" find-request for FileMaker
|
35
|
+
#
|
36
|
+
# @param [args] arguments containing a Hash containing the FileMaker find request, and the base model object for the query
|
37
|
+
# @return [Trophonius::Model] updated base model
|
38
|
+
def or(args)
|
39
|
+
args[1].current_query.build_query << args[0]
|
40
|
+
args[1]
|
41
|
+
end
|
42
|
+
|
43
|
+
##
|
44
|
+
# Adds an omit request to the original query, resulting in an "omit" find for FileMaker
|
45
|
+
#
|
46
|
+
# @param [args] arguments containing a Hash containing the FileMaker omit request, and the base model object for the query
|
47
|
+
# @return [Trophonius::Model] updated base model
|
48
|
+
def not(args)
|
49
|
+
args[1].current_query.build_query << args[0].merge!({omit: true})
|
50
|
+
args[1]
|
51
|
+
end
|
52
|
+
|
53
|
+
##
|
54
|
+
# Performs the query in FileMaker
|
55
|
+
#
|
56
|
+
# @param [method] original called method, will be called on the response
|
57
|
+
# @param [*args] original arguments, will be passed to the method call
|
58
|
+
# @param [&block] original block, will be passed to the method call
|
59
|
+
#
|
60
|
+
# @return Response of the called method
|
61
|
+
def run_query(method, *args, &block)
|
62
|
+
url = URI("http#{Trophonius.config.ssl == true ? "s" : ""}://#{Trophonius.config.host}/fmi/data/v1/databases/#{Trophonius.config.database}/layouts/#{@trophonius_model.layout_name}/_find")
|
63
|
+
new_field_data = @current_query.map { |q| {} }
|
64
|
+
if @trophonius_model.translations.keys.empty?
|
65
|
+
@trophonius_model.create_translations
|
66
|
+
end
|
67
|
+
@current_query.each_with_index do |query, index|
|
68
|
+
query.keys.each do |k|
|
69
|
+
if @trophonius_model.translations.keys.include?(k.to_s)
|
70
|
+
new_field_data[index].merge!({"#{@trophonius_model.translations[k.to_s]}" => query[k].to_s})
|
71
|
+
else
|
72
|
+
new_field_data[index].merge!({"#{k}" => query[k].to_s})
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
body = {query: new_field_data, limit:"100000"}.to_json
|
77
|
+
response = Request.make_request(url, "Bearer #{Request.get_token}", "post", body)
|
78
|
+
if response["messages"][0]["code"] != "0"
|
79
|
+
if response["messages"][0]["code"] == "101" || response["messages"][0]["code"] == "401"
|
80
|
+
RecordSet.new(@trophonius_model.layout_name, @trophonius_model.non_modifiable_fields).send(method, *args, &block)
|
81
|
+
return
|
82
|
+
else
|
83
|
+
Error.throw_error(response["messages"][0]["code"])
|
84
|
+
end
|
85
|
+
else
|
86
|
+
r_results = response["response"]["data"]
|
87
|
+
ret_val = RecordSet.new(@trophonius_model.layout_name, @trophonius_model.non_modifiable_fields)
|
88
|
+
r_results.each do |r|
|
89
|
+
hash = @trophonius_model.build_result(r)
|
90
|
+
ret_val << hash
|
91
|
+
end
|
92
|
+
@response = ret_val
|
93
|
+
return @response.send(method, *args, &block)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
alias_method :to_s, :inspect
|
98
|
+
end
|
99
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trophonius
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
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-
|
11
|
+
date: 2019-12-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: typhoeus
|
@@ -64,6 +64,7 @@ files:
|
|
64
64
|
- lib/trophonius_connection.rb
|
65
65
|
- lib/trophonius_error.rb
|
66
66
|
- lib/trophonius_model.rb
|
67
|
+
- lib/trophonius_query.rb
|
67
68
|
- lib/trophonius_record.rb
|
68
69
|
- lib/trophonius_recordset.rb
|
69
70
|
- lib/trophonius_request.rb
|