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,14 +1,14 @@
1
1
  module Eddy
2
- module Schema
2
+ module Summary
3
3
  # A repeated collection of Segments and/or other Loops. Used in Companion Guides.
4
- class LoopSummary
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 :repeat
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::Schema::SegmentSummary, Eddy::Schema::LoopSummary>]
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 = LoopSummary.new
33
+ l = new()
34
34
  l.id = params[:loop_id]
35
- l.repeat = params[:repeat]
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::Schema.valid_loop_data?(path)
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 Eddy::Schema::LoopSummary.create(data)
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::Schema::LoopSummary.create(comp)
57
+ self.components << Eddy::Summary::Loop.create(comp)
58
58
  else
59
- self.components << Eddy::Schema::SegmentSummary.create(comp)
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::Schema::SegmentSummary then comps << " - #{comp.id.upcase}\n"
73
- when Eddy::Schema::LoopSummary then comps << " - #{comp.id.upcase} (loop)\n"
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.repeat}
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::Schema::SegmentSummary, Eddy::Schema::LoopSummary>]
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::Schema::LoopSummary then [comp, comp.all_components()]
93
- when Eddy::Schema::SegmentSummary then comp
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 Schema
2
+ module Summary
3
3
  # A collection of Data Elements. Used in Companion Guides to define a Transaction Set.
4
- class SegmentSummary
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::Schema::ElementSummary>]
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::Schema.valid_segment_data?(path)
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::Schema::SegmentSummary.create(data)
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::Schema::ElementSummary.default_for_id(el[:id])
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 Schema
2
+ module Summary
3
3
  # An outline of all required components for an EDI transaction set implementation.
4
- class TransactionSetSummary
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::Schema::SegmentSummary, Eddy::Schema::LoopSummary>]
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 = TransactionSetSummary.new()
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::Schema.valid_transaction_set_data?(path)
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::Schema::TransactionSetSummary.create(data)
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::Schema::LoopSummary.create(comp)
48
+ self.components << Eddy::Summary::Loop.create(comp)
48
49
  else
49
- self.components << Eddy::Schema::SegmentSummary.create(comp)
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::Schema::SegmentSummary, Eddy::Schema::LoopSummary>]
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::Schema::LoopSummary then [comp, comp.all_components()]
81
- when Eddy::Schema::SegmentSummary then comp
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::Schema::SegmentSummary, Eddy::Schema::LoopSummary>]
90
+ # @return [Array<Eddy::Summary::Loop>]
90
91
  def unique_loops()
91
- return self.all_components.select { |c| c.is_a?(Eddy::Schema::LoopSummary) }.uniq(&:id)
92
+ return self.all_components.select { |c| c.is_a?(Eddy::Summary::Loop) }.uniq(&:id)
92
93
  end
93
94
 
94
95
  end
@@ -2,7 +2,7 @@ require "pathname"
2
2
  require "json_schemer"
3
3
 
4
4
  module Eddy
5
- module Schema
5
+ module Summary
6
6
 
7
7
  # Check a Segment definition file against Eddy's JSON schema.
8
8
  #
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Eddy
2
- VERSION = "0.5.1".freeze
2
+ VERSION = "0.6.0".freeze
3
3
  end
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.5.1
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-06 00:00:00.000000000 Z
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/loop_builder.rb
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/schema/element_summary.rb
1529
- - lib/eddy/schema/loop_summary.rb
1530
- - lib/eddy/schema/segment_summary.rb
1531
- - lib/eddy/schema/transaction_set_summary.rb
1532
- - lib/eddy/schema/validate.rb
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.5.1
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