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.
Files changed (211) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/CHANGELOG.md +23 -4
  4. data/Gemfile.lock +1 -1
  5. data/README.md +1 -1
  6. data/lib/definitions/elements/generated/1005.hierarchical_structure_code.rb +1 -1
  7. data/lib/definitions/elements/generated/1019.invoice_type_code.rb +1 -1
  8. data/lib/definitions/elements/generated/103.packaging_code.rb +1 -1
  9. data/lib/definitions/elements/generated/1166.contract_type_code.rb +1 -1
  10. data/lib/definitions/elements/generated/1232.purchase_category.rb +1 -1
  11. data/lib/definitions/elements/generated/127.reference_identification.rb +1 -1
  12. data/lib/definitions/elements/generated/128.reference_identification_qualifier.rb +1 -1
  13. data/lib/definitions/elements/generated/1300.service_promotion_allowance_or_charge_code.rb +1 -1
  14. data/lib/definitions/elements/generated/1301.agency_service_promotion_allowance_or_charge_code.rb +1 -1
  15. data/lib/definitions/elements/generated/133.routing_sequence_code.rb +1 -1
  16. data/lib/definitions/elements/generated/166.address_information.rb +1 -1
  17. data/lib/definitions/elements/generated/183.volume.rb +1 -1
  18. data/lib/definitions/elements/generated/187.weight_qualifier.rb +1 -1
  19. data/lib/definitions/elements/generated/19.city_name.rb +1 -1
  20. data/lib/definitions/elements/generated/206.equipment_initial.rb +1 -1
  21. data/lib/definitions/elements/generated/207.equipment_number.rb +1 -1
  22. data/lib/definitions/elements/generated/212.unit_price.rb +1 -1
  23. data/lib/definitions/elements/generated/22.commodity_code.rb +1 -1
  24. data/lib/definitions/elements/generated/23.commodity_code_qualifier.rb +1 -1
  25. data/lib/definitions/elements/generated/234.product_service_id.rb +1 -1
  26. data/lib/definitions/elements/generated/235.product_service_id_qualifier.rb +1 -1
  27. data/lib/definitions/elements/generated/236.price_identifier_code.rb +1 -1
  28. data/lib/definitions/elements/generated/248.allowance_or_charge_indicator.rb +1 -1
  29. data/lib/definitions/elements/generated/26.country_code.rb +1 -1
  30. data/lib/definitions/elements/generated/284.service_level_code.rb +1 -1
  31. data/lib/definitions/elements/generated/324.purchase_order_number.rb +1 -1
  32. data/lib/definitions/elements/generated/326.request_reference_number.rb +1 -1
  33. data/lib/definitions/elements/generated/327.change_order_sequence_number.rb +1 -1
  34. data/lib/definitions/elements/generated/328.release_number.rb +1 -1
  35. data/lib/definitions/elements/generated/330.quantity_ordered.rb +1 -1
  36. data/lib/definitions/elements/generated/347.hash_total.rb +1 -1
  37. data/lib/definitions/elements/generated/349.item_description_type.rb +1 -1
  38. data/lib/definitions/elements/generated/352.description.rb +1 -1
  39. data/lib/definitions/elements/generated/353.transaction_set_purpose_code.rb +1 -1
  40. data/lib/definitions/elements/generated/354.number_of_line_items.rb +1 -1
  41. data/lib/definitions/elements/generated/355.unit_or_basis_for_measurement_code.rb +1 -1
  42. data/lib/definitions/elements/generated/358.quantity_invoiced.rb +1 -1
  43. data/lib/definitions/elements/generated/367.contract_number.rb +1 -1
  44. data/lib/definitions/elements/generated/368.shipment_order_status_code.rb +1 -1
  45. data/lib/definitions/elements/generated/374.date_time_qualifier.rb +1 -1
  46. data/lib/definitions/elements/generated/380.quantity.rb +1 -1
  47. data/lib/definitions/elements/generated/382.number_of_units_shipped.rb +1 -1
  48. data/lib/definitions/elements/generated/387.routing.rb +1 -1
  49. data/lib/definitions/elements/generated/396.shipment_identification.rb +1 -1
  50. data/lib/definitions/elements/generated/559.agency_qualifier_code.rb +1 -1
  51. data/lib/definitions/elements/generated/587.acknowledgment_type.rb +1 -1
  52. data/lib/definitions/elements/generated/610.amount.rb +1 -1
  53. data/lib/definitions/elements/generated/639.basis_of_unit_price_code.rb +1 -1
  54. data/lib/definitions/elements/generated/640.transaction_type_code.rb +1 -1
  55. data/lib/definitions/elements/generated/646.quantity_shipped_to_date.rb +1 -1
  56. data/lib/definitions/elements/generated/648.price_multiplier_qualifier.rb +1 -1
  57. data/lib/definitions/elements/generated/649.multiplier.rb +1 -1
  58. data/lib/definitions/elements/generated/66.identification_code_qualifier.rb +1 -1
  59. data/lib/definitions/elements/generated/662.relationship_code.rb +1 -1
  60. data/lib/definitions/elements/generated/668.line_item_status_code.rb +1 -1
  61. data/lib/definitions/elements/generated/67.identification_code.rb +1 -1
  62. data/lib/definitions/elements/generated/687.class_of_trade_code.rb +1 -1
  63. data/lib/definitions/elements/generated/750.product_process_characteristic_code.rb +1 -1
  64. data/lib/definitions/elements/generated/751.product_description_code.rb +1 -1
  65. data/lib/definitions/elements/generated/76.invoice_number.rb +1 -1
  66. data/lib/definitions/elements/generated/782.monetary_amount.rb +1 -1
  67. data/lib/definitions/elements/generated/786.security_level_code.rb +1 -1
  68. data/lib/definitions/elements/generated/79.lading_description.rb +1 -1
  69. data/lib/definitions/elements/generated/80.lading_quantity.rb +1 -1
  70. data/lib/definitions/elements/generated/87.marks_and_numbers.rb +1 -1
  71. data/lib/definitions/elements/generated/88.marks_and_numbers_qualifier.rb +1 -1
  72. data/lib/definitions/elements/generated/91.transportation_method_type_code.rb +1 -1
  73. data/lib/definitions/elements/generated/92.purchase_order_type_code.rb +1 -1
  74. data/lib/definitions/elements/generated/98.entity_identifier_code.rb +1 -1
  75. data/lib/definitions/elements/manual/116.postal_code.rb +1 -1
  76. data/lib/definitions/elements/manual/124.application_receivers_code.rb +1 -1
  77. data/lib/definitions/elements/manual/140.standard_carrier_alpha_code.rb +1 -1
  78. data/lib/definitions/elements/manual/142.application_senders_code.rb +1 -1
  79. data/lib/definitions/elements/manual/143.transaction_set_identifier_code.rb +1 -1
  80. data/lib/definitions/elements/manual/156.state_or_province_code.rb +1 -1
  81. data/lib/definitions/elements/manual/28.group_control_number.rb +1 -1
  82. data/lib/definitions/elements/manual/329.transactional_set_control_number.rb +2 -2
  83. data/lib/definitions/elements/manual/337.time.rb +1 -1
  84. data/lib/definitions/elements/manual/350.assigned_identification.rb +1 -1
  85. data/lib/definitions/elements/manual/373.date.rb +1 -1
  86. data/lib/definitions/elements/manual/455.responsible_agency_code.rb +1 -1
  87. data/lib/definitions/elements/manual/479.functional_identifier_code.rb +1 -1
  88. data/lib/definitions/elements/manual/480.version_release_industry_identifier_code.rb +1 -1
  89. data/lib/definitions/elements/manual/784.length_of_binary_data.rb +1 -1
  90. data/lib/definitions/elements/manual/785.binary_data.rb +1 -1
  91. data/lib/definitions/elements/manual/96.number_of_included_segments.rb +1 -1
  92. data/lib/definitions/elements/manual/97.number_of_transaction_sets_included.rb +1 -1
  93. data/lib/definitions/elements/manual/hl/628.hierarchical_id_number.rb +1 -1
  94. data/lib/definitions/elements/manual/hl/734.hierarchical_parent_id_number.rb +1 -1
  95. data/lib/definitions/elements/manual/hl/735.hierarchical_level_code.rb +1 -1
  96. data/lib/definitions/elements/manual/hl/736.hierarchical_child_code.rb +1 -1
  97. data/lib/definitions/elements/manual/i/I01.authorization_information_qualifier.rb +1 -1
  98. data/lib/definitions/elements/manual/i/I02.authorization_information.rb +1 -1
  99. data/lib/definitions/elements/manual/i/I03.security_information_qualifier.rb +1 -1
  100. data/lib/definitions/elements/manual/i/I04.security_information.rb +1 -1
  101. data/lib/definitions/elements/manual/i/I05.interchange_id_qualifier.rb +1 -1
  102. data/lib/definitions/elements/manual/i/I06.interchange_sender_id.rb +1 -1
  103. data/lib/definitions/elements/manual/i/I07.interchange_receiver_id.rb +1 -1
  104. data/lib/definitions/elements/manual/i/I08.interchange_date.rb +1 -1
  105. data/lib/definitions/elements/manual/i/I09.interchange_time.rb +1 -1
  106. data/lib/definitions/elements/manual/i/I10.interchange_control_standards_identifier.rb +1 -1
  107. data/lib/definitions/elements/manual/i/I11.interchange_control_version_number.rb +1 -1
  108. data/lib/definitions/elements/manual/i/I12.interchange_control_number.rb +1 -1
  109. data/lib/definitions/elements/manual/i/I13.acknowledgment_requested.rb +1 -1
  110. data/lib/definitions/elements/manual/i/I14.usage_indicator.rb +1 -1
  111. data/lib/definitions/elements/manual/i/I15.component_element_separator.rb +1 -1
  112. data/lib/definitions/elements/manual/i/I16.number_of_included_functional_groups.rb +1 -1
  113. data/lib/definitions/elements/manual/misc/81.weight.rb +1 -1
  114. data/lib/definitions/elements/manual/misc/93.name.rb +1 -1
  115. data/lib/definitions/segments/generated/ack.rb +1 -1
  116. data/lib/definitions/segments/generated/bak.rb +1 -1
  117. data/lib/definitions/segments/generated/beg.rb +1 -1
  118. data/lib/definitions/segments/generated/big.rb +1 -1
  119. data/lib/definitions/segments/generated/bsn.rb +1 -1
  120. data/lib/definitions/segments/generated/cad.rb +1 -1
  121. data/lib/definitions/segments/generated/ctp.rb +1 -1
  122. data/lib/definitions/segments/generated/ctt.rb +1 -1
  123. data/lib/definitions/segments/generated/dtm.rb +1 -1
  124. data/lib/definitions/segments/generated/it1.rb +1 -1
  125. data/lib/definitions/segments/generated/lin.rb +1 -1
  126. data/lib/definitions/segments/generated/man.rb +1 -1
  127. data/lib/definitions/segments/generated/n1.rb +1 -1
  128. data/lib/definitions/segments/generated/n3.rb +1 -1
  129. data/lib/definitions/segments/generated/n4.rb +1 -1
  130. data/lib/definitions/segments/generated/pid.rb +1 -1
  131. data/lib/definitions/segments/generated/po1.rb +1 -1
  132. data/lib/definitions/segments/generated/prf.rb +1 -1
  133. data/lib/definitions/segments/generated/ref.rb +1 -1
  134. data/lib/definitions/segments/generated/sac.rb +1 -1
  135. data/lib/definitions/segments/generated/sln.rb +1 -1
  136. data/lib/definitions/segments/generated/sn1.rb +1 -1
  137. data/lib/definitions/segments/generated/td1.rb +1 -1
  138. data/lib/definitions/segments/generated/td5.rb +1 -1
  139. data/lib/definitions/segments/generated/tds.rb +1 -1
  140. data/lib/definitions/segments/manual/envelopes/ge.rb +1 -1
  141. data/lib/definitions/segments/manual/envelopes/gs.rb +1 -1
  142. data/lib/definitions/segments/manual/envelopes/iea.rb +1 -1
  143. data/lib/definitions/segments/manual/envelopes/isa.rb +1 -1
  144. data/lib/definitions/segments/manual/envelopes/se.rb +1 -1
  145. data/lib/definitions/segments/manual/envelopes/st.rb +1 -1
  146. data/lib/definitions/segments/manual/hl.rb +1 -1
  147. data/lib/definitions/segments/manual/n2.rb +1 -1
  148. data/lib/definitions/transaction_sets/manual/810/810.rb +19 -24
  149. data/lib/definitions/transaction_sets/manual/810/loops/it1.rb +92 -0
  150. data/lib/definitions/transaction_sets/manual/810/loops/n1.rb +72 -0
  151. data/lib/definitions/transaction_sets/manual/810/loops/pid.rb +45 -0
  152. data/lib/definitions/transaction_sets/manual/810/loops/sac.rb +45 -0
  153. data/lib/definitions/transaction_sets/manual/850/850.rb +12 -14
  154. data/lib/definitions/transaction_sets/manual/850/loops/n1.rb +74 -0
  155. data/lib/definitions/transaction_sets/manual/850/loops/po1.rb +51 -0
  156. data/lib/definitions/transaction_sets/manual/855/855.rb +11 -15
  157. data/lib/definitions/transaction_sets/manual/855/loops/ack.rb +45 -0
  158. data/lib/definitions/transaction_sets/manual/855/loops/n1.rb +72 -0
  159. data/lib/definitions/transaction_sets/manual/855/loops/pid.rb +45 -0
  160. data/lib/definitions/transaction_sets/manual/855/loops/po1.rb +80 -0
  161. data/lib/definitions/transaction_sets/manual/856/856.rb +8 -16
  162. data/lib/definitions/transaction_sets/manual/856/loops/hl_item.rb +87 -0
  163. data/lib/definitions/transaction_sets/manual/856/loops/hl_order.rb +59 -0
  164. data/lib/definitions/transaction_sets/manual/856/loops/hl_shipment.rb +159 -0
  165. data/lib/definitions/transaction_sets/manual/856/loops/hl_tare.rb +59 -0
  166. data/lib/definitions/transaction_sets/manual/856/loops/n1.rb +71 -0
  167. data/lib/definitions/transaction_sets/manual/856/loops/sln.rb +44 -0
  168. data/lib/eddy/build/elements/element.rb +5 -5
  169. data/lib/eddy/build/elements/elements.rb +3 -3
  170. data/lib/eddy/build/elements/id.rb +1 -1
  171. data/lib/eddy/build/elements/n.rb +1 -1
  172. data/lib/eddy/build/loop/base.rb +49 -0
  173. data/lib/eddy/build/loop/render.rb +18 -0
  174. data/lib/eddy/build/loop/repeat.rb +86 -0
  175. data/lib/eddy/build/segment_builder.rb +14 -9
  176. data/lib/eddy/build/transaction_set_builder.rb +60 -93
  177. data/lib/eddy/build.rb +3 -1
  178. data/lib/eddy/errors.rb +16 -15
  179. data/lib/eddy/models/element/an.rb +45 -43
  180. data/lib/eddy/models/element/b.rb +45 -43
  181. data/lib/eddy/models/element/base.rb +102 -100
  182. data/lib/eddy/models/element/composite.rb +5 -3
  183. data/lib/eddy/models/element/dt.rb +82 -80
  184. data/lib/eddy/models/element/id.rb +47 -45
  185. data/lib/eddy/models/element/n.rb +79 -77
  186. data/lib/eddy/models/element/r.rb +70 -68
  187. data/lib/eddy/models/element/tm.rb +95 -93
  188. data/lib/eddy/models/element.rb +4 -2
  189. data/lib/eddy/models/functional_group.rb +29 -27
  190. data/lib/eddy/models/interchange.rb +49 -47
  191. data/lib/eddy/models/loop/base.rb +62 -63
  192. data/lib/eddy/models/loop/repeat.rb +43 -31
  193. data/lib/eddy/models/segment.rb +30 -28
  194. data/lib/eddy/models/transaction_set.rb +82 -80
  195. data/lib/eddy/models.rb +1 -1
  196. data/lib/eddy/{schema/element_summary.rb → summary/element.rb} +3 -3
  197. data/lib/eddy/{schema/loop_summary.rb → summary/loop.rb} +53 -16
  198. data/lib/eddy/{schema/segment_summary.rb → summary/segment.rb} +14 -6
  199. data/lib/eddy/{schema/transaction_set_summary.rb → summary/transaction_set.rb} +14 -13
  200. data/lib/eddy/{schema → summary}/validate.rb +1 -1
  201. data/lib/eddy/summary.rb +10 -0
  202. data/lib/eddy/util.rb +5 -5
  203. data/lib/eddy/version.rb +1 -1
  204. data/lib/eddy.rb +1 -7
  205. data/todo.txt +3 -5
  206. metadata +28 -13
  207. data/lib/definitions/transaction_sets/manual/810/loops.rb +0 -109
  208. data/lib/definitions/transaction_sets/manual/850/loops.rb +0 -58
  209. data/lib/definitions/transaction_sets/manual/855/loops.rb +0 -104
  210. data/lib/definitions/transaction_sets/manual/856/loops.rb +0 -155
  211. data/lib/eddy/build/loop_builder.rb +0 -93
