diff --git a/app/builders/attribute_builder.rb b/app/builders/attribute_builder.rb index 379453c23e9a354fa9373dfbe11b3a247c3a81df..2e6526c3de74377e4a5a3f5385f054f99c8c21a8 100644 --- a/app/builders/attribute_builder.rb +++ b/app/builders/attribute_builder.rb @@ -1,6 +1,4 @@ class AttributeBuilder < Builder - extend RepositoriesProxy - ## # receive a list of ids and return a list of attributes # diff --git a/app/builders/builder.rb b/app/builders/builder.rb index 280eebdb45bd20b5a7d8c07f25cc2b5bceefdf2c..b43a5cdbe995ab04c9164e525955a90dda0bbe44 100644 --- a/app/builders/builder.rb +++ b/app/builders/builder.rb @@ -1,4 +1,5 @@ class Builder + extend RepositoriesProxy protected diff --git a/app/builders/collection_builder.rb b/app/builders/collection_builder.rb index 165135322d8fc4deb743cf674b1318a98a302e56..ad218588d8e2534485a29626169ebee8d002706e 100644 --- a/app/builders/collection_builder.rb +++ b/app/builders/collection_builder.rb @@ -1,6 +1,4 @@ class CollectionBuilder < Builder - extend RepositoriesProxy - ## # Receive a list of ids and return a list of collections # Each element, must be a Hash with rid and last_modified diff --git a/app/builders/complaint_builder.rb b/app/builders/complaint_builder.rb index 3dc987fa9b5733e988db5dd0120042d53e9996bf..ea434a24bbc8a18f3fa46cdf4332928b02ff950a 100644 --- a/app/builders/complaint_builder.rb +++ b/app/builders/complaint_builder.rb @@ -1,6 +1,4 @@ class ComplaintBuilder < Builder - extend RepositoriesProxy - ## # receive a list of ids and return a list of complaints # diff --git a/app/builders/generic_builder.rb b/app/builders/generic_builder.rb new file mode 100644 index 0000000000000000000000000000000000000000..99bf26934c4459c54d3c0697e98897b0a502e086 --- /dev/null +++ b/app/builders/generic_builder.rb @@ -0,0 +1,40 @@ +class GenericBuilder < Builder + ## + # receive a list of ids and return a list of learning objects + # useful for search pagination + # + def self.build(objects = []) + build_array(objects, true, 'rid') + end + + private + + def self.build_array(objects = [], cache = true, id = '@rid', last_modified = 'last_modified') + array = [] + objects = [objects] if objects.class == String || objects.class == Hash + objects.each do |object| + next if object[id].blank? + + if cache && !object[last_modified].blank? + o = Rails.cache.fetch(cache_key(object[id], object[last_modified])) + end + p object.inspect + o = repository(object['class']).find object[id] if o.nil? + array << o + end + array + end + + def self.repository(klass) + case klass + when 'Attribute' then attribute_repository + when 'Collection' then collection_repository + when 'Complaint' then complaint_repository + when 'Institution' then institution_repository + when 'LearningObject' then learning_object_repository + when 'Subject' then subject_repository + else nil + end + end + +end diff --git a/app/builders/institution_builder.rb b/app/builders/institution_builder.rb index d71072fa20aa041ead6da76626f067b3bd735f4b..e41388c00dfed1e528b3ce2c7353fd3012421319 100644 --- a/app/builders/institution_builder.rb +++ b/app/builders/institution_builder.rb @@ -1,6 +1,4 @@ class InstitutionBuilder < Builder - extend RepositoriesProxy - ## # receive a list of ids and return a list of institutions # diff --git a/app/builders/learning_object_builder.rb b/app/builders/learning_object_builder.rb index cc23cb760531803c0985ed60c00a28223b528687..265b37861b6f653b768e30b57739488dedb79b13 100644 --- a/app/builders/learning_object_builder.rb +++ b/app/builders/learning_object_builder.rb @@ -1,6 +1,4 @@ class LearningObjectBuilder < Builder - extend RepositoriesProxy - ## # receive a list of ids and return a list of learning objects # useful for search pagination diff --git a/app/builders/subject_builder.rb b/app/builders/subject_builder.rb index 6054f423f8aa53584f56e408e48ef0da79212d75..9a1169b845d0e6dc524ed49b8a2c66ea589d76ef 100644 --- a/app/builders/subject_builder.rb +++ b/app/builders/subject_builder.rb @@ -1,6 +1,4 @@ class SubjectBuilder < Builder - extend RepositoriesProxy - ## # receive a list of ids and return a list of subjects # diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb index 7159d9935c07f49d4ad83f2b016e359b2939a41e..7fdb6e339c359fad57e25a7a2a4cf600631b14ad 100644 --- a/app/controllers/search_controller.rb +++ b/app/controllers/search_controller.rb @@ -32,8 +32,7 @@ class SearchController < ApplicationController @last_page = (@result.num_pages <= page) ? true : false; # build objects from one page only - results = @result.partition { |r| r["class"] == "Collection" } - @objects = CollectionBuilder.build(results[0]) + LearningObjectBuilder.build(results[1]) + @objects = GenericBuilder.build(@result) render partial: 'search/fetch' end diff --git a/app/repositories/orient_db/attribute_repository.rb b/app/repositories/orient_db/attribute_repository.rb index 6d05df8a8d3a94746306c105d8acc2d21329c356..674ff4d6febce68d6803818269f8c54e30fcb477 100644 --- a/app/repositories/orient_db/attribute_repository.rb +++ b/app/repositories/orient_db/attribute_repository.rb @@ -13,11 +13,5 @@ module OrientDb build_objects get_edges_end("HasAttr", "out", learning_object.id) end - protected - - def build_object(args={}) - AttributeBuilder.build_from_orientdb args - end - end -end \ No newline at end of file +end diff --git a/app/repositories/orient_db/base.rb b/app/repositories/orient_db/base.rb index 4d1016f39cd08a4f9bc39e69b3933bc80d02435a..586ab50455e5f42d353e9697ae26554683f062da 100644 --- a/app/repositories/orient_db/base.rb +++ b/app/repositories/orient_db/base.rb @@ -61,7 +61,8 @@ class OrientDb::Base end def build_object(args={}) - raise NoMethodError, "You must implement this method" + builder = "#{args['@class']}Builder".constantize + builder.build_from_orientdb args unless args['@class'].blank? || builder.nil? end def accepted_properties diff --git a/app/repositories/orient_db/collection_repository.rb b/app/repositories/orient_db/collection_repository.rb index 064b5c0108ba3ab17ea141c6ef801e8283dc6cf5..780733a8fc69056750ffb3b90597b52f95fc77c1 100644 --- a/app/repositories/orient_db/collection_repository.rb +++ b/app/repositories/orient_db/collection_repository.rb @@ -114,10 +114,6 @@ module OrientDb protected - def build_object(args={}) - CollectionBuilder.build_from_orientdb args - end - def accepted_properties ['privacy'] end diff --git a/app/repositories/orient_db/complaint_repository.rb b/app/repositories/orient_db/complaint_repository.rb index 678a91bc2c28fd205d7ee04853feb1d4ebe556f4..f6a200b74a92cb6439a79e400ebec12b30892f69 100644 --- a/app/repositories/orient_db/complaint_repository.rb +++ b/app/repositories/orient_db/complaint_repository.rb @@ -32,11 +32,5 @@ module OrientDb false end - protected - - def build_object(args={}) - ComplaintBuilder.build_from_orientdb args - end - end end diff --git a/app/repositories/orient_db/institution_repository.rb b/app/repositories/orient_db/institution_repository.rb index 6c03fa646f1c367ef9394799429f77dbe51681e1..441f5f2412a8073db3f9bb745d03eb64b3e47b8b 100644 --- a/app/repositories/orient_db/institution_repository.rb +++ b/app/repositories/orient_db/institution_repository.rb @@ -47,9 +47,5 @@ module OrientDb end end - def build_object(args={}) - InstitutionBuilder.build_from_orientdb args - end - end end diff --git a/app/repositories/orient_db/learning_object_repository.rb b/app/repositories/orient_db/learning_object_repository.rb index 25051f15a2f6a8104c6c5edb2795b5910a3128fb..2dc9cb19cae4d7b8951b931e273f2e0292fdccc9 100644 --- a/app/repositories/orient_db/learning_object_repository.rb +++ b/app/repositories/orient_db/learning_object_repository.rb @@ -85,10 +85,6 @@ module OrientDb end end - def build_object(args={}) - LearningObjectBuilder.build_from_orientdb args - end - def build_hash(object) hash = super(object) # Remove relation attributes diff --git a/app/repositories/orient_db/subject_repository.rb b/app/repositories/orient_db/subject_repository.rb index 823e2ccf20e72d17590627232565fb71be39c122..4aa8497313f46b7fe45172b554085e7f7d4e2cb0 100644 --- a/app/repositories/orient_db/subject_repository.rb +++ b/app/repositories/orient_db/subject_repository.rb @@ -53,9 +53,5 @@ module OrientDb hash end - def build_object(args={}) - SubjectBuilder.build_from_orientdb args - end - end end