Method: Scimitar::Lists::QueryParser#parse
- Defined in:
- app/models/scimitar/lists/query_parser.rb
#parse(input) ⇒ Object
Parse SCIM filter query into RPN stack
input-
Input filter string, e.g. ‘givenName eq “Briony”’.
Returns a “self” for convenience. Call #rpn thereafter to retrieve the parsed RPN stack. For example, given this input:
userType eq "Employee" and (emails co "example.com" or emails co "example.org")
…returns a parser object wherein #rpn will yield:
[
'userType',
'"Employee"',
'eq',
'emails',
'"example.com"',
'co',
'emails',
'"example.org"',
'co',
'or',
'and'
]
Alternatively, call #tree to get an expression tree:
[
'and',
[
'eq',
'userType',
'"Employee"'
],
[
'or',
[
'co',
'emails',
'"example.com"'
],
[
'co',
'emails',
'"example.org"'
]
]
]
154 155 156 157 158 159 160 161 162 163 |
# File 'app/models/scimitar/lists/query_parser.rb', line 154 def parse(input) preprocessed_input = flatten_filter(input) rescue input @input = input.clone() # Saved just for error msgs @tokens = self.lex(preprocessed_input) @rpn = self.parse_expr() self.assert_eos() self end |