10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/lutaml/model/consolidation/pattern_chunker.rb', line 10
def process(collection, map, tokens)
rules = map.rules
element_rules = rules.grep(PatternElementRule)
trigger_rule = element_rules.first
content_rule = rules.find { |r| r.is_a?(PatternContentRule) }
entries = []
current = nil
tokens.each do |token|
case token_type(token)
when :element
rule = element_rules.find do |r|
r.element_name == token_name(token)
end
next unless rule
if rule == trigger_rule && current
entries << current
current = nil
end
current ||= map.group_class.new
current.public_send(:"#{rule.target}=", token_text(token))
when :text
next unless content_rule && current
text = token_text(token)
next if text.strip.empty?
current.public_send(:"#{content_rule.target}=", text)
end
end
entries << current if current
collection.public_send(:"#{map.to}=", entries)
end
|