eddy 0.8.2 → 0.9.2

Sign up to get free protection for your applications and to get access to all the features.
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,47 @@
1
+ module Eddy
2
+ module TransactionSets
3
+ module TS850
4
+ module Loops
5
+ module CTP
6
+
7
+ # ### Loop Summary:
8
+ #
9
+ # - Repeat: 1
10
+ # - Components:
11
+ # - CTP
12
+ class Base < Eddy::Models::Loop::Base
13
+ # @param store [Eddy::Data::Store]
14
+ # @return [void]
15
+ def initialize(store)
16
+ @repeat_limit = 1
17
+ super(store, Repeat)
18
+ end
19
+ end
20
+
21
+ # (see Eddy::TransactionSets::TS850::Loops::CTP::Base)
22
+ class Repeat < Eddy::Models::Loop::Repeat
23
+ # @param store [Eddy::Data::Store]
24
+ # @return [void]
25
+ def initialize(store)
26
+ @ctp = Eddy::Segments::CTP.new(store)
27
+ super(
28
+ store,
29
+ @ctp,
30
+ )
31
+ end
32
+
33
+ # (see Eddy::Segments::CTP)
34
+ #
35
+ # @yieldparam [Eddy::Segments::CTP]
36
+ # @return [Eddy::Segments::CTP]
37
+ def CTP()
38
+ yield(@ctp) if block_given?
39
+ return @ctp
40
+ end
41
+ end
42
+
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -1,6 +1,5 @@
1
1
  module Eddy
2
2
  module TransactionSets
3
- # Namespace for Transaction Set 850 and its loops.
4
3
  module TS850
5
4
  module Loops
6
5
  module N1
@@ -10,33 +9,37 @@ module Eddy
10
9
  # - Repeat: 200
11
10
  # - Components:
12
11
  # - N1
12
+ # - N2
13
13
  # - N3
14
14
  # - N4
15
+ # - PER
15
16
  class Base < Eddy::Models::Loop::Base
16
17
  # @param store [Eddy::Data::Store]
17
18
  # @return [void]
18
19
  def initialize(store)
19
- super(store, Repeat)
20
20
  @repeat_limit = 200
21
- end
22
-
23
- # @yieldparam [Eddy::TransactionSets::TS850::Loops::N1::Repeat]
24
- # @return [void]
25
- def repeat(&block)
26
- super(&block)
21
+ super(store, Repeat)
27
22
  end
28
23
  end
29
24
 
30
25
  # (see Eddy::TransactionSets::TS850::Loops::N1::Base)
31
26
  class Repeat < Eddy::Models::Loop::Repeat
32
-
33
27
  # @param store [Eddy::Data::Store]
34
28
  # @return [void]
35
29
  def initialize(store)
36
30
  @n1 = Eddy::Segments::N1.new(store)
31
+ @n2 = Eddy::Segments::N2.new(store)
37
32
  @n3 = Eddy::Segments::N3.new(store)
38
33
  @n4 = Eddy::Segments::N4.new(store)
39
- super(store, @n1, @n3, @n4)
34
+ @per = Eddy::Segments::PER.new(store)
35
+ super(
36
+ store,
37
+ @n1,
38
+ @n2,
39
+ @n3,
40
+ @n4,
41
+ @per,
42
+ )
40
43
  end
41
44
 
42
45
  # (see Eddy::Segments::N1)
@@ -48,6 +51,15 @@ module Eddy
48
51
  return @n1
49
52
  end
50
53
 
54
+ # (see Eddy::Segments::N2)
55
+ #
56
+ # @yieldparam [Eddy::Segments::N2]
57
+ # @return [Eddy::Segments::N2]
58
+ def N2()
59
+ yield(@n2) if block_given?
60
+ return @n2
61
+ end
62
+
51
63
  # (see Eddy::Segments::N3)
52
64
  #
53
65
  # @yieldparam [Eddy::Segments::N3]
