From f60b2b8b0a4f4bfd238a93c6f42823d6f334f711 Mon Sep 17 00:00:00 2001 From: Mateus Rambo Strey <mars11@inf.ufpr.br> Date: Tue, 10 Nov 2015 15:41:54 -0200 Subject: [PATCH] fix collection owner --- app/builders/collection_builder.rb | 1 + app/controllers/collections_controller.rb | 2 +- .../validators/collection_owner_validator.rb | 6 ++--- .../orient_db/collection_repository.rb | 26 ++++++++++++++++--- app/views/collections/_collection.html.erb | 2 +- 5 files changed, 28 insertions(+), 9 deletions(-) diff --git a/app/builders/collection_builder.rb b/app/builders/collection_builder.rb index f64521c9..4613056c 100644 --- a/app/builders/collection_builder.rb +++ b/app/builders/collection_builder.rb @@ -26,6 +26,7 @@ class CollectionBuilder name: args['name'], id: args['@rid'] ) + obj.owner = collection_repository.owner(args['@rid']) obj.created_at = DateTime.strptime(args['created_at'], "%Y-%m-%d %H:%M:%S") unless args['created_at'].nil? obj.last_modified = DateTime.strptime(args['last_modified'], "%Y-%m-%d %H:%M:%S") unless args['last_modified'].nil? obj diff --git a/app/controllers/collections_controller.rb b/app/controllers/collections_controller.rb index d24a10b7..7482e6c5 100644 --- a/app/controllers/collections_controller.rb +++ b/app/controllers/collections_controller.rb @@ -29,7 +29,7 @@ class CollectionsController < ApplicationController @collection = Collection.new(collection_params) # let user or institution as owner - @collection.owner = (params[:collection][:institution].blank?) ? current_user : params[:collection][:institution] + @collection.owner = (params[:collection][:institution].blank?) ? current_user : institution_repository.find(params[:collection][:institution]) respond_to do |format| if collection_repository.create @collection diff --git a/app/models/validators/collection_owner_validator.rb b/app/models/validators/collection_owner_validator.rb index d98460e1..a0412d1c 100644 --- a/app/models/validators/collection_owner_validator.rb +++ b/app/models/validators/collection_owner_validator.rb @@ -1,9 +1,9 @@ class Validators::CollectionOwnerValidator < ActiveModel::Validator def validate(record) - if !record.owner.is_a?(User) - record.errors.add :base, 'The owner must be an User' + unless record.owner.is_a?(User) || record.owner.is_a?(Institution) + record.errors.add :base, 'The owner must be an User or an Institution' end end -end \ No newline at end of file +end diff --git a/app/repositories/orient_db/collection_repository.rb b/app/repositories/orient_db/collection_repository.rb index 97379449..91f7bab5 100644 --- a/app/repositories/orient_db/collection_repository.rb +++ b/app/repositories/orient_db/collection_repository.rb @@ -35,13 +35,16 @@ module OrientDb def create(object) super(object) - create_edge "BelongsTo", object.id, owner_id(object) + + # create relationship + create_edge "BelongsTo", object.id, owner_id(object.owner) + object end def destroy(object) super(object) - destroy_edge "BelongsTo", object.id, owner_id(object) + destroy_edge "BelongsTo", object.id, owner_id(object.owner) end ## @@ -82,10 +85,25 @@ module OrientDb hash.merge('name' => object.name) # forces name property for bookmarks end + # return owner of collection rid + def owner(collection_id) + edge = get_edges("BelongsTo", "out", collection_id).first + + owner = get_by_rid(edge["in"]) + + if owner['@class'] == "User" + return user_repository.find owner['p_id'] + elsif owner['@class'] == "Institution" + return institution_repository.find owner['@rid'] + end + + return [] + end + private - def owner_id(object) - (object.owner.class == User) ? object.owner.rid : institution_repository.find(object.owner).id + def owner_id(owner) + (owner.class == User) ? owner.rid : owner.id end def odb_class diff --git a/app/views/collections/_collection.html.erb b/app/views/collections/_collection.html.erb index 9d0b7320..cc138197 100644 --- a/app/views/collections/_collection.html.erb +++ b/app/views/collections/_collection.html.erb @@ -7,7 +7,7 @@ <h4 class="media-heading"><%= collection.name %></h4> <!-- <span class="glyphicon glyphicon-eye-open">200 </span> <span class="glyphicon glyphicon-star">4,5 </span> --> - <span><a><%= 'Por '+ collection.owner.name unless collection.owner.name.blank? %> </a></span> + <span><a><%= 'Por '+ collection.owner.name unless collection.owner.name.blank? %></a></span> </div> </div> <% end %> -- GitLab