@@ -1,116 +1,118 @@
1
1
  module Eddy
2
- module Element
3
- # Base class for EDI Data Element types.
4
- class Base
2
+ module Models
3
+ module Element
4
+ # Base class for EDI Data Element types.
5
+ class Base
5
6
 
6
- # Positive number under 1688, or I01-I64
7
- # @return [String]
8
- attr_reader :id
9
- # @return [String]
10
- attr_reader :name
11
- # @return [String]
12
- attr_reader :description
13
- # One of: AN, B, DT, ID, N, R, or TM
14
- # @return [String]
15
- attr_reader :type
16
- # Minimum length for a valid value
17
- # @return [Integer]
18
- attr_reader :min
19
- # Maximum length for a valid value
20
- # @return [Integer]
21
- attr_reader :max
22
- # String used to identify a data element within a Segment.
23
- # @return [String]
24
- attr_accessor :ref
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
- # # @return [void]
27
- # def initialize(**kwargs)
27
+ # # @return [void]
28
+ # def initialize(**kwargs)
28
29
 
29
- # end
30
+ # end
30
31
 
31
- # @note Classes inheriting from `Eddy::Element::Base` must define the method `value`.
32
- # @return [void]
33
- def value(*)
34
- raise NotImplementedError, "Classes inheriting from `Eddy::Element::Base` must define a `value` method."
35
- end
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
- # Indicates whether the value must be present in its segment.
44
- #
45
- # | code | description | official |
46
- # | ----- | ----------- | ---------- |
47
- # | **M** | Mandatory | yes |
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
- # (see #req)
70
- #
71
- # @param req [String, nil]
72
- # @return [void]
73
- def req=(req)
74
- if req.nil?
75
- @req = "O"
76
- return
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
- raise ArgumentError, req.to_s unless req.is_a?(String)
79
- case req.upcase
80
- when "M", "R" then @req = "M"
81
- when "O" then @req = "O"
82
- when "C", "X" then @req = "C"
83
- when "F" then raise Eddy::Errors::Error, "Req value 'F' not supported"
84
- else raise Eddy::Errors::Error, "Invalid argument for `req=`: #{req}"
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
- # Generate a description to use as a doc comment for an element.
89
- #
90
- # @param header [Boolean] (true)
91
- # @return [Hash]
92
- def doc_comment(header: true)
93
- if header
94
- return <<~END.strip
95
- ### Element Summary:
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
- - Id: #{self.id}
98
- - Name: #{self.name}
99
- - Type: #{self.type}
100
- - Min/Max: #{self.min}/#{self.max}
101
- - Description: #{self.description}
102
- END
103
- else
104
- return <<~END.strip
105
- - Id: #{self.id}
106
- - Name: #{self.name}
107
- - Type: #{self.type}
108
- - Min/Max: #{self.min}/#{self.max}
109
- - Description: #{self.description}
110
- END
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 Element
3
- # - [References to Component Data Elements - X12 RFI](http://www.x12.org/rfis/References%20to%20Component%20Data%20Elements.pdf)
4
- class Composite; end
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 Element
5
- # Date in `YYMMDD` or `CCYYMMDD` format based on EDI version being used (DLMS Baseline is 004010)
6
- #
7
- # Values for this type are generated from a *UTC* formatted [Time][time] object.
8
- #
9
- # [time]: https://ruby-doc.org/stdlib-2.6.5/libdoc/time/rdoc/Time.html
10
- class DT < Base
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
- # Format for the date. Valid values: `:yymmdd` or `:ccyymmdd`
13
- # @return [Symbol<:yymmdd, :ccyymmdd>]
14
- attr_reader :fmt
13
+ # Format for the date. Valid values: `:yymmdd` or `:ccyymmdd`
14
+ # @return [Symbol<:yymmdd, :ccyymmdd>]
15
+ attr_reader :fmt
15
16
 
