From 894ed326a7be8969ca344de8a6aeeaf908d4f027 Mon Sep 17 00:00:00 2001 From: "Michael B. Klein" Date: Tue, 6 Jul 2010 12:24:33 -0700 Subject: [PATCH] Folded trigger segments into segment groups to avoid content-based ambiguity --- lib/edi/edi2json.rb | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/edi/edi2json.rb b/lib/edi/edi2json.rb index f92f5c649..8f88fe4fc 100644 --- a/lib/edi/edi2json.rb +++ b/lib/edi/edi2json.rb @@ -4,6 +4,16 @@ module EDI class Collection include Enumerable + + def hash_name + # If this is the trigger node for a segment group, use the + # group name. Otherwise, use the segment name. + if self.respond_to?(:is_tnode?) and self.is_tnode? + self.sg_name + else + self.name + end + end def to_hash result = {} @@ -36,13 +46,13 @@ class Collection end } - # Segment groups last - if self.respond_to?(:children) and (self.children.empty? == false) - segments = [] + # If this is the trigger node for a segment group, + # make this the first segment in the group. + if self.respond_to?(:is_tnode?) and self.is_tnode? + result = [[self.name, result]] self.children.each { |segment| - segments << [segment.name, segment.to_hash] + result << [segment.hash_name, segment.to_hash] } - result[self.sg_name] = segments end result @@ -89,7 +99,7 @@ class Message self.find_all { |segment| segment.level < 2 }.each { |segment| - segments << [segment.name, segment.to_hash] + segments << [segment.hash_name, segment.to_hash] } segments << [self.trailer.name, self.trailer.to_hash] segments -- 2.11.0