mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-03-02 02:11:33 +00:00
Enable DFC importer to import OFN objects
This commit is contained in:
@@ -15,21 +15,28 @@ module DataFoodConsortium
|
||||
].freeze
|
||||
|
||||
def self.type_map
|
||||
@type_map ||= TYPES.each_with_object({}) do |clazz, result|
|
||||
# Methods with variable arguments have a negative arity of -n-1
|
||||
# where n is the number of required arguments.
|
||||
number_of_required_args = -1 * (clazz.instance_method(:initialize).arity + 1)
|
||||
args = Array.new(number_of_required_args)
|
||||
type_uri = clazz.new(*args).semanticType
|
||||
result[type_uri] = clazz
|
||||
|
||||
# Add support for the old DFC v1.7 URLs:
|
||||
new_type_uri = type_uri.gsub(
|
||||
"https://github.com/datafoodconsortium/ontology/releases/latest/download/DFC_BusinessOntology.owl#",
|
||||
"http://static.datafoodconsortium.org/ontologies/DFC_BusinessOntology.owl#"
|
||||
)
|
||||
result[new_type_uri] = clazz
|
||||
unless @type_map
|
||||
@type_map = {}
|
||||
TYPES.each(&method(:register_type))
|
||||
end
|
||||
|
||||
@type_map
|
||||
end
|
||||
|
||||
def self.register_type(clazz)
|
||||
# Methods with variable arguments have a negative arity of -n-1
|
||||
# where n is the number of required arguments.
|
||||
number_of_required_args = -1 * (clazz.instance_method(:initialize).arity + 1)
|
||||
args = Array.new(number_of_required_args)
|
||||
type_uri = clazz.new(*args).semanticType
|
||||
type_map[type_uri] = clazz
|
||||
|
||||
# Add support for the old DFC v1.7 URLs:
|
||||
new_type_uri = type_uri.gsub(
|
||||
"https://github.com/datafoodconsortium/ontology/releases/latest/download/DFC_BusinessOntology.owl#",
|
||||
"http://static.datafoodconsortium.org/ontologies/DFC_BusinessOntology.owl#"
|
||||
)
|
||||
type_map[new_type_uri] = clazz
|
||||
end
|
||||
|
||||
def import(json_string_or_io)
|
||||
|
||||
@@ -10,4 +10,5 @@ require "dfc_provider/engine"
|
||||
require "dfc_provider/supplied_product"
|
||||
|
||||
module DfcProvider
|
||||
DataFoodConsortium::Connector::Importer.register_type(SuppliedProduct)
|
||||
end
|
||||
|
||||
@@ -21,7 +21,7 @@ describe DataFoodConsortium::Connector::Connector, vcr: true do
|
||||
it "imports" do
|
||||
json = connector.export(product)
|
||||
result = connector.import(json)
|
||||
expect(result.class).to eq product.class
|
||||
expect(result).to be_a product.class
|
||||
expect(result.semanticType).to eq product.semanticType
|
||||
expect(result.semanticId).to eq "https://example.net/tomato"
|
||||
expect(result.name).to eq "Tomato"
|
||||
@@ -32,7 +32,7 @@ describe DataFoodConsortium::Connector::Connector, vcr: true do
|
||||
io = StringIO.new(json)
|
||||
result = connector.import(io)
|
||||
|
||||
expect(result.class).to eq product.class
|
||||
expect(result).to be_a product.class
|
||||
expect(result.semanticType).to eq product.semanticType
|
||||
expect(result.semanticId).to eq "https://example.net/tomato"
|
||||
expect(result.name).to eq "Tomato"
|
||||
|
||||
@@ -100,7 +100,7 @@ describe DataFoodConsortium::Connector::Importer do
|
||||
it "imports a single object with simple properties" do
|
||||
result = import(product)
|
||||
|
||||
expect(result.class).to eq product.class
|
||||
expect(result).to be_a product.class
|
||||
expect(result.semanticType).to eq product.semanticType
|
||||
expect(result.semanticId).to eq "https://example.net/tomato"
|
||||
expect(result.name).to eq "Tomato"
|
||||
@@ -111,7 +111,7 @@ describe DataFoodConsortium::Connector::Importer do
|
||||
it "imports an object with referenced context" do
|
||||
result = connector.import(product_data)
|
||||
|
||||
expect(result.class).to eq DataFoodConsortium::Connector::SuppliedProduct
|
||||
expect(result).to be_a DataFoodConsortium::Connector::SuppliedProduct
|
||||
expect(result.semanticType).to eq "https://github.com/datafoodconsortium/ontology/releases/latest/download/DFC_BusinessOntology.owl#SuppliedProduct"
|
||||
expect(result.semanticId).to eq "https://example.net/tomato"
|
||||
expect(result.name).to eq "Tomato"
|
||||
@@ -122,7 +122,7 @@ describe DataFoodConsortium::Connector::Importer do
|
||||
it "imports an object with included context" do
|
||||
result = connector.import(product_data_with_context)
|
||||
|
||||
expect(result.class).to eq DataFoodConsortium::Connector::SuppliedProduct
|
||||
expect(result).to be_a DataFoodConsortium::Connector::SuppliedProduct
|
||||
expect(result.semanticType).to eq "https://github.com/datafoodconsortium/ontology/releases/latest/download/DFC_BusinessOntology.owl#SuppliedProduct"
|
||||
expect(result.semanticId).to eq "https://example.net/tomato"
|
||||
expect(result.name).to eq "Tomato"
|
||||
@@ -133,7 +133,7 @@ describe DataFoodConsortium::Connector::Importer do
|
||||
it "imports an object with DFC v1.8 context" do
|
||||
result = connector.import(product_data_with_context_v1_8)
|
||||
|
||||
expect(result.class).to eq DataFoodConsortium::Connector::SuppliedProduct
|
||||
expect(result).to be_a DataFoodConsortium::Connector::SuppliedProduct
|
||||
expect(result.semanticType).to eq "https://github.com/datafoodconsortium/ontology/releases/latest/download/DFC_BusinessOntology.owl#SuppliedProduct"
|
||||
expect(result.semanticId).to eq "https://example.net/tomato"
|
||||
expect(result.name).to eq "Tomato"
|
||||
@@ -149,7 +149,7 @@ describe DataFoodConsortium::Connector::Importer do
|
||||
|
||||
item, tomato = result
|
||||
|
||||
expect(item.class).to eq catalog_item.class
|
||||
expect(item).to be_a catalog_item.class
|
||||
expect(item.semanticType).to eq catalog_item.semanticType
|
||||
expect(item.semanticId).to eq "https://example.net/tomatoItem"
|
||||
expect(tomato.name).to eq "Tomato"
|
||||
|
||||
Reference in New Issue
Block a user