trophonius 1.2.7.1 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7b4fa3606dce996196ab6530704a27b93fbbf3e2134add785319b7b7921696cb
4
- data.tar.gz: 16042983fe5510c9a29986aab3b77018033063980f1191d5fbf4234aa6bd229c
3
+ metadata.gz: 4cf39904e7500cbacbd16e8f3a78a1df4efa2ded1d64b4c6703c2a1a28c62c9c
4
+ data.tar.gz: d14b38291d4f6a49b3cd825fabdc82ce676c14d27afc738c80c42c6f61ee7144
5
5
  SHA512:
6
- metadata.gz: 36fa65b8130dfe29303627c0727fb8504e832ac50e7b5d74f574f810efeaf9842a55898f68595ba7e2931afefabc4db0f98ec12e0d7aa8d790cde86672b1a614
7
- data.tar.gz: ebdd54e6f7486fedb7cb03cdf87cf6d1df28ce7c06ab6bc3afaa8320bb9a6f94244cb68a59a158bf4059a578795c1cc932092b7e6c40f5dabc1ca7d71bbffbea
6
+ metadata.gz: 9508bca471f2602c71c1d8be927ed848e19d5d937f66a90bb2b71eb8d34bb59f904d3dbc1ffabaa1053c244e29d89ec25e333d83a01c9b6716f91871fee86732
7
+ data.tar.gz: 2a98ea6373a6c7ac63ba72b0f13a3852ebbaffbbfca9bab5f8e6c4aabd40e534bbc4ac05249bdd5f0c183674444977c5a2e8853e4d8bfd2ec6dd8bcb5d27afac
@@ -0,0 +1,30 @@
1
+ require 'rails'
2
+
3
+ module Trophonius
4
+ class InstallGenerator < ::Rails::Generators::Base
5
+ namespace 'trophonius'
6
+
7
+ class_option :host, type: :string, default: 'location_to.your_filemakerserver.com'
8
+ class_option :database, type: :string, default: 'Name_of_your_database'
9
+
10
+ source_root File.expand_path('../templates', __FILE__)
11
+
12
+ desc 'add the config file'
13
+
14
+ def copy_initializer_file
15
+ @host = options['host']
16
+ @database = options['database']
17
+ create_file 'config/initializers/trophonius.rb',
18
+ "Trophonius.configure do |config|
19
+ config.host = '#{@host}'
20
+ config.database = '#{@database}'
21
+ config.username = Rails.application.credentials.dig(:username) # (requires >= Rails 5.2) otherwise use old secrets
22
+ config.password = Rails.application.credentials.dig(:password) # (requires >= Rails 5.2) otherwise use old secrets
23
+ config.redis_connection = false # default false, true if you want to store the token in redis
24
+ config.ssl = true # or false depending on whether https or http should be used
25
+ # USE THE NEXT OPTION WITH CAUTION
26
+ config.local_network = false # if true the ssl certificate will not be verified to allow for self-signed certificates
27
+ end"
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,23 @@
1
+ require 'rails'
2
+
3
+ module Trophonius
4
+ class ModelGenerator < ::Rails::Generators::Base
5
+ namespace 'trophonius_model'
6
+
7
+ class_option :model, type: :string, default: 'MyModel'
8
+ class_option :layout, type: :string, default: 'MyModelsLayout'
9
+
10
+ source_root File.expand_path('../templates', __FILE__)
11
+
12
+ desc 'add the config file'
13
+
14
+ def copy_model_file
15
+ @model = options['model']
16
+ @layout = options['layout']
17
+ create_file "app/models/#{@model.downcase}.rb",
18
+ "class #{@model.humanize} < Trophonius::Model
19
+ config layout_name: '#{@layout}'
20
+ end"
21
+ end
22
+ end
23
+ end
@@ -175,7 +175,7 @@ module Trophonius
175
175
  #
176
176
  # @return [Record] the created record
177
177
  # Model.create(fieldOne: "Data")
178
- def self.create(fieldData)
178
+ def self.create(fieldData, portalData: {})
179
179
  url =
180
180
  URI(
181
181
  URI.escape(
@@ -193,7 +193,26 @@ module Trophonius
193
193
  new_field_data.merge!({ "#{k}" => fieldData[k] })
194
194
  end
195
195
  end
196
- body = "{\"fieldData\": #{new_field_data.to_json}}"
196
+
197
+ new_portal_data = {}
198
+ portalData.each do |portal_name, portal_values|
199
+ new_portal_data.merge!(
200
+ portal_name =>
201
+ portal_values.map do |record|
202
+ record.inject({}) do |new_hash, (key, value)|
203
+ new_hash["#{portal_name}::#{key}"] = value
204
+ new_hash
205
+ end
206
+ end
207
+ )
208
+ end
209
+
210
+ body =
211
+ if new_portal_data != {}
212
+ "{\"fieldData\": #{new_field_data.to_json}, \"portalData\": #{new_portal_data.to_json}}"
213
+ else
214
+ "{\"fieldData\": #{new_field_data.to_json} }"
215
+ end
197
216
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'post', body)
198
217
  if response['messages'][0]['code'] != '0'
199
218
  if response['messages'][0]['code'] == '102'
@@ -42,6 +42,24 @@ module Trophonius
42
42
  @current_query
43
43
  end
44
44
 
45
+ ##
46
+ # Returns the current portal limits
47
+ #
48
+ # @return [Hash] Hash representing the portal limits
49
+ def build_portal_limits()
50
+ @portal_limits ||= {}
51
+ end
52
+
53
+ ##
54
+ # Adds a portal limit to the request
55
+ #
56
+ # @param [args] arguments containing a Hash with the format {portalName: requiredLimit}
57
+ # @return [Trophonius::Model] updated base model
58
+ def set_portal_limits(args)
59
+ args[1].current_query.build_portal_limits.merge!(args[0])
60
+ args[1]
61
+ end
62
+
45
63
  ##
46
64
  # Adds a find request to the original query, resulting in an "Or" find-request for FileMaker
47
65
  #
@@ -107,6 +125,7 @@ module Trophonius
107
125
  }/layouts/#{@trophonius_model.layout_name}/_find"
108
126
  )
109
127
  )
128
+
110
129
  new_field_data = @current_query.map { |_q| {} }
111
130
 
112
131
  @trophonius_model.create_translations if @trophonius_model.translations.keys.empty?
@@ -120,21 +139,23 @@ module Trophonius
120
139
  end
121
140
  end
122
141
  if @offset.nil? || @limit.nil? || @offset == '' || @limit == '' || @offset == 0 || @limit == 0
123
- body =
124
- if @current_sort.nil?
125
- { query: new_field_data, limit: '100000' }.to_json
126
- else
127
- { query: new_field_data, sort: @current_sort, limit: '100000' }.to_json
128
- end
142
+ body = @current_sort.nil? ? { query: new_field_data, limit: '100000' } : { query: new_field_data, sort: @current_sort, limit: '100000' }
129
143
  else
130
144
  body =
131
145
  if @current_sort.nil?
132
- { query: new_field_data, limit: @limit.to_s, offset: @offset.to_s }.to_json
146
+ { query: new_field_data, limit: @limit.to_s, offset: @offset.to_s }
133
147
  else
134
- { query: new_field_data, sort: @current_sort, limit: @limit.to_s, offset: @offset.to_s }.to_json
148
+ { query: new_field_data, sort: @current_sort, limit: @limit.to_s, offset: @offset.to_s }
135
149
  end
136
150
  end
137
151
 
152
+ if @portal_limits
153
+ portal_hash = { portal: @portal_limits.map { |portal_name, limit| "#{portal_name}" } }
154
+ body.merge!(portal_hash)
155
+ @portal_limits.each { |portal_name, limit| body.merge!({ "limit.#{portal_name}" => limit.to_s }) }
156
+ end
157
+
158
+ body = body.to_json
138
159
  response = Request.make_request(url, "Bearer #{Request.get_token}", 'post', body)
139
160
  if response['messages'][0]['code'] != '0'
140
161
  if response['messages'][0]['code'] == '101' || response['messages'][0]['code'] == '401'
@@ -152,6 +152,36 @@ module Trophonius
152
152
  end
153
153
  end
154
154
 
155
+ ##
156
+ # Runs a FileMaker script from the context of the Model.
157
+ #
158
+ # @param [String] script: the FileMaker script to run
159
+ #
160
+ # @param [String] scriptparameter: the parameter required by the FileMaker script
161
+ #
162
+ # @return [String]: string representing the script result returned by FileMaker
163
+ def run_script(script: '', scriptparameter: '')
164
+ url =
165
+ URI(
166
+ URI.escape(
167
+ "http#{Trophonius.config.ssl == true ? 's' : ''}://#{Trophonius.config.host}/fmi/data/v1/databases/#{
168
+ Trophonius.config.database
169
+ }/layouts/#{layout_name}/records/#{record_id}?script=#{script}&script.param=#{scriptparameter}"
170
+ )
171
+ )
172
+
173
+ result = Request.make_request(url, "Bearer #{Request.get_token}", 'get', '{}')
174
+
175
+ if result['messages'][0]['code'] != '0'
176
+ Error.throw_error(result['messages'][0]['code'])
177
+ elsif result['response']['scriptResult'] == '403'
178
+ Error.throw_error(403)
179
+ else
180
+ ret_val = result['response']['scriptResult']
181
+ return ret_val || true
182
+ end
183
+ end
184
+
155
185
  ##
156
186
  # Saves the last changes made to the Record to FileMaker.
157
187
  # Throws a FileMaker error if save failed
@@ -30,8 +30,10 @@ module Trophonius
30
30
 
31
31
  r_results = response['response']['data']
32
32
  if response['messages'][0]['code'] != '0' && response['messages'][0]['code'] != '401'
33
+ close_connection(token)
33
34
  Error.throw_error(response['messages'][0]['code'])
34
35
  elsif response['messages'][0]['code'] == '401'
36
+ close_connection(token)
35
37
  return RecordSet.new(@config[:layout_name], @config[:non_modifiable_fields])
36
38
  else
37
39
  ret_val = RecordSet.new(@config[:layout_name], @config[:non_modifiable_fields])
@@ -46,6 +48,67 @@ module Trophonius
46
48
  return ret_val
47
49
  end
48
50
 
51
+ def first
52
+ url =
53
+ URI(
54
+ URI.escape(
55
+ "http#{@config[:ssl] == true ? 's' : ''}://#{@config[:host]}/fmi/data/v1/databases/#{@config[:database]}/layouts/#{
56
+ @config[:layout_name]
57
+ }/records?_limit=1"
58
+ )
59
+ )
60
+
61
+ token = setup_connection
62
+ response = make_request(url, token, 'get', @query.to_json)
63
+
64
+ r_results = response['response']['data']
65
+ if response['messages'][0]['code'] != '0' && response['messages'][0]['code'] != '401'
66
+ close_connection(token)
67
+ Error.throw_error(response['messages'][0]['code'])
68
+ elsif response['messages'][0]['code'] == '401'
69
+ close_connection(token)
70
+ return RecordSet.new(@config[:layout_name], @config[:non_modifiable_fields])
71
+ else
72
+ ret_val = RecordSet.new(@config[:layout_name], @config[:non_modifiable_fields])
73
+ r_results.each do |r|
74
+ hash = build_result(r)
75
+ ret_val << hash
76
+ end
77
+ end
78
+ close_connection(token)
79
+
80
+ return ret_val
81
+ end
82
+
83
+ def run_script(script:, scriptparameter:)
84
+ url =
85
+ URI(
86
+ URI.escape(
87
+ "http#{@config[:ssl] == true ? 's' : ''}://#{@config[:host]}/fmi/data/v1/databases/#{@config[:database]}/layouts/#{
88
+ @config[:layout_name]
89
+ }/records?_limit=1&script=#{script}&script.param=#{scriptparameter}"
90
+ )
91
+ )
92
+
93
+ token = setup_connection
94
+ result = make_request(url, "Bearer #{token}", 'get', '{}')
95
+ ret_val = ''
96
+
97
+ if result['messages'][0]['code'] != '0'
98
+ close_connection(token)
99
+ Error.throw_error(result['messages'][0]['code'])
100
+ elsif result['response']['scriptResult'] == '403'
101
+ close_connection(token)
102
+ Error.throw_error(403)
103
+ else
104
+ ret_val = result['response']['scriptResult']
105
+ end
106
+
107
+ close_connection(token)
108
+
109
+ return ret_val
110
+ end
111
+
49
112
  private
50
113
 
51
114
  def build_result(result)
@@ -118,6 +181,7 @@ module Trophonius
118
181
  begin
119
182
  JSON.parse(temp.response_body)
120
183
  rescue Exception => e
184
+ close_connection(token)
121
185
  Error.throw_error('1631')
122
186
  end
123
187
  end
metadata CHANGED
@@ -1,11 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trophonius
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.7.1
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kempen Automatisering
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2019-12-16 00:00:00.000000000 Z
@@ -54,11 +54,13 @@ dependencies:
54
54
  version: '5.0'
55
55
  description: A lightweight, easy to use link between Ruby (on Rails) and FileMaker
56
56
  using the FileMaker Data-API.
57
- email:
57
+ email:
58
58
  executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
+ - lib/generators/trophonius_generator.rb
63
+ - lib/generators/trophonius_model_generator.rb
62
64
  - lib/trophonius.rb
63
65
  - lib/trophonius_config.rb
64
66
  - lib/trophonius_connection.rb
@@ -77,7 +79,7 @@ homepage: https://github.com/Willem-Jan/Trophonius
77
79
  licenses:
78
80
  - MIT
79
81
  metadata: {}
80
- post_install_message:
82
+ post_install_message:
81
83
  rdoc_options: []
82
84
  require_paths:
83
85
  - lib
@@ -93,7 +95,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
93
95
  version: '0'
94
96
  requirements: []
95
97
  rubygems_version: 3.0.3
96
- signing_key:
98
+ signing_key:
97
99
  specification_version: 4
98
100
  summary: Link between Ruby (on Rails) and FileMaker.
99
101
  test_files: []