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