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

Version Path
scimaenaga-0.9.0 app/models/scim_rails/scim_query_parser.rb
scimaenaga-0.8.0 app/models/scim_rails/scim_query_parser.rb
scimaenaga-0.7.0 app/models/scim_rails/scim_query_parser.rb
scimaenaga-0.6.2 app/models/scim_rails/scim_query_parser.rb
scimaenaga-0.6.1 app/models/scim_rails/scim_query_parser.rb
scimaenaga-0.6.0 app/models/scim_rails/scim_query_parser.rb