Skip to content
Snippets Groups Projects
Commit 981a55f7 authored by Mauricio Giacomini Girardello's avatar Mauricio Giacomini Girardello
Browse files

Merge branch 'master' of gitlab.c3sl.ufpr.br:portalmec/portalmec

parents 5d2ff7bb 2ffdede9
No related branches found
No related tags found
No related merge requests found
......@@ -4,33 +4,30 @@ class LearningObject::DraftBuilder
@draft = LearningObject.new(sanitize_params(params))
@draft.draft
#build language
@draft.language = Language.find(params[:language]) if params[:language].to_i > 0
# set publisher
@draft.publisher = publisher
@draft.save
# build tags
params[:tags].try(:each) do |t|
tag = Tag.where(name: t['name']).first_or_create
Tagging.where(tag: tag, taggable: @draft, tagger: publisher).first_or_create
end
@draft.save
@draft
end
private
def self.sanitize_params(args={})
_args = args.clone
params = args.clone
%w(tags language link).each do |arg|
_args.delete(arg)
params.delete(arg)
end
metadata = [{'key' => 'dc.object.url', 'value' => args[:link]}]
_args.merge(metadata: metadata)
metadata = { 'dc.object.url' => args[:link] }
params.merge(metadata: metadata)
end
end
class LearningObjectBuilder
def self.build_from_dspace(item)
lo = LearningObject.new(
name: item.name,
id_dspace: item.id,
thumbnail: nil,
metadata: item.metadata.map(&:to_h)
name: item.name,
id_dspace: item.id,
thumbnail: nil,
metadata: dspace_metadata_to_hash(item.metadata)
)
institution = lo.get_metadata_values_of('dc.creator').first
institution = lo.get_metadata_value_of('dc.creator')
institution = 'Desconhecido' if institution.blank?
lo.publisher = Institution.where(name: institution).first_or_create
......@@ -49,9 +48,13 @@ class LearningObjectBuilder
_params
end
# private
def self.dspace_metadata_to_hash(metadata)
hash = Hash.new { |h, k| h[k] = Array.new(&h.default_proc) }
metadata.each { |m| hash[m.key] << m.value }
hash
end
#def self.sanitize_form_metadata(params={})
# def self.sanitize_form_metadata(params={})
# if !params[:link].blank?
# metadata = [{'key' => 'dc.object.url', 'value' => params[:link]}]
# _args.merge(metadata: metadata)
......
......@@ -10,13 +10,14 @@ class V1::LearningObjectsController < ApplicationController
before_action :authorize!, only: [:show, :update, :destroy]
def index
render json: ActiveModel::ArraySerializer.new(LearningObject.limit(limit).offset(offset).all)
serializer = params[:obaa].nil? ? LearningObjectSerializer : LearningObjectObaaSerializer
render json: ActiveModel::ArraySerializer.new(LearningObject.limit(limit).offset(offset).all, each_serializer: serializer)
end
# GET /learning_objects/1
# GET /learning_objects/1.json
def show
render json: @learning_object
render json: params[:obaa].nil? ? @learning_object : ActiveModel::LearningObjectObaaSerializer.new(@learning_object)
end
# POST /learning_objects
......
......@@ -7,19 +7,11 @@ module Metadatable
serialize :metadata, ArraySerializer
end
def get_metadata_value_of key
def get_metadata_value_of(key)
get_metadata_values_of(key).first
end
def get_metadata_values_of key
values = []
unless metadata.blank?
metadata.each do |m|
m = m.with_indifferent_access
values << m["value"] if m["key"] == key
end
end
values
def get_metadata_values_of(key)
metadata[key].blank? ? [] : metadata[key]
end
end
......@@ -5,6 +5,4 @@ module Taggable
has_many :taggings, as: :taggable, dependent: :destroy
has_many :tags, through: :taggings, dependent: :destroy
end
end
class LearningObjectObaaSerializer < ActiveModel::Serializer
# "educational": {
# "description": "? não existe no PortalMecHomologa"
# },
# "rights": { # nao existe no PortalMecHomologa
# "copyrightAndOhterRestrictions":"true",
# "cost": "false",
# "description": "nome da licença"
# },
def general
{
title: object.name,
description: object.description,
keywords: object.tags.map(&:name).join(','),
created_at: object.created_at,
updated_at: object.updated_at,
thumbnail: object.thumbnail.try(:url),
score: object.score,
likes_count: object.likes_count,
shares_count: object.shares_count,
acessibility: ''
}
end
def identifier
{
catalog: 'PortalMec',
entry: object.id,
language: object.language.try(:code)
}
end
def technical
{
location: object.default_attachment.try(:retrieve_url),
format: object.default_attachment.try(:mime_type)
}
end
def metametadata
{
identifier: {
catalog: 'PortalMec',
name: object.publisher.try(:name),
entry_type: object.publisher.class.name,
entry: object.publisher.try(:id)
},
contribute: {
role: 'Criador',
entity: object.author,
date: object.created_at
},
metadataSchema: 'OBAAv1.0',
language: object.language.try(:name)
}
end
# attributes :id , :name, :created_at, :updated_at, :description, :author, :score, :likes_count
attributes :id, :general, :identifier, :technical, :metametadata
# has_many :tags
# has_many :attachments
end
class LearningObjectSerializer < ActiveModel::Serializer
attributes :id , :name, :created_at, :updated_at, :description, :author, :score, :likes_count
def default_location
object.default_attachment.try(:retrieve_url)
end
def default_mime_type
object.default_attachment.try(:retrieve_url)
end
attributes :id, :name, :description, :author, :thumbnail, :publisher, :language, :default_location, :default_mime_type, :score, :likes_count, :shares_count, :created_at, :updated_at
has_many :tags
has_many :attachments
end
......@@ -61,7 +61,7 @@ lo_metadata:
id_dspace: '2'
object_type: image
language: portuguese
metadata: '[{"key": "dc.creator", "value": "ufpr", "language": "nil"}]'
metadata: '{"dc.creator": "ufpr"}'
lo_metadata2:
name: 'Institution Object 2'
......@@ -70,7 +70,7 @@ lo_metadata2:
id_dspace: '3'
object_type: image
language: portuguese
metadata: '[{"key": "dc.creator", "value": "ufpr", "language": "nil"}]'
metadata: '{"dc.creator": "ufpr"}'
search:
name: 'Teste'
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment