diff --git a/app/services/tags_importer.rb b/app/services/tags_importer.rb index fbc4aa238096315afb05d2aab43e4a482f7c7093..e6421553b529253c666580bdd37c60e513c5301c 100644 --- a/app/services/tags_importer.rb +++ b/app/services/tags_importer.rb @@ -3,22 +3,33 @@ class TagsImporter def import tags = {} + taggings = [] @items.each do |learning_object| - categories = parse_tags learning_object.get_metadata_values_of 'dc.subject.category' + publisher = learning_object.publisher + categories = parse_categories learning_object.get_metadata_values_of 'dc.subject.category' keywords = learning_object.get_metadata_values_of 'dc.subject.keyword' (categories + keywords).each do |tag_name| unless tag_exists?(tag_name, tags) tags[tag_name] = Tag.new(name: tag_name) + tag = tags[tag_name] + else + tag= Tag.find_by_name tag_name + end + + unless tagging_exists?(tag, publisher, learning_object) + taggings << Tagging.new(tag: tag, tagger: publisher, taggable: learning_object) end end end Tag.import tags.values + Tagging.import taggings end + private - def parse_tags(values) + def parse_categories(values) tags = [] values.compact.each { |value| tags << value.split('::') } tags.flatten.uniq.map(&:strip) @@ -28,4 +39,8 @@ class TagsImporter !Tag.find_by_name(tag_name).nil? || !tags[tag_name].nil? end + def tagging_exists? (tag, tagger, taggable) + Tagging.where(tag: tag, tagger: tagger, taggable: taggable).exists? + end + end