Class: DeviseScim::Filter::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/devise_scim/filter/parser.rb

Overview

Recursive descent parser for SCIM filter expressions (RFC 7644 ยง3.4.2.2). Supported: eq/ne/co/sw/ew/pr/gt/ge/lt/le, and/or, attr.sub-attr comparisons.

Defined Under Namespace

Classes: ParseError, Token

Constant Summary collapse

COMP_OPS =
%w[eq ne co sw ew pr gt ge lt le].freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(str) ⇒ Parser

Returns a new instance of Parser.



23
24
25
26
# File 'lib/devise_scim/filter/parser.rb', line 23

def initialize(str)
  @tokens = tokenize(str)
  @pos    = 0
end

Class Method Details

.parse(str) ⇒ Object



19
20
21
# File 'lib/devise_scim/filter/parser.rb', line 19

def self.parse(str)
  new(str).parse
end

Instance Method Details

#parseObject

Raises:



28
29
30
31
32
33
# File 'lib/devise_scim/filter/parser.rb', line 28

def parse
  ast = parse_or
  raise ParseError, "Unexpected token '#{current&.value}'" unless at_end?

  ast
end