Class: Eddy::Summary::TransactionSet

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

Overview

An outline of all required components for an EDI transaction set implementation.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializevoid



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

def initialize()
  self.components = []
end

Instance Attribute Details

#componentsArray<Eddy::Summary::Segment, Eddy::Summary::Loop>

The components that make up the Transaction Set.



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

def components
  @components
end

#functional_groupString

A short string used to group related Transaction Sets.

Returns:

  • (String)


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

def functional_group
  @functional_group
end

#idInteger

A short code identifying the Transaction Set.

Returns:

  • (Integer)


8
9
10
# File 'lib/eddy/summary/transaction_set.rb', line 8

def id
  @id
end

#nameString

A descriptive name for the Transaction Set.

Returns:

  • (String)


11
12
13
# File 'lib/eddy/summary/transaction_set.rb', line 11

def name
  @name
end

Class Method Details

.create(params = {}) ⇒ self

Parameters:

  • params (Hash) (defaults to: {})

Returns:

  • (self)


26
27
28
29
30
31
32
33
# File 'lib/eddy/summary/transaction_set.rb', line 26

def self.create(params = {})
  summary = new()
  summary.id = params[:id]
  summary.name = params[:name]
  summary.functional_group = params[:functional_group]
  summary.process_components(params[:components])
  return summary
end

.from_file(path) ⇒ self

Parameters:

  • path (String)

    Path to a JSON or YAML file containing a valid Segment definition.

Returns:

  • (self)

Raises:



37
38
39
40
41
# File 'lib/eddy/summary/transaction_set.rb', line 37

def self.from_file(path)
  raise Eddy::Errors::Error, "Invalid transaction set definition" unless Eddy::Summary.valid_transaction_set_data?(path)
  data = Eddy::Util.read_json_or_yaml(path)
  return Eddy::Summary::TransactionSet.create(data)
end

Instance Method Details

#all_componentsArray<Eddy::Summary::Segment, Eddy::Summary::Loop>

Return all components in a single, flattened array.



78
79
80
81
82
83
84
85
86
# File 'lib/eddy/summary/transaction_set.rb', line 78

def all_components()
  return self.components.map do |comp|
    case comp
    when Eddy::Summary::Loop    then [comp, comp.all_components()]
    when Eddy::Summary::Segment then comp
    else raise Eddy::Errors::Error
    end
  end.flatten
end

#doc_comment(header: true) ⇒ String

Generate a description to use as a doc comment for a transaction set.

Parameters:

  • header (Boolean) (defaults to: true)

    (true)

Returns:

  • (String)


64
65
66
67
68
69
70
71
72
73
# File 'lib/eddy/summary/transaction_set.rb', line 64

def doc_comment(header: true)
  parts = []
  parts << "### Transaction Set Summary:\n" if header
  parts << <<~YARD.strip
    - Id: #{self.id}
    - Name: #{self.name}
    - Functional Group: #{self.functional_group}
  YARD
  return parts.compact.join("\n")
end

#normalized_nameString

Returns:

  • (String)


56
57
58
# File 'lib/eddy/summary/transaction_set.rb', line 56

def normalized_name
  return "TS#{self.id}"
end

#process_components(components) ⇒ void

This method returns an undefined value.

Parameters:

  • components (Array<Hash>)


45
46
47
48
49
50
51
52
53
# File 'lib/eddy/summary/transaction_set.rb', line 45

def process_components(components)
  components.each do |comp|
    if comp.key?(:loop_id)
      self.components << Eddy::Summary::Loop.create(comp)
    else
      self.components << Eddy::Summary::Segment.create(comp)
    end
  end
end

#unique_loopsArray<Eddy::Summary::Loop>

Return one of each kind of loop in the Transaction Set.

Returns:



91
92
93
# File 'lib/eddy/summary/transaction_set.rb', line 91

def unique_loops()
  return self.all_components.select { |c| c.is_a?(Eddy::Summary::Loop) }.uniq(&:id)
end