class EDI::S::Message
Attributes
maindata[RW]
Public Class Methods
new( p, user_par )
click to toggle source
Calls superclass method
EDI::Message::new
# File lib/edi4r/sedas.rb, line 235 def initialize( p, user_par ) super( p, user_par ) # @parent, @root = p, p.root # First param is either a hash or segment EDI_DC # If Hash: Build EDI_DC from given parameters # If Segment: Extract some crucial parameters @maindata = Dir::Directory.create( root.syntax ) if user_par.is_a? Hash preset_msg( user_par) @name = @pars[:sedas_type] @header = nil # new_segment(p.dc_sig.strip) # typically, "EDI_DC40" # @header.dIDOCTYP = @pars[:IDOCTYP] # etc. =begin elsif user_par.is_a? EDI::S::Segment @header = user_par if @header.name !~ /^[12]2/ raise "12/22 expected, '#{@header.name}' found!" end @header.parent = self @header.root = self.root @pars = Hash.new @pars[:sedas_type]= header.name[0,2] # e.g. '12', '15' # @pars[:IDOCTYP] = @header.dIDOCTYP # @maindata = Dir::Directory.create( root.syntax, # :SEDASTYPE=> @pars[:sedas_type] # ) =end else raise "Parameter 'user_par': Illegal type!" end @trailer = nil # @@msgCounter += 1 end
parse(p, segment_list)
click to toggle source
# File lib/edi4r/sedas.rb, line 284 def Message.parse (p, segment_list) # Segments comprise a single message # Temporarily assign p as segment parent, # or else service segment lookup fails: raise "NOT SUPPORTED anymore!" header = p.parse_segment(segment_list.shift, p.dc_sig.strip) msg = p.new_message(header) # Now use header rec as template segment_list.each {|segbuf| msg.add Segment.parse( msg, segbuf ) } msg.trailer = nil msg end
Public Instance Methods
new_segment(tag)
click to toggle source
# File lib/edi4r/sedas.rb, line 275 def new_segment(tag) Segment.new(self, tag) end
parse_segment(buf)
click to toggle source
# File lib/edi4r/sedas.rb, line 279 def parse_segment(buf) Segment.parse(self, buf) end
preset_msg(user_par={})
click to toggle source
@@msgCounter = 1
# File lib/edi4r/sedas.rb, line 226 def preset_msg(user_par={}) # lower-case names for internal keys, # upper-case names for EDI_DC field names par = {:sedas_type => '12', }.update( user_par ) @pars = par end
validate()
click to toggle source
Calls superclass method
EDI::Collection_HT#validate
# File lib/edi4r/sedas.rb, line 301 def validate # Check sequence of segments against library, # thereby adding location information to each segment diag = EDI::Diagram::Diagram.create(root.syntax, :SEDASTYPE=> @pars[:sedas_type] ) ni = EDI::Diagram::NodeInstance.new(diag) # puts "Initial node instance is: #{ni.name}" if @header ni.seek!( @header ) @header.update_with( ni ) end each {|seg| # if (key = seg.name) !~ /.*\d\d\d/ # key = Regexp.new(key+'(\d\d\d)?') # end begin if ni.seek!(seg.name) # key) # (seg) seg.update_with( ni ) else raise "seek! failed for #{seg.name} when starting at #{ni.name}" end =begin rescue EDI::EDILookupError warn key if key =~ /(.*)\d\d\d/ key = $1 retry else raise end =end end } # ni.seek!( @trailer ) # @trailer.update_with( ni ) # Now check each segment super end