16
- # @param min [Integer] (nil)
17
- # @param max [Integer] (nil)
18
- # @param req [String] (nil)
19
- # @param ref [String] (nil)
20
- # @param val [Time] (nil) A *UTC* formatted Time object.
21
- # @param fmt [Symbol] (nil) Format for the date. Valid values: `:yymmdd` or `:ccyymmdd`.
22
- # @return [void]
23
- def initialize(
24
- min: nil,
25
- max: nil,
26
- req: nil,
27
- ref: nil,
28
- val: nil,
29
- fmt: nil
30
- )
31
- @type = "DT"
32
- @min = min
33
- @max = max
34
- self.req = req
35
- self.ref = ref
36
- if fmt.nil?
37
- raise ArgumentError, "DT elements require either a `fmt` value, or `min` and `max` values." if min.nil? || max.nil?
38
- @fmt = determine_format()
39
- else
40
- self.fmt = fmt
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
- # @raise [Eddy::Errors::ElementNilValueError] If the element is required and no value has been set.
46
- # @return [String]
47
- def value()
48
- if @val.nil?
49
- case self.req
50
- when "M" then raise Eddy::Errors::ElementNilValueError.new(element: self)
51
- when "O", "C" then return ""
52
- else raise Eddy::Errors::Error, "Invalid req value: #{self.req}"
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
- # @raise [ElementValidationError] Unless passed a *UTC* formatted `Time` object.
63
- # @param arg [Time] A *UTC* formatted [Time](https://ruby-doc.org/stdlib-2.6.5/libdoc/time/rdoc/Time.html) object.
64
- # @return [void]
65
- def value=(arg)
66
- if arg.nil?
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
- # @param fmt [Symbol]
76
- # @return [void]
77
- def fmt=(fmt)
78
- return if fmt.nil?
79
- fmt = fmt.to_sym.downcase
80
- raise ArgumentError, "Invalid fmt for DT value: #{fmt}" unless accepted_formats.include?(fmt)
81
- @fmt = fmt
82
- end
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
- # @return [Array<Symbol>]
85
- def accepted_formats()
86
- return [:yymmdd, :ccyymmdd]
87
- end
85
+ # @return [Array<Symbol>]
86
+ def accepted_formats()
87
+ return [:yymmdd, :ccyymmdd]
88
+ end
88
89
 
