module ROM::LDAP::Directory::Tokenization

Parsing Formats

@api private

Public Class Methods

included(klass) click to toggle source

Allows adapters that subclass Directory to use custom parsers. Extends the class with filter abstraction behavior.

@api private

# File lib/rom/ldap/directory/tokenization.rb, line 19
def self.included(klass)
  klass.class_eval do
    extend Dry::Core::ClassAttributes

    defines :attribute_class
    attribute_class Parsers::Attribute

    defines :filter_class
    filter_class Parsers::FilterSyntax

    defines :ast_class
    ast_class Parsers::AbstractSyntax
  end
end

Private Instance Methods

to_attribute(attr_def) click to toggle source

Create parsed attribute from definiton.

@param attr_def [String]

@return [Hash]

# File lib/rom/ldap/directory/tokenization.rb, line 59
def to_attribute(attr_def)
  self.class.attribute_class.new(attr_def).call
end
to_expression(input) click to toggle source

Convert abstract criteria or LDAP filter into an expression object.

Check for parsed attributes to prevent recursion.

@param input [Array, String] RFC2254 or AST

# File lib/rom/ldap/directory/tokenization.rb, line 41
def to_expression(input)
  attrs = !@attribute_types.nil? ? attribute_types : EMPTY_ARRAY

  # Filter > AST
  unless input.is_a?(Array)
    input = self.class.filter_class.new(input, attrs).call
  end

  # AST > Expression
  self.class.ast_class.new(input, attrs).call
end