Module: Faye::Grammar
- Defined in:
- lib/faye/protocol/grammar.rb
Constant Summary collapse
- LOWALPHA =
rule {[ '[a-z]' ]}
- UPALPHA =
rule {[ '[A-Z]' ]}
- ALPHA =
rule {[ choice(LOWALPHA, UPALPHA) ]}
- DIGIT =
rule {[ '[0-9]' ]}
- ALPHANUM =
rule {[ choice(ALPHA, DIGIT) ]}
- MARK =
rule {[ choice(*%w[\\- \\_ \\! \\~ \\( \\) \\$ \\@]) ]}
- STRING =
rule {[ repeat(choice(ALPHANUM, MARK, ' ', '\\/', '\\*', '\\.')) ]}
- TOKEN =
rule {[ oneormore(choice(ALPHANUM, MARK)) ]}
- INTEGER =
rule {[ oneormore(DIGIT) ]}
- CHANNEL_SEGMENT =
rule {[ TOKEN ]}
- CHANNEL_SEGMENTS =
rule {[ CHANNEL_SEGMENT, repeat('\\/', CHANNEL_SEGMENT) ]}
- CHANNEL_NAME =
rule {[ '\\/', CHANNEL_SEGMENTS ]}
- WILD_CARD =
rule {[ '\\*{1,2}' ]}
- CHANNEL_PATTERN =
rule {[ repeat('\\/', CHANNEL_SEGMENT), '\\/', WILD_CARD ]}
- VERSION_ELEMENT =
rule {[ ALPHANUM, repeat(choice(ALPHANUM, '\\-', '\\_')) ]}
- VERSION =
rule {[ INTEGER, repeat('\\.', VERSION_ELEMENT) ]}
- CLIENT_ID =
rule {[ oneormore(ALPHANUM) ]}
- ID =
rule {[ oneormore(ALPHANUM) ]}
- ERROR_MESSAGE =
rule {[ STRING ]}
- ERROR_ARGS =
rule {[ STRING, repeat(',', STRING) ]}
- ERROR_CODE =
rule {[ DIGIT, DIGIT, DIGIT ]}
- ERROR =
rule {[ choice(string([ERROR_CODE, ':', ERROR_ARGS, ':', ERROR_MESSAGE]), string([ERROR_CODE, ':', ':', ERROR_MESSAGE])) ]}
Class Method Summary collapse
- .choice(*list) ⇒ Object
- .oneormore(*pattern) ⇒ Object
- .repeat(*pattern) ⇒ Object
- .rule(&block) ⇒ Object
- .string(item) ⇒ Object
Class Method Details
.choice(*list) ⇒ Object
9 10 11 |
# File 'lib/faye/protocol/grammar.rb', line 9 def self.choice(*list) '(' + list.map(&method(:string)) * '|' + ')' end |
.oneormore(*pattern) ⇒ Object
17 18 19 |
# File 'lib/faye/protocol/grammar.rb', line 17 def self.oneormore(*pattern) '(' + string(pattern) + ')+' end |
.repeat(*pattern) ⇒ Object
13 14 15 |
# File 'lib/faye/protocol/grammar.rb', line 13 def self.repeat(*pattern) '(' + string(pattern) + ')*' end |
.rule(&block) ⇒ Object
4 5 6 7 |
# File 'lib/faye/protocol/grammar.rb', line 4 def self.rule(&block) source = instance_eval(&block) %r{^#{string(source)}$} end |
.string(item) ⇒ Object
21 22 23 24 |
# File 'lib/faye/protocol/grammar.rb', line 21 def self.string(item) return item.map(&method(:string)) * '' if Array === item String === item ? item : item.source.gsub(/^\^/, '').gsub(/\$$/, '') end |