diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 2ced80c5ae..8403c4cdb6 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -47,7 +47,7 @@ Metrics/BlockNesting: Exclude: - 'app/models/spree/payment/processing.rb' -# Offense count: 47 +# Offense count: 48 # Configuration parameters: CountComments, Max, CountAsOne. Metrics/ClassLength: Exclude: @@ -88,6 +88,7 @@ Metrics/ClassLength: - 'app/services/cart_service.rb' - 'app/services/order_cycles/form_service.rb' - 'app/services/orders/sync_service.rb' + - 'app/services/permissions/order.rb' - 'app/services/sets/product_set.rb' - 'engines/order_management/app/services/order_management/order/updater.rb' - 'lib/open_food_network/enterprise_fee_calculator.rb' @@ -98,7 +99,6 @@ Metrics/ClassLength: - 'lib/reporting/reports/enterprise_fee_summary/enterprise_fees_with_tax_report_by_producer.rb' - 'lib/reporting/reports/enterprise_fee_summary/scope.rb' - 'lib/reporting/reports/xero_invoices/base.rb' - - 'app/services/permissions/order.rb' # Offense count: 30 # Configuration parameters: AllowedMethods, AllowedPatterns, Max. @@ -129,14 +129,13 @@ Metrics/CyclomaticComplexity: - 'lib/spree/localized_number.rb' - 'spec/models/product_importer_spec.rb' -# Offense count: 23 +# Offense count: 22 # Configuration parameters: CountComments, Max, CountAsOne, AllowedMethods, AllowedPatterns. Metrics/MethodLength: Exclude: - 'app/controllers/admin/enterprises_controller.rb' - 'app/controllers/payment_gateways/paypal_controller.rb' - 'app/controllers/spree/orders_controller.rb' - - 'app/helpers/spree/admin/navigation_helper.rb' - 'app/models/spree/ability.rb' - 'app/models/spree/gateway/pay_pal_express.rb' - 'app/models/spree/order/checkout.rb' @@ -149,7 +148,7 @@ Metrics/MethodLength: - 'lib/spree/localized_number.rb' - 'lib/tasks/sample_data/product_factory.rb' -# Offense count: 47 +# Offense count: 10 # Configuration parameters: CountComments, Max, CountAsOne. Metrics/ModuleLength: Exclude: @@ -174,7 +173,7 @@ Metrics/ParameterLists: - 'spec/support/controller_requests_helper.rb' - 'spec/system/admin/reports_spec.rb' -# Offense count: 3 +# Offense count: 4 # Configuration parameters: AllowedMethods, AllowedPatterns, Max. Metrics/PerceivedComplexity: Exclude: @@ -182,6 +181,27 @@ Metrics/PerceivedComplexity: - 'app/models/spree/ability.rb' - 'app/models/spree/order/checkout.rb' +# Offense count: 1 +# Configuration parameters: EnforcedStyle, AllowedPatterns. +# SupportedStyles: snake_case, camelCase +Naming/MethodName: + Exclude: + - 'engines/dfc_provider/lib/dfc_provider/catalog_item.rb' + +# Offense count: 1 +# Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames. +# AllowedNames: as, at, by, cc, db, id, if, in, io, ip, of, on, os, pp, to +Naming/MethodParameterName: + Exclude: + - 'engines/dfc_provider/lib/dfc_provider/catalog_item.rb' + +# Offense count: 3 +# Configuration parameters: EnforcedStyle, AllowedIdentifiers, AllowedPatterns. +# SupportedStyles: snake_case, camelCase +Naming/VariableName: + Exclude: + - 'engines/dfc_provider/lib/dfc_provider/catalog_item.rb' + # Offense count: 1 # Configuration parameters: TransactionMethods. Rails/TransactionExitStatement: diff --git a/engines/dfc_provider/app/services/catalog_item_builder.rb b/engines/dfc_provider/app/services/catalog_item_builder.rb index 9d719169f4..32cb06e284 100644 --- a/engines/dfc_provider/app/services/catalog_item_builder.rb +++ b/engines/dfc_provider/app/services/catalog_item_builder.rb @@ -6,13 +6,15 @@ class CatalogItemBuilder < DfcBuilder enterprise_id: variant.supplier_id, id: variant.id, ) + supplier_url = urls.enterprise_url(variant.supplier_id) product = SuppliedProductBuilder.supplied_product(variant) - DataFoodConsortium::Connector::CatalogItem.new( + DfcProvider::CatalogItem.new( id, product:, sku: variant.sku, stockLimitation: stock_limitation(variant), offers: [OfferBuilder.build(variant)], + managedBy: supplier_url, ) end diff --git a/engines/dfc_provider/lib/dfc_provider.rb b/engines/dfc_provider/lib/dfc_provider.rb index b58f456953..59935871e9 100644 --- a/engines/dfc_provider/lib/dfc_provider.rb +++ b/engines/dfc_provider/lib/dfc_provider.rb @@ -9,6 +9,7 @@ require "dfc_provider/engine" # Custom data types require "dfc_provider/supplied_product" require "dfc_provider/address" +require "dfc_provider/catalog_item" require "dfc_provider/coordination" # 🙈 Monkey-patch a better inspector for semantic objects diff --git a/engines/dfc_provider/lib/dfc_provider/catalog_item.rb b/engines/dfc_provider/lib/dfc_provider/catalog_item.rb new file mode 100644 index 0000000000..a7a88fef96 --- /dev/null +++ b/engines/dfc_provider/lib/dfc_provider/catalog_item.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +# Temporary solution. +module DfcProvider + class CatalogItem < DataFoodConsortium::Connector::CatalogItem + attr_accessor :managedBy + + def initialize(semantic_id, managedBy: "", **properties) + super(semantic_id, **properties) + @managedBy = managedBy + + registerSemanticProperty("dfc-b:managedBy", &method("managedBy")) + .valueSetter = method("managedBy=") + end + end +end diff --git a/engines/dfc_provider/spec/services/catalog_item_builder_spec.rb b/engines/dfc_provider/spec/services/catalog_item_builder_spec.rb index f42e752292..2ee234616b 100644 --- a/engines/dfc_provider/spec/services/catalog_item_builder_spec.rb +++ b/engines/dfc_provider/spec/services/catalog_item_builder_spec.rb @@ -6,10 +6,12 @@ RSpec.describe CatalogItemBuilder do let(:variant) { build(:variant) } describe ".catalog_item" do - it "assigns a semantic id" do + before do variant.id = 5 variant.supplier_id = 7 + end + it "assigns a semantic id" do item = CatalogItemBuilder.catalog_item(variant) expect(item.semanticId).to eq( @@ -18,15 +20,20 @@ RSpec.describe CatalogItemBuilder do end it "refers to a supplied product" do - variant.id = 5 - variant.supplier_id = 7 - item = CatalogItemBuilder.catalog_item(variant) expect(item.product.semanticId).to eq( "http://test.host/api/dfc/enterprises/7/supplied_products/5" ) end + + it "refers to the supplier" do + item = CatalogItemBuilder.catalog_item(variant) + + expect(item.managedBy).to eq( + "http://test.host/api/dfc/enterprises/7" + ) + end end describe ".apply_stock" do