@@ -65,6 +77,15 @@ module Eddy
65
77
  yield(@n4) if block_given?
66
78
  return @n4
67
79
  end
80
+
81
+ # (see Eddy::Segments::PER)
82
+ #
83
+ # @yieldparam [Eddy::Segments::PER]
84
+ # @return [Eddy::Segments::PER]
85
+ def PER()
86
+ yield(@per) if block_given?
87
+ return @per
88
+ end
68
89
  end
69
90
 
70
91
  end
@@ -0,0 +1,59 @@
1
+ module Eddy
2
+ module TransactionSets
3
+ module TS850
4
+ module Loops
5
+ module N9
6
+
7
+ # ### Loop Summary:
8
+ #
9
+ # - Repeat: 1000
10
+ # - Components:
11
+ # - N9
12
+ # - MTX
13
+ class Base < Eddy::Models::Loop::Base
14
+ # @param store [Eddy::Data::Store]
15
+ # @return [void]
16
+ def initialize(store)
17
+ @repeat_limit = 1000
18
+ super(store, Repeat)
19
+ end
20
+ end
21
+
22
+ # (see Eddy::TransactionSets::TS850::Loops::N9::Base)
23
+ class Repeat < Eddy::Models::Loop::Repeat
24
+ # @param store [Eddy::Data::Store]
25
+ # @return [void]
26
+ def initialize(store)
27
+ @n9 = Eddy::Segments::N9.new(store)
28
+ @mtx = Eddy::Segments::MTX.new(store)
29
+ super(
30
+ store,
31
+ @n9,
32
+ @mtx,
33
+ )
34
+ end
35
+
36
+ # (see Eddy::Segments::N9)
37
+ #
38
+ # @yieldparam [Eddy::Segments::N9]
39
+ # @return [Eddy::Segments::N9]
40
+ def N9()
41
+ yield(@n9) if block_given?
42
+ return @n9
43
+ end
44
+
45
+ # (see Eddy::Segments::MTX)
46
+ #
47
+ # @yieldparam [Eddy::Segments::MTX]
48
+ # @return [Eddy::Segments::MTX]
49
+ def MTX()
50
+ yield(@mtx) if block_given?
51
+ return @mtx
52
+ end
53
+ end
54
+
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,47 @@
1
+ module Eddy
2
+ module TransactionSets
3
+ module TS850
4
+ module Loops
5
+ module PID
6
+
7
+ # ### Loop Summary:
8
+ #
9
+ # - Repeat: 1000
10
+ # - Components:
11
+ # - PID
12
+ class Base < Eddy::Models::Loop::Base
13
+ # @param store [Eddy::Data::Store]
14
+ # @return [void]
15
+ def initialize(store)
16
+ @repeat_limit = 1000
17
+ super(store, Repeat)
18
+ end
19
+ end
20
+
21
+ # (see Eddy::TransactionSets::TS850::Loops::PID::Base)
22
+ class Repeat < Eddy::Models::Loop::Repeat
23
+ # @param store [Eddy::Data::Store]
24
+ # @return [void]
25
+ def initialize(store)
26
+ @pid = Eddy::Segments::PID.new(store)
27
+ super(
28
+ store,
29
+ @pid,
30
+ )
31
+ end
32
+
33
+ # (see Eddy::Segments::PID)
34
+ #
35
+ # @yieldparam [Eddy::Segments::PID]
36
+ # @return [Eddy::Segments::PID]
37
+ def PID()
38
+ yield(@pid) if block_given?
39
+ return @pid
40
+ end
41
+ end
42
+
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -1,28 +1,26 @@
1
1
  module Eddy
2
2
  module TransactionSets
3
- # Namespace for Transaction Set 850 and its loops.
4
3
  module TS850
5
4
  module Loops
6
5
  module PO1
7
6
 
8
7
  # ### Loop Summary:
9
8
  #
10
- # - Repeat: 100,000
9
+ # - Repeat: 100000
11
10
  # - Components:
12
11
  # - PO1
12
+ # - CTP (loop)
13
+ # - PID (loop)
14
+ # - SAC (loop)
15
+ # - TXI
16
+ # - N9 (loop)
13
17
  class Base < Eddy::Models::Loop::Base
14
18
  # @param store [Eddy::Data::Store]
15
19
  # @return [void]
16
20
  def initialize(store)
17
- @repeat_limit = 100_000
21
+ @repeat_limit = 100000
18
22
  super(store, Repeat)
19
23
  end
20
-
21
- # @yieldparam [Eddy::TransactionSets::TS850::Loops::PO1::Repeat]
22
- # @return [void]
23
- def repeat(&block)
24
- super(&block)
25
- end
26
24
  end
27
25
 
28
26
  # (see Eddy::TransactionSets::TS850::Loops::PO1::Base)
@@ -31,7 +29,20 @@ module Eddy
31
29
  # @return [void]
32
30
  def initialize(store)
33
31
  @po1 = Eddy::Segments::PO1.new(store)
34
- super(store, @po1)
32
+ @l_ctp = Eddy::TransactionSets::TS850::Loops::CTP::Base.new(store)
33
+ @l_pid = Eddy::TransactionSets::TS850::Loops::PID::Base.new(store)
34
+ @l_sac = Eddy::TransactionSets::TS850::Loops::SAC::Base.new(store)
35
+ @txi = Eddy::Segments::TXI.new(store)
36
+ @l_n9 = Eddy::TransactionSets::TS850::Loops::N9::Base.new(store)
37
+ super(
38
+ store,
39
+ @po1,
40
+ @l_ctp,
41
+ @l_pid,
42
+ @l_sac,
43
+ @txi,
44
+ @l_n9,
45
+ )
35
46
  end
36
47
 
37
48
  # (see Eddy::Segments::PO1)
@@ -42,6 +53,63 @@ module Eddy
42
53
  yield(@po1) if block_given?
43
54
  return @po1
44
55
  end
56
+
57
+ # (see Eddy::Segments::CTP)
58
+ #
59
+ # @yieldparam [Eddy::Segments::CTP]
60
+ # @return [Eddy::Segments::CTP]
61
+ def CTP()
62
+ yield(@ctp) if block_given?
63
+ return @ctp
64
+ end
65
+
66
+ # (see Eddy::TransactionSets::TS850::Loops::PID::Base)
67
+ #
68
+ # @yieldparam [Eddy::TransactionSets::TS850::Loops::PID::Repeat]
69
+ # @return [void]
70
+ def L_PID(&block)
71
+ if block_given?
72
+ @l_pid.repeat(&block)
73
+ else
74
+ raise Eddy::Errors::Error, "No block given in loop iteration"
75
+ end
76
+ return nil
77
+ end
78
+
79
+ # (see Eddy::TransactionSets::TS850::Loops::SAC::Base)
80
+ #
81
+ # @yieldparam [Eddy::TransactionSets::TS850::Loops::SAC::Repeat]
82
+ # @return [void]
83
+ def L_SAC(&block)
84
+ if block_given?
85
+ @l_sac.repeat(&block)
86
+ else
87
+ raise Eddy::Errors::Error, "No block given in loop iteration"
88
+ end
89
+ return nil
90
+ end
91
+
92
+ # (see Eddy::Segments::TXI)
93
+ #
94
+ # @yieldparam [Eddy::Segments::TXI]
95
+ # @return [Eddy::Segments::TXI]
96
+ def TXI()
97
+ yield(@txi) if block_given?
98
+ return @txi
99
+ end
100
+
101
+ # (see Eddy::TransactionSets::TS850::Loops::N9::Base)
102
+ #
103
+ # @yieldparam [Eddy::TransactionSets::TS850::Loops::N9::Repeat]
104
+ # @return [void]
105
+ def L_N9(&block)
106
+ if block_given?
107
+ @l_n9.repeat(&block)
108
+ else
109
+ raise Eddy::Errors::Error, "No block given in loop iteration"
110
+ end
111
+ return nil
112
+ end
45
113
  end
