class EDI::Message
A
“Message” is a special “Collection with header and trailer” It collects “Segment” objects.
Public Class Methods
new( p, user_par=nil )
click to toggle source
@@msgCounter = 1
Calls superclass method
EDI::Collection::new
# File lib/edi4r.rb, line 678 def initialize( p, user_par=nil ) super(p, p.root, 'Message') end
parse_xml(p, xmsg)
click to toggle source
# File lib/edi4r/rexml.rb, line 160 def Message.parse_xml(p, xmsg) _header = xmsg.elements["Header/Segment"] _trailer = xmsg.elements["Trailer/Segment"] msg = p.new_message( Segment.parse_xml( p, _header ) ) msg.header = Segment.parse_xml( msg, _header ) if _header xmsg.elements.each('descendant::Segment') do |xel| next if xel.parent.name =~ /Header|Trailer/ msg.add Segment.parse_xml(msg, xel) end msg.trailer = Segment.parse_xml( msg, _trailer ) if _trailer msg end
Public Instance Methods
add(seg)
click to toggle source
Add only Segment
objects to a message!
Calls superclass method
EDI::Collection#add
# File lib/edi4r.rb, line 701 def add (seg) raise "Only Segments allowed here" unless seg.is_a? Segment super end
to_xml( xel_parent )
click to toggle source
Build an XML document tree from
a) the linear sequence of segments b) metadata from the standards DB (attached to each segment)
Track xml parent element for segments by level
Add ‘header’ and ‘trailer’ wrapper element around
header and trailer, if any
Trigger segments and their depending segments get wrapped in a ‘SegmentGroup’ element that bears the group name as its name.
# File lib/edi4r/rexml.rb, line 189 def to_xml( xel_parent ) xel_msg = REXML::Element.new( 'Message' ) xel_parent.elements << xel_msg # Default parent is XML message element itself # xel_parent_stack = Hash.new(xel_msg) xhd = to_xml_header( xel_msg ) each do |seg| next if seg.empty? if seg.is_tnode? xgrp = REXML::Element.new( 'SegmentGroup' ) xgrp.attributes["name"] = seg.sg_name xel_parent_stack[seg.level - 1] << xgrp seg.to_xml( xgrp ) xel_parent_stack[seg.level] = xgrp else seg.to_xml( xel_parent_stack[seg.level - 1] ) end end xtr = to_xml_trailer( xel_msg ) [xel_msg, xhd, xtr] end