Sha256: d5bb5888af63ebbd010a3fdfca6bcb6a2e32966686b62e663b26fe6cadc46398
Contents?: true
Size: 1.1 KB
Versions: 1
Compression:
Stored size: 1.1 KB
Contents
# frozen_string_literal: true # lib/lutaml/path/parser.rb require "parslet" module Lutaml module Path class Parser < Parslet::Parser rule(:space) { match('\s').repeat } rule(:escaped_separator) { str("\\") >> str("::") } rule(:separator) { str("::") } # Character rules rule(:glob_char) { match('[*?\[{]') } rule(:regular_char) do (separator.absent? >> str("\\").absent? >> any) | escaped_separator end # Single segment can contain any regular chars or glob chars rule(:segment_content) do (glob_char | regular_char).repeat(1).as(:content) >> glob_char.present?.maybe.as(:is_pattern) end rule(:segment) do segment_content.as(:segment) end rule(:segments) do (separator >> segment).repeat.as(:more_segments) end # Full path expression - either absolute or relative rule(:path_expr) do ((separator.as(:absolute) >> segment.as(:first_segment) >> segments) | (segment.as(:first_segment) >> segments)) end root(:path_expr) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
lutaml-path-0.1.0 | lib/lutaml/path/parser.rb |