Sha256: 6fae1b89f05bb598216bebc82ad520489e1394a8e8c8dcbfdc194dc17ecf433d
Contents?: true
Size: 1.17 KB
Versions: 10
Compression:
Stored size: 1.17 KB
Contents
# frozen_string_literal: true module Scimaenaga class ScimQueryParser attr_accessor :query_elements, :query_attributes def initialize(query_string, queryable_attributes) self.query_elements = query_string.gsub(/\[(.+?)\]/, '.0').split self.query_attributes = queryable_attributes end def attribute attribute = query_elements[0] raise Scimaenaga::ExceptionHandler::InvalidQuery if attribute.blank? dig_keys = attribute.split('.').map do |step| step == '0' ? 0 : step.to_sym end mapped_attribute = query_attributes.dig(*dig_keys) raise Scimaenaga::ExceptionHandler::InvalidQuery if mapped_attribute.blank? mapped_attribute end def operator sql_comparison_operator(query_elements[1]) end def parameter parameter = query_elements[2..-1].join(' ') return if parameter.blank? parameter.gsub(/"/, '') end private def sql_comparison_operator(element) case element when 'eq' '=' else # TODO: implement additional query filters raise Scimaenaga::ExceptionHandler::InvalidQuery end end end end
Version data entries
10 entries across 10 versions & 1 rubygems