agris 0.18.0 → 1.0.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 (66) hide show
  1. checksums.yaml +4 -4
  2. data/.claude/agents/app-explorer.md +212 -0
  3. data/.claude/agents/cross-review.md +152 -0
  4. data/.claude/agents/developer.md +215 -0
  5. data/.claude/agents/pm.md +401 -0
  6. data/.claude/agents/qa.md +235 -0
  7. data/.claude/agents/reviewer.md +185 -0
  8. data/.claude/agents/spec-preflight.md +167 -0
  9. data/.claude/agents/spec.md +244 -0
  10. data/.claude/ai/agent-rules.md +36 -0
  11. data/.claude/ai/spec-writing-guide.md +43 -0
  12. data/.claude/commands/app-explorer.md +87 -0
  13. data/.claude/commands/cross-review.md +91 -0
  14. data/.claude/commands/developer.md +118 -0
  15. data/.claude/commands/pm.md +166 -0
  16. data/.claude/commands/qa.md +111 -0
  17. data/.claude/commands/reviewer.md +86 -0
  18. data/.claude/commands/spec.md +172 -0
  19. data/.github/workflows/ci.yml +62 -0
  20. data/.gitignore +5 -0
  21. data/.rubocop.yml +10 -103
  22. data/.ruby-version +1 -0
  23. data/CHANGELOG.md +79 -0
  24. data/CLAUDE.md +98 -0
  25. data/README.md +9 -1
  26. data/agris.gemspec +3 -2
  27. data/docs/RELEASING.md +147 -0
  28. data/docs/specs/README.md +26 -0
  29. data/docs/specs/accounts-payables/.gitkeep +0 -0
  30. data/docs/specs/accounts-receivables/.gitkeep +0 -0
  31. data/docs/specs/grain/.gitkeep +0 -0
  32. data/docs/specs/inventory/.gitkeep +0 -0
  33. data/docs/specs/messages/.gitkeep +0 -0
  34. data/docs/specs/rename-folder.example.md +82 -0
  35. data/docs/specs/spec-template.md +68 -0
  36. data/docs/specs/support/.gitkeep +0 -0
  37. data/lib/agris/api/accounts_payables/disbursements.rb +19 -0
  38. data/lib/agris/api/accounts_payables/new_disbursement.rb +42 -0
  39. data/lib/agris/api/accounts_payables.rb +3 -0
  40. data/lib/agris/api/accounts_receivables/invoices.rb +1 -1
  41. data/lib/agris/api/accounts_receivables/new_payment.rb +96 -0
  42. data/lib/agris/api/accounts_receivables/new_payment_remark.rb +38 -0
  43. data/lib/agris/api/accounts_receivables/payment_post_result.rb +35 -0
  44. data/lib/agris/api/accounts_receivables/payments.rb +33 -0
  45. data/lib/agris/api/accounts_receivables.rb +6 -0
  46. data/lib/agris/api/document_query_response.rb +6 -2
  47. data/lib/agris/api/grain/contract.rb +3 -3
  48. data/lib/agris/api/grain/new_ticket.rb +1 -0
  49. data/lib/agris/api/grain/purchase_contracts.rb +1 -1
  50. data/lib/agris/api/grain/sales_contracts.rb +1 -1
  51. data/lib/agris/api/grain.rb +4 -2
  52. data/lib/agris/api/inventory/delivery_tickets.rb +1 -1
  53. data/lib/agris/api/inventory/orders.rb +1 -1
  54. data/lib/agris/api/messages/changed_query_base.rb +1 -0
  55. data/lib/agris/api/messages/document_query_base.rb +1 -0
  56. data/lib/agris/api/messages/import.rb +1 -0
  57. data/lib/agris/api/name/new_farm_field.rb +5 -0
  58. data/lib/agris/api/new_voucher.rb +1 -3
  59. data/lib/agris/api/post_result.rb +9 -1
  60. data/lib/agris/client.rb +3 -1
  61. data/lib/agris/version.rb +1 -1
  62. data/lib/agris.rb +1 -0
  63. data/lib/hash.rb +1 -0
  64. metadata +48 -13
  65. data/.circleci/config.yml +0 -45
  66. data/.codeclimate.yml +0 -5
