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

Version Path
scimaenaga-1.0.6 app/models/scimaenaga/scim_query_parser.rb
scimaenaga-1.0.5 app/models/scimaenaga/scim_query_parser.rb
scimaenaga-1.0.4 app/models/scimaenaga/scim_query_parser.rb
scimaenaga-1.0.3 app/models/scimaenaga/scim_query_parser.rb
scimaenaga-1.0.2 app/models/scimaenaga/scim_query_parser.rb
scimaenaga-1.0.1 app/models/scimaenaga/scim_query_parser.rb
scimaenaga-1.0.0 app/models/scimaenaga/scim_query_parser.rb
scimaenaga-0.9.3 app/models/scimaenaga/scim_query_parser.rb
scimaenaga-0.9.2 app/models/scimaenaga/scim_query_parser.rb
scimaenaga-0.9.1 app/models/scimaenaga/scim_query_parser.rb