Skip to content

Commit

Permalink
Feature: Support multi lingual - add show_language argument to the at…
Browse files Browse the repository at this point in the history
…tributes getters (#39)

* update define_method

* update solution mapper

* update get_preload_value
  • Loading branch information
haddadzineddine authored and syphax-bouazzouni committed Sep 5, 2023
1 parent 72aafa0 commit 9ca8349
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 19 deletions.
8 changes: 6 additions & 2 deletions lib/goo/base/settings/settings.rb
Original file line number Diff line number Diff line change
Expand Up @@ -255,9 +255,13 @@ def shape_attribute(attr)
self.instance_variable_set("@#{attr}",value)
end
define_method("#{attr}") do |*args|
attr_value = self.instance_variable_get("@#{attr}")
attr_value = attr_value.values.first if attr_value.is_a?(Hash) && !args.include?(:show_with_language)


if self.class.handler?(attr)
if @loaded_attributes.include?(attr)
return self.instance_variable_get("@#{attr}")
return attr_value
end
value = self.send("#{self.class.handler(attr)}")
self.instance_variable_set("@#{attr}",value)
Expand All @@ -266,7 +270,7 @@ def shape_attribute(attr)
end

if (not @persistent) or @loaded_attributes.include?(attr)
return self.instance_variable_get("@#{attr}")
return attr_value
else
# TODO: bug here when no labels from one of the main_lang available... (when it is called by ontologies_linked_data ontologies_submission)
raise Goo::Base::AttributeNotLoaded, "Attribute `#{attr}` is not loaded for #{self.id}. Loaded attributes: #{@loaded_attributes.inspect}."
Expand Down
24 changes: 10 additions & 14 deletions lib/goo/sparql/mixins/solution_lang_filter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,12 @@ def enrich_models(models_by_id)
## if the requested language is ALL, we can enrich the models with the objects by language
objects_by_lang.each do |id, predicates|
model = models_by_id[id]
predicates.each do |predicate, values|
if @attributes_to_translate.any? { |attr| predicate.eql?(attr) }
save_model_values(model, values, predicate, unmapped)
end
predicates.each do |predicate, values|

if values.values.all? { |v| v.all? { |x| literal?(x) && x.plain?} }
save_model_values(model, values, predicate, unmapped)

end
end
end
end
Expand Down Expand Up @@ -101,7 +103,6 @@ def language_match?(language)

def store_objects_by_lang(id, predicate, object, language)
# store objects in this format: [id][predicate][language] = [objects]

return if requested_lang.is_a?(Array) && !requested_lang.include?(language)

language_key = language.downcase
Expand All @@ -124,6 +125,7 @@ def get_model_attribute_value(model, predicate)


def add_unmapped_to_model(model, predicate, value)

if model.respond_to? :klass # struct
model[:unmapped] ||= {}
model[:unmapped][predicate] ||= []
Expand All @@ -134,16 +136,10 @@ def add_unmapped_to_model(model, predicate, value)
end

def save_model_values(model, values, predicate, unmapped)
if unmapped
add_unmapped_to_model(model, predicate, values)
else

if !list_attributes?(predicate)
values = values.map { |k, v| [k, v.first] }.to_h
end
add_unmapped_to_model(model, predicate, values) if unmapped
values = values.map { |k, v| [k, v.first] }.to_h unless list_attributes?(predicate)

model.send("#{predicate}=", values, on_load: true)
end
model.send("#{predicate}=", values, on_load: true)
end

def unmapped_get(model, predicate)
Expand Down
6 changes: 3 additions & 3 deletions lib/goo/sparql/solutions_mapper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ def map_each_solutions(select)

models_unmapped_to_array(@models_by_id) if @unmapped


@models_by_id
end

Expand Down Expand Up @@ -189,8 +189,8 @@ def add_object_to_model(id, objects, predicate)
def get_preload_value(id, object, predicate)
pre_val = nil
if predicate_preloaded?(id, predicate)
pre_val = preloaded_value(id, predicate)
pre_val = pre_val.select { |x| x.id == object }.first if pre_val.is_a?(Array)
pre_val = preloaded_value(id, predicate)
pre_val = pre_val.select { |x| x.id == object }.first if pre_val.is_a?(Array)
end
pre_val
end
Expand Down

0 comments on commit 9ca8349

Please sign in to comment.