Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions lib/ruber_dialog/resolver.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
module RuberDialog
module DialogParts
include Parser
# This class matches character names and responses to nodes
class Resolver
attr_accessor :nodes_map, :chars_map

def initialize
@nodes_map = {}
@chars_map = {}
end

# ensure that each character's name from chars list is in the names list
def validate_characters(names, chars)
chars.each do |char|
raise ValidationError unless names.include? char.name

@chars_map[char.name] = char
end
end

# map nodes to their names
def resolve_nodes(nodes)
nodes.each do |node|
@nodes_map[node.name] = node
end
end

# ensure that every responce leads to a valid node
def validate_nodes
@nodes_map.each do |_, v|
v.each do |r|
raise ValidationError unless @nodes_map.include? r.next_node
end
end
end
end
end
end