@@ -17,7 +17,7 @@ module Agris
17
17
  )
18
18
  end
19
19
 
20
- def purchase_contracts_changed_since(datetime, detail = false)
20
+ def purchase_contracts_changed_since(datetime, detail: false)
21
21
  extract_documents(
22
22
  Messages::QueryChangedPurchaseContracts.new(datetime, detail),
23
23
  Agris::Api::Grain::Contract
@@ -17,7 +17,7 @@ module Agris
17
17
  )
18
18
  end
19
19
 
20
- def sales_contracts_changed_since(datetime, detail = false)
20
+ def sales_contracts_changed_since(datetime, detail: false)
21
21
  extract_documents(
22
22
  Messages::QueryChangedSalesContracts.new(datetime, detail),
23
23
  Agris::Api::Grain::Contract
@@ -16,8 +16,10 @@ module Agris
16
16
  autoload :NewTicketRemark, 'agris/api/grain/new_ticket_remark'
17
17
  autoload :Rates, 'agris/api/grain/rates'
18
18
  autoload :SalesContracts, 'agris/api/grain/sales_contracts'
19
- autoload :SpecificCommodityCodeExtract, 'agris/api/grain/specific_commodity_code_extract'
20
- autoload :SpecificContractExtract, 'agris/api/grain/specific_contract_extract'
19
+ autoload :SpecificCommodityCodeExtract,
20
+ 'agris/api/grain/specific_commodity_code_extract'
21
+ autoload :SpecificContractExtract,
22
+ 'agris/api/grain/specific_contract_extract'
21
23
  autoload :Tickets, 'agris/api/grain/tickets'
22
24
  end
23
25
  end
@@ -18,7 +18,7 @@ module Agris
18
18
  )
19
19
  end
20
20
 
21
- def delivery_tickets_changed_since(datetime, detail = false)
21
+ def delivery_tickets_changed_since(datetime, detail: false)
22
22
  extract_documents(
23
23
  Messages::QueryChangedDeliveryTickets.new(datetime, detail),
24
24
  DeliveryTicket
@@ -28,7 +28,7 @@ module Agris
28
28
  )
29
29
  end
30
30
 
31
- def orders_changed_since(datetime, detail = false)
31
+ def orders_changed_since(datetime, detail: false)
32
32
  extract_documents(
33
33
  Messages::QueryChangedOrders.new(datetime, detail),
34
34
  Agris::Api::Order
@@ -4,6 +4,7 @@ module Agris
4
4
  module Messages
5
5
  class ChangedQueryBase < QueryBase
6
6
  def initialize(time, detail)
7
+ super()
7
8
  @time = time
8
9
  @detail = detail
9
10
  end
@@ -4,6 +4,7 @@ module Agris
4
4
  module Messages
5
5
  class DocumentQueryBase < QueryBase
6
6
  def initialize(document_references)
7
+ super()
7
8
  @document_references = document_references
8
9
  end
9
10
 
@@ -4,6 +4,7 @@ module Agris
4
4
  module Messages
5
5
  class Import < MessageBase
6
6
  def initialize(model)
7
+ super()
7
8
  @model = model
8
9
  end
9
10
 
@@ -16,6 +16,7 @@ module Agris
16
16
  field_description
17
17
  ).freeze
18
18
 
19
+ attr_reader :record_type
19
20
  attr_accessor(*ATTRIBUTE_NAMES)
20
21
 
21
22
  def initialize(hash = {})
@@ -23,6 +24,10 @@ module Agris
23
24
 
24
25
  @record_type = 'NAMF0'
25
26
  end
27
+
28
+ def records
29
+ [self]
30
+ end
26
31
  end
27
32
  end
28
33
  end
@@ -5,8 +5,6 @@ module Agris
5
5
  class NewVoucher
6
6
  include XmlModel
7
7
 
8
- attr_reader :details
9
-
10
8
  ATTRIBUTE_NAMES = %w(
11
9
  agent_id
12
10
  currency_code
@@ -44,7 +42,7 @@ module Agris
44
42
  voucher_type
45
43
  ).freeze
46
44
 
