eddy 0.8.2 → 0.9.2

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 (111) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -4
  3. data/CHANGELOG.md +46 -1
  4. data/Gemfile.lock +8 -8
  5. data/README.md +2 -5
  6. data/data/code-lists/333.tsv +8 -0
  7. data/data/segments/amt.segment.yml +7 -0
  8. data/data/segments/bia.segment.yml +10 -0
  9. data/data/segments/cur.segment.yml +8 -0
  10. data/data/segments/dtm.segment.yml +1 -0
  11. data/data/segments/fob.segment.yml +8 -0
  12. data/data/segments/itd.segment.yml +13 -0
  13. data/data/segments/mtx.segment.yml +7 -0
  14. data/data/segments/n9.segment.yml +7 -0
  15. data/data/segments/per.segment.yml +13 -0
  16. data/data/segments/po1.segment.yml +6 -0
  17. data/data/segments/po3.segment.yml +13 -0
  18. data/data/segments/qty.segment.yml +10 -0
  19. data/data/segments/ref.segment.yml +1 -0
  20. data/data/segments/sac.segment.yml +4 -0
  21. data/data/segments/sch.segment.yml +7 -0
  22. data/data/segments/sdq.segment.yml +8 -0
  23. data/data/segments/txi.segment.yml +9 -0
  24. data/data/transaction_sets/810.edi.yml +93 -0
  25. data/data/transaction_sets/846.edi.yml +57 -0
  26. data/data/transaction_sets/850.edi.yml +73 -0
  27. data/data/transaction_sets/855.edi.yml +74 -0
  28. data/data/transaction_sets/856.edi.yml +54 -0
  29. data/eddy.gemspec +1 -1
  30. data/exe/eddy +1 -0
  31. data/lib/definitions/elements/generated/100.currency_code.rb +200 -0
  32. data/lib/definitions/elements/generated/146.shipment_method_of_payment.rb +65 -0
  33. data/lib/definitions/elements/generated/1551.message_text.rb +29 -0
  34. data/lib/definitions/elements/generated/280.exchange_rate.rb +29 -0
  35. data/lib/definitions/elements/generated/309.location_qualifier.rb +209 -0
  36. data/lib/definitions/elements/generated/310.location_identifier.rb +29 -0
  37. data/lib/definitions/elements/generated/311.shipment_type_code.rb +42 -0
  38. data/lib/definitions/elements/generated/322.load_empty_status_code.rb +40 -0
  39. data/lib/definitions/elements/generated/325.tax_identification_number.rb +29 -0
  40. data/lib/definitions/elements/generated/333.terms_basis_date_code.rb +44 -0
  41. data/lib/definitions/elements/generated/336.terms_type_code.rb +102 -0
  42. data/lib/definitions/elements/generated/338.terms_discount_percent.rb +29 -0
  43. data/lib/definitions/elements/generated/351.terms_discount_days_due.rb +30 -0
  44. data/lib/definitions/elements/generated/363.note_reference_code.rb +278 -0
  45. data/lib/definitions/elements/generated/364.communication_number.rb +29 -0
  46. data/lib/definitions/elements/generated/365.communication_number_qualifier.rb +77 -0
  47. data/lib/definitions/elements/generated/366.contact_function_code.rb +267 -0
  48. data/lib/definitions/elements/generated/369.free_form_description.rb +29 -0
  49. data/lib/definitions/elements/generated/370.terms_discount_due_date.rb +29 -0
  50. data/lib/definitions/elements/generated/371.change_reason_code.rb +67 -0
  51. data/lib/definitions/elements/generated/378.allowance_charge_percent_qualifier.rb +48 -0
  52. data/lib/definitions/elements/generated/386.terms_net_days.rb +30 -0
  53. data/lib/definitions/elements/generated/446.terms_net_due_date.rb +29 -0
  54. data/lib/definitions/elements/generated/522.amount_qualifier_code.rb +1510 -0
  55. data/lib/definitions/elements/generated/673.quantity_qualifier.rb +869 -0
  56. data/lib/definitions/elements/generated/755.report_type_code.rb +559 -0
  57. data/lib/definitions/elements/generated/954.percent.rb +29 -0
  58. data/lib/definitions/elements/generated/963.tax_type_code.rb +111 -0
  59. data/lib/definitions/elements/manual/i/I10.interchange_control_standards_identifier.rb +2 -2
  60. data/lib/definitions/elements/manual/i/I11.interchange_control_version_number.rb +1 -0
  61. data/lib/definitions/segments/generated/amt.rb +56 -0
  62. data/lib/definitions/segments/generated/bia.rb +107 -0
  63. data/lib/definitions/segments/generated/cur.rb +73 -0
  64. data/lib/definitions/segments/generated/dtm.rb +17 -0
  65. data/lib/definitions/segments/generated/fob.rb +73 -0
  66. data/lib/definitions/segments/generated/hl.rb +90 -0
  67. data/lib/definitions/segments/generated/itd.rb +158 -0
  68. data/lib/definitions/segments/generated/mtx.rb +56 -0
  69. data/lib/definitions/segments/generated/n2.rb +56 -0
  70. data/lib/definitions/segments/generated/n9.rb +56 -0
  71. data/lib/definitions/segments/generated/per.rb +158 -0
  72. data/lib/definitions/segments/generated/po1.rb +102 -0
  73. data/lib/definitions/segments/generated/po3.rb +158 -0
  74. data/lib/definitions/segments/generated/qty.rb +73 -0
  75. data/lib/definitions/segments/generated/ref.rb +17 -0
  76. data/lib/definitions/segments/generated/sac.rb +68 -0
  77. data/lib/definitions/segments/generated/sch.rb +56 -0
  78. data/lib/definitions/segments/generated/sdq.rb +73 -0
  79. data/lib/definitions/segments/generated/txi.rb +90 -0
  80. data/lib/definitions/transaction_sets/manual/846/846.rb +122 -0
  81. data/lib/definitions/transaction_sets/manual/846/loops/lin.rb +155 -0
  82. data/lib/definitions/transaction_sets/manual/846/loops/n1.rb +107 -0
  83. data/lib/definitions/transaction_sets/manual/846/loops/qty.rb +75 -0
  84. data/lib/definitions/transaction_sets/manual/846/loops/sch.rb +59 -0
  85. data/lib/definitions/transaction_sets/manual/846/loops/sln.rb +59 -0
  86. data/lib/definitions/transaction_sets/manual/850/850.rb +108 -1
  87. data/lib/definitions/transaction_sets/manual/850/loops/ctp.rb +47 -0
  88. data/lib/definitions/transaction_sets/manual/850/loops/n1.rb +31 -10
  89. data/lib/definitions/transaction_sets/manual/850/loops/n9.rb +59 -0
  90. data/lib/definitions/transaction_sets/manual/850/loops/pid.rb +47 -0
  91. data/lib/definitions/transaction_sets/manual/850/loops/po1.rb +78 -10
  92. data/lib/definitions/transaction_sets/manual/850/loops/sac.rb +47 -0
  93. data/lib/eddy.rb +49 -3
  94. data/lib/eddy/build/transaction_set_builder.rb +1 -1
  95. data/lib/eddy/config.rb +0 -21
  96. data/lib/eddy/data.rb +0 -40
  97. data/lib/eddy/data/persistence/base.rb +5 -11
  98. data/lib/eddy/data/persistence/memory.rb +14 -22
  99. data/lib/eddy/errors.rb +13 -9
  100. data/lib/eddy/models/element/composite.rb +2 -0
  101. data/lib/eddy/models/element/id.rb +1 -1
  102. data/lib/eddy/models/element/r.rb +1 -0
  103. data/lib/eddy/models/functional_group.rb +3 -2
  104. data/lib/eddy/models/interchange.rb +6 -2
  105. data/lib/eddy/models/transaction_set.rb +1 -1
  106. data/lib/eddy/parse.rb +4 -56
  107. data/lib/eddy/parse/interchange.rb +58 -0
  108. data/lib/eddy/summary/loop.rb +1 -1
  109. data/lib/eddy/summary/segment.rb +2 -1
  110. data/lib/eddy/version.rb +1 -1
  111. metadata +78 -5
