Sha256: 335a13c58609c1a77665f68d1fdeb502947e27431156214187adbecf113114d3

Contents?: true

Size: 1.05 KB

Versions: 11

Compression:

Stored size: 1.05 KB

Contents

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[2..-1].join(" ")
      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

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
scim_rails-0.4.0 app/models/scim_rails/scim_query_parser.rb
scim_rails-0.3.1 app/models/scim_rails/scim_query_parser.rb
scim_rails-0.3.0 app/models/scim_rails/scim_query_parser.rb
scim_rails-0.2.2 app/models/scim_rails/scim_query_parser.rb
scim_rails-0.2.1 app/models/scim_rails/scim_query_parser.rb
scim_rails-0.2.0 app/models/scim_rails/scim_query_parser.rb
scim_rails-0.1.4 app/models/scim_rails/scim_query_parser.rb
scim_rails-0.1.3 app/models/scim_rails/scim_query_parser.rb
scim_rails-0.1.2 app/models/scim_rails/scim_query_parser.rb
scim_rails-0.1.1 app/models/scim_rails/scim_query_parser.rb
scim_rails-0.1.0 app/models/scim_rails/scim_query_parser.rb