47
- attr_reader(*ATTRIBUTE_NAMES)
45
+ attr_reader :details, *ATTRIBUTE_NAMES
48
46
 
49
47
  def initialize(hash = {})
50
48
  super
@@ -6,10 +6,18 @@ module Agris
6
6
  results['result']['document']
7
7
  end
8
8
 
9
+ # A processed post reports an empty `<reject />`, so there may be no
10
+ # rejections to read.
9
11
  def reject_reasons
10
- results['result']['rejects']['reject']
12
+ rejects = results.fetch('result', {})['rejects']
13
+
14
+ return [] if rejects.nil?
15
+
16
+ [rejects['reject']]
17
+ .flatten
11
18
  .compact
12
19
  .map { |rejection| rejection['reason'] }
20
+ .compact
13
21
  end
14
22
 
15
23
  def results
data/lib/agris/client.rb CHANGED
@@ -1,8 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
  module Agris
3
3
  class Client
4
+ include Api::AccountsPayables::Disbursements
4
5
  include Api::AccountsPayables::Vouchers
5
6
  include Api::AccountsReceivables::Invoices
7
+ include Api::AccountsReceivables::Payments
6
8
  include Api::Grain::CommodityCodes
7
9
  include Api::Grain::GrainModule
8
10
  include Api::Grain::PurchaseContracts
@@ -41,7 +43,7 @@ module Agris
41
43
 
42
44
  def logger
43
45
  # We may want to replace the Logger with some kind of NullLogger?
44
- @logger ||= Logger.new(STDOUT)
46
+ @logger ||= Logger.new($stdout)
45
47
  end
46
48
  end
47
49
  end
data/lib/agris/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Agris
4
- VERSION = '0.18.0'
4
+ VERSION = '1.0.0'
5
5
  end
data/lib/agris.rb CHANGED
@@ -18,6 +18,7 @@ module Agris
18
18
  :proxy_url,
19
19
  :request_type,
20
20
  :user_agent
21
+
21
22
  # ```ruby
22
23
  # Agris.configure do |config|
23
24
  # config.credentials = Agris::Credentials::Anonymous.new
data/lib/hash.rb CHANGED
@@ -34,6 +34,7 @@ class Hash
34
34
  if child.name == 'text'
35
35
  unless child.next_sibling || child.previous_sibling
36
36
  return result unless attributes
37
+
37
38
  result_hash[key_value(child)] = result
38
39
  end
39
40
  elsif result_hash[key_value(child)]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: agris
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Gray
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2024-12-17 00:00:00.000000000 Z
12
+ date: 2026-09-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: savon
@@ -29,16 +29,16 @@ dependencies:
29
29
  name: bundler
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - "~>"
32
+ - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: 2.3.7
34
+ version: '2.3'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - "~>"
39
+ - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: 2.3.7
41
+ version: '2.3'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: pry-byebug
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -99,16 +99,16 @@ dependencies:
99
99
  name: rubocop
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
- - - '='
102
+ - - "~>"
103
103
  - !ruby/object:Gem::Version
104
- version: 0.54.0
104
+ version: '1.80'
105
105
  type: :development
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
- - - '='
109
+ - - "~>"
110
110
  - !ruby/object:Gem::Version
111
- version: 0.54.0
111
+ version: '1.80'
112
112
  - !ruby/object:Gem::Dependency
113
113
  name: simplecov
114
114
  requirement: !ruby/object:Gem::Requirement
@@ -145,12 +145,31 @@ executables: []
145
145
  extensions: []
146
146
  extra_rdoc_files: []
147
147
  files:
148
- - ".circleci/config.yml"
149
- - ".codeclimate.yml"
148
+ - ".claude/agents/app-explorer.md"
149
+ - ".claude/agents/cross-review.md"
150
+ - ".claude/agents/developer.md"
151
+ - ".claude/agents/pm.md"
152
+ - ".claude/agents/qa.md"
153
+ - ".claude/agents/reviewer.md"
154
+ - ".claude/agents/spec-preflight.md"
155
+ - ".claude/agents/spec.md"
156
+ - ".claude/ai/agent-rules.md"
157
+ - ".claude/ai/spec-writing-guide.md"
158
+ - ".claude/commands/app-explorer.md"
159
+ - ".claude/commands/cross-review.md"
160
+ - ".claude/commands/developer.md"
161
+ - ".claude/commands/pm.md"
162
+ - ".claude/commands/qa.md"
163
+ - ".claude/commands/reviewer.md"
164
+ - ".claude/commands/spec.md"
165
+ - ".github/workflows/ci.yml"
150
166
  - ".gitignore"