@@ -0,0 +1,56 @@
1
+ module Eddy
2
+ module Segments
3
+ # ### Segment Summary:
4
+ #
5
+ # - Id: SCH
6
+ # - Name: Line Item Schedule
7
+ # - Purpose: To specify the data for scheduling a specific line-item
8
+ class SCH < Eddy::Models::Segment
9
+
10
+ # @param store [Eddy::Data::Store]
11
+ # @return [void]
12
+ def initialize(store)
13
+ @id = "SCH"
14
+ @name = "Line Item Schedule"
15
+ @sch01 = Eddy::Elements::E380.new(ref: "SCH01", req: "M")
16
+ @sch03 = Eddy::Elements::E98.new(ref: "SCH03", req: "O")
17
+ super(
18
+ store,
19
+ @sch01,
20
+ @sch03,
21
+ )
22
+ end
23
+
24
+ # ### SCH01
25
+ #
26
+ # - Id: 380
27
+ # - Name: Quantity
28
+ # - Type: R
29
+ # - Min/Max: 1/15
30
+ # - Description: Numeric value of quantity
31
+ #
32
+ # @param arg [Float]
33
+ # @return [void]
34
+ def SCH01=(arg)
35
+ @sch01.value = arg
36
+ end
37
+ alias Quantity= SCH01=
38
+
39
+ # ### SCH03
40
+ #
41
+ # - Id: 98
42
+ # - Name: Entity Identifier Code
43
+ # - Type: ID
44
+ # - Min/Max: 2/3
45
+ # - Description: Code identifying an organizational entity, a physical location, property or an individual
46
+ #
47
+ # @param arg [String]
48
+ # @return [void]
49
+ def SCH03=(arg)
50
+ @sch03.value = arg
51
+ end
52
+ alias EntityIdentifierCode= SCH03=
53
+
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,73 @@
1
+ module Eddy
2
+ module Segments
3
+ # ### Segment Summary:
4
+ #
5
+ # - Id: SDQ
6
+ # - Name: Destination Quantity
7
+ # - Purpose: To specify destination and quantity detail
8
+ class SDQ < Eddy::Models::Segment
9
+
10
+ # @param store [Eddy::Data::Store]
11
+ # @return [void]
12
+ def initialize(store)
13
+ @id = "SDQ"
14
+ @name = "Destination Quantity"
15
+ @sdq01 = Eddy::Elements::E355.new(ref: "SDQ01", req: "M")
16
+ @sdq02 = Eddy::Elements::E66.new(ref: "SDQ02", req: "O")
17
+ @sdq23 = Eddy::Elements::E310.new(ref: "SDQ23", req: "O")
18
+ super(
19
+ store,
20
+ @sdq01,
21
+ @sdq02,
22
+ @sdq23,
23
+ )
24
+ end
25
+
26
+ # ### SDQ01
27
+ #
28
+ # - Id: 355
29
+ # - Name: Unit or Basis for Measurement Code
30
+ # - Type: ID
31
+ # - Min/Max: 2/2
32
+ # - Description: Code specifying the units in which a value is being expressed, or manner in which a measurement has been taken
33
+ #
34
+ # @param arg [String]
35
+ # @return [void]
36
+ def SDQ01=(arg)
37
+ @sdq01.value = arg
38
+ end
39
+ alias UnitOrBasisForMeasurementCode= SDQ01=
40
+
41
+ # ### SDQ02
42
+ #
43
+ # - Id: 66
44
+ # - Name: Identification Code Qualifier
45
+ # - Type: ID
46
+ # - Min/Max: 1/2
47
+ # - Description: Code designating the system/method of code structure used for Identification Code (67)
48
+ #
49
+ # @param arg [String]
50
+ # @return [void]
51
+ def SDQ02=(arg)
52
+ @sdq02.value = arg
53
+ end
54
+ alias IdentificationCodeQualifier= SDQ02=
55
+
56
+ # ### SDQ23
57
+ #
58
+ # - Id: 310
59
+ # - Name: Location Identifier
60
+ # - Type: AN
61
+ # - Min/Max: 1/30
62
+ # - Description: Code which identifies a specific location
63
+ #
64
+ # @param arg [String]
65
+ # @return [void]
66
+ def SDQ23=(arg)
67
+ @sdq23.value = arg
68
+ end
69
+ alias LocationIdentifier= SDQ23=
70
+
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,90 @@
1
+ module Eddy
2
+ module Segments
3
+ # ### Segment Summary:
4
+ #
5
+ # - Id: TXI
6
+ # - Name: Tax Information
7
+ # - Purpose: To specify tax information.
8
+ class TXI < Eddy::Models::Segment
9
+
10
+ # @param store [Eddy::Data::Store]
11
+ # @return [void]
12
+ def initialize(store)
13
+ @id = "TXI"
14
+ @name = "Tax Information"
15
+ @txi01 = Eddy::Elements::E963.new(ref: "TXI01", req: "M")
16
+ @txi02 = Eddy::Elements::E782.new(ref: "TXI02", req: "X")
17
+ @txi03 = Eddy::Elements::E954.new(ref: "TXI03", req: "X")
18
+ @txi09 = Eddy::Elements::E325.new(ref: "TXI09", req: "O")
19
+ super(
20
+ store,
21
+ @txi01,
22
+ @txi02,
23
+ @txi03,
24
+ @txi09,
25
+ )
26
+ end
27
+
28
+ # ### TXI01
29
+ #
30
+ # - Id: 963
31
+ # - Name: Tax Type Code
32
+ # - Type: ID
33
+ # - Min/Max: 2/2
34
+ # - Description: Code specifying the type of tax
35
+ #
36
+ # @param arg [String]
37
+ # @return [void]
38
+ def TXI01=(arg)
39
+ @txi01.value = arg
40
+ end
41
+ alias TaxTypeCode= TXI01=
42
+
43
+ # ### TXI02
44
+ #
45
+ # - Id: 782
46
+ # - Name: Monetary Amount
47
+ # - Type: R
48
+ # - Min/Max: 1/18
49
+ # - Description: Monetary amount
50
+ #
51
+ # @param arg [Float]
52
+ # @return [void]
53
+ def TXI02=(arg)
54
+ @txi02.value = arg
55
+ end
56
+ alias MonetaryAmount= TXI02=
57
+
58
+ # ### TXI03
59
+ #
60
+ # - Id: 954
61
+ # - Name: Percent
62
+ # - Type: R
63
+ # - Min/Max: 1/10
64
+ # - Description: Percentage expressed as a decimal
65
+ #
66
+ # @param arg [Float]
67
+ # @return [void]
68
+ def TXI03=(arg)
69
+ @txi03.value = arg
70
+ end
71
+ alias Percent= TXI03=
72
+
73
+ # ### TXI09
74
+ #
75
+ # - Id: 325
76
+ # - Name: Tax Identification Number
77
+ # - Type: AN
78
+ # - Min/Max: 1/20
79
+ # - Description: Number assigned to a purchaser (buyer, orderer) by a taxing jurisdiction (state, county, etc.); often called a tax exemption number or certificate number
80
+ #
81
+ # @param arg [String]
82
+ # @return [void]
83
+ def TXI09=(arg)
84
+ @txi09.value = arg
85
+ end
86
+ alias TaxIdentificationNumber= TXI09=
87
+
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,122 @@
1
+ module Eddy
2
+ module TransactionSets
3
+ module TS846
4
+ # ### Transaction Set Summary:
5
+ #
6
+ # - Id: 846
7
+ # - Name: Inventory Inquiry/Advice
8
+ # - Functional Group: IB
9
+ class TS846 < Eddy::Models::TransactionSet
10
+
11
+ ID = "846".freeze
12
+ NAME = "Inventory Inquiry/Advice".freeze
13
+ FUNCTIONAL_GROUP = "IB".freeze
14
+
15
+ # @param store [Eddy::Data::Store]
16
+ # @return [void]
17
+ def initialize(store)
18
+ @bia = Eddy::Segments::BIA.new(store)
19
+ @cur = Eddy::Segments::CUR.new(store)
20
+ @dtm = Eddy::Segments::DTM.new(store)
21
+ @ref = Eddy::Segments::REF.new(store)
22
+ @per = Eddy::Segments::PER.new(store)
23
+ @l_n1 = Eddy::TransactionSets::TS846::Loops::N1::Base.new(store)
24
+ @l_lin = Eddy::TransactionSets::TS846::Loops::LIN::Base.new(store)
25
+ @ctt = Eddy::Segments::CTT.new(store)
26
+ super(
27
+ store,
28
+ @bia,
29
+ @cur,
30
+ @dtm,
31
+ @ref,
32
+ @per,
33
+ @l_n1,
34
+ @l_lin,
35
+ @ctt,
36
+ )
37
+ end
38
+
39
+ # (see Eddy::Segments::BIA)
40
+ #
41
+ # @yieldparam [Eddy::Segments::BIA]
42
+ # @return [Eddy::Segments::BIA]
43
+ def BIA()
44
+ yield(@bia) if block_given?
45
+ return @bia
46
+ end
47
+
48
+ # (see Eddy::Segments::CUR)
49
+ #
50
+ # @yieldparam [Eddy::Segments::CUR]
51
+ # @return [Eddy::Segments::CUR]
52
+ def CUR()
53
+ yield(@cur) if block_given?
54
+ return @cur
55
+ end
56
+
57
+ # (see Eddy::Segments::DTM)
58
+ #
59
+ # @yieldparam [Eddy::Segments::DTM]
60
+ # @return [Eddy::Segments::DTM]
61
+ def DTM()
62
+ yield(@dtm) if block_given?
63
+ return @dtm
64
+ end
65
+
66
+ # (see Eddy::Segments::REF)
67
+ #
68
+ # @yieldparam [Eddy::Segments::REF]
69
+ # @return [Eddy::Segments::REF]
70
+ def REF()
71
+ yield(@ref) if block_given?
72
+ return @ref
73
+ end
74
+
75
+ # (see Eddy::Segments::PER)
76
+ #
77
+ # @yieldparam [Eddy::Segments::PER]
78
+ # @return [Eddy::Segments::PER]
79
+ def PER()
80
+ yield(@per) if block_given?
81
+ return @per
82
+ end
83
+
84
+ # (see Eddy::TransactionSets::TS846::Loops::N1::Base)
85
+ #
86
+ # @yieldparam [Eddy::TransactionSets::TS846::Loops::N1::Repeat]
87
+ # @return [void]
88
+ def L_N1(&block)
89
+ if block_given?
90
+ @l_n1.repeat(&block)
91
+ else
92
+ raise Eddy::Errors::Error, "No block given in loop iteration"
93
+ end
94
+ return nil
95
+ end
96
+
97
+ # (see Eddy::TransactionSets::TS846::Loops::LIN::Base)
98
+ #
99
+ # @yieldparam [Eddy::TransactionSets::TS846::Loops::LIN::Repeat]
100
+ # @return [void]
101
+ def L_LIN(&block)
102
+ if block_given?
103
+ @l_lin.repeat(&block)
104
+ else
105
+ raise Eddy::Errors::Error, "No block given in loop iteration"
106
+ end
107
+ return nil
108
+ end
109
+
110
+ # (see Eddy::Segments::CTT)
111
+ #
112
+ # @yieldparam [Eddy::Segments::CTT]
113
+ # @return [Eddy::Segments::CTT]
114
+ def CTT()
115
+ yield(@ctt) if block_given?
116
+ return @ctt
117
+ end
118
+
119
+ end
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,155 @@
1
+ module Eddy
2
+ module TransactionSets
3
+ module TS846
4
+ module Loops
5
+ module LIN
6
+
7
+ # ### Loop Summary:
8
+ #
9
+ # - Repeat: 10000
10
+ # - Components:
11
+ # - LIN
12
+ # - PID
13
+ # - DTM
14
+ # - CTP
15
+ # - REF
16
+ # - SDQ
17
+ # - SLN (loop)
18
+ # - QTY (loop)
19
+ # - N1 (loop)
20
+ class Base < Eddy::Models::Loop::Base
21
+ # @param store [Eddy::Data::Store]
22
+ # @return [void]
23
+ def initialize(store)
24
+ @repeat_limit = 10000
25
+ super(store, Repeat)
26
+ end
27
+ end
28
+
29
+ # (see Eddy::TransactionSets::TS846::Loops::LIN::Base)
30
+ class Repeat < Eddy::Models::Loop::Repeat
31
+ # @param store [Eddy::Data::Store]
32
+ # @return [void]
33
+ def initialize(store)
34
+ @lin = Eddy::Segments::LIN.new(store)
35
+ @pid = Eddy::Segments::PID.new(store)
36
+ @dtm = Eddy::Segments::DTM.new(store)
37
+ @ctp = Eddy::Segments::CTP.new(store)
38
+ @ref = Eddy::Segments::REF.new(store)
39
+ @sdq = Eddy::Segments::SDQ.new(store)
40
+ @l_sln = Eddy::TransactionSets::TS846::Loops::SLN::Base.new(store)
41
+ @l_qty = Eddy::TransactionSets::TS846::Loops::QTY::Base.new(store)
42
+ @l_n1 = Eddy::TransactionSets::TS846::Loops::N1::Base.new(store)
43
+ super(
44
+ store,
45
+ @lin,
46
+ @pid,
47
+ @dtm,
48
+ @ctp,
49
+ @ref,
50
+ @sdq,
51
+ @l_sln,
52
+ @l_qty,
53
+ @l_n1,
54
+ )
55
+ end
56
+
57
+ # (see Eddy::Segments::LIN)
58
+ #
59
+ # @yieldparam [Eddy::Segments::LIN]
60
+ # @return [Eddy::Segments::LIN]
61
+ def LIN()
62
+ yield(@lin) if block_given?
63
+ return @lin
64
+ end
65
+
66
+ # (see Eddy::Segments::PID)
67
+ #
68
+ # @yieldparam [Eddy::Segments::PID]
69
+ # @return [Eddy::Segments::PID]
70
+ def PID()
71
+ yield(@pid) if block_given?
72
+ return @pid
73
+ end
74
+
75
+ # (see Eddy::Segments::DTM)
76
+ #
77
+ # @yieldparam [Eddy::Segments::DTM]
78
+ # @return [Eddy::Segments::DTM]
79
+ def DTM()
80
+ yield(@dtm) if block_given?
81
+ return @dtm
82
+ end
83
+
84
+ # (see Eddy::Segments::CTP)
85
+ #
86
+ # @yieldparam [Eddy::Segments::CTP]
87
+ # @return [Eddy::Segments::CTP]
88
+ def CTP()
89
+ yield(@ctp) if block_given?
90
+ return @ctp
91
+ end
92
+
93
+ # (see Eddy::Segments::REF)
94
+ #
95
+ # @yieldparam [Eddy::Segments::REF]
96
+ # @return [Eddy::Segments::REF]
97
+ def REF()
98
+ yield(@ref) if block_given?
99
+ return @ref
100
+ end
101
+
102
+ # (see Eddy::Segments::SDQ)
103
+ #
104
+ # @yieldparam [Eddy::Segments::SDQ]
105
+ # @return [Eddy::Segments::SDQ]
106
+ def SDQ()
107
+ yield(@sdq) if block_given?
108
+ return @sdq
109
+ end
110
+
111
+ # (see Eddy::TransactionSets::TS846::Loops::SLN::Base)
112
+ #
113
+ # @yieldparam [Eddy::TransactionSets::TS846::Loops::SLN::Repeat]
114
+ # @return [void]
115
+ def L_SLN(&block)
116
+ if block_given?
117
+ @l_sln.repeat(&block)
118
+ else
119
+ raise Eddy::Errors::Error, "No block given in loop iteration"
120
+ end
121
+ return nil
122
+ end
123
+
124
+ # (see Eddy::TransactionSets::TS846::Loops::QTY::Base)
125
+ #
126
+ # @yieldparam [Eddy::TransactionSets::TS846::Loops::QTY::Repeat]
127
+ # @return [void]
128
+ def L_QTY(&block)
129
+ if block_given?
130
+ @l_qty.repeat(&block)
131
+ else
132
+ raise Eddy::Errors::Error, "No block given in loop iteration"
133
+ end
134
+ return nil
135
+ end
136
+
137
+ # (see Eddy::TransactionSets::TS846::Loops::N1::Base)
138
+ #
139
+ # @yieldparam [Eddy::TransactionSets::TS846::Loops::N1::Repeat]
140
+ # @return [void]
141
+ def L_N1(&block)
142
+ if block_given?
143
+ @l_n1.repeat(&block)
144
+ else
145
+ raise Eddy::Errors::Error, "No block given in loop iteration"
146
+ end
147
+ return nil
148
+ end
149
+ end
150
+
151
+ end
152
+ end
153
+ end
154
+ end
155
+ end