Skip to content
Snippets Groups Projects
Commit 65a1370d authored by Mateus Rambo Strey's avatar Mateus Rambo Strey
Browse files

add obaa style for learning objects

parent 3b5f48b0
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