89
- # @return [Symbol]
90
- def determine_format()
91
- case self.max
92
- when 6 then return :yymmdd
93
- when 8 then return :ccyymmdd
94
- else raise Eddy::Errors::Error, "unable to determine format for dt element"
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 Element
3
- # Identifier (works with a code list specified by the dictionary).
4
- class ID < Base
2
+ module Models
3
+ module Element
4
+ # Identifier (works with a code list specified by the dictionary).
5
+ class ID < Base
5
6
 
6
- # @param min [Integer]
7
- # @param max [Integer]
8
- # @param req [String] (nil)
9
- # @param ref [String] (nil)
10
- # @param val [String] (nil)
11
- # @return [void]
12
- def initialize(
13
- min:,
14
- max:,
15
- req: nil,
16
- ref: nil,
17
- val: nil
18
- )
19
- @type = "ID"
20
- @min = min
21
- @max = max
22
- self.req = req
23
- self.ref = ref
24
- self.value = val
25
- end
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
- # @raise [Eddy::Errors::ElementNilValueError] If the element is required and no value has been set.
28
- # @return [String]
29
- def value()
30
- if @val.nil?
31
- case self.req
32
- when "M" then raise Eddy::Errors::ElementNilValueError.new(element: self)
33
- when "O", "C" then return ""
34
- else raise Eddy::Errors::Error, "Invalid req value: #{self.req}"
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
- # @param arg [String]
41
- # return [void]
42
- def value=(arg)
43
- if arg.nil?
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
- # @return [Array<String>]
52
- def code_list()
53
- raise NotImplementedError, "Each ID element must define its own code_list"
54
- end
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