Commit e2cf207
Changed files (2)
lib
scim
kit
v2
spec
scim
kit
lib/scim/kit/v2/parser.rb
@@ -38,17 +38,17 @@ subAttr = "." ATTRNAME
=end
class Parser < Parslet::Parser
root :filter
- rule(:filter) { (attrExp | logExp | valuePath) | (not_op? >> lparen >> filter >> rparen) }
- rule(:valuePath) { attrPath >> lsquare_bracket >> valFilter >> rsquare_bracket }
- rule(:valFilter) { attrExp | logExp | (not_op? >> lparen >> valFilter >> rparen) }
- rule(:attrExp) { (attrPath >> space >> presence) | (attrPath >> space >> compareOp >> space >> quote >> compValue >> quote) }
- rule(:logExp) { filter >> space >> (and_op | or_op) >> space >> filter }
- rule(:compValue) { (falsey | null | truthy | number | string | scim_schema_uri).repeat(1) }
- rule(:compareOp) { equal | not_equal | contains | starts_with | ends_with | greater_than | less_than | less_than_equals | greater_than_equals }
- rule(:attrPath) { scim_schema_uri | attrname >> subAttr.maybe }
- rule(:attrname) { alpha >> nameChar.repeat(1) }
- rule(:nameChar) { hyphen | underscore | digit | alpha }
- rule(:subAttr) { dot >> attrname }
+ rule(:filter) { (attribute_expression | logical_expression | value_path) | (not_op? >> lparen >> filter >> rparen) }
+ rule(:value_path) { attribute_path >> lbracket >> valFilter >> rbracket }
+ rule(:value_filter) { attribute_expression | logical_expression | (not_op? >> lparen >> value_filter >> rparen) }
+ rule(:attribute_expression) { (attribute_path >> space >> presence) | (attribute_path >> space >> comparison_operator >> space >> quote >> comparison_value >> quote) }
+ rule(:logical_expression) { filter >> space >> (and_op | or_op) >> space >> filter }
+ rule(:comparison_value) { (falsey | null | truthy | number | string | scim_schema_uri).repeat(1) }
+ rule(:comparison_operator) { equal | not_equal | contains | starts_with | ends_with | greater_than | less_than | less_than_equals | greater_than_equals }
+ rule(:attribute_path) { scim_schema_uri | attribute_name >> sub_attribute.maybe }
+ rule(:attribute_name) { alpha >> name_character.repeat(1) }
+ rule(:name_character) { hyphen | underscore | digit | alpha }
+ rule(:sub_attribute) { dot >> attribute_name }
rule(:presence) { str('pr') }
rule(:and_op) { str('and') }
rule(:or_op) { str('or') }
@@ -71,8 +71,8 @@ subAttr = "." ATTRNAME
rule(:string) { (alpha | single_quote).repeat(1) }
rule(:lparen) { str('(') >> space? }
rule(:rparen) { str(')') >> space? }
- rule(:lsquare_bracket) { str('[') >> space? }
- rule(:rsquare_bracket) { str(']') >> space? }
+ rule(:lbracket) { str('[') >> space? }
+ rule(:rbracket) { str(']') >> space? }
rule(:digit) { match(/\d/) }
rule(:quote) { str('"') }
rule(:single_quote) { str("'") }
spec/scim/kit/v2/parser_spec.rb
@@ -42,7 +42,7 @@ RSpec.describe Scim::Kit::V2::Parser do
[
'emails[type eq "work" and value co "@example.com"]',
].each do |x|
- specify { expect(subject.valuePath).to parse(x) }
+ specify { expect(subject.value_path).to parse(x) }
end
[
@@ -50,29 +50,29 @@ RSpec.describe Scim::Kit::V2::Parser do
'firstName pr',
'firstName eq "Tsuyoshi" and lastName eq "Garret"'
].each do |x|
- specify { expect(subject.valFilter).to parse(x) }
+ specify { expect(subject.value_filter).to parse(x) }
end
[
'firstName eq "Tsuyoshi"',
'firstName pr',
].each do |x|
- specify { expect(subject.attrExp).to parse(x) }
+ specify { expect(subject.attribute_expression).to parse(x) }
end
[
'firstName eq "Tsuyoshi" and lastName eq "Garret"',
%Q(title pr and userType eq "Employee"),
].each do |x|
- specify { expect(subject.logExp).to parse(x) }
+ specify { expect(subject.logical_expression).to parse(x) }
end
['false', 'null', 'true', '1', 'hello', "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"].each do |x|
- specify { expect(subject.compValue).to parse(x) }
+ specify { expect(subject.comparison_value).to parse(x) }
end
['eq', 'ne', 'co', 'sw', 'ew', 'gt', 'lt', 'ge', 'le'].each do |x|
- specify { expect(subject.compareOp).to parse(x) }
+ specify { expect(subject.comparison_operator).to parse(x) }
end
[
@@ -86,7 +86,7 @@ RSpec.describe Scim::Kit::V2::Parser do
'meta.lastModified',
'schemas',
].each do |x|
- specify { expect(subject.attrPath).to parse(x) }
+ specify { expect(subject.attribute_path).to parse(x) }
end
[
@@ -96,10 +96,10 @@ RSpec.describe Scim::Kit::V2::Parser do
'username1',
'schemas',
].each do |x|
- specify { expect(subject.attrname).to parse(x) }
+ specify { expect(subject.attribute_name).to parse(x) }
end
- ['-', '_', '0', 'a'].each { |x| specify { expect(subject.nameChar).to parse(x) } }
- specify { expect(subject.subAttr).to parse('.name') }
+ ['-', '_', '0', 'a'].each { |x| specify { expect(subject.name_character).to parse(x) } }
+ specify { expect(subject.sub_attribute).to parse('.name') }
specify { expect(subject.presence).to parse('pr') }
specify { expect(subject.and_op).to parse('and') }
specify { expect(subject.or_op).to parse('or') }