Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.93 KB | None | 0 0
  1. module Ubiquity
  2. class ApiSerializer
  3. attr_accessor :data
  4. def initialize (data)
  5. @data ||= data
  6. end
  7.  
  8. def license_for_api
  9. if data.try(:license).present?
  10. remap_license
  11. end
  12. end
  13.  
  14. def rights_statements_for_api
  15. if data.try(:license).present?
  16. remap_rights_statement
  17. end
  18. end
  19.  
  20. def member_of_collections_for_api
  21. if data.try(:member_of_collections) && data.class != FileSet
  22. data.member_of_collections.map do |collection_object|
  23. {uuid: collection_object.id, title: collection_object.title.first}
  24. end
  25. end
  26. end
  27.  
  28. def alternate_identifier_for_api
  29. if data.try(:alternate_identifier) && data.class != FileSet
  30. remap_alternate_identifier
  31. end
  32. end
  33.  
  34. def related_identifier_for_api
  35. if data.try(:related_identifier) && data.class != FileSet
  36. remap_related_identifier
  37. end
  38. end
  39.  
  40. def data_filesets_summary_for_api
  41. if data.try(:file_sets)
  42. get_file_sets_totals
  43. end
  44. end
  45.  
  46. def hash_map
  47. creator = JSON.parse(data.creator.try(:first)) if valid_json?(creator)
  48. editor = JSON.parse(data.try(:editor).try(:first) ) if valid_json?(editor)
  49. contributor = JSON.parse(data.contributor.try(:first) )if valid_json?(contributor)
  50. event = JSON.parse(data.try(:event).try(:first)) if valid_json?(event)
  51.  
  52. {
  53. uuid: data.id,
  54. related_url: data.try(:related_url),
  55. type: 'work',
  56. data_type: data.try(:has_model).try(:first),
  57. title: data.title.try(:first),
  58. alternative_title: data.try(:alternative_title),
  59. resource_type: data.resource_type.first.try(:split).try(:first),
  60.  
  61. creator: creator,
  62. contributor: contributor,
  63. editor: editor,
  64.  
  65. abstract: data.try(:abstract),
  66. date_published: data.date_published,
  67. institution: data.institution,
  68. organisational_unit: data.org_unit,
  69. project_name: data.project_name,
  70. funder: data.funder,
  71. publisher: data.publisher,
  72. date_accepted: data.date_accepted,
  73. date_submitted: data.date_submitted,
  74. official_url: data.try(:official_url),
  75. language: data.language,
  76. license: data.license_for_api,
  77. rights_statement: data.rights_statements_for_api,
  78. rights_holder: data.rights_holder,
  79. doi: data.doi,
  80.  
  81. alternate_identifier: data.alternate_identifier_for_api,
  82.  
  83. peer_reviewed: data.try(:peer_reviewed),
  84. keywords: data.keyword,
  85. dewey: data.dewey,
  86. library_of_congress_classification: data.library_of_congress_classification,
  87. additional_info: data.try(:add_info),
  88.  
  89. related_identifier: data.related_identifier_for_api,
  90.  
  91. version: data.try(:version),
  92. duration: data.try(:duration),
  93. pagination: data.pagination,
  94. series_name: data.try(:series_name),
  95. issue: data.try(:issue),
  96. volume: data.try(:volume),
  97. material_media: data.try(:material_media),
  98. edition: data.try(:edition),
  99.  
  100. event: event,
  101.  
  102. journal_title: data.try(:journal_title),
  103. book_title: data.try(:book_title),
  104. article_number: data.try(:article_number),
  105. eissn: data.try(:eissn),
  106. issn: data.try(:issn),
  107. isbn: data.try(:isbn),
  108. current_he_institution: data.try(:current_he_institution),
  109. qualification: data.try(:qualification),
  110. alternative_journal_title: data.try(:alternative_journal_title),
  111.  
  112. thumbnail_url: img_path,
  113. files: data.data_filesets_summary_for_api,
  114. collections: data.member_of_collections_for_api
  115. }
  116. end
  117.  
  118. private
  119. #leave it as a public method because it used in other files
  120. # return false if == String
  121. def valid_?(data)
  122. !!JSON.parse(data) if data.class == String
  123. rescue ::ParserError
  124. false
  125. end
  126.  
  127. def img_path
  128. if @data.thumbnail.present?
  129. img_path = CGI.escape(ActiveFedora::File.uri_to_id(data.thumbnail.original_file.versions.all.last.uri))
  130. img_path.presence?
  131. end
  132. end
  133.  
  134. def remap_rights_statement
  135. rights_statement_hash = Hyrax::RightsStatementService.new.select_all_options.to_h
  136. data.rights_statement.map do |item|
  137. if rights_statement_hash.key(item)
  138. {
  139. name: rights_statement_hash.key(item),
  140. link: item
  141. }
  142. end
  143. end
  144. end
  145.  
  146. def remap_license
  147. license_hash = Hyrax::LicenseService.new.select_all_options.to_h
  148. data.license.map do |item|
  149. if license_hash.key(item)
  150. {
  151. name: license_hash.key(item),
  152. link: item
  153. }
  154. end
  155. end
  156. end
  157.  
  158. def remap_alternate_identifier
  159. if valid_json?(data.alternate_identifier.first)
  160. alternate_identifier_array = JSON.parse(data.alternate_identifier.first)
  161. alternate_identifier_array.map do |hash|
  162. {
  163. name: hash['alternate_identifier'],
  164. type: hash['alternate_identifier_type'],
  165. postion: hash["alternate_identifier_position"].to_i
  166. }
  167. end
  168.  
  169. end
  170. end
  171.  
  172. def remap_related_identifier
  173. if valid_json?(data.related_identifier.first)
  174. related_identifier_array = JSON.parse(data.related_identifier.first)
  175. related_identifier_array.map do |hash|
  176. {
  177. name: hash['related_identifier'],
  178. type: hash['related_identifier_type'],
  179. relationship: hash['relation_type'],
  180. postion: hash["related_identifier_position"].to_i
  181. }
  182. end
  183.  
  184. end
  185. end
  186.  
  187. def get_file_sets_totals
  188. file_count = data.file_sets.count
  189. #
  190. #returns hash that group files by their visibility eg {"open"=>2}
  191. total_summary = data.file_sets.group_by(&:visibility).transform_values(&:count)
  192. total_summary.merge({total: file_count})
  193. end
  194.  
  195. end
  196. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement