Class: Peg::Result

Inherits:
Object
  • Object
show all
Defined in:
lib/peg.backup/result.rb

Defined Under Namespace

Classes: IllegalState

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#astObject (readonly)

Returns the value of attribute ast.



8
9
10
# File 'lib/peg.backup/result.rb', line 8

def ast
  @ast
end

#errorObject (readonly)

Returns the value of attribute error.



8
9
10
# File 'lib/peg.backup/result.rb', line 8

def error
  @error
end

#inputObject (readonly)

Returns the value of attribute input.



8
9
10
# File 'lib/peg.backup/result.rb', line 8

def input
  @input
end

#okObject (readonly)

Returns the value of attribute ok.



8
9
10
# File 'lib/peg.backup/result.rb', line 8

def ok
  @ok
end

Class Method Details

.nok(input:, error:, name: nil) ⇒ Object



12
13
14
15
# File 'lib/peg.backup/result.rb', line 12

def self.nok(input:, error:, name: nil) 
  error = error + " in parser: #{name}" if name
  new(ok: false, input:, error:)
end

.ok(ast:, input:) ⇒ Object



10
# File 'lib/peg.backup/result.rb', line 10

def self.ok(ast:, input:) = new(ok: true, ast:, input:)

Instance Method Details

#deconstruct_keysObject



17
# File 'lib/peg.backup/result.rb', line 17

def deconstruct_keys(*, **) = to_h

#map(&blk) ⇒ Object



19
20
21
22
# File 'lib/peg.backup/result.rb', line 19

def map(&blk)
  return self unless ok
  self.class.ok(ast: blk.(ast), input:)
end

#merge(ast: nil, error: nil, input: nil) ⇒ Object



24
25
26
27
28
29
# File 'lib/peg.backup/result.rb', line 24

def merge(ast: nil, error: nil, input: nil)
  @ast = ast if ast
  @error = error if error
  @input = input if input
  self
end

#or(input:, error:, name: nil) ⇒ Object



31
# File 'lib/peg.backup/result.rb', line 31

def or(input:, error:, name: nil) = self.class.nok(input:, error:, name:)

#reduce(values, &blk) ⇒ Object



33
34
35
36
37
38
39
40
# File 'lib/peg.backup/result.rb', line 33

def reduce(values, &blk)
  result = self
  values.each do |ele|
    result = blk.(result, ele)
    break result unless result.ok
  end
  result
end

#to_hObject



42
# File 'lib/peg.backup/result.rb', line 42

def to_h =  {ast:, error:, input:, ok:}

#to_sObject



44
# File 'lib/peg.backup/result.rb', line 44

def to_s = inspect

#update(&updater) ⇒ Object

Raises:



46
47
48
49
# File 'lib/peg.backup/result.rb', line 46

def update(&updater)
  raise IllegalState, "must not update an error result" unless ok
  map(&updater)
end

#update_or(input:, error:, name: nil, &updater) ⇒ Object



51
52
53
54
55
# File 'lib/peg.backup/result.rb', line 51

def update_or(input:, error:, name: nil, &updater)
  return map(&updater) if ok

  self.class.nok(input:, error:, name:)
end

#while(input: nil, error: nil, name: nil, &blk) ⇒ Object



57
58
59
60
61
62
63
64
65
66
# File 'lib/peg.backup/result.rb', line 57

def while(input: nil, error: nil, name: nil, &blk)
  result = self
  count = 0
  loop do
    return input ? self.class.nok(input:, error:, name:) : result unless result.ok
    result = blk.(self, count)
    count += 1
  end
  result
end