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,116 +1,118 @@
|
|
|
1
1
|
module Eddy
|
|
2
|
-
module
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
module Models
|
|
3
|
+
module Element
|
|
4
|
+
# Base class for EDI Data Element types.
|
|
5
|
+
class Base
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
7
|
+
# Positive number under 1688, or I01-I64
|
|
8
|
+
# @return [String]
|
|
9
|
+
attr_reader :id
|
|
10
|
+
# @return [String]
|
|
11
|
+
attr_reader :name
|
|
12
|
+
# @return [String]
|
|
13
|
+
attr_reader :description
|
|
14
|
+
# One of: AN, B, DT, ID, N, R, or TM
|
|
15
|
+
# @return [String]
|
|
16
|
+
attr_reader :type
|
|
17
|
+
# Minimum length for a valid value
|
|
18
|
+
# @return [Integer]
|
|
19
|
+
attr_reader :min
|
|
20
|
+
# Maximum length for a valid value
|
|
21
|
+
# @return [Integer]
|
|
22
|
+
attr_reader :max
|
|
23
|
+
# String used to identify a data element within a Segment.
|
|
24
|
+
# @return [String]
|
|
25
|
+
attr_accessor :ref
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
# # @return [void]
|
|
28
|
+
# def initialize(**kwargs)
|
|
28
29
|
|
|
29
|
-
|
|
30
|
+
# end
|
|
30
31
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
# @note Classes inheriting from `Eddy::Element::Base` must define the method `value=`.
|
|
38
|
-
# @return [void]
|
|
39
|
-
def value=(*)
|
|
40
|
-
raise NotImplementedError, "Classes inheriting from `Eddy::Element::Base` must define a `value=` method."
|
|
41
|
-
end
|
|
32
|
+
# @note Classes inheriting from `Eddy::Models::Element::Base` must define the method `value`.
|
|
33
|
+
# @return [void]
|
|
34
|
+
def value(*)
|
|
35
|
+
raise NotImplementedError, "Classes inheriting from `Eddy::Models::Element::Base` must define a `value` method."
|
|
36
|
+
end
|
|
42
37
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
# | **O** | Optional | yes |
|
|
49
|
-
# | **C** | Conditional | yes |
|
|
50
|
-
# | F | Floating | deprecated |
|
|
51
|
-
# | R | Required | no |
|
|
52
|
-
# | S | Situational | no |
|
|
53
|
-
# | A | Advised | no |
|
|
54
|
-
# | N | Not Advised | no |
|
|
55
|
-
# | N | Not Used | no |
|
|
56
|
-
# | X | Not Used | no |
|
|
57
|
-
# | X | Conditional | no |
|
|
58
|
-
#
|
|
59
|
-
# See:
|
|
60
|
-
#
|
|
61
|
-
# - [The Data Segment - EDIdEv](https://secure.edidev.net/edidev-ca/help/Using/Using_EDI/Using_AscX12/DataStructures/DataSegment/DataSegment.htm)
|
|
62
|
-
# - [Required vs Mandatory in Code Descriptions - X12 RFI](http://www.x12.org/rfis/Required%20vs%20Mandatory%20in%20Code%20Descriptions.pdf)
|
|
63
|
-
#
|
|
64
|
-
# @return [String]
|
|
65
|
-
def req
|
|
66
|
-
return @req
|
|
67
|
-
end
|
|
38
|
+
# @note Classes inheriting from `Eddy::Models::Element::Base` must define the method `value=`.
|
|
39
|
+
# @return [void]
|
|
40
|
+
def value=(*)
|
|
41
|
+
raise NotImplementedError, "Classes inheriting from `Eddy::Models::Element::Base` must define a `value=` method."
|
|
42
|
+
end
|
|
68
43
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
44
|
+
# Indicates whether the value must be present in its segment.
|
|
45
|
+
#
|
|
46
|
+
# | code | description | official |
|
|
47
|
+
# | ----- | ----------- | ---------- |
|
|
48
|
+
# | **M** | Mandatory | yes |
|
|
49
|
+
# | **O** | Optional | yes |
|
|
50
|
+
# | **C** | Conditional | yes |
|
|
51
|
+
# | F | Floating | deprecated |
|
|
52
|
+
# | R | Required | no |
|
|
53
|
+
# | S | Situational | no |
|
|
54
|
+
# | A | Advised | no |
|
|
55
|
+
# | N | Not Advised | no |
|
|
56
|
+
# | N | Not Used | no |
|
|
57
|
+
# | X | Not Used | no |
|
|
58
|
+
# | X | Conditional | no |
|
|
59
|
+
#
|
|
60
|
+
# See:
|
|
61
|
+
#
|
|
62
|
+
# - [The Data Segment - EDIdEv](https://secure.edidev.net/edidev-ca/help/Using/Using_EDI/Using_AscX12/DataStructures/DataSegment/DataSegment.htm)
|
|
63
|
+
# - [Required vs Mandatory in Code Descriptions - X12 RFI](http://www.x12.org/rfis/Required%20vs%20Mandatory%20in%20Code%20Descriptions.pdf)
|
|
64
|
+
#
|
|
65
|
+
# @return [String]
|
|
66
|
+
def req
|
|
67
|
+
return @req
|
|
77
68
|
end
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
69
|
+
|
|
70
|
+
# (see #req)
|
|
71
|
+
#
|
|
72
|
+
# @param req [String, nil]
|
|
73
|
+
# @return [void]
|
|
74
|
+
def req=(req)
|
|
75
|
+
if req.nil?
|
|
76
|
+
@req = "O"
|
|
77
|
+
return
|
|
78
|
+
end
|
|
79
|
+
raise ArgumentError, req.to_s unless req.is_a?(String)
|
|
80
|
+
case req.upcase
|
|
81
|
+
when "M", "R" then @req = "M"
|
|
82
|
+
when "O" then @req = "O"
|
|
83
|
+
when "C", "X" then @req = "C"
|
|
84
|
+
when "F" then raise Eddy::Errors::Error, "Req value 'F' not supported"
|
|
85
|
+
else raise Eddy::Errors::Error, "Invalid argument for `req=`: #{req}"
|
|
86
|
+
end
|
|
85
87
|
end
|
|
86
|
-
end
|
|
87
88
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
89
|
+
# Generate a description to use as a doc comment for an element.
|
|
90
|
+
#
|
|
91
|
+
# @param header [Boolean] (true)
|
|
92
|
+
# @return [Hash]
|
|
93
|
+
def doc_comment(header: true)
|
|
94
|
+
if header
|
|
95
|
+
return <<~END.strip
|
|
96
|
+
### Element Summary:
|
|
96
97
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
98
|
+
- Id: #{self.id}
|
|
99
|
+
- Name: #{self.name}
|
|
100
|
+
- Type: #{self.type}
|
|
101
|
+
- Min/Max: #{self.min}/#{self.max}
|
|
102
|
+
- Description: #{self.description}
|
|
103
|
+
END
|
|
104
|
+
else
|
|
105
|
+
return <<~END.strip
|
|
106
|
+
- Id: #{self.id}
|
|
107
|
+
- Name: #{self.name}
|
|
108
|
+
- Type: #{self.type}
|
|
109
|
+
- Min/Max: #{self.min}/#{self.max}
|
|
110
|
+
- Description: #{self.description}
|
|
111
|
+
END
|
|
112
|
+
end
|
|
111
113
|
end
|
|
112
|
-
end
|
|
113
114
|
|
|
115
|
+
end
|
|
114
116
|
end
|
|
115
117
|
end
|
|
116
118
|
end
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
module Eddy
|
|
2
|
-
module
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
module Models
|
|
3
|
+
module Element
|
|
4
|
+
# - [References to Component Data Elements - X12 RFI](http://www.x12.org/rfis/References%20to%20Component%20Data%20Elements.pdf)
|
|
5
|
+
class Composite; end
|
|
6
|
+
end
|
|
5
7
|
end
|
|
6
8
|
end
|
|
@@ -1,100 +1,102 @@
|
|
|
1
1
|
require "time"
|
|
2
2
|
|
|
3
3
|
module Eddy
|
|
4
|
-
module
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
module Models
|
|
5
|
+
module Element
|
|
6
|
+
# Date in `YYMMDD` or `CCYYMMDD` format based on EDI version being used (DLMS Baseline is 004010)
|
|
7
|
+
#
|
|
8
|
+
# Values for this type are generated from a *UTC* formatted [Time][time] object.
|
|
9
|
+
#
|
|
10
|
+
# [time]: https://ruby-doc.org/stdlib-2.6.5/libdoc/time/rdoc/Time.html
|
|
11
|
+
class DT < Base
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
# Format for the date. Valid values: `:yymmdd` or `:ccyymmdd`
|
|
14
|
+
# @return [Symbol<:yymmdd, :ccyymmdd>]
|
|
15
|
+
attr_reader :fmt
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
17
|
+
# @param min [Integer] (nil)
|
|
18
|
+
# @param max [Integer] (nil)
|
|
19
|
+
# @param req [String] (nil)
|
|
20
|
+
# @param ref [String] (nil)
|
|
21
|
+
# @param val [Time] (nil) A *UTC* formatted Time object.
|
|
22
|
+
# @param fmt [Symbol] (nil) Format for the date. Valid values: `:yymmdd` or `:ccyymmdd`.
|
|
23
|
+
# @return [void]
|
|
24
|
+
def initialize(
|
|
25
|
+
min: nil,
|
|
26
|
+
max: nil,
|
|
27
|
+
req: nil,
|
|
28
|
+
ref: nil,
|
|
29
|
+
val: nil,
|
|
30
|
+
fmt: nil
|
|
31
|
+
)
|
|
32
|
+
@type = "DT"
|
|
33
|
+
@min = min
|
|
34
|
+
@max = max
|
|
35
|
+
self.req = req
|
|
36
|
+
self.ref = ref
|
|
37
|
+
if fmt.nil?
|
|
38
|
+
raise ArgumentError, "DT elements require either a `fmt` value, or `min` and `max` values." if min.nil? || max.nil?
|
|
39
|
+
@fmt = determine_format()
|
|
40
|
+
else
|
|
41
|
+
self.fmt = fmt
|
|
42
|
+
end
|
|
43
|
+
self.value = val
|
|
41
44
|
end
|
|
42
|
-
self.value = val
|
|
43
|
-
end
|
|
44
45
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
46
|
+
# @raise [Eddy::Errors::ElementNilValueError] If the element is required and no value has been set.
|
|
47
|
+
# @return [String]
|
|
48
|
+
def value()
|
|
49
|
+
if @val.nil?
|
|
50
|
+
case self.req
|
|
51
|
+
when "M" then raise Eddy::Errors::ElementNilValueError.new(element: self)
|
|
52
|
+
when "O", "C" then return ""
|
|
53
|
+
else raise Eddy::Errors::Error, "Invalid req value: #{self.req}"
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
case self.fmt
|
|
57
|
+
when :yymmdd then return Eddy::Util::Time.yymmdd(@val)
|
|
58
|
+
when :ccyymmdd then return Eddy::Util::Time.ccyymmdd(@val)
|
|
59
|
+
else raise Eddy::Errors::Error "invalid fmt value for DT object"
|
|
53
60
|
end
|
|
54
61
|
end
|
|
55
|
-
case self.fmt
|
|
56
|
-
when :yymmdd then return Eddy::Util::Time.yymmdd(@val)
|
|
57
|
-
when :ccyymmdd then return Eddy::Util::Time.ccyymmdd(@val)
|
|
58
|
-
else raise Eddy::Errors::Error "invalid fmt value for DT object"
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
62
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
# @raise [ElementValidationError] Unless passed a *UTC* formatted `Time` object.
|
|
64
|
+
# @param arg [Time] A *UTC* formatted [Time](https://ruby-doc.org/stdlib-2.6.5/libdoc/time/rdoc/Time.html) object.
|
|
65
|
+
# @return [void]
|
|
66
|
+
def value=(arg)
|
|
67
|
+
if arg.nil?
|
|
68
|
+
@val = arg
|
|
69
|
+
return
|
|
70
|
+
end
|
|
71
|
+
raise Eddy::Errors::TypeValidationError.new(element: self, arg: arg) unless arg.is_a?(Time)
|
|
72
|
+
raise Eddy::Errors::ElementValidationError.new("Argument passed is not in UTC format", element: self) unless arg.utc?()
|
|
67
73
|
@val = arg
|
|
68
|
-
return
|
|
69
74
|
end
|
|
70
|
-
raise Eddy::Errors::TypeValidationError.new(element: self, arg: arg) unless arg.is_a?(Time)
|
|
71
|
-
raise Eddy::Errors::ElementValidationError.new("Argument passed is not in UTC format", element: self) unless arg.utc?()
|
|
72
|
-
@val = arg
|
|
73
|
-
end
|
|
74
75
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
76
|
+
# @param fmt [Symbol]
|
|
77
|
+
# @return [void]
|
|
78
|
+
def fmt=(fmt)
|
|
79
|
+
return if fmt.nil?
|
|
80
|
+
fmt = fmt.to_sym.downcase
|
|
81
|
+
raise ArgumentError, "Invalid fmt for DT value: #{fmt}" unless accepted_formats.include?(fmt)
|
|
82
|
+
@fmt = fmt
|
|
83
|
+
end
|
|
83
84
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
85
|
+
# @return [Array<Symbol>]
|
|
86
|
+
def accepted_formats()
|
|
87
|
+
return [:yymmdd, :ccyymmdd]
|
|
88
|
+
end
|
|
88
89
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
90
|
+
# @return [Symbol]
|
|
91
|
+
def determine_format()
|
|
92
|
+
case self.max
|
|
93
|
+
when 6 then return :yymmdd
|
|
94
|
+
when 8 then return :ccyymmdd
|
|
95
|
+
else raise Eddy::Errors::Error, "unable to determine format for dt element"
|
|
96
|
+
end
|
|
95
97
|
end
|
|
96
|
-
end
|
|
97
98
|
|
|
99
|
+
end
|
|
98
100
|
end
|
|
99
101
|
end
|
|
100
102
|
end
|
|
@@ -1,58 +1,60 @@
|
|
|
1
1
|
module Eddy
|
|
2
|
-
module
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
module Models
|
|
3
|
+
module Element
|
|
4
|
+
# Identifier (works with a code list specified by the dictionary).
|
|
5
|
+
class ID < Base
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
7
|
+
# @param min [Integer]
|
|
8
|
+
# @param max [Integer]
|
|
9
|
+
# @param req [String] (nil)
|
|
10
|
+
# @param ref [String] (nil)
|
|
11
|
+
# @param val [String] (nil)
|
|
12
|
+
# @return [void]
|
|
13
|
+
def initialize(
|
|
14
|
+
min:,
|
|
15
|
+
max:,
|
|
16
|
+
req: nil,
|
|
17
|
+
ref: nil,
|
|
18
|
+
val: nil
|
|
19
|
+
)
|
|
20
|
+
@type = "ID"
|
|
21
|
+
@min = min
|
|
22
|
+
@max = max
|
|
23
|
+
self.req = req
|
|
24
|
+
self.ref = ref
|
|
25
|
+
self.value = val
|
|
26
|
+
end
|
|
26
27
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
28
|
+
# @raise [Eddy::Errors::ElementNilValueError] If the element is required and no value has been set.
|
|
29
|
+
# @return [String]
|
|
30
|
+
def value()
|
|
31
|
+
if @val.nil?
|
|
32
|
+
case self.req
|
|
33
|
+
when "M" then raise Eddy::Errors::ElementNilValueError.new(element: self)
|
|
34
|
+
when "O", "C" then return ""
|
|
35
|
+
else raise Eddy::Errors::Error, "Invalid req value: #{self.req}"
|
|
36
|
+
end
|
|
35
37
|
end
|
|
38
|
+
return @val
|
|
36
39
|
end
|
|
37
|
-
return @val
|
|
38
|
-
end
|
|
39
40
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
# @param arg [String]
|
|
42
|
+
# return [void]
|
|
43
|
+
def value=(arg)
|
|
44
|
+
if arg.nil?
|
|
45
|
+
@val = arg
|
|
46
|
+
return
|
|
47
|
+
end
|
|
48
|
+
raise Eddy::Errors::ElementValidationError.new("Value not present in code list: #{arg}", element: self) unless self.code_list().include?(arg)
|
|
44
49
|
@val = arg
|
|
45
|
-
return
|
|
46
50
|
end
|
|
47
|
-
raise Eddy::Errors::ElementValidationError.new("Value not present in code list: #{arg}", element: self) unless self.code_list().include?(arg)
|
|
48
|
-
@val = arg
|
|
49
|
-
end
|
|
50
51
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
# @return [Array<String>]
|
|
53
|
+
def code_list()
|
|
54
|
+
raise NotImplementedError, "Each ID element must define its own code_list"
|
|
55
|
+
end
|
|
55
56
|
|
|
57
|
+
end
|
|
56
58
|
end
|
|
57
59
|
end
|
|
58
60
|
end
|