46
114
 
47
115
  end
@@ -0,0 +1,47 @@
1
+ module Eddy
2
+ module TransactionSets
3
+ module TS850
4
+ module Loops
5
+ module SAC
6
+
7
+ # ### Loop Summary:
8
+ #
9
+ # - Repeat: 25
10
+ # - Components:
11
+ # - SAC
12
+ class Base < Eddy::Models::Loop::Base
13
+ # @param store [Eddy::Data::Store]
14
+ # @return [void]
15
+ def initialize(store)
16
+ @repeat_limit = 25
17
+ super(store, Repeat)
18
+ end
19
+ end
20
+
21
+ # (see Eddy::TransactionSets::TS850::Loops::SAC::Base)
22
+ class Repeat < Eddy::Models::Loop::Repeat
23
+ # @param store [Eddy::Data::Store]
24
+ # @return [void]
25
+ def initialize(store)
26
+ @sac = Eddy::Segments::SAC.new(store)
27
+ super(
28
+ store,
29
+ @sac,
30
+ )
31
+ end
32
+
33
+ # (see Eddy::Segments::SAC)
34
+ #
35
+ # @yieldparam [Eddy::Segments::SAC]
36
+ # @return [Eddy::Segments::SAC]
37
+ def SAC()
38
+ yield(@sac) if block_given?
39
+ return @sac
40
+ end
41
+ end
42
+
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -1,6 +1,3 @@
1
- # EDI Toolkit.
2
- module Eddy; end
3
-
4
1
  require "eddy/version"
5
2
  require "eddy/errors"
6
3
  require "eddy/util"
@@ -16,3 +13,52 @@ Dir.glob(File.join(__dir__, "definitions", "segments", "**", "*.rb")).sort.each
16
13
  Dir.glob(File.join(__dir__, "definitions", "transaction_sets", "**", "*.rb")).sort.each { |file| require file }
17
14
 
18
15
  require "eddy/cli"
16
+
17
+ # EDI Toolkit.
18
+ module Eddy
19
+ # Configuration for Eddy.
20
+ #
21
+ # @return [Eddy::Config]
22
+ def self.config()
23
+ @config ||= Config.new
24
+ end
25
+
26
+ # Modify Eddy's current config.
27
+ #
28
+ # @example
29
+ # Eddy.configure do |config|
30
+ # config.persistence_method = :file
31
+ # end
32
+ #
33
+ # @yieldparam [Eddy::Config] config current Eddy config
34
+ # @return [void]
35
+ def self.configure()
36
+ yield self.config()
37
+ end
38
+
39
+ # Persistent data used by Eddy.
40
+ #
41
+ # @return [Eddy::Data::Persistence::Base]
42
+ def self.data
43
+ return @data if defined?(@data) && !@data.nil?
44
+ case Eddy.config.persistence_method
45
+ when :memory then @data = Eddy::Data::Persistence::Memory.new()
46
+ when :file then raise NotImplementedError
47
+ when :active_record
48
+ if defined?(Rails) && defined?(Eddy::Rails)
49
+ @data = Eddy::Data::Persistence::ActiveRecord.new()
50
+ else
51
+ raise Eddy::Errors::Error, "ActiveRecord persistence method can currently only be used with Ruby on Rails"
52
+ end
53
+ else raise Eddy::Errors::Error, "Unsupported persistence method: #{Eddy.config.persistence_method}"
54
+ end
55
+ return @data
56
+ end
57
+
58
+ # Set `@data` to `nil` so that a new persistence_method can be set up.
59
+ #
60
+ # @return [void]
61
+ def self.clear_data()
62
+ @data = nil
63
+ end
64
+ end