Class: Eddy::Models::TransactionSet

Inherits:
Object
  • Object
show all
Defined in:
lib/eddy/models/transaction_set.rb

Overview

Base class for EDI Transaction Sets.

Constant Summary collapse

ID =

Returns:

  • (Integer)
nil
NAME =

Returns:

  • (String)
nil
FUNCTIONAL_GROUP =

Returns:

  • (String)
nil

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(store, *components) ⇒ void

Parameters:



25
26
27
28
29
30
# File 'lib/eddy/models/transaction_set.rb', line 25

def initialize(store, *components)
  self.store = store
  components.flatten!
  self.components = components || []
  self.control_number = Eddy::Data.new_transaction_set_control_number(self.id)
end

Instance Attribute Details

#componentsArray<Segment, Loop>

Returns:



14
15
16
# File 'lib/eddy/models/transaction_set.rb', line 14

def components
  @components
end

#control_numberInteger

A unique control number for the Transaction Set.

Returns:

  • (Integer)


20
21
22
# File 'lib/eddy/models/transaction_set.rb', line 20

def control_number
  @control_number
end

#storeEddy::Data::Store

Container used to distribute state throughout an Interchange.

Returns:



17
18
19
# File 'lib/eddy/models/transaction_set.rb', line 17

def store
  @store
end

Class Method Details

.functional_groupString

Returns:

  • (String)


48
49
50
# File 'lib/eddy/models/transaction_set.rb', line 48

def self.functional_group
  return self::FUNCTIONAL_GROUP
end

.idString

Returns:

  • (String)


38
39
40
# File 'lib/eddy/models/transaction_set.rb', line 38

def self.id
  return self::ID
end

.nameString

Returns:

  • (String)


58
59
60
# File 'lib/eddy/models/transaction_set.rb', line 58

def self.name
  return self::NAME
end

Instance Method Details

#add_envelopevoid

This method returns an undefined value.

Add ST and SE segments to the components array.



65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/eddy/models/transaction_set.rb', line 65

def add_envelope()
  st = Eddy::Segments::ST.new(self.store)
  st.TransactionSetIdentifierCode = self.id
  st.TransactionSetControlNumber  = self.control_number

  se = Eddy::Segments::SE.new(self.store)
  se.NumberOfIncludedSegments    = self.number_of_included_segments()
  se.TransactionSetControlNumber = self.control_number

  self.components.unshift(st)
  self.components.push(se)
end

#all_componentsArray<Eddy::Models::Segment>

Return all contained Segments in a single, flattened array.

Returns:



99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/eddy/models/transaction_set.rb', line 99

def all_components()
  comps = self.components.map do |c|
    if c.is_a?(Eddy::Models::Loop::Base)
      c.all_contents()
    elsif c.is_a?(Eddy::Models::Segment)
      c
    else
      raise Eddy::Errors::RenderError
    end
  end
  return comps.flatten
end

#functional_groupString

Returns:

  • (String)


43
44
45
# File 'lib/eddy/models/transaction_set.rb', line 43

def functional_group
  return self.class::FUNCTIONAL_GROUP
end

#idString

Returns:

  • (String)


33
34
35
# File 'lib/eddy/models/transaction_set.rb', line 33

def id
  return self.class::ID
end

#nameString

Returns:

  • (String)


53
54
55
# File 'lib/eddy/models/transaction_set.rb', line 53

def name
  return self.class::NAME
end

#number_of_included_segmentsInteger

Return the count of Segments in the Transaction Set where skip is false, plus 2 for ST and SE.

Returns:

  • (Integer)


92
93
94
# File 'lib/eddy/models/transaction_set.rb', line 92

def number_of_included_segments()
  return (self.all_components.reject(&:skip).length + 2)
end

#render(s_sep = self.store.segment_separator) ⇒ String

This shouldn't be used. An Interchange or FunctionalGroup should call all_components and render those itself.

Parameters:

  • s_sep (String) (defaults to: self.store.segment_separator)

    (self.store.segment_separator)

Returns:

  • (String)


83
84
85
86
# File 'lib/eddy/models/transaction_set.rb', line 83

def render(s_sep = self.store.segment_separator)
  add_envelope()
  return self.all_components.map { |s| s.render(self.store.element_separator) }.compact.join(s_sep).rstrip()
end