Module: Safrano::Filter::Parser::Token

Included in:
Safrano::Filter::Parser
Defined in:
lib/odata/filter/token.rb

Overview

Input tokenizer

Constant Summary collapse

FUNCNAMES =
%w[concat substringof endswith startswith length indexof
replace substring trim toupper tolower
day hour minute month second year
round floor ceiling].freeze
FUNCRGX =
FUNCNAMES.join('|')
NULLRGX =
'null|NULL|Null'
QSTRINGRGX =
/'((?:[^']|(?:'{2}))*)'/.freeze
BINOBOOL =
'[eE][qQ]|[LlgGNn][eETt]|[aA][nN][dD]|[oO][rR]'
BINOARITHM =
'[aA][dD][dD]|[sS][uU][bB]|[mM][uU][lL]|[dD][iI][vV]|[mM][oO][dD]'
NOTRGX =
'not|NOT|Not'
FPRGX =
'(\d+(?:\.\d+)?(?:e[+-]?\d+)?)[df]?'
DECIMALRGX =
'(\d+(?:\.\d+))[mM]'
QUALITRGX =
'\w+(?:\/\w+)+'
DATIRGX =

datetime’yyyy-mm-ddThh:mm[:ss]‘ NOTE: Spaces are not allowed between datetime and quoted portion. datetime is case-insensitive

'\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?:\:\d{2})?(?:\.\d{1,7})?'
DATETIMERGX =
/datetime'(#{DATIRGX}[zZ]?)'/i.freeze
DATIOFFRGX =
/datetimeoffset'(#{DATIRGX}(?:[zZ]|[+-]\d{2}:\d{2}))'/i.freeze
GUIDRGX =
/guid'([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})'/i.freeze
RGX =
/(#{FUNCRGX})|(#{NULLRGX})|([(),])|(#{BINOBOOL})\s+|(#{BINOARITHM})|(#{NOTRGX})|#{QSTRINGRGX}|#{DECIMALRGX}|#{FPRGX}|(#{QUALITRGX})|#{DATETIMERGX}|#{DATIOFFRGX}|#{GUIDRGX}|(\w+)|(')/.freeze

Instance Method Summary collapse

Instance Method Details

#each_typed_token(inp) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/odata/filter/token.rb', line 29

def each_typed_token(inp)
  typ = nil

  inp.scan(RGX) do |groups|
    groups.each_with_index do |tok, i|
      if tok

        typ = case i
              when 0
                :FuncTree
              when 1
                :NullLiteral
              when 2
                case tok
                when '(', ')'
                  :Delimiter
                when ','
                  :Separator
                end
              when 3
                :BinopBool
              when 4
                :BinopArithm
              when 5
                :UnopTree
              when 6
                :QString
              when 7
                :DecimalLit
              when 8
                :FPNumber
              when 9
                :Qualit
              when 10
                :DateTimeLit
              when 11
                :DateTimeOffsetLit
              when 12
                :GuidLit
              when 13
                :Literal
              when 14
                :unmatchedQuote
              end
        yield tok, typ
        break
      end
    end
  end
end