From 17b13e75a8d39e02763b95c1cf8aa7736ba52aa2 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Wed, 14 Feb 2024 15:47:05 +1100 Subject: [PATCH 1/2] Add DfcProvider::Address Add our own address to include `region`, currently not supported by the DFC connector. `region` is already included in the next branch of data-model-uml: https://github.com/datafoodconsortium/data-model-uml/commit/729eba31a5e551736a18d263531291a5811919c5 To me removed once the DFC connector is updated --- engines/dfc_provider/lib/dfc_provider.rb | 1 + .../dfc_provider/lib/dfc_provider/address.rb | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 engines/dfc_provider/lib/dfc_provider/address.rb diff --git a/engines/dfc_provider/lib/dfc_provider.rb b/engines/dfc_provider/lib/dfc_provider.rb index 9e917a5701..526cceb9c3 100644 --- a/engines/dfc_provider/lib/dfc_provider.rb +++ b/engines/dfc_provider/lib/dfc_provider.rb @@ -8,6 +8,7 @@ require "dfc_provider/engine" # Custom data types require "dfc_provider/supplied_product" +require "dfc_provider/address" module DfcProvider DataFoodConsortium::Connector::Importer.register_type(SuppliedProduct) diff --git a/engines/dfc_provider/lib/dfc_provider/address.rb b/engines/dfc_provider/lib/dfc_provider/address.rb new file mode 100644 index 0000000000..02ecc5ca3b --- /dev/null +++ b/engines/dfc_provider/lib/dfc_provider/address.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +# Temporary solution to add `region` to Address, to be removed once the DFC connector supports it + +module DfcProvider + class Address < DataFoodConsortium::Connector::Address + # @return [String] + attr_accessor :region + + def initialize(semantic_id, region: "", **properties) + super(semantic_id, **properties) + @region = region + + registerSemanticProperty("dfc-b:region", &method("region")).valueSetter = method("region=") + end + end +end From a5bc1d5c483a0c86f558f8cbd2896834566f3e58 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Wed, 14 Feb 2024 15:57:50 +1100 Subject: [PATCH 2/2] Add `region` to address via DfcProvider::Address Plus spec and documentation --- engines/dfc_provider/app/services/address_builder.rb | 5 +++-- engines/dfc_provider/spec/services/address_builder_spec.rb | 5 +++++ swagger/dfc.yaml | 3 +++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/engines/dfc_provider/app/services/address_builder.rb b/engines/dfc_provider/app/services/address_builder.rb index 7b89d2a073..1c7b3618d3 100644 --- a/engines/dfc_provider/app/services/address_builder.rb +++ b/engines/dfc_provider/app/services/address_builder.rb @@ -2,12 +2,13 @@ class AddressBuilder < DfcBuilder def self.address(address) - DataFoodConsortium::Connector::Address.new( + DfcProvider::Address.new( urls.address_url(address), street: address.address1, postalCode: address.zipcode, city: address.city, - country: address.country.name + country: address.country.name, + region: address.state.name ) end end diff --git a/engines/dfc_provider/spec/services/address_builder_spec.rb b/engines/dfc_provider/spec/services/address_builder_spec.rb index 660c7781ae..134e08e998 100644 --- a/engines/dfc_provider/spec/services/address_builder_spec.rb +++ b/engines/dfc_provider/spec/services/address_builder_spec.rb @@ -8,6 +8,7 @@ describe AddressBuilder do build( :address, id: 1, address1: "Paradise 15", zipcode: "0001", city: "Goosnargh", + state: build(:state, name: "Victoria") ) } @@ -33,5 +34,9 @@ describe AddressBuilder do it "assigns a country" do expect(result.country).to eq "Australia" end + + it "assigns a region" do + expect(result.region).to eq "Victoria" + end end end diff --git a/swagger/dfc.yaml b/swagger/dfc.yaml index c4404a9086..9ba35ae272 100644 --- a/swagger/dfc.yaml +++ b/swagger/dfc.yaml @@ -64,6 +64,7 @@ paths: dfc-b:hasPostalCode: '20170' dfc-b:hasCity: Herndon dfc-b:hasCountry: Australia + dfc-b:region: Victoria '404': description: not found "/api/dfc/enterprises/{enterprise_id}/catalog_items": @@ -339,6 +340,7 @@ paths: dfc-b:hasPostalCode: '20170' dfc-b:hasCity: Herndon dfc-b:hasCountry: Australia + dfc-b:region: Victoria "/api/dfc/enterprises/{id}": get: summary: Show enterprise @@ -383,6 +385,7 @@ paths: dfc-b:hasPostalCode: '20170' dfc-b:hasCity: Herndon dfc-b:hasCountry: Australia + dfc-b:region: Victoria - "@id": http://test.host/api/dfc/enterprises/10000/supplied_products/10001 "@type": dfc-b:SuppliedProduct dfc-b:name: Apple - 1g