class LearningObject include ActiveModel::Model attr_accessor :id, :id_dspace, :rid, :name, :description, :thumbnail, :created_at, :last_modified, :type, :bitstreams, :metadata, :likes, :views, :downloads, :subjects, :attributes validates_presence_of :name, :created_at, :type, :likes, :views, :downloads validates_numericality_of :likes, greater_than_or_equal_to: 0 validates_numericality_of :views, greater_than_or_equal_to: 0 validates_numericality_of :downloads, greater_than_or_equal_to: 0 def initialize(params={}) super(params.merge(defaults)) end def subjects @subjects ||= learning_object_repository.get_subjects(self) end def attributes @attributes ||= learning_object_repository.get_attributes(self) end def categories get_metadata_value_of 'dc.subject.category' end def get_metadata_value_of key get_metadata_values_of(key).first end def get_metadata_values_of key values = [] @metadata.each do |m| values << m["value"] if m["key"] == key end values end def get_bitstream_retrievelink_of name values = @bitstreams.select { |v| v["bundleName"] == name } unless values.empty? return Dspace::Config.rest_url + values.first["retrieveLink"] end end def get_bitstream_filename_of name values = @bitstreams.select { |v| v["bundleName"] == name } unless values.empty? return values.first["name"] end end def get_retrievelink get_bitstream_retrievelink_of "ORIGINAL" end def get_filename get_bitstream_filename_of "ORIGINAL" end private def defaults { likes: 0, views: 0, downloads: 0, created_at: DateTime.new } end def learning_object_repository Portalmec::Application.repository.for :learning_object end end