erp_integration 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +4 -4
- data/bin/prerelease +1 -1
- data/erp_integration.gemspec +1 -1
- data/lib/erp_integration/configuration.rb +32 -5
- data/lib/erp_integration/fulfil/api_resource.rb +10 -8
- data/lib/erp_integration/fulfil/query_methods.rb +4 -4
- data/lib/erp_integration/fulfil/resources/product.rb +21 -0
- data/lib/erp_integration/fulfil/resources/purchase_request.rb +13 -0
- data/lib/erp_integration/fulfil/resources/{order.rb → sales_order.rb} +6 -1
- data/lib/erp_integration/fulfil/resources/sales_order_line.rb +13 -0
- data/lib/erp_integration/fulfil/where_clause.rb +1 -1
- data/lib/erp_integration/product.rb +29 -0
- data/lib/erp_integration/purchase_request.rb +12 -0
- data/lib/erp_integration/resource.rb +2 -2
- data/lib/erp_integration/sales_order.rb +23 -0
- data/lib/erp_integration/sales_order_line.rb +16 -0
- data/lib/erp_integration/version.rb +1 -1
- data/lib/erp_integration.rb +5 -3
- metadata +20 -9
- data/lib/erp_integration/fulfil/collection.rb +0 -26
- data/lib/erp_integration/order.rb +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99b2b058b12b3b5d0b1212c9d077b9aaa224a9a20bc96f624dd7b5de3016bcaa
|
4
|
+
data.tar.gz: de266b8b0bb2c412866bf64ba0a28b75500faf79173e8d9bb1d56fd84c0a45b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '09c9117df5560187b9c5010b56ec0cc9ce30b3313a801e687795a0d97bc1c8dd2acae6ebc1cba7b186e777c2198def26e4071b7dfc52f28a04be0265657c68e6'
|
7
|
+
data.tar.gz: 3da4be6f4775e272d118ccb93ecec41c9744702a73f328245f472032d66c69796cbec23bb70286bd034e7b2593734f6c169bcd8d6e32d13e089b60ddab3784bc
|
data/README.md
CHANGED
@@ -37,15 +37,15 @@ end
|
|
37
37
|
After configuring the gem, one can easily query all the available ERP resources from the connected third-parties.
|
38
38
|
|
39
39
|
```ruby
|
40
|
-
$ ErpIntegration::
|
41
|
-
=> #<ErpIntegration::Fulfil::Collection @items=[<ErpIntegration::
|
40
|
+
$ ErpIntegration::SalesOrder.where(reference: 'MT1000SKX')
|
41
|
+
=> #<ErpIntegration::Fulfil::Collection @items=[<ErpIntegration::SalesOrder @id=100 />] />
|
42
42
|
```
|
43
43
|
|
44
44
|
By default, only the `id` will be added to the found ERP resources. However, one can use the `select` method to include more fields.
|
45
45
|
|
46
46
|
```ruby
|
47
|
-
$ ErpIntegration::
|
48
|
-
=> #<ErpIntegration::Fulfil::Collection @items=[<ErpIntegration::
|
47
|
+
$ ErpIntegration::SalesOrder.select(:id, :reference).where(reference: 'MT1000SKX')
|
48
|
+
=> #<ErpIntegration::Fulfil::Collection @items=[<ErpIntegration::SalesOrder @id=100 @reference=MT1000SKX />] />
|
49
49
|
```
|
50
50
|
|
51
51
|
There are also other type of `where` queries available:
|
data/bin/prerelease
CHANGED
data/erp_integration.gemspec
CHANGED
@@ -33,7 +33,7 @@ Gem::Specification.new do |spec|
|
|
33
33
|
|
34
34
|
# Faraday is a HTTP/REST API client library to interact with third-party API vendors
|
35
35
|
spec.add_dependency 'faraday', '>= 0.17.3', '< 1.9.0'
|
36
|
-
spec.add_dependency 'faraday_middleware', '
|
36
|
+
spec.add_dependency 'faraday_middleware', '>= 0.14', '< 1.3'
|
37
37
|
|
38
38
|
# Development dependencies
|
39
39
|
spec.add_development_dependency 'byebug', '~> 11.0'
|
@@ -22,10 +22,20 @@ module ErpIntegration
|
|
22
22
|
# @return [String] The merchant ID for Fulfil.
|
23
23
|
attr_accessor :fulfil_merchant_id
|
24
24
|
|
25
|
-
# Allows configuring an adapter for the `
|
25
|
+
# Allows configuring an adapter for the `SalesOrder` resource. When none is
|
26
26
|
# configured, it will default to Fulfil.
|
27
|
-
# @return [Symbol] The configured adapter for the orders
|
28
|
-
attr_writer :
|
27
|
+
# @return [Symbol] The configured adapter for the sales orders
|
28
|
+
attr_writer :sales_order_adapter
|
29
|
+
|
30
|
+
# Allows configuring an adapter for the `SalesOrderLine` resource. When none is
|
31
|
+
# configured, it will default to Fulfil.
|
32
|
+
# @return [Symbol] The configured adapter for the order lines.
|
33
|
+
attr_writer :sales_order_line_adapter
|
34
|
+
|
35
|
+
# Allows configuring an adapter for the `Product` resource. When none is
|
36
|
+
# configured, it will default to Fulfil.
|
37
|
+
# @return [Symbol] The configured adapter for the products.
|
38
|
+
attr_writer :product_adapter
|
29
39
|
|
30
40
|
# Allows configuring an adapter for the `PurchaseOrder` resource. When none is
|
31
41
|
# configured, it will default to Fulfil.
|
@@ -37,14 +47,27 @@ module ErpIntegration
|
|
37
47
|
# @return [Symbol] The configured adapter for the purchase order lines.
|
38
48
|
attr_writer :purchase_order_line_adapter
|
39
49
|
|
50
|
+
# Allows configuring an adapter for the `PurchaseRequest` resource. When
|
51
|
+
# none is configured, it will default to Fulfil.
|
52
|
+
# @return [Symbol] The configured adapter for the purchase request.
|
53
|
+
attr_writer :purchase_request_adapter
|
54
|
+
|
40
55
|
def initialize(**options)
|
41
56
|
options.each_pair do |key, value|
|
42
57
|
public_send("#{key}=", value) if respond_to?("#{key}=")
|
43
58
|
end
|
44
59
|
end
|
45
60
|
|
46
|
-
def
|
47
|
-
@
|
61
|
+
def sales_order_adapter
|
62
|
+
@sales_order_adapter || :fulfil
|
63
|
+
end
|
64
|
+
|
65
|
+
def sales_order_line_adapter
|
66
|
+
@sales_order_line_adapter || :fulfil
|
67
|
+
end
|
68
|
+
|
69
|
+
def product_adapter
|
70
|
+
@product_adapter || :fulfil
|
48
71
|
end
|
49
72
|
|
50
73
|
def purchase_order_adapter
|
@@ -54,6 +77,10 @@ module ErpIntegration
|
|
54
77
|
def purchase_order_line_adapter
|
55
78
|
@purchase_order_line_adapter || :fulfil
|
56
79
|
end
|
80
|
+
|
81
|
+
def purchase_request_adapter
|
82
|
+
@purchase_request_adapter || :fulfil
|
83
|
+
end
|
57
84
|
end
|
58
85
|
|
59
86
|
# Returns ERP Integration's configuration.
|
@@ -1,17 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative 'collection'
|
4
3
|
require_relative 'query_methods'
|
5
4
|
|
6
5
|
module ErpIntegration
|
7
6
|
module Fulfil
|
8
7
|
class ApiResource
|
8
|
+
include Enumerable
|
9
9
|
include QueryMethods
|
10
10
|
|
11
11
|
cattr_accessor :resource_klass, instance_accessor: false
|
12
|
-
|
13
12
|
delegate :client, :model_name, :resource_klass, to: 'self.class'
|
14
|
-
delegate_missing_to :all
|
15
13
|
|
16
14
|
def initialize(resource_klass)
|
17
15
|
self.class.resource_klass = resource_klass
|
@@ -20,17 +18,21 @@ module ErpIntegration
|
|
20
18
|
# The `where` and `includes` methods lazyly build a search/read query
|
21
19
|
# for Fulfil. By calling `all`, the prepared search/read query will actually
|
22
20
|
# be executed and the results will be fetched.
|
23
|
-
# @return [
|
21
|
+
# @return [Array] An enumerable collection object with all API results.
|
24
22
|
def all
|
25
23
|
return @results if defined?(@results)
|
26
24
|
|
27
|
-
@results =
|
25
|
+
@results =
|
28
26
|
client.put(
|
29
27
|
"model/#{model_name}/search_read",
|
30
28
|
Query.new(selected_fields, where_clauses)
|
31
|
-
)
|
32
|
-
|
33
|
-
|
29
|
+
).map { |item| resource_klass.new(item) }
|
30
|
+
end
|
31
|
+
|
32
|
+
# The `each` method turns the `ApiResource` instance into an enumerable object.
|
33
|
+
# For more information, see https://ruby-doc.org/core-3.0.2/Enumerable.html
|
34
|
+
def each(&block)
|
35
|
+
all.each(&block)
|
34
36
|
end
|
35
37
|
|
36
38
|
# The `client` exposes the `ErpIntegration::Fulfil::Client` to the class.
|
@@ -13,14 +13,14 @@ module ErpIntegration
|
|
13
13
|
# selecting multiple fields at once.
|
14
14
|
#
|
15
15
|
# @example
|
16
|
-
# $ ErpIntegration::
|
16
|
+
# $ ErpIntegration::SalesOrder.select(:id, :name, 'product.name')
|
17
17
|
# # => <ErpIntegration::Fulfil::Resources::Order @selected_fields=[:id, :name, "product.name"] />
|
18
18
|
#
|
19
19
|
# When one calls the `all` method, it will fetch all the resources from Fulfil
|
20
20
|
# and it will return all the given fields (if available).
|
21
21
|
#
|
22
22
|
# @example
|
23
|
-
# $ ErpIntegration::
|
23
|
+
# $ ErpIntegration::SalesOrder.select(:id, :name, 'product.name').all
|
24
24
|
# # => <ErpIntegration::Fulfil::Collection @items=[...] />
|
25
25
|
#
|
26
26
|
# Both a list of Strings, Symbols or a combination of these can be passed
|
@@ -41,8 +41,8 @@ module ErpIntegration
|
|
41
41
|
# to query resources in Fulfil.
|
42
42
|
#
|
43
43
|
# @example
|
44
|
-
# $ ErpIntegration::
|
45
|
-
# # => <ErpIntegration::Fulfil::Collection @items=[<ErpIntegration::
|
44
|
+
# $ ErpIntegration::SalesOrder.where(id: 100).all
|
45
|
+
# # => <ErpIntegration::Fulfil::Collection @items=[<ErpIntegration::SalesOrder @id=100 />] />
|
46
46
|
#
|
47
47
|
# If one adds the `comparison_operator` key to the arguments, it will use
|
48
48
|
# that comparison operator to build the query to Fulfil.
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../api_resource'
|
4
|
+
|
5
|
+
module ErpIntegration
|
6
|
+
module Fulfil
|
7
|
+
module Resources
|
8
|
+
class Product < ApiResource
|
9
|
+
self.model_name = 'product.product'
|
10
|
+
|
11
|
+
# Checks whether a certain product is a BOM.
|
12
|
+
# @param sku [String] The product's SKU.
|
13
|
+
# @return [Boolean] Whether it's a BOM or not.
|
14
|
+
def bom?(sku)
|
15
|
+
select(:boms).where(code: sku).first.boms.any?
|
16
|
+
end
|
17
|
+
alias billing_of_materials? bom?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -5,7 +5,7 @@ require_relative '../api_resource'
|
|
5
5
|
module ErpIntegration
|
6
6
|
module Fulfil
|
7
7
|
module Resources
|
8
|
-
class
|
8
|
+
class SalesOrder < ApiResource
|
9
9
|
self.model_name = 'sale.sale'
|
10
10
|
|
11
11
|
# Allows cancelling the entire sales order in Fulfil.
|
@@ -22,6 +22,11 @@ module ErpIntegration
|
|
22
22
|
# https://developers.fulfil.io/rest_api/model/sale.sale/#cancel-a-sales-order
|
23
23
|
rescue ErpIntegration::HttpError::BadRequest
|
24
24
|
false
|
25
|
+
# Workaround: Fulfil api does not return a json when status code is 200 (a.k.a. "Ok")
|
26
|
+
# and faraday is having an error when trying to parse it. Let's skip the parse error
|
27
|
+
# and move on.
|
28
|
+
rescue Faraday::ParsingError
|
29
|
+
true
|
25
30
|
end
|
26
31
|
end
|
27
32
|
end
|
@@ -26,7 +26,7 @@ module ErpIntegration
|
|
26
26
|
def initialize(key:, value:, comparison_operator: DEFAULT_COMPARISON_OPERATOR)
|
27
27
|
@comparison_operator = verify_comparison_operator(comparison_operator)
|
28
28
|
@key = key.to_s
|
29
|
-
@value = value
|
29
|
+
@value = value
|
30
30
|
end
|
31
31
|
|
32
32
|
# Transforms the `WhereClause` into a filter object for Fulfil.
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ErpIntegration
|
4
|
+
# The `ErpIntegration::Product` exposes an uniformed API for interaction with
|
5
|
+
# third-party ERP vendors.
|
6
|
+
class Product < Resource
|
7
|
+
attr_accessor :id, :code, :cost_price, :cost_price_method, :quantity_available,
|
8
|
+
:quantity_buildable, :quantity_inbound, :quantity_on_hand, :salable,
|
9
|
+
:template, :variant_name, :abc_classification, :account_category,
|
10
|
+
:account_cogs_used, :account_expense_used, :account_revenue_used,
|
11
|
+
:account_stock_lost_found_used, :account_stock_production_used,
|
12
|
+
:account_stock_supplier_used, :account_stock_used, :active,
|
13
|
+
:asin, :attachments, :attribute_set, :attributes, :attributes_json,
|
14
|
+
:average_daily_consumed, :average_daily_sales, :average_monthly_consumed,
|
15
|
+
:average_monthly_sales, :average_price, :boms, :box_type, :brand, :channel_listings,
|
16
|
+
:consumable, :country_of_origin, :create_date, :create_uid, :customs_description,
|
17
|
+
:customs_value, :days_of_inventory_left, :default_uom, :default_uom_category,
|
18
|
+
:description, :dimensions_uom, :ean, :fulfil_strategy, :gc_max, :gc_min,
|
19
|
+
:gift_card_delivery_mode, :gift_card_prices, :google_product_category,
|
20
|
+
:gross_margin, :gross_profit, :height, :hs_code, :is_gift_card, :landed_cost,
|
21
|
+
:lead_time_in_days, :length, :list_price, :long_description, :metadata,
|
22
|
+
:next_shipping_date, :product_suppliers, :purchasable, :purchase_uom,
|
23
|
+
:quantity_on_confirmed_purchase_orders, :quantity_outbound, :quantity_returned,
|
24
|
+
:quantity_sold, :quantity_waiting_consumption, :quantity_wip, :safety_stock_days,
|
25
|
+
:sale_uom, :scan_required, :ship_from_stock_if_available, :type,
|
26
|
+
:upc, :use_name_as_customs_description, :weight, :weight_uom,
|
27
|
+
:width, :write_date, :write_uid
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ErpIntegration
|
4
|
+
# The `ErpIntegration::PurchaseRequest` exposes an uniformed API for interaction with
|
5
|
+
# third-party ERP vendors.
|
6
|
+
class PurchaseRequest < Resource
|
7
|
+
attr_accessor :id, :party, :product, :quantity, :attachments, :company,
|
8
|
+
:create_date, :create_uid, :customer, :delivery_address,
|
9
|
+
:metadata, :purchase, :purchase_date, :purchase_line, :state,
|
10
|
+
:uom, :warehouse, :write_date, :write_uid
|
11
|
+
end
|
12
|
+
end
|
@@ -16,8 +16,8 @@ module ErpIntegration
|
|
16
16
|
# config.order_adapter = :fulfil
|
17
17
|
# end
|
18
18
|
#
|
19
|
-
# $ ErpIntegration::
|
20
|
-
# => #<ErpIntegration::
|
19
|
+
# $ ErpIntegration::SalesOrder.adapter
|
20
|
+
# => #<ErpIntegration::SalesOrders::FulfilOrder />
|
21
21
|
#
|
22
22
|
# To add a new resource, follow these steps:
|
23
23
|
# 1. Add a new `attr_writer` in the `ErpIntegration::Configuration` class.
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ErpIntegration
|
4
|
+
# The `ErpIntegration::SalesOrder` exposes an uniformed API for interaction with
|
5
|
+
# third-party ERP vendors.
|
6
|
+
class SalesOrder < Resource
|
7
|
+
attr_accessor :id, :channel, :number, :party, :sale_date, :shipment_address,
|
8
|
+
:amount_invoiced, :attachments, :carrier, :carrier_service,
|
9
|
+
:channel_identifier, :comment, :company, :confirmation_time,
|
10
|
+
:create_date, :currency, :description, :gateway_transaction,
|
11
|
+
:invoice_address, :invoice_method, :invoice_state, :invoices,
|
12
|
+
:lines, :metadata, :payment_term, :payment_total, :price_list,
|
13
|
+
:reference, :sales_person, :shipment_amount, :shipment_method,
|
14
|
+
:shipment_state, :shipments, :shipping_start_date, :state,
|
15
|
+
:tax_amount, :total_amount, :total_quantity, :total_shipment_cost,
|
16
|
+
:untaxed_amount, :warehouse, :weight, :weight_uom, :write_date,
|
17
|
+
:write_uid
|
18
|
+
|
19
|
+
def cancel
|
20
|
+
self.class.adapter.cancel(id)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ErpIntegration
|
4
|
+
# The `ErpIntegration::SalesOrderLine` exposes an uniformed API for interaction with
|
5
|
+
# third-party ERP vendors.
|
6
|
+
class SalesOrderLine < Resource
|
7
|
+
attr_accessor :id, :product, :quantity, :unit, :unit_price, :amount, :attachments,
|
8
|
+
:channel_identifier, :create_date, :create_uid, :delivery_address,
|
9
|
+
:delivery_date, :delivery_mode, :description, :discount, :gift_message,
|
10
|
+
:gross_profit_cpny_cc, :is_gift_card, :list_price, :listing_sku,
|
11
|
+
:metadata, :note, :options, :purhcase_request, :quantity_canceled,
|
12
|
+
:quantity_reserved, :quantity_shipped, :return_reason, :sale,
|
13
|
+
:sequence, :shipping_date, :taxes, :type, :warehouse, :write_date,
|
14
|
+
:write_uid
|
15
|
+
end
|
16
|
+
end
|
data/lib/erp_integration.rb
CHANGED
@@ -3,7 +3,6 @@
|
|
3
3
|
require 'active_support'
|
4
4
|
require 'active_support/core_ext/string/inflections'
|
5
5
|
require 'active_support/core_ext/module/delegation' # Allows using `delegate`
|
6
|
-
require 'active_support/core_ext/module/attribute_accessors' # Allows using `delegate_missing_to`
|
7
6
|
require 'faraday'
|
8
7
|
require 'faraday_middleware'
|
9
8
|
require 'json'
|
@@ -21,8 +20,11 @@ require_relative 'erp_integration/fulfil/client'
|
|
21
20
|
# The `ErpIntegration` integrates Mejuri with third-party ERP vendors.
|
22
21
|
module ErpIntegration
|
23
22
|
# Resources
|
24
|
-
autoload :
|
25
|
-
autoload :Order, 'erp_integration/order'
|
23
|
+
autoload :Product, 'erp_integration/product'
|
26
24
|
autoload :PurchaseOrder, 'erp_integration/purchase_order'
|
27
25
|
autoload :PurchaseOrderLine, 'erp_integration/purchase_order_line'
|
26
|
+
autoload :PurchaseRequest, 'erp_integration/purchase_request'
|
27
|
+
autoload :Resource, 'erp_integration/resource'
|
28
|
+
autoload :SalesOrder, 'erp_integration/sales_order'
|
29
|
+
autoload :SalesOrderLine, 'erp_integration/sales_order_line'
|
28
30
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: erp_integration
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefan Vermaas
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-10-
|
11
|
+
date: 2021-10-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -48,16 +48,22 @@ dependencies:
|
|
48
48
|
name: faraday_middleware
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
|
-
- - "
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0.14'
|
54
|
+
- - "<"
|
52
55
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
56
|
+
version: '1.3'
|
54
57
|
type: :runtime
|
55
58
|
prerelease: false
|
56
59
|
version_requirements: !ruby/object:Gem::Requirement
|
57
60
|
requirements:
|
58
|
-
- - "
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0.14'
|
64
|
+
- - "<"
|
59
65
|
- !ruby/object:Gem::Version
|
60
|
-
version:
|
66
|
+
version: '1.3'
|
61
67
|
- !ruby/object:Gem::Dependency
|
62
68
|
name: byebug
|
63
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -257,18 +263,23 @@ files:
|
|
257
263
|
- lib/erp_integration/errors.rb
|
258
264
|
- lib/erp_integration/fulfil/api_resource.rb
|
259
265
|
- lib/erp_integration/fulfil/client.rb
|
260
|
-
- lib/erp_integration/fulfil/collection.rb
|
261
266
|
- lib/erp_integration/fulfil/query.rb
|
262
267
|
- lib/erp_integration/fulfil/query_methods.rb
|
263
|
-
- lib/erp_integration/fulfil/resources/
|
268
|
+
- lib/erp_integration/fulfil/resources/product.rb
|
264
269
|
- lib/erp_integration/fulfil/resources/purchase_order.rb
|
265
270
|
- lib/erp_integration/fulfil/resources/purchase_order_line.rb
|
271
|
+
- lib/erp_integration/fulfil/resources/purchase_request.rb
|
272
|
+
- lib/erp_integration/fulfil/resources/sales_order.rb
|
273
|
+
- lib/erp_integration/fulfil/resources/sales_order_line.rb
|
266
274
|
- lib/erp_integration/fulfil/where_clause.rb
|
267
275
|
- lib/erp_integration/middleware/error_handling.rb
|
268
|
-
- lib/erp_integration/
|
276
|
+
- lib/erp_integration/product.rb
|
269
277
|
- lib/erp_integration/purchase_order.rb
|
270
278
|
- lib/erp_integration/purchase_order_line.rb
|
279
|
+
- lib/erp_integration/purchase_request.rb
|
271
280
|
- lib/erp_integration/resource.rb
|
281
|
+
- lib/erp_integration/sales_order.rb
|
282
|
+
- lib/erp_integration/sales_order_line.rb
|
272
283
|
- lib/erp_integration/version.rb
|
273
284
|
homepage: https://www.github.com/mejuri-inc/erp-integration
|
274
285
|
licenses:
|
@@ -1,26 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module ErpIntegration
|
4
|
-
module Fulfil
|
5
|
-
# The `Collection` class provides an enumerable interface for the `ApiResource`
|
6
|
-
# to consume. It turns all the given items into the passed resource class.
|
7
|
-
#
|
8
|
-
# @example
|
9
|
-
# $ Collection.new([...], resource_klass: ErpIntegration::Order)
|
10
|
-
# # => <Collection @items=[<ErpIntegration::Order ... />, <ErpIntegration::Order ... />]
|
11
|
-
class Collection
|
12
|
-
include Enumerable
|
13
|
-
attr_reader :items
|
14
|
-
|
15
|
-
def initialize(items, resource_klass:)
|
16
|
-
@items = items.map { |item| resource_klass.new(item) }
|
17
|
-
end
|
18
|
-
|
19
|
-
# The `each` method turns the `Collection` instance into an enumerable object.
|
20
|
-
# For more information, see https://ruby-doc.org/core-3.0.2/Enumerable.html
|
21
|
-
def each(&block)
|
22
|
-
@items.each(&block)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|