eddy 0.5.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +23 -4
- data/Gemfile.lock +1 -1
- data/README.md +1 -1
- data/lib/definitions/elements/generated/1005.hierarchical_structure_code.rb +1 -1
- data/lib/definitions/elements/generated/1019.invoice_type_code.rb +1 -1
- data/lib/definitions/elements/generated/103.packaging_code.rb +1 -1
- data/lib/definitions/elements/generated/1166.contract_type_code.rb +1 -1
- data/lib/definitions/elements/generated/1232.purchase_category.rb +1 -1
- data/lib/definitions/elements/generated/127.reference_identification.rb +1 -1
- data/lib/definitions/elements/generated/128.reference_identification_qualifier.rb +1 -1
- data/lib/definitions/elements/generated/1300.service_promotion_allowance_or_charge_code.rb +1 -1
- data/lib/definitions/elements/generated/1301.agency_service_promotion_allowance_or_charge_code.rb +1 -1
- data/lib/definitions/elements/generated/133.routing_sequence_code.rb +1 -1
- data/lib/definitions/elements/generated/166.address_information.rb +1 -1
- data/lib/definitions/elements/generated/183.volume.rb +1 -1
- data/lib/definitions/elements/generated/187.weight_qualifier.rb +1 -1
- data/lib/definitions/elements/generated/19.city_name.rb +1 -1
- data/lib/definitions/elements/generated/206.equipment_initial.rb +1 -1
- data/lib/definitions/elements/generated/207.equipment_number.rb +1 -1
- data/lib/definitions/elements/generated/212.unit_price.rb +1 -1
- data/lib/definitions/elements/generated/22.commodity_code.rb +1 -1
- data/lib/definitions/elements/generated/23.commodity_code_qualifier.rb +1 -1
- data/lib/definitions/elements/generated/234.product_service_id.rb +1 -1
- data/lib/definitions/elements/generated/235.product_service_id_qualifier.rb +1 -1
- data/lib/definitions/elements/generated/236.price_identifier_code.rb +1 -1
- data/lib/definitions/elements/generated/248.allowance_or_charge_indicator.rb +1 -1
- data/lib/definitions/elements/generated/26.country_code.rb +1 -1
- data/lib/definitions/elements/generated/284.service_level_code.rb +1 -1
- data/lib/definitions/elements/generated/324.purchase_order_number.rb +1 -1
- data/lib/definitions/elements/generated/326.request_reference_number.rb +1 -1
- data/lib/definitions/elements/generated/327.change_order_sequence_number.rb +1 -1
- data/lib/definitions/elements/generated/328.release_number.rb +1 -1
- data/lib/definitions/elements/generated/330.quantity_ordered.rb +1 -1
- data/lib/definitions/elements/generated/347.hash_total.rb +1 -1
- data/lib/definitions/elements/generated/349.item_description_type.rb +1 -1
- data/lib/definitions/elements/generated/352.description.rb +1 -1
- data/lib/definitions/elements/generated/353.transaction_set_purpose_code.rb +1 -1
- data/lib/definitions/elements/generated/354.number_of_line_items.rb +1 -1
- data/lib/definitions/elements/generated/355.unit_or_basis_for_measurement_code.rb +1 -1
- data/lib/definitions/elements/generated/358.quantity_invoiced.rb +1 -1
- data/lib/definitions/elements/generated/367.contract_number.rb +1 -1
- data/lib/definitions/elements/generated/368.shipment_order_status_code.rb +1 -1
- data/lib/definitions/elements/generated/374.date_time_qualifier.rb +1 -1
- data/lib/definitions/elements/generated/380.quantity.rb +1 -1
- data/lib/definitions/elements/generated/382.number_of_units_shipped.rb +1 -1
- data/lib/definitions/elements/generated/387.routing.rb +1 -1
- data/lib/definitions/elements/generated/396.shipment_identification.rb +1 -1
- data/lib/definitions/elements/generated/559.agency_qualifier_code.rb +1 -1
- data/lib/definitions/elements/generated/587.acknowledgment_type.rb +1 -1
- data/lib/definitions/elements/generated/610.amount.rb +1 -1
- data/lib/definitions/elements/generated/639.basis_of_unit_price_code.rb +1 -1
- data/lib/definitions/elements/generated/640.transaction_type_code.rb +1 -1
- data/lib/definitions/elements/generated/646.quantity_shipped_to_date.rb +1 -1
- data/lib/definitions/elements/generated/648.price_multiplier_qualifier.rb +1 -1
- data/lib/definitions/elements/generated/649.multiplier.rb +1 -1
- data/lib/definitions/elements/generated/66.identification_code_qualifier.rb +1 -1
- data/lib/definitions/elements/generated/662.relationship_code.rb +1 -1
- data/lib/definitions/elements/generated/668.line_item_status_code.rb +1 -1
- data/lib/definitions/elements/generated/67.identification_code.rb +1 -1
- data/lib/definitions/elements/generated/687.class_of_trade_code.rb +1 -1
- data/lib/definitions/elements/generated/750.product_process_characteristic_code.rb +1 -1
- data/lib/definitions/elements/generated/751.product_description_code.rb +1 -1
- data/lib/definitions/elements/generated/76.invoice_number.rb +1 -1
- data/lib/definitions/elements/generated/782.monetary_amount.rb +1 -1
- data/lib/definitions/elements/generated/786.security_level_code.rb +1 -1
- data/lib/definitions/elements/generated/79.lading_description.rb +1 -1
- data/lib/definitions/elements/generated/80.lading_quantity.rb +1 -1
- data/lib/definitions/elements/generated/87.marks_and_numbers.rb +1 -1
- data/lib/definitions/elements/generated/88.marks_and_numbers_qualifier.rb +1 -1
- data/lib/definitions/elements/generated/91.transportation_method_type_code.rb +1 -1
- data/lib/definitions/elements/generated/92.purchase_order_type_code.rb +1 -1
- data/lib/definitions/elements/generated/98.entity_identifier_code.rb +1 -1
- data/lib/definitions/elements/manual/116.postal_code.rb +1 -1
- data/lib/definitions/elements/manual/124.application_receivers_code.rb +1 -1
- data/lib/definitions/elements/manual/140.standard_carrier_alpha_code.rb +1 -1
- data/lib/definitions/elements/manual/142.application_senders_code.rb +1 -1
- data/lib/definitions/elements/manual/143.transaction_set_identifier_code.rb +1 -1
- data/lib/definitions/elements/manual/156.state_or_province_code.rb +1 -1
- data/lib/definitions/elements/manual/28.group_control_number.rb +1 -1
- data/lib/definitions/elements/manual/329.transactional_set_control_number.rb +2 -2
- data/lib/definitions/elements/manual/337.time.rb +1 -1
- data/lib/definitions/elements/manual/350.assigned_identification.rb +1 -1
- data/lib/definitions/elements/manual/373.date.rb +1 -1
- data/lib/definitions/elements/manual/455.responsible_agency_code.rb +1 -1
- data/lib/definitions/elements/manual/479.functional_identifier_code.rb +1 -1
- data/lib/definitions/elements/manual/480.version_release_industry_identifier_code.rb +1 -1
- data/lib/definitions/elements/manual/784.length_of_binary_data.rb +1 -1
- data/lib/definitions/elements/manual/785.binary_data.rb +1 -1
- data/lib/definitions/elements/manual/96.number_of_included_segments.rb +1 -1
- data/lib/definitions/elements/manual/97.number_of_transaction_sets_included.rb +1 -1
- data/lib/definitions/elements/manual/hl/628.hierarchical_id_number.rb +1 -1
- data/lib/definitions/elements/manual/hl/734.hierarchical_parent_id_number.rb +1 -1
- data/lib/definitions/elements/manual/hl/735.hierarchical_level_code.rb +1 -1
- data/lib/definitions/elements/manual/hl/736.hierarchical_child_code.rb +1 -1
- data/lib/definitions/elements/manual/i/I01.authorization_information_qualifier.rb +1 -1
- data/lib/definitions/elements/manual/i/I02.authorization_information.rb +1 -1
- data/lib/definitions/elements/manual/i/I03.security_information_qualifier.rb +1 -1
- data/lib/definitions/elements/manual/i/I04.security_information.rb +1 -1
- data/lib/definitions/elements/manual/i/I05.interchange_id_qualifier.rb +1 -1
- data/lib/definitions/elements/manual/i/I06.interchange_sender_id.rb +1 -1
- data/lib/definitions/elements/manual/i/I07.interchange_receiver_id.rb +1 -1
- data/lib/definitions/elements/manual/i/I08.interchange_date.rb +1 -1
- data/lib/definitions/elements/manual/i/I09.interchange_time.rb +1 -1
- data/lib/definitions/elements/manual/i/I10.interchange_control_standards_identifier.rb +1 -1
- data/lib/definitions/elements/manual/i/I11.interchange_control_version_number.rb +1 -1
- data/lib/definitions/elements/manual/i/I12.interchange_control_number.rb +1 -1
- data/lib/definitions/elements/manual/i/I13.acknowledgment_requested.rb +1 -1
- data/lib/definitions/elements/manual/i/I14.usage_indicator.rb +1 -1
- data/lib/definitions/elements/manual/i/I15.component_element_separator.rb +1 -1
- data/lib/definitions/elements/manual/i/I16.number_of_included_functional_groups.rb +1 -1
- data/lib/definitions/elements/manual/misc/81.weight.rb +1 -1
- data/lib/definitions/elements/manual/misc/93.name.rb +1 -1
- data/lib/definitions/segments/generated/ack.rb +1 -1
- data/lib/definitions/segments/generated/bak.rb +1 -1
- data/lib/definitions/segments/generated/beg.rb +1 -1
- data/lib/definitions/segments/generated/big.rb +1 -1
- data/lib/definitions/segments/generated/bsn.rb +1 -1
- data/lib/definitions/segments/generated/cad.rb +1 -1
- data/lib/definitions/segments/generated/ctp.rb +1 -1
- data/lib/definitions/segments/generated/ctt.rb +1 -1
- data/lib/definitions/segments/generated/dtm.rb +1 -1
- data/lib/definitions/segments/generated/it1.rb +1 -1
- data/lib/definitions/segments/generated/lin.rb +1 -1
- data/lib/definitions/segments/generated/man.rb +1 -1
- data/lib/definitions/segments/generated/n1.rb +1 -1
- data/lib/definitions/segments/generated/n3.rb +1 -1
- data/lib/definitions/segments/generated/n4.rb +1 -1
- data/lib/definitions/segments/generated/pid.rb +1 -1
- data/lib/definitions/segments/generated/po1.rb +1 -1
- data/lib/definitions/segments/generated/prf.rb +1 -1
- data/lib/definitions/segments/generated/ref.rb +1 -1
- data/lib/definitions/segments/generated/sac.rb +1 -1
- data/lib/definitions/segments/generated/sln.rb +1 -1
- data/lib/definitions/segments/generated/sn1.rb +1 -1
- data/lib/definitions/segments/generated/td1.rb +1 -1
- data/lib/definitions/segments/generated/td5.rb +1 -1
- data/lib/definitions/segments/generated/tds.rb +1 -1
- data/lib/definitions/segments/manual/envelopes/ge.rb +1 -1
- data/lib/definitions/segments/manual/envelopes/gs.rb +1 -1
- data/lib/definitions/segments/manual/envelopes/iea.rb +1 -1
- data/lib/definitions/segments/manual/envelopes/isa.rb +1 -1
- data/lib/definitions/segments/manual/envelopes/se.rb +1 -1
- data/lib/definitions/segments/manual/envelopes/st.rb +1 -1
- data/lib/definitions/segments/manual/hl.rb +1 -1
- data/lib/definitions/segments/manual/n2.rb +1 -1
- data/lib/definitions/transaction_sets/manual/810/810.rb +19 -24
- data/lib/definitions/transaction_sets/manual/810/loops/it1.rb +92 -0
- data/lib/definitions/transaction_sets/manual/810/loops/n1.rb +72 -0
- data/lib/definitions/transaction_sets/manual/810/loops/pid.rb +45 -0
- data/lib/definitions/transaction_sets/manual/810/loops/sac.rb +45 -0
- data/lib/definitions/transaction_sets/manual/850/850.rb +12 -14
- data/lib/definitions/transaction_sets/manual/850/loops/n1.rb +74 -0
- data/lib/definitions/transaction_sets/manual/850/loops/po1.rb +51 -0
- data/lib/definitions/transaction_sets/manual/855/855.rb +11 -15
- data/lib/definitions/transaction_sets/manual/855/loops/ack.rb +45 -0
- data/lib/definitions/transaction_sets/manual/855/loops/n1.rb +72 -0
- data/lib/definitions/transaction_sets/manual/855/loops/pid.rb +45 -0
- data/lib/definitions/transaction_sets/manual/855/loops/po1.rb +80 -0
- data/lib/definitions/transaction_sets/manual/856/856.rb +8 -16
- data/lib/definitions/transaction_sets/manual/856/loops/hl_item.rb +87 -0
- data/lib/definitions/transaction_sets/manual/856/loops/hl_order.rb +59 -0
- data/lib/definitions/transaction_sets/manual/856/loops/hl_shipment.rb +159 -0
- data/lib/definitions/transaction_sets/manual/856/loops/hl_tare.rb +59 -0
- data/lib/definitions/transaction_sets/manual/856/loops/n1.rb +71 -0
- data/lib/definitions/transaction_sets/manual/856/loops/sln.rb +44 -0
- data/lib/eddy/build/elements/element.rb +5 -5
- data/lib/eddy/build/elements/elements.rb +3 -3
- data/lib/eddy/build/elements/id.rb +1 -1
- data/lib/eddy/build/elements/n.rb +1 -1
- data/lib/eddy/build/loop/base.rb +49 -0
- data/lib/eddy/build/loop/render.rb +18 -0
- data/lib/eddy/build/loop/repeat.rb +86 -0
- data/lib/eddy/build/segment_builder.rb +14 -9
- data/lib/eddy/build/transaction_set_builder.rb +60 -93
- data/lib/eddy/build.rb +3 -1
- data/lib/eddy/errors.rb +16 -15
- data/lib/eddy/models/element/an.rb +45 -43
- data/lib/eddy/models/element/b.rb +45 -43
- data/lib/eddy/models/element/base.rb +102 -100
- data/lib/eddy/models/element/composite.rb +5 -3
- data/lib/eddy/models/element/dt.rb +82 -80
- data/lib/eddy/models/element/id.rb +47 -45
- data/lib/eddy/models/element/n.rb +79 -77
- data/lib/eddy/models/element/r.rb +70 -68
- data/lib/eddy/models/element/tm.rb +95 -93
- data/lib/eddy/models/element.rb +4 -2
- data/lib/eddy/models/functional_group.rb +29 -27
- data/lib/eddy/models/interchange.rb +49 -47
- data/lib/eddy/models/loop/base.rb +62 -63
- data/lib/eddy/models/loop/repeat.rb +43 -31
- data/lib/eddy/models/segment.rb +30 -28
- data/lib/eddy/models/transaction_set.rb +82 -80
- data/lib/eddy/models.rb +1 -1
- data/lib/eddy/{schema/element_summary.rb → summary/element.rb} +3 -3
- data/lib/eddy/{schema/loop_summary.rb → summary/loop.rb} +53 -16
- data/lib/eddy/{schema/segment_summary.rb → summary/segment.rb} +14 -6
- data/lib/eddy/{schema/transaction_set_summary.rb → summary/transaction_set.rb} +14 -13
- data/lib/eddy/{schema → summary}/validate.rb +1 -1
- data/lib/eddy/summary.rb +10 -0
- data/lib/eddy/util.rb +5 -5
- data/lib/eddy/version.rb +1 -1
- data/lib/eddy.rb +1 -7
- data/todo.txt +3 -5
- metadata +28 -13
- data/lib/definitions/transaction_sets/manual/810/loops.rb +0 -109
- data/lib/definitions/transaction_sets/manual/850/loops.rb +0 -58
- data/lib/definitions/transaction_sets/manual/855/loops.rb +0 -104
- data/lib/definitions/transaction_sets/manual/856/loops.rb +0 -155
- data/lib/eddy/build/loop_builder.rb +0 -93
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
module Eddy
|
|
2
|
-
module
|
|
2
|
+
module Summary
|
|
3
3
|
# A repeated collection of Segments and/or other Loops. Used in Companion Guides.
|
|
4
|
-
class
|
|
4
|
+
class Loop
|
|
5
5
|
|
|
6
6
|
# A unique string used to identify the Loop within its Transaction Set.
|
|
7
7
|
# @return [String]
|
|
8
8
|
attr_accessor :id
|
|
9
9
|
# Number of times a particular Loop may be repeated.
|
|
10
10
|
# @return [Integer]
|
|
11
|
-
attr_accessor :
|
|
11
|
+
attr_accessor :repeat_limit
|
|
12
12
|
# *Syntax*, *Semantic*, or *Comment* notes on a Loop.
|
|
13
13
|
# @return [String]
|
|
14
14
|
attr_accessor :notes
|
|
@@ -19,7 +19,7 @@ module Eddy
|
|
|
19
19
|
# @return [String]
|
|
20
20
|
attr_accessor :req
|
|
21
21
|
# The components that make up the Loop.
|
|
22
|
-
# @return [Array<Eddy::
|
|
22
|
+
# @return [Array<Eddy::Summary::Segment, Eddy::Summary::Loop>]
|
|
23
23
|
attr_accessor :components
|
|
24
24
|
|
|
25
25
|
# @return [void]
|
|
@@ -30,9 +30,9 @@ module Eddy
|
|
|
30
30
|
# @param params [Hash]
|
|
31
31
|
# @return [self]
|
|
32
32
|
def self.create(params = {})
|
|
33
|
-
l =
|
|
33
|
+
l = new()
|
|
34
34
|
l.id = params[:loop_id]
|
|
35
|
-
l.
|
|
35
|
+
l.repeat_limit = params[:repeat]
|
|
36
36
|
l.notes = params[:notes]
|
|
37
37
|
l.level = params[:level]
|
|
38
38
|
l.req = params[:req]
|
|
@@ -43,9 +43,9 @@ module Eddy
|
|
|
43
43
|
# @param path [String] Path to a JSON or YAML file containing a valid Loop definition.
|
|
44
44
|
# @return [self]
|
|
45
45
|
def self.from_file(path)
|
|
46
|
-
raise Eddy::Errors::Error, "Invalid segment definition" unless Eddy::
|
|
46
|
+
raise Eddy::Errors::Error, "Invalid segment definition" unless Eddy::Summary.valid_loop_data?(path)
|
|
47
47
|
data = Eddy::Util.read_json_or_yaml(path)
|
|
48
|
-
return
|
|
48
|
+
return self.create(data)
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
# @param components [Array<Hash>]
|
|
@@ -54,9 +54,9 @@ module Eddy
|
|
|
54
54
|
return if components.nil?
|
|
55
55
|
components.each do |comp|
|
|
56
56
|
if comp.key?(:loop_id)
|
|
57
|
-
self.components << Eddy::
|
|
57
|
+
self.components << Eddy::Summary::Loop.create(comp)
|
|
58
58
|
else
|
|
59
|
-
self.components << Eddy::
|
|
59
|
+
self.components << Eddy::Summary::Segment.create(comp)
|
|
60
60
|
end
|
|
61
61
|
end
|
|
62
62
|
end
|
|
@@ -69,14 +69,14 @@ module Eddy
|
|
|
69
69
|
comps = ""
|
|
70
70
|
self.components.each do |comp|
|
|
71
71
|
case comp
|
|
72
|
-
when Eddy::
|
|
73
|
-
when Eddy::
|
|
72
|
+
when Eddy::Summary::Segment then comps << " - #{comp.id.upcase}\n"
|
|
73
|
+
when Eddy::Summary::Loop then comps << " - #{comp.id.upcase} (loop)\n"
|
|
74
74
|
end
|
|
75
75
|
end
|
|
76
76
|
parts = []
|
|
77
77
|
parts << "### Loop Summary:\n" if header
|
|
78
78
|
parts << <<~YARD.strip
|
|
79
|
-
- Repeat: #{self.
|
|
79
|
+
- Repeat: #{self.repeat_limit}
|
|
80
80
|
- Components:
|
|
81
81
|
#{comps}
|
|
82
82
|
YARD
|
|
@@ -85,17 +85,54 @@ module Eddy
|
|
|
85
85
|
|
|
86
86
|
# Return all components in a single, flattened array.
|
|
87
87
|
#
|
|
88
|
-
# @return [Array<Eddy::
|
|
88
|
+
# @return [Array<Eddy::Summary::Segment, Eddy::Summary::Loop>]
|
|
89
89
|
def all_components()
|
|
90
90
|
return self.components.map do |comp|
|
|
91
91
|
case comp
|
|
92
|
-
when Eddy::
|
|
93
|
-
when Eddy::
|
|
92
|
+
when Eddy::Summary::Loop then [comp, comp.all_components()]
|
|
93
|
+
when Eddy::Summary::Segment then comp
|
|
94
94
|
else raise Eddy::Errors::Error
|
|
95
95
|
end
|
|
96
96
|
end.flatten
|
|
97
97
|
end
|
|
98
98
|
|
|
99
|
+
# Return `id` with `"l_"` slapped on the front if it wasn't already there.
|
|
100
|
+
# Meant to be used for instance variable names.
|
|
101
|
+
#
|
|
102
|
+
# @return [String]
|
|
103
|
+
def var_name()
|
|
104
|
+
if self.id.start_with?(/\Ah?l_/i)
|
|
105
|
+
return self.id.downcase
|
|
106
|
+
else
|
|
107
|
+
return "l_#{self.id.downcase}"
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Return `id` with the prefixes `"l_"` or `"hl_" removed.
|
|
112
|
+
#
|
|
113
|
+
# @return [String]
|
|
114
|
+
def class_name()
|
|
115
|
+
return self.id.downcase.gsub(/\Ah?l_/i, "")
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Returns `true` if the loop is a Hierarchical Loop.
|
|
119
|
+
# Meant to be used for class or module names.
|
|
120
|
+
#
|
|
121
|
+
# @return [Boolean]
|
|
122
|
+
def hierarchical?()
|
|
123
|
+
return self.id =~ /\Ahl_/i
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# Returns `true` the loop should be treated as a segment when Generating ruby code.
|
|
127
|
+
# (For use in {Eddy::Build})
|
|
128
|
+
#
|
|
129
|
+
# @return [Boolean]
|
|
130
|
+
def build_as_segment?()
|
|
131
|
+
return false if self.hierarchical?
|
|
132
|
+
return false if self.repeat_limit > 1
|
|
133
|
+
return true
|
|
134
|
+
end
|
|
135
|
+
|
|
99
136
|
end
|
|
100
137
|
end
|
|
101
138
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module Eddy
|
|
2
|
-
module
|
|
2
|
+
module Summary
|
|
3
3
|
# A collection of Data Elements. Used in Companion Guides to define a Transaction Set.
|
|
4
|
-
class
|
|
4
|
+
class Segment
|
|
5
5
|
|
|
6
6
|
# Indicates the order in which Segments should appear in their Level of the Transaction Set.
|
|
7
7
|
# @return [String]
|
|
@@ -34,7 +34,7 @@ module Eddy
|
|
|
34
34
|
# @return [String]
|
|
35
35
|
attr_accessor :level
|
|
36
36
|
# Number of Data Elements included in the Segment.
|
|
37
|
-
# @return [Array<Eddy::
|
|
37
|
+
# @return [Array<Eddy::Summary::Element>]
|
|
38
38
|
attr_accessor :elements
|
|
39
39
|
|
|
40
40
|
# @return [void]
|
|
@@ -63,9 +63,9 @@ module Eddy
|
|
|
63
63
|
# @param path [String] Path to a JSON or YAML file containing a valid Segment definition.
|
|
64
64
|
# @return [self]
|
|
65
65
|
def self.from_file(path)
|
|
66
|
-
raise Eddy::Errors::Error, "Invalid segment definition" unless Eddy::
|
|
66
|
+
raise Eddy::Errors::Error, "Invalid segment definition" unless Eddy::Summary.valid_segment_data?(path)
|
|
67
67
|
data = Eddy::Util.read_json_or_yaml(path)
|
|
68
|
-
return Eddy::
|
|
68
|
+
return Eddy::Summary::Segment.create(data)
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
# @param id [String]
|
|
@@ -89,7 +89,7 @@ module Eddy
|
|
|
89
89
|
def process_elements(elements)
|
|
90
90
|
return if elements.nil?
|
|
91
91
|
elements.each do |el|
|
|
92
|
-
default_el = Eddy::
|
|
92
|
+
default_el = Eddy::Summary::Element.default_for_id(el[:id])
|
|
93
93
|
default_el.ref = el[:ref]
|
|
94
94
|
default_el.req = el[:req] || nil
|
|
95
95
|
self.elements << default_el
|
|
@@ -111,6 +111,14 @@ module Eddy
|
|
|
111
111
|
return parts.compact.join("\n")
|
|
112
112
|
end
|
|
113
113
|
|
|
114
|
+
# Helper function to simplify conditional logic in {Eddy::Build}.
|
|
115
|
+
#
|
|
116
|
+
# @see {Eddy::Summary::Loop#treat_as_segment?}
|
|
117
|
+
# @return [Boolean] (true) Always returns true.
|
|
118
|
+
def build_as_segment?()
|
|
119
|
+
return true
|
|
120
|
+
end
|
|
121
|
+
|
|
114
122
|
end
|
|
115
123
|
end
|
|
116
124
|
end
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
module Eddy
|
|
2
|
-
module
|
|
2
|
+
module Summary
|
|
3
3
|
# An outline of all required components for an EDI transaction set implementation.
|
|
4
|
-
class
|
|
4
|
+
class TransactionSet
|
|
5
|
+
|
|
5
6
|
# A short code identifying the Transaction Set.
|
|
6
7
|
# @return [Integer]
|
|
7
8
|
attr_accessor :id
|
|
@@ -12,7 +13,7 @@ module Eddy
|
|
|
12
13
|
# @return [String]
|
|
13
14
|
attr_accessor :functional_group
|
|
14
15
|
# The components that make up the Transaction Set.
|
|
15
|
-
# @return [Array<Eddy::
|
|
16
|
+
# @return [Array<Eddy::Summary::Segment, Eddy::Summary::Loop>]
|
|
16
17
|
attr_accessor :components
|
|
17
18
|
|
|
18
19
|
# @return [void]
|
|
@@ -23,7 +24,7 @@ module Eddy
|
|
|
23
24
|
# @param params [Hash]
|
|
24
25
|
# @return [self]
|
|
25
26
|
def self.create(params = {})
|
|
26
|
-
summary =
|
|
27
|
+
summary = new()
|
|
27
28
|
summary.id = params[:id]
|
|
28
29
|
summary.name = params[:name]
|
|
29
30
|
summary.functional_group = params[:functional_group]
|
|
@@ -34,9 +35,9 @@ module Eddy
|
|
|
34
35
|
# @param path [String] Path to a JSON or YAML file containing a valid Segment definition.
|
|
35
36
|
# @return [self]
|
|
36
37
|
def self.from_file(path)
|
|
37
|
-
raise Eddy::Errors::Error, "Invalid transaction set definition" unless Eddy::
|
|
38
|
+
raise Eddy::Errors::Error, "Invalid transaction set definition" unless Eddy::Summary.valid_transaction_set_data?(path)
|
|
38
39
|
data = Eddy::Util.read_json_or_yaml(path)
|
|
39
|
-
return Eddy::
|
|
40
|
+
return Eddy::Summary::TransactionSet.create(data)
|
|
40
41
|
end
|
|
41
42
|
|
|
42
43
|
# @param components [Array<Hash>]
|
|
@@ -44,9 +45,9 @@ module Eddy
|
|
|
44
45
|
def process_components(components)
|
|
45
46
|
components.each do |comp|
|
|
46
47
|
if comp.key?(:loop_id)
|
|
47
|
-
self.components << Eddy::
|
|
48
|
+
self.components << Eddy::Summary::Loop.create(comp)
|
|
48
49
|
else
|
|
49
|
-
self.components << Eddy::
|
|
50
|
+
self.components << Eddy::Summary::Segment.create(comp)
|
|
50
51
|
end
|
|
51
52
|
end
|
|
52
53
|
end
|
|
@@ -73,12 +74,12 @@ module Eddy
|
|
|
73
74
|
|
|
74
75
|
# Return all components in a single, flattened array.
|
|
75
76
|
#
|
|
76
|
-
# @return [Array<Eddy::
|
|
77
|
+
# @return [Array<Eddy::Summary::Segment, Eddy::Summary::Loop>]
|
|
77
78
|
def all_components()
|
|
78
79
|
return self.components.map do |comp|
|
|
79
80
|
case comp
|
|
80
|
-
when Eddy::
|
|
81
|
-
when Eddy::
|
|
81
|
+
when Eddy::Summary::Loop then [comp, comp.all_components()]
|
|
82
|
+
when Eddy::Summary::Segment then comp
|
|
82
83
|
else raise Eddy::Errors::Error
|
|
83
84
|
end
|
|
84
85
|
end.flatten
|
|
@@ -86,9 +87,9 @@ module Eddy
|
|
|
86
87
|
|
|
87
88
|
# Return one of each kind of loop in the Transaction Set.
|
|
88
89
|
#
|
|
89
|
-
# @return [Array<Eddy::
|
|
90
|
+
# @return [Array<Eddy::Summary::Loop>]
|
|
90
91
|
def unique_loops()
|
|
91
|
-
return self.all_components.select { |c| c.is_a?(Eddy::
|
|
92
|
+
return self.all_components.select { |c| c.is_a?(Eddy::Summary::Loop) }.uniq(&:id)
|
|
92
93
|
end
|
|
93
94
|
|
|
94
95
|
end
|
data/lib/eddy/summary.rb
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
require "eddy/summary/validate"
|
|
2
|
+
require "eddy/summary/element"
|
|
3
|
+
require "eddy/summary/segment"
|
|
4
|
+
require "eddy/summary/loop"
|
|
5
|
+
require "eddy/summary/transaction_set"
|
|
6
|
+
|
|
7
|
+
module Eddy
|
|
8
|
+
# Classes containing data for EDI component definitions.
|
|
9
|
+
module Summary; end
|
|
10
|
+
end
|
data/lib/eddy/util.rb
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
module Eddy
|
|
2
|
-
# Assorted helper functions.
|
|
3
|
-
module Util; end
|
|
4
|
-
end
|
|
5
|
-
|
|
6
1
|
require "eddy/util/new_number"
|
|
7
2
|
require "eddy/util/normalize"
|
|
8
3
|
require "eddy/util/trim"
|
|
@@ -14,3 +9,8 @@ require "eddy/util/time"
|
|
|
14
9
|
require "eddy/util/paths"
|
|
15
10
|
|
|
16
11
|
require "eddy/util/edi_data"
|
|
12
|
+
|
|
13
|
+
module Eddy
|
|
14
|
+
# Assorted helper functions.
|
|
15
|
+
module Util; end
|
|
16
|
+
end
|
data/lib/eddy/version.rb
CHANGED
data/lib/eddy.rb
CHANGED
|
@@ -6,17 +6,11 @@ require "eddy/errors"
|
|
|
6
6
|
require "eddy/util"
|
|
7
7
|
require "eddy/config"
|
|
8
8
|
require "eddy/data"
|
|
9
|
-
|
|
10
|
-
Dir.glob(File.join(__dir__, "eddy", "schema", "*.rb")).sort.each { |file| require file }
|
|
11
|
-
|
|
9
|
+
require "eddy/summary"
|
|
12
10
|
require "eddy/models"
|
|
13
11
|
require "eddy/parse"
|
|
14
12
|
require "eddy/build"
|
|
15
13
|
|
|
16
|
-
# Dir.glob(File.join(__dir__, "definitions", "elements", "manual", "**", "*.rb")).sort.each { |file| require file }
|
|
17
|
-
# Dir.glob(File.join(__dir__, "definitions", "segments", "manual", "**", "*.rb")).sort.each { |file| require file }
|
|
18
|
-
# Dir.glob(File.join(__dir__, "definitions", "transaction_sets", "manual", "**", "*.rb")).sort.each { |file| require file }
|
|
19
|
-
|
|
20
14
|
Dir.glob(File.join(__dir__, "definitions", "elements", "**", "*.rb")).sort.each { |file| require file }
|
|
21
15
|
Dir.glob(File.join(__dir__, "definitions", "segments", "**", "*.rb")).sort.each { |file| require file }
|
|
22
16
|
Dir.glob(File.join(__dir__, "definitions", "transaction_sets", "**", "*.rb")).sort.each { |file| require file }
|
data/todo.txt
CHANGED
|
@@ -4,14 +4,12 @@ x 2019-12-20 Write code to build all segments.
|
|
|
4
4
|
x 2020-01-02 2019-12-20 Figure out how to deal with loops.
|
|
5
5
|
x 2020-01-03 2019-12-20 Finish TransactionSetBuilder.
|
|
6
6
|
x 2020-01-05 2019-12-20 Reset `Eddy.data` when `Eddy.config.persistence_method` changes.
|
|
7
|
+
x 2019-12-20 Add a DB persistence_method. (see eddy-rails)
|
|
8
|
+
x 2020-01-07 2019-12-28 If a loop can only repeat once, dont treat it as a loop.
|
|
7
9
|
|
|
8
|
-
2019-12-28 If a loop can only repeat once, dont treat it as a loop.
|
|
9
|
-
2019-12-20 Add a DB persistence_method.
|
|
10
|
-
2019-12-20 Check for conflicts in Rails generators.
|
|
11
|
-
2019-12-20 Write a Rails model generator.
|
|
12
10
|
2019-12-27 Generate "ref map" files.
|
|
13
11
|
2019-12-30 Logging
|
|
14
12
|
2019-12-30 JSON schema validation errors.
|
|
15
13
|
2020-01-02 Ensure loops dont go over repeat limit.
|
|
16
14
|
2020-01-02 Implement `Segment.max_use` & `Segment.min_use`.
|
|
17
|
-
2020-01-05 Move `Build` to `eddy-build
|
|
15
|
+
2020-01-05 Move `Build` to `eddy-build`?
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: eddy
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Clay Dunston
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-01-
|
|
11
|
+
date: 2020-01-07 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -1483,20 +1483,34 @@ files:
|
|
|
1483
1483
|
- lib/definitions/segments/manual/hl.rb
|
|
1484
1484
|
- lib/definitions/segments/manual/n2.rb
|
|
1485
1485
|
- lib/definitions/transaction_sets/manual/810/810.rb
|
|
1486
|
-
- lib/definitions/transaction_sets/manual/810/loops.rb
|
|
1486
|
+
- lib/definitions/transaction_sets/manual/810/loops/it1.rb
|
|
1487
|
+
- lib/definitions/transaction_sets/manual/810/loops/n1.rb
|
|
1488
|
+
- lib/definitions/transaction_sets/manual/810/loops/pid.rb
|
|
1489
|
+
- lib/definitions/transaction_sets/manual/810/loops/sac.rb
|
|
1487
1490
|
- lib/definitions/transaction_sets/manual/850/850.rb
|
|
1488
|
-
- lib/definitions/transaction_sets/manual/850/loops.rb
|
|
1491
|
+
- lib/definitions/transaction_sets/manual/850/loops/n1.rb
|
|
1492
|
+
- lib/definitions/transaction_sets/manual/850/loops/po1.rb
|
|
1489
1493
|
- lib/definitions/transaction_sets/manual/855/855.rb
|
|
1490
|
-
- lib/definitions/transaction_sets/manual/855/loops.rb
|
|
1494
|
+
- lib/definitions/transaction_sets/manual/855/loops/ack.rb
|
|
1495
|
+
- lib/definitions/transaction_sets/manual/855/loops/n1.rb
|
|
1496
|
+
- lib/definitions/transaction_sets/manual/855/loops/pid.rb
|
|
1497
|
+
- lib/definitions/transaction_sets/manual/855/loops/po1.rb
|
|
1491
1498
|
- lib/definitions/transaction_sets/manual/856/856.rb
|
|
1492
|
-
- lib/definitions/transaction_sets/manual/856/loops.rb
|
|
1499
|
+
- lib/definitions/transaction_sets/manual/856/loops/hl_item.rb
|
|
1500
|
+
- lib/definitions/transaction_sets/manual/856/loops/hl_order.rb
|
|
1501
|
+
- lib/definitions/transaction_sets/manual/856/loops/hl_shipment.rb
|
|
1502
|
+
- lib/definitions/transaction_sets/manual/856/loops/hl_tare.rb
|
|
1503
|
+
- lib/definitions/transaction_sets/manual/856/loops/n1.rb
|
|
1504
|
+
- lib/definitions/transaction_sets/manual/856/loops/sln.rb
|
|
1493
1505
|
- lib/eddy.rb
|
|
1494
1506
|
- lib/eddy/build.rb
|
|
1495
1507
|
- lib/eddy/build/elements/element.rb
|
|
1496
1508
|
- lib/eddy/build/elements/elements.rb
|
|
1497
1509
|
- lib/eddy/build/elements/id.rb
|
|
1498
1510
|
- lib/eddy/build/elements/n.rb
|
|
1499
|
-
- lib/eddy/build/
|
|
1511
|
+
- lib/eddy/build/loop/base.rb
|
|
1512
|
+
- lib/eddy/build/loop/render.rb
|
|
1513
|
+
- lib/eddy/build/loop/repeat.rb
|
|
1500
1514
|
- lib/eddy/build/segment_builder.rb
|
|
1501
1515
|
- lib/eddy/build/transaction_set_builder.rb
|
|
1502
1516
|
- lib/eddy/cli.rb
|
|
@@ -1525,11 +1539,12 @@ files:
|
|
|
1525
1539
|
- lib/eddy/models/segment.rb
|
|
1526
1540
|
- lib/eddy/models/transaction_set.rb
|
|
1527
1541
|
- lib/eddy/parse.rb
|
|
1528
|
-
- lib/eddy/
|
|
1529
|
-
- lib/eddy/
|
|
1530
|
-
- lib/eddy/
|
|
1531
|
-
- lib/eddy/
|
|
1532
|
-
- lib/eddy/
|
|
1542
|
+
- lib/eddy/summary.rb
|
|
1543
|
+
- lib/eddy/summary/element.rb
|
|
1544
|
+
- lib/eddy/summary/loop.rb
|
|
1545
|
+
- lib/eddy/summary/segment.rb
|
|
1546
|
+
- lib/eddy/summary/transaction_set.rb
|
|
1547
|
+
- lib/eddy/summary/validate.rb
|
|
1533
1548
|
- lib/eddy/util.rb
|
|
1534
1549
|
- lib/eddy/util/clean_folder.rb
|
|
1535
1550
|
- lib/eddy/util/edi_data.rb
|
|
@@ -1554,7 +1569,7 @@ metadata:
|
|
|
1554
1569
|
homepage_uri: https://github.com/tcd/eddy
|
|
1555
1570
|
source_code_uri: https://github.com/tcd/eddy
|
|
1556
1571
|
changelog_uri: https://github.com/tcd/eddy/blob/master/CHANGELOG.md
|
|
1557
|
-
documentation_uri: https://www.rubydoc.info/gems/eddy/0.
|
|
1572
|
+
documentation_uri: https://www.rubydoc.info/gems/eddy/0.6.0
|
|
1558
1573
|
yard.run: yri
|
|
1559
1574
|
post_install_message:
|
|
1560
1575
|
rdoc_options: []
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
module Eddy
|
|
2
|
-
module TransactionSets
|
|
3
|
-
# Namespace for Transaction Set 810 and its loops.
|
|
4
|
-
module TS810
|
|
5
|
-
module Loops
|
|
6
|
-
|
|
7
|
-
# ### Loop Summary:
|
|
8
|
-
#
|
|
9
|
-
# - Repeat: 200
|
|
10
|
-
# - Components:
|
|
11
|
-
# - N1
|
|
12
|
-
# - N3
|
|
13
|
-
# - N4
|
|
14
|
-
class N1 < Eddy::Loop::Base
|
|
15
|
-
# @param store [Eddy::Data::Store]
|
|
16
|
-
# @return [void]
|
|
17
|
-
def initialize(store)
|
|
18
|
-
super(store)
|
|
19
|
-
@repeat = 200
|
|
20
|
-
@components = [
|
|
21
|
-
Eddy::Segments::N1,
|
|
22
|
-
Eddy::Segments::N3,
|
|
23
|
-
Eddy::Segments::N4,
|
|
24
|
-
]
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# @!method add_iteration(&block)
|
|
28
|
-
# @yieldparam [Eddy::Segments::N1] n1
|
|
29
|
-
# @yieldparam [Eddy::Segments::N3] n3
|
|
30
|
-
# @yieldparam [Eddy::Segments::N4] n4
|
|
31
|
-
# @return [void]
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# ### Loop Summary:
|
|
35
|
-
#
|
|
36
|
-
# - Repeat: 200,000
|
|
37
|
-
# - Components:
|
|
38
|
-
# - IT1
|
|
39
|
-
# - CTP
|
|
40
|
-
# - PID (Loop)
|
|
41
|
-
# - SAC (loop)
|
|
42
|
-
class IT1 < Eddy::Loop::Base
|
|
43
|
-
# @param store [Eddy::Data::Store]
|
|
44
|
-
# @return [void]
|
|
45
|
-
def initialize(store)
|
|
46
|
-
super(store)
|
|
47
|
-
@repeat = 200_000
|
|
48
|
-
@components = [
|
|
49
|
-
Eddy::Segments::IT1,
|
|
50
|
-
Eddy::Segments::CTP,
|
|
51
|
-
Eddy::TransactionSets::TS810::Loops::PID,
|
|
52
|
-
Eddy::TransactionSets::TS810::Loops::SAC,
|
|
53
|
-
]
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
# @!method add_iteration(&block)
|
|
57
|
-
# @yieldparam [Eddy::Segments::IT1] it1
|
|
58
|
-
# @yieldparam [Eddy::Segments::CTP] ctp
|
|
59
|
-
# @yieldparam [Eddy::TransactionSets::TS850::Loops::PID] l_pid
|
|
60
|
-
# @yieldparam [Eddy::TransactionSets::TS850::Loops::SAC] l_sac
|
|
61
|
-
# @return [void]
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
# ### Loop Summary:
|
|
65
|
-
#
|
|
66
|
-
# - Repeat: 1,000
|
|
67
|
-
# - Components:
|
|
68
|
-
# - PID
|
|
69
|
-
class PID < Eddy::Loop::Base
|
|
70
|
-
# @param store [Eddy::Data::Store]
|
|
71
|
-
# @return [void]
|
|
72
|
-
def initialize(store)
|
|
73
|
-
super(store)
|
|
74
|
-
@repeat = 1_000
|
|
75
|
-
@components = [
|
|
76
|
-
Eddy::Segments::PID,
|
|
77
|
-
]
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
# @!method add_iteration(&block)
|
|
81
|
-
# @yieldparam [Eddy::Segments::PID] pid
|
|
82
|
-
# @return [void]
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
# ### Loop Summary:
|
|
86
|
-
#
|
|
87
|
-
# - Repeat: 25
|
|
88
|
-
# - Components:
|
|
89
|
-
# - SAC
|
|
90
|
-
class SAC < Eddy::Loop::Base
|
|
91
|
-
# @param store [Eddy::Data::Store]
|
|
92
|
-
# @return [void]
|
|
93
|
-
def initialize(store)
|
|
94
|
-
super(store)
|
|
95
|
-
@repeat = 25
|
|
96
|
-
@components = [
|
|
97
|
-
Eddy::Segments::SAC,
|
|
98
|
-
]
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
# @!method add_iteration(&block)
|
|
102
|
-
# @yieldparam [Eddy::Segments::SAC] sac
|
|
103
|
-
# @return [void]
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
end
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
module Eddy
|
|
2
|
-
module TransactionSets
|
|
3
|
-
# Namespace for Transaction Set 850 and its loops.
|
|
4
|
-
module TS850
|
|
5
|
-
module Loops
|
|
6
|
-
|
|
7
|
-
# ### Loop Summary:
|
|
8
|
-
#
|
|
9
|
-
# - Repeat: 200
|
|
10
|
-
# - Components:
|
|
11
|
-
# - N1
|
|
12
|
-
# - N3
|
|
13
|
-
# - N4
|
|
14
|
-
class N1 < Eddy::Loop::Base
|
|
15
|
-
# @param store [Eddy::Data::Store]
|
|
16
|
-
# @return [void]
|
|
17
|
-
def initialize(store)
|
|
18
|
-
super(store)
|
|
19
|
-
@repeat= 200
|
|
20
|
-
@components = [
|
|
21
|
-
Eddy::Segments::N1,
|
|
22
|
-
Eddy::Segments::N3,
|
|
23
|
-
Eddy::Segments::N4,
|
|
24
|
-
]
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# @!method add_iteration(&block)
|
|
28
|
-
# @yieldparam [Eddy::Segments::N1] n1
|
|
29
|
-
# @yieldparam [Eddy::Segments::N3] n3
|
|
30
|
-
# @yieldparam [Eddy::Segments::N4] n4
|
|
31
|
-
# @return [void]
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# ### Loop Summary:
|
|
35
|
-
#
|
|
36
|
-
# - Repeat: 100,000
|
|
37
|
-
# - Components:
|
|
38
|
-
# - PO1
|
|
39
|
-
class PO1 < Eddy::Loop::Base
|
|
40
|
-
# @param store [Eddy::Data::Store]
|
|
41
|
-
# @return [void]
|
|
42
|
-
def initialize(store)
|
|
43
|
-
super(store)
|
|
44
|
-
@repeat = 100_000
|
|
45
|
-
@components = [
|
|
46
|
-
Eddy::Segments::PO1,
|
|
47
|
-
]
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
# @!method add_iteration(&block)
|
|
51
|
-
# @yieldparam [Eddy::Segments::PO1] po1
|
|
52
|
-
# @return [void]
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|