151
167
  - ".rspec"
152
168
  - ".rubocop.yml"
153
169
  - ".rubocop_todo.yml"
170
+ - ".ruby-version"
171
+ - CHANGELOG.md
172
+ - CLAUDE.md
154
173
  - Gemfile
155
174
  - LICENSE
156
175
  - README.md
@@ -158,12 +177,28 @@ files:
158
177
  - agris.gemspec
159
178
  - bin/console
160
179
  - bin/setup
180
+ - docs/RELEASING.md
181
+ - docs/specs/README.md
182
+ - docs/specs/accounts-payables/.gitkeep
183
+ - docs/specs/accounts-receivables/.gitkeep
184
+ - docs/specs/grain/.gitkeep
185
+ - docs/specs/inventory/.gitkeep
186
+ - docs/specs/messages/.gitkeep
187
+ - docs/specs/rename-folder.example.md
188
+ - docs/specs/spec-template.md
189
+ - docs/specs/support/.gitkeep
161
190
  - lib/agris.rb
162
191
  - lib/agris/api.rb
163
192
  - lib/agris/api/accounts_payables.rb
193
+ - lib/agris/api/accounts_payables/disbursements.rb
194
+ - lib/agris/api/accounts_payables/new_disbursement.rb
164
195
  - lib/agris/api/accounts_receivables.rb
165
196
  - lib/agris/api/accounts_receivables/invoice.rb
166
197
  - lib/agris/api/accounts_receivables/invoices.rb
198
+ - lib/agris/api/accounts_receivables/new_payment.rb
199
+ - lib/agris/api/accounts_receivables/new_payment_remark.rb
200
+ - lib/agris/api/accounts_receivables/payment_post_result.rb
201
+ - lib/agris/api/accounts_receivables/payments.rb
167
202
  - lib/agris/api/accounts_receivables/specific_invoice_extract.rb
168
203
  - lib/agris/api/document_query_response.rb
169
204
  - lib/agris/api/grain.rb
@@ -243,7 +278,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
243
278
  requirements:
244
279
  - - ">="
245
280
  - !ruby/object:Gem::Version
246
- version: '0'
281
+ version: '3.1'
247
282
  required_rubygems_version: !ruby/object:Gem::Requirement
248
283
  requirements:
249
284
  - - ">="
data/.circleci/config.yml DELETED
@@ -1,45 +0,0 @@
1
- version: 2
2
-
3
- jobs:
4
- build:
5
- docker:
6
- # specify the version you desire here
7
- - image: circleci/ruby:2.4.1
8
-
9
- working_directory: ~/agris
10
-
11
- steps:
12
- - checkout
13
- - run:
14
- name: install dependencies
15
- command: |
16
- bundle install --jobs=4 --retry=3 --path vendor/bundle
17
-
18
- - run:
19
- name: Setup Code Climate test-reporter
20
- command: |
21
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
22
- chmod +x ./cc-test-reporter
23
-
24
- # run tests!
25
- - run:
26
- name: run tests
27
- command: |
28
- ./cc-test-reporter before-build
29
- mkdir /tmp/test-results
30
- TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)"
31
-
32
- bundle exec rspec --format progress \
33
- --format RspecJunitFormatter \
34
- --out /tmp/test-results/rspec.xml \
35
- --format progress \
36
- -- \
37
- $TEST_FILES
38
- ./cc-test-reporter after-build --coverage-input-type simplecov --exit-code $?
39
-
40
- # collect reports
41
- - store_test_results:
42
- path: /tmp/test-results
43
- - store_artifacts:
44
- path: /tmp/test-results
45
- destination: test-results
data/.codeclimate.yml DELETED
@@ -1,5 +0,0 @@
1
- version: "2"
2
- plugins:
3
- rubocop:
4
- enabled: true
5
- channel: rubocop-0-54