From d20a646ae66c62c660b3b41811182d88c810eabf Mon Sep 17 00:00:00 2001 From: Spencer Alan Date: Wed, 5 Dec 2018 15:11:10 -0500 Subject: [PATCH] • add model to parse scim queries --- app/models/scim_rails/scim_query_parser.rb | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+), 0 deletions(-) create mode 100644 app/models/scim_rails/scim_query_parser.rb diff --git a/app/models/scim_rails/scim_query_parser.rb b/app/models/scim_rails/scim_query_parser.rb new file mode 100644 index 0000000..e5103d1 --- /dev/null +++ b/app/models/scim_rails/scim_query_parser.rb @@ -0,0 +1,45 @@ +module ScimRails + class ScimQueryParser + attr_accessor :query_elements + + def initialize(query_string) + self.query_elements = query_string.split(" ") + end + + def attribute + attribute = query_elements.dig(0) + raise ScimRails::ExceptionHandler::InvalidQuery if attribute.blank? + attribute = attribute.to_sym + + mapped_attribute = attribute_mapping(attribute) + raise ScimRails::ExceptionHandler::InvalidQuery if mapped_attribute.blank? + mapped_attribute + end + + def operator + sql_comparison_operator(query_elements.dig(1)) + end + + def parameter + parameter = query_elements.dig(2) + return if parameter.blank? + parameter.gsub(/"/, "") + end + + private + + def attribute_mapping(attribute) + ScimRails.config.queryable_user_attributes[attribute] + end + + def sql_comparison_operator(element) + case element + when "eq" + "=" + else + # TODO: implement additional query filters + raise ScimRails::ExceptionHandler::InvalidQuery + end + end + end +end -- libgit2 0.21.0