File tree Expand file tree Collapse file tree 2 files changed +58
-40
lines changed Expand file tree Collapse file tree 2 files changed +58
-40
lines changed Original file line number Diff line number Diff line change 1
1
# frozen_string_literal: true
2
2
3
3
require_relative "errors"
4
+ require_relative "response_parser/parser_utils"
4
5
5
6
module Net
6
7
class IMAP < Protocol
7
8
8
9
# Parses an \IMAP server response.
9
10
class ResponseParser
11
+ include ParserUtils
12
+
10
13
# :call-seq: Net::IMAP::ResponseParser.new -> Net::IMAP::ResponseParser
11
14
def initialize
12
15
@str = nil
@@ -1422,46 +1425,6 @@ def accept_spaces
1422
1425
end
1423
1426
end
1424
1427
1425
- def match ( *args , lex_state : @lex_state )
1426
- if @token && lex_state != @lex_state
1427
- parse_error ( "invalid lex_state change to %s with unconsumed token" ,
1428
- lex_state )
1429
- end
1430
- begin
1431
- @lex_state , original_lex_state = lex_state , @lex_state
1432
- token = lookahead
1433
- unless args . include? ( token . symbol )
1434
- parse_error ( 'unexpected token %s (expected %s)' ,
1435
- token . symbol . id2name ,
1436
- args . collect { |i | i . id2name } . join ( " or " ) )
1437
- end
1438
- shift_token
1439
- return token
1440
- ensure
1441
- @lex_state = original_lex_state
1442
- end
1443
- end
1444
-
1445
- # like match, but does not raise error on failure.
1446
- #
1447
- # returns and shifts token on successful match
1448
- # returns nil and leaves @token unshifted on no match
1449
- def accept ( *args )
1450
- token = lookahead
1451
- if args . include? ( token . symbol )
1452
- shift_token
1453
- token
1454
- end
1455
- end
1456
-
1457
- def lookahead
1458
- @token ||= next_token
1459
- end
1460
-
1461
- def shift_token
1462
- @token = nil
1463
- end
1464
-
1465
1428
def next_token
1466
1429
case @lex_state
1467
1430
when EXPR_BEG
Original file line number Diff line number Diff line change
1
+ # frozen_string_literal: true
2
+
3
+ module Net
4
+ class IMAP < Protocol
5
+ class ResponseParser
6
+ # basic utility methods for parsing.
7
+ #
8
+ # (internal API, subject to change)
9
+ module ParserUtils # :nodoc:
10
+
11
+ private
12
+
13
+ def match ( *args , lex_state : @lex_state )
14
+ if @token && lex_state != @lex_state
15
+ parse_error ( "invalid lex_state change to %s with unconsumed token" ,
16
+ lex_state )
17
+ end
18
+ begin
19
+ @lex_state , original_lex_state = lex_state , @lex_state
20
+ token = lookahead
21
+ unless args . include? ( token . symbol )
22
+ parse_error ( 'unexpected token %s (expected %s)' ,
23
+ token . symbol . id2name ,
24
+ args . collect { |i | i . id2name } . join ( " or " ) )
25
+ end
26
+ shift_token
27
+ return token
28
+ ensure
29
+ @lex_state = original_lex_state
30
+ end
31
+ end
32
+
33
+ # like match, but does not raise error on failure.
34
+ #
35
+ # returns and shifts token on successful match
36
+ # returns nil and leaves @token unshifted on no match
37
+ def accept ( *args )
38
+ token = lookahead
39
+ if args . include? ( token . symbol )
40
+ shift_token
41
+ token
42
+ end
43
+ end
44
+
45
+ def lookahead
46
+ @token ||= next_token
47
+ end
48
+
49
+ def shift_token
50
+ @token = nil
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
You can’t perform that action at this time.
0 commit comments