Sha256: b7dd8f252cb81c42f24ee55fbf5b923ccdf3e448d917c1aff72ad17dcb0a2359
Contents?: true
Size: 1.15 KB
Versions: 6
Compression:
Stored size: 1.15 KB
Contents
# frozen_string_literal: true module ScimRails 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 ScimRails::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 ScimRails::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 ScimRails::ExceptionHandler::InvalidQuery end end end end
Version data entries
6 entries across 6 versions & 1 rubygems