class Trophonius::Single
Attributes
query[R]
Public Class Methods
new(config:)
click to toggle source
# File lib/trophonius_single.rb, line 10 def initialize(config:) @config = config @query = {} @translations = {} @all_fields = {} end
Public Instance Methods
first()
click to toggle source
# File lib/trophonius_single.rb, line 51 def first url = URI( URI.escape( "http#{@config[:ssl] == true ? 's' : ''}://#{@config[:host]}/fmi/data/v1/databases/#{@config[:database]}/layouts/#{ @config[:layout_name] }/records?_limit=1" ) ) token = setup_connection response = make_request(url, token, 'get', @query.to_json) r_results = response['response']['data'] if response['messages'][0]['code'] != '0' && response['messages'][0]['code'] != '401' close_connection(token) Error.throw_error(response['messages'][0]['code']) elsif response['messages'][0]['code'] == '401' close_connection(token) return RecordSet.new(@config[:layout_name], @config[:non_modifiable_fields]) else ret_val = RecordSet.new(@config[:layout_name], @config[:non_modifiable_fields]) r_results.each do |r| hash = build_result(r) ret_val << hash end end close_connection(token) return ret_val end
run_script(script:, scriptparameter:)
click to toggle source
# File lib/trophonius_single.rb, line 83 def run_script(script:, scriptparameter:) url = URI( URI.escape( "http#{@config[:ssl] == true ? 's' : ''}://#{@config[:host]}/fmi/data/v1/databases/#{@config[:database]}/layouts/#{ @config[:layout_name] }/records?_limit=1&script=#{script}&script.param=#{scriptparameter}" ) ) token = setup_connection result = make_request(url, "Bearer #{token}", 'get', '{}') ret_val = '' if result['messages'][0]['code'] != '0' close_connection(token) Error.throw_error(result['messages'][0]['code']) elsif result['response']['scriptResult'] == '403' close_connection(token) Error.throw_error(403) else ret_val = result['response']['scriptResult'] end close_connection(token) return ret_val end
where(fieldData)
click to toggle source
# File lib/trophonius_single.rb, line 17 def where(fieldData) url = URI( URI.escape( "http#{@config[:ssl] == true ? 's' : ''}://#{@config[:host]}/fmi/data/v1/databases/#{@config[:database]}/layouts/#{ @config[:layout_name] }/_find" ) ) @query.merge!(query: [fieldData]) @query.merge!(limit: '10000000') token = setup_connection response = make_request(url, token, 'post', @query.to_json) r_results = response['response']['data'] if response['messages'][0]['code'] != '0' && response['messages'][0]['code'] != '401' close_connection(token) Error.throw_error(response['messages'][0]['code']) elsif response['messages'][0]['code'] == '401' close_connection(token) return RecordSet.new(@config[:layout_name], @config[:non_modifiable_fields]) else ret_val = RecordSet.new(@config[:layout_name], @config[:non_modifiable_fields]) r_results.each do |r| hash = build_result(r) ret_val << hash end end @query = {} close_connection(token) return ret_val end
Private Instance Methods
build_result(result)
click to toggle source
# File lib/trophonius_single.rb, line 114 def build_result(result) hash = Trophonius::Record.new hash.record_id = result['recordId'] hash.layout_name = @config[:layout_name] hash.model_name = 'Single' result['fieldData'].keys.each do |key| # unless key[/\s/] || key[/\W/] @translations.merge!( { "#{ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(key.to_s), separator: '_').downcase}" => "#{key}" } ) hash.send(:define_singleton_method, ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(key.to_s), separator: '_')) do hash[key] end unless @config[:non_modifiable_fields]&.include?(key) @all_fields.merge!( ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(key.to_s), separator: '_').downcase => ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(key.to_s), separator: '_') ) hash.send( :define_singleton_method, "#{ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(key.to_s), separator: '_')}=" ) do |new_val| hash[key] = new_val hash.modifiable_fields[key] = new_val hash.modified_fields[key] = new_val end end # end hash.merge!({ key => result['fieldData'][key] }) hash.modifiable_fields.merge!({ key => result['fieldData'][key] }) unless @config[:non_modifiable_fields]&.include?(key) end result['portalData'].keys.each do |key| unless key[/\s/] || key[/\W/] hash.send(:define_singleton_method, ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(key.to_s), separator: '_')) do hash[key] end end result['portalData'][key].each_with_index do |inner_hash| inner_hash.keys.each do |inner_key| inner_method = ActiveSupport::Inflector.parameterize(ActiveSupport::Inflector.underscore(inner_key.gsub(/\w+::/, '').to_s), separator: '_') unless inner_method[/\s/] || inner_method[/\W/] inner_hash.send(:define_singleton_method, inner_method.to_s) { inner_hash[inner_key] } inner_hash.send(:define_singleton_method, 'record_id') { inner_hash['recordId'] } end end end hash.merge!({ key => result['portalData'][key] }) end return hash end
close_connection(token)
click to toggle source
# File lib/trophonius_single.rb, line 222 def close_connection(token) url = URI(URI.escape("http#{@config[:ssl] == true ? 's' : ''}://#{@config[:host]}/fmi/data/v1/databases/#{@config[:database]}/sessions/#{token}")) ssl_verifyhost = @config[:local_network] ? 0 : 2 ssl_verifypeer = !@config[:local_network] request = Typhoeus::Request.new( url, method: :delete, params: {}, ssl_verifyhost: ssl_verifyhost, ssl_verifypeer: ssl_verifypeer, headers: { 'Content-Type' => 'application/json' } ) temp = request.run begin parsed = JSON.parse(temp.response_body) rescue Exception => e Error.throw_error('1631') end Error.throw_error(parsed['messages'][0]['code']) if parsed['messages'][0]['code'] != '0' return true end
make_request(url_param, token, method, body, params = '')
click to toggle source
# File lib/trophonius_single.rb, line 167 def make_request(url_param, token, method, body, params = '') ssl_verifyhost = @config[:local_network] ? 0 : 2 ssl_verifypeer = !@config[:local_network] request = Typhoeus::Request.new( url_param, method: method.to_sym, body: body, params: params, ssl_verifyhost: ssl_verifyhost, ssl_verifypeer: ssl_verifypeer, headers: { 'Content-Type' => 'application/json', Authorization: "Bearer #{token}" } ) temp = request.run begin JSON.parse(temp.response_body) rescue Exception => e close_connection(token) Error.throw_error('1631') end end
setup_connection()
click to toggle source
# File lib/trophonius_single.rb, line 189 def setup_connection ssl_verifyhost = @config[:local_network] ? 0 : 2 ssl_verifypeer = !@config[:local_network] url = URI(URI.escape("http#{@config[:ssl] == true ? 's' : ''}://#{@config[:host]}/fmi/data/v1/databases/#{@config[:database]}/sessions")) request = Typhoeus::Request.new( url, method: :post, body: if @config[:external_name].nil? || @config[:external_name].empty? {} else { fmDataSource: [{ database: @config[:external_name], username: @config[:external_username], password: @config[:external_password] }] }.to_json end, params: {}, ssl_verifyhost: ssl_verifyhost, ssl_verifypeer: ssl_verifypeer, headers: { 'Content-Type' => 'application/json', Authorization: "Basic #{Base64.strict_encode64("#{@config[:username]}:#{@config[:password]}")}" } ) temp = request.run begin parsed = JSON.parse(temp.response_body) rescue Exception => e Error.throw_error('1631') end Error.throw_error(parsed['messages'][0]['code']) if parsed['messages'][0]['code'] != '0' return parsed['response']['token'] end