hydra-head 4.0.0.rc2 → 4.0.0.rc3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. data/Gemfile +8 -1
  2. data/Gemfile.lock +46 -46
  3. data/HISTORY.textile +2 -0
  4. data/app/controllers/hydra/application_controller.rb +5 -0
  5. data/app/controllers/hydra/contributors_controller.rb +2 -1
  6. data/app/controllers/hydra/permissions_controller.rb +2 -2
  7. data/app/helpers/hydra/hydra_assets_helper_behavior.rb +4 -3
  8. data/app/models/ability.rb +97 -0
  9. data/app/models/common_metadata_asset.rb +2 -2
  10. data/app/models/generic_content.rb +2 -4
  11. data/app/models/generic_image.rb +3 -3
  12. data/app/models/hydra/datastream/common_mods_index_methods.rb +45 -0
  13. data/app/models/hydra/datastream/mods_article.rb +528 -0
  14. data/app/models/hydra/datastream/mods_dataset.rb +166 -0
  15. data/app/models/hydra/datastream/mods_generic_content.rb +496 -0
  16. data/app/models/hydra/datastream/mods_image.rb +496 -0
  17. data/app/models/hydra/datastream/rights_metadata.rb +190 -0
  18. data/app/models/mods_asset.rb +4 -4
  19. data/app/models/uses_default_partials.rb +2 -2
  20. data/app/views/catalog/_edit_partials/_default.html.erb +1 -1
  21. data/app/views/catalog/show.html.erb +1 -1
  22. data/app/views/contributors/_edit_conference.html.erb +1 -1
  23. data/app/views/contributors/_edit_organization.html.erb +1 -1
  24. data/app/views/contributors/_edit_person.html.erb +1 -1
  25. data/app/views/contributors/_show_organization.html.erb +1 -1
  26. data/app/views/hydra/file_assets/_index.html.erb +1 -1
  27. data/app/views/hydra/file_assets/_result.html.erb +1 -1
  28. data/app/views/hydra/permissions/index.html.erb +1 -1
  29. data/app/views/hydra/permissions/new.html.erb +1 -1
  30. data/app/views/mods_assets/_show_permissions.html.erb +1 -1
  31. data/hydra-head.gemspec +4 -6
  32. data/lib/hydra/access_controls_enforcement.rb +10 -6
  33. data/lib/hydra/access_controls_evaluation.rb +7 -71
  34. data/lib/hydra/assets.rb +1 -4
  35. data/lib/hydra/common_mods_index_methods.rb +5 -0
  36. data/lib/hydra/controller.rb +4 -7
  37. data/lib/hydra/file_assets.rb +3 -8
  38. data/lib/hydra/model_methods.rb +3 -2
  39. data/lib/hydra/model_mixins/common_metadata.rb +2 -2
  40. data/lib/hydra/model_mixins/mods_object.rb +3 -3
  41. data/lib/hydra/models/file_asset.rb +3 -3
  42. data/lib/hydra/mods_article.rb +7 -1
  43. data/lib/hydra/mods_dataset.rb +8 -0
  44. data/lib/hydra/mods_generic_content.rb +5 -0
  45. data/lib/hydra/mods_image.rb +5 -0
  46. data/lib/hydra/repository_controller.rb +14 -15
  47. data/lib/hydra/rights_metadata.rb +5 -1
  48. data/lib/hydra/submission_workflow.rb +1 -1
  49. data/lib/hydra-head/version.rb +1 -1
  50. data/lib/hydra.rb +1 -0
  51. data/lib/mediashelf/active_fedora_helper.rb +71 -0
  52. data/lib/uva/mods_index_methods.rb +5 -0
  53. data/test_support/etc/Gemfile +3 -2
  54. data/test_support/spec/controllers/catalog_controller_viewing_context_spec.rb +5 -7
  55. data/test_support/spec/controllers/file_assets_controller_spec.rb +3 -14
  56. data/test_support/spec/controllers/hydra-assets_controller_spec.rb +2 -2
  57. data/test_support/spec/helpers/access_controls_enforcement_spec.rb +14 -0
  58. data/test_support/spec/helpers/access_controls_evaluation_spec.rb +7 -16
  59. data/test_support/spec/helpers/hydra-repository_controller_spec.rb +0 -14
  60. data/test_support/spec/helpers/hydra_assets_helper_spec.rb +11 -11
  61. data/test_support/spec/helpers/hydra_model_methods_spec.rb +2 -2
  62. data/test_support/spec/integration/file_asset_spec.rb +0 -1
  63. data/test_support/spec/lib/common_mods_index_methods_spec.rb +1 -1
  64. data/test_support/spec/lib/hydra_submission_workflow_spec.rb +1 -1
  65. data/test_support/spec/models/ability_spec.rb +16 -0
  66. data/test_support/spec/models/file_asset_spec.rb +0 -1
  67. data/test_support/spec/models/hydra_rights_metadata_spec.rb +4 -5
  68. data/test_support/spec/models/mods_asset_spec.rb +2 -11
  69. data/vendor/cache/{active-fedora-4.0.0.rc13.gem → active-fedora-4.0.0.rc18.gem} +0 -0
  70. data/vendor/cache/blacklight-3.3.1.gem +0 -0
  71. data/vendor/cache/cancan-1.6.7.gem +0 -0
  72. data/vendor/cache/compass-0.12.1.gem +0 -0
  73. data/vendor/cache/compass-rails-1.0.1.gem +0 -0
  74. data/vendor/cache/compass-susy-plugin-0.9.gem +0 -0
  75. data/vendor/cache/factory_girl-2.6.4.gem +0 -0
  76. data/vendor/cache/gherkin-2.9.1.gem +0 -0
  77. data/vendor/cache/mail-2.4.4.gem +0 -0
  78. data/vendor/cache/nokogiri-1.5.2.gem +0 -0
  79. data/vendor/cache/om-1.6.0.rc3.gem +0 -0
  80. data/vendor/cache/orm_adapter-0.0.7.gem +0 -0
  81. data/vendor/cache/rack-cache-1.2.gem +0 -0
  82. data/vendor/cache/rspec-2.9.0.gem +0 -0
  83. data/vendor/cache/rspec-core-2.9.0.gem +0 -0
  84. data/vendor/cache/rspec-expectations-2.9.0.gem +0 -0
  85. data/vendor/cache/rspec-mocks-2.9.0.gem +0 -0
  86. data/vendor/cache/rspec-rails-2.9.0.gem +0 -0
  87. data/vendor/cache/sass-rails-3.2.5.gem +0 -0
  88. data/vendor/cache/stomp-1.2.2.gem +0 -0
  89. metadata +71 -59
  90. data/lib/hydra/image.rb +0 -178
  91. data/uninstall.rb +0 -1
  92. data/vendor/cache/compass-0.12.rc.1.gem +0 -0
  93. data/vendor/cache/factory_girl-2.6.1.gem +0 -0
  94. data/vendor/cache/gherkin-2.9.0.gem +0 -0
  95. data/vendor/cache/mail-2.4.3.gem +0 -0
  96. data/vendor/cache/nokogiri-1.5.0.gem +0 -0
  97. data/vendor/cache/om-1.5.3.gem +0 -0
  98. data/vendor/cache/orm_adapter-0.0.6.gem +0 -0
  99. data/vendor/cache/rack-cache-1.1.gem +0 -0
  100. data/vendor/cache/rspec-2.6.0.gem +0 -0
  101. data/vendor/cache/rspec-core-2.6.4.gem +0 -0
  102. data/vendor/cache/rspec-expectations-2.6.0.gem +0 -0
  103. data/vendor/cache/rspec-mocks-2.6.0.gem +0 -0
  104. data/vendor/cache/rspec-rails-2.6.1.gem +0 -0
  105. data/vendor/cache/sass-rails-3.2.4.gem +0 -0
  106. data/vendor/cache/stomp-1.2.1.gem +0 -0
@@ -0,0 +1,528 @@
1
+ module Hydra
2
+ module Datastream
3
+ class ModsArticle < ActiveFedora::NokogiriDatastream
4
+ include Hydra::Datastream::CommonModsIndexMethods
5
+
6
+ set_terminology do |t|
7
+ t.root(:path=>"mods", :xmlns=>"http://www.loc.gov/mods/v3", :schema=>"http://www.loc.gov/standards/mods/v3/mods-3-2.xsd")
8
+
9
+
10
+ t.title_info(:path=>"titleInfo") {
11
+ t.main_title(:index_as=>[:facetable],:path=>"title", :label=>"title")
12
+ t.language(:index_as=>[:facetable],:path=>{:attribute=>"lang"})
13
+ }
14
+ t.language{
15
+ t.lang_code(:index_as=>[:facetable], :path=>"languageTerm", :attributes=>{:type=>"code"})
16
+ }
17
+ t.abstract
18
+ t.subject {
19
+ t.topic(:index_as=>[:facetable])
20
+ }
21
+ t.topic_tag(:proxy=>[:subject, :topic])
22
+ # t.topic_tag(:index_as=>[:facetable],:path=>"subject", :default_content_path=>"topic")
23
+ # This is a mods:name. The underscore is purely to avoid namespace conflicts.
24
+ t.name_ {
25
+ # this is a namepart
26
+ t.namePart(:type=>:string, :label=>"generic name")
27
+ # affiliations are great
28
+ t.affiliation
29
+ t.institution(:path=>"affiliation", :index_as=>[:facetable], :label=>"organization")
30
+ t.displayForm
31
+ t.role(:ref=>[:role])
32
+ t.description(:index_as=>[:facetable])
33
+ t.date(:path=>"namePart", :attributes=>{:type=>"date"})
34
+ t.last_name(:path=>"namePart", :attributes=>{:type=>"family"})
35
+ t.first_name(:path=>"namePart", :attributes=>{:type=>"given"}, :label=>"first name")
36
+ t.terms_of_address(:path=>"namePart", :attributes=>{:type=>"termsOfAddress"})
37
+ t.computing_id
38
+ }
39
+ # lookup :person, :first_name
40
+ t.person(:ref=>:name, :attributes=>{:type=>"personal"}, :index_as=>[:facetable])
41
+ t.department(:proxy=>[:person,:description],:index_as=>[:facetable])
42
+ t.organization(:ref=>:name, :attributes=>{:type=>"corporate"}, :index_as=>[:facetable])
43
+ t.conference(:ref=>:name, :attributes=>{:type=>"conference"}, :index_as=>[:facetable])
44
+ t.role {
45
+ t.text(:path=>"roleTerm",:attributes=>{:type=>"text"})
46
+ t.code(:path=>"roleTerm",:attributes=>{:type=>"code"})
47
+ }
48
+ t.journal(:path=>'relatedItem', :attributes=>{:type=>"host"}) {
49
+ t.title_info(:index_as=>[:facetable],:ref=>[:title_info])
50
+ t.origin_info(:path=>"originInfo") {
51
+ t.publisher
52
+ t.date_issued(:path=>"dateIssued")
53
+ t.issuance(:index_as=>[:facetable])
54
+ }
55
+ t.issn(:path=>"identifier", :attributes=>{:type=>"issn"})
56
+ t.issue(:path=>"part") {
57
+ t.volume(:path=>"detail", :attributes=>{:type=>"volume"}, :default_content_path=>"number")
58
+ t.level(:path=>"detail", :attributes=>{:type=>"number"}, :default_content_path=>"number")
59
+ t.extent
60
+ t.pages(:path=>"extent", :attributes=>{:unit=>"pages"}) {
61
+ t.start
62
+ t.end
63
+ }
64
+ t.start_page(:proxy=>[:pages, :start])
65
+ t.end_page(:proxy=>[:pages, :end])
66
+ t.publication_date(:path=>"date")
67
+ }
68
+ }
69
+ t.note
70
+ t.location(:path=>"location") {
71
+ t.url(:path=>"url")
72
+ }
73
+ t.publication_url(:proxy=>[:location,:url])
74
+ t.peer_reviewed(:proxy=>[:journal,:origin_info,:issuance], :index_as=>[:facetable])
75
+ t.title(:proxy=>[:mods,:title_info, :main_title])
76
+ end
77
+
78
+ # Generates an empty Mods Article (used when you call ModsArticle.new without passing in existing xml)
79
+ def self.xml_template
80
+ builder = Nokogiri::XML::Builder.new do |xml|
81
+ xml.mods(:version=>"3.3", "xmlns:xlink"=>"http://www.w3.org/1999/xlink",
82
+ "xmlns:xsi"=>"http://www.w3.org/2001/XMLSchema-instance",
83
+ "xmlns"=>"http://www.loc.gov/mods/v3",
84
+ "xsi:schemaLocation"=>"http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-3.xsd") {
85
+ xml.titleInfo(:lang=>"") {
86
+ xml.title
87
+ }
88
+ xml.name(:type=>"personal") {
89
+ xml.namePart(:type=>"given")
90
+ xml.namePart(:type=>"family")
91
+ xml.affiliation
92
+ xml.computing_id
93
+ xml.description
94
+ xml.role {
95
+ xml.roleTerm("Author", :authority=>"marcrelator", :type=>"text")
96
+ }
97
+ }
98
+ xml.typeOfResource
99
+ xml.genre(:authority=>"marcgt")
100
+ xml.language {
101
+ xml.languageTerm(:authority=>"iso639-2b", :type=>"code")
102
+ }
103
+ xml.abstract
104
+ xml.subject {
105
+ xml.topic
106
+ }
107
+ xml.relatedItem(:type=>"host") {
108
+ xml.titleInfo {
109
+ xml.title
110
+ }
111
+ xml.identifier(:type=>"issn")
112
+ xml.originInfo {
113
+ xml.publisher
114
+ xml.dateIssued
115
+ xml.issuance
116
+ }
117
+ xml.part {
118
+ xml.detail(:type=>"volume") {
119
+ xml.number
120
+ }
121
+ xml.detail(:type=>"number") {
122
+ xml.number
123
+ }
124
+ xml.extent(:unit=>"pages") {
125
+ xml.start
126
+ xml.end
127
+ }
128
+ xml.date
129
+ }
130
+ }
131
+ xml.location {
132
+ xml.url
133
+ }
134
+ }
135
+ end
136
+ return builder.doc
137
+ end
138
+
139
+ # Generates a new Person node
140
+ def self.person_template
141
+ builder = Nokogiri::XML::Builder.new do |xml|
142
+ xml.name(:type=>"personal") {
143
+ xml.namePart(:type=>"family")
144
+ xml.namePart(:type=>"given")
145
+ xml.affiliation
146
+ xml.computing_id
147
+ xml.description
148
+ xml.role {
149
+ xml.roleTerm("Author", :type=>"text")
150
+ }
151
+ }
152
+ end
153
+ return builder.doc.root
154
+ end
155
+
156
+ def self.full_name_template
157
+ builder = Nokogiri::XML::Builder.new do |xml|
158
+ xml.full_name(:type => "personal")
159
+ end
160
+ return builder.doc.root
161
+ end
162
+
163
+ # Generates a new Organization node
164
+ # Uses mods:name[@type="corporate"]
165
+ def self.organization_template
166
+ builder = Nokogiri::XML::Builder.new do |xml|
167
+ xml.name(:type=>"corporate") {
168
+ xml.namePart
169
+ xml.role {
170
+ xml.roleTerm(:authority=>"marcrelator", :type=>"text")
171
+ }
172
+ }
173
+ end
174
+ return builder.doc.root
175
+ end
176
+
177
+ # Generates a new Conference node
178
+ def self.conference_template
179
+ builder = Nokogiri::XML::Builder.new do |xml|
180
+ xml.name(:type=>"conference") {
181
+ xml.namePart
182
+ xml.role {
183
+ xml.roleTerm(:authority=>"marcrelator", :type=>"text")
184
+ }
185
+ }
186
+ end
187
+ return builder.doc.root
188
+ end
189
+
190
+ # Inserts a new contributor (mods:name) into the mods document
191
+ # creates contributors of type :person, :organization, or :conference
192
+ def insert_contributor(type, opts={})
193
+ case type.to_sym
194
+ when :person
195
+ node = Hydra::Datastream::ModsArticle.person_template
196
+ nodeset = self.find_by_terms(:person)
197
+ when :organization
198
+ node = Hydra::Datastream::ModsArticle.organization_template
199
+ nodeset = self.find_by_terms(:organization)
200
+ when :conference
201
+ node = Hydra::Datastream::ModsArticle.conference_template
202
+ nodeset = self.find_by_terms(:conference)
203
+ else
204
+ ActiveFedora.logger.warn("#{type} is not a valid argument for Hydra::ModsArticle.insert_contributor")
205
+ node = nil
206
+ index = nil
207
+ end
208
+
209
+ unless nodeset.nil?
210
+ if nodeset.empty?
211
+ self.ng_xml.root.add_child(node)
212
+ index = 0
213
+ else
214
+ nodeset.after(node)
215
+ index = nodeset.length
216
+ end
217
+ self.dirty = true
218
+ end
219
+
220
+ return node, index
221
+ end
222
+
223
+ # Remove the contributor entry identified by @contributor_type and @index
224
+ def remove_contributor(contributor_type, index)
225
+ contributor = self.find_by_terms( {contributor_type.to_sym => index.to_i} ).first
226
+ unless contributor.nil?
227
+ contributor.remove
228
+ self.dirty = true
229
+ end
230
+ end
231
+
232
+ def self.common_relator_terms
233
+ {"aut" => "Author",
234
+ "clb" => "Collaborator",
235
+ "com" => "Compiler",
236
+ "ctb" => "Contributor",
237
+ "cre" => "Creator",
238
+ "edt" => "Editor",
239
+ "ill" => "Illustrator",
240
+ "oth" => "Other",
241
+ "trl" => "Translator",
242
+ }
243
+ end
244
+
245
+ def self.person_relator_terms
246
+ {"aut" => "Author",
247
+ "clb" => "Collaborator",
248
+ "com" => "Compiler",
249
+ "cre" => "Creator",
250
+ "ctb" => "Contributor",
251
+ "edt" => "Editor",
252
+ "ill" => "Illustrator",
253
+ "res" => "Researcher",
254
+ "rth" => "Research team head",
255
+ "rtm" => "Research team member",
256
+ "trl" => "Translator"
257
+ }
258
+ end
259
+
260
+ def self.conference_relator_terms
261
+ {
262
+ "hst" => "Host"
263
+ }
264
+ end
265
+
266
+ def self.organization_relator_terms
267
+ {
268
+ "fnd" => "Funder",
269
+ "hst" => "Host"
270
+ }
271
+ end
272
+
273
+ def self.dc_relator_terms
274
+ {"acp" => "Art copyist",
275
+ "act" => "Actor",
276
+ "adp" => "Adapter",
277
+ "aft" => "Author of afterword, colophon, etc.",
278
+ "anl" => "Analyst",
279
+ "anm" => "Animator",
280
+ "ann" => "Annotator",
281
+ "ant" => "Bibliographic antecedent",
282
+ "app" => "Applicant",
283
+ "aqt" => "Author in quotations or text abstracts",
284
+ "arc" => "Architect",
285
+ "ard" => "Artistic director ",
286
+ "arr" => "Arranger",
287
+ "art" => "Artist",
288
+ "asg" => "Assignee",
289
+ "asn" => "Associated name",
290
+ "att" => "Attributed name",
291
+ "auc" => "Auctioneer",
292
+ "aud" => "Author of dialog",
293
+ "aui" => "Author of introduction",
294
+ "aus" => "Author of screenplay",
295
+ "aut" => "Author",
296
+ "bdd" => "Binding designer",
297
+ "bjd" => "Bookjacket designer",
298
+ "bkd" => "Book designer",
299
+ "bkp" => "Book producer",
300
+ "bnd" => "Binder",
301
+ "bpd" => "Bookplate designer",
302
+ "bsl" => "Bookseller",
303
+ "ccp" => "Conceptor",
304
+ "chr" => "Choreographer",
305
+ "clb" => "Collaborator",
306
+ "cli" => "Client",
307
+ "cll" => "Calligrapher",
308
+ "clt" => "Collotyper",
309
+ "cmm" => "Commentator",
310
+ "cmp" => "Composer",
311
+ "cmt" => "Compositor",
312
+ "cng" => "Cinematographer",
313
+ "cnd" => "Conductor",
314
+ "cns" => "Censor",
315
+ "coe" => "Contestant -appellee",
316
+ "col" => "Collector",
317
+ "com" => "Compiler",
318
+ "cos" => "Contestant",
319
+ "cot" => "Contestant -appellant",
320
+ "cov" => "Cover designer",
321
+ "cpc" => "Copyright claimant",
322
+ "cpe" => "Complainant-appellee",
323
+ "cph" => "Copyright holder",
324
+ "cpl" => "Complainant",
325
+ "cpt" => "Complainant-appellant",
326
+ "cre" => "Creator",
327
+ "crp" => "Correspondent",
328
+ "crr" => "Corrector",
329
+ "csl" => "Consultant",
330
+ "csp" => "Consultant to a project",
331
+ "cst" => "Costume designer",
332
+ "ctb" => "Contributor",
333
+ "cte" => "Contestee-appellee",
334
+ "ctg" => "Cartographer",
335
+ "ctr" => "Contractor",
336
+ "cts" => "Contestee",
337
+ "ctt" => "Contestee-appellant",
338
+ "cur" => "Curator",
339
+ "cwt" => "Commentator for written text",
340
+ "dfd" => "Defendant",
341
+ "dfe" => "Defendant-appellee",
342
+ "dft" => "Defendant-appellant",
343
+ "dgg" => "Degree grantor",
344
+ "dis" => "Dissertant",
345
+ "dln" => "Delineator",
346
+ "dnc" => "Dancer",
347
+ "dnr" => "Donor",
348
+ "dpc" => "Depicted",
349
+ "dpt" => "Depositor",
350
+ "drm" => "Draftsman",
351
+ "drt" => "Director",
352
+ "dsr" => "Designer",
353
+ "dst" => "Distributor",
354
+ "dtc" => "Data contributor ",
355
+ "dte" => "Dedicatee",
356
+ "dtm" => "Data manager ",
357
+ "dto" => "Dedicator",
358
+ "dub" => "Dubious author",
359
+ "edt" => "Editor",
360
+ "egr" => "Engraver",
361
+ "elg" => "Electrician ",
362
+ "elt" => "Electrotyper",
363
+ "eng" => "Engineer",
364
+ "etr" => "Etcher",
365
+ "exp" => "Expert",
366
+ "fac" => "Facsimilist",
367
+ "fld" => "Field director ",
368
+ "flm" => "Film editor",
369
+ "fmo" => "Former owner",
370
+ "fpy" => "First party",
371
+ "fnd" => "Funder",
372
+ "frg" => "Forger",
373
+ "gis" => "Geographic information specialist ",
374
+ "grt" => "Graphic technician",
375
+ "hnr" => "Honoree",
376
+ "hst" => "Host",
377
+ "ill" => "Illustrator",
378
+ "ilu" => "Illuminator",
379
+ "ins" => "Inscriber",
380
+ "inv" => "Inventor",
381
+ "itr" => "Instrumentalist",
382
+ "ive" => "Interviewee",
383
+ "ivr" => "Interviewer",
384
+ "lbr" => "Laboratory ",
385
+ "lbt" => "Librettist",
386
+ "ldr" => "Laboratory director ",
387
+ "led" => "Lead",
388
+ "lee" => "Libelee-appellee",
389
+ "lel" => "Libelee",
390
+ "len" => "Lender",
391
+ "let" => "Libelee-appellant",
392
+ "lgd" => "Lighting designer",
393
+ "lie" => "Libelant-appellee",
394
+ "lil" => "Libelant",
395
+ "lit" => "Libelant-appellant",
396
+ "lsa" => "Landscape architect",
397
+ "lse" => "Licensee",
398
+ "lso" => "Licensor",
399
+ "ltg" => "Lithographer",
400
+ "lyr" => "Lyricist",
401
+ "mcp" => "Music copyist",
402
+ "mfr" => "Manufacturer",
403
+ "mdc" => "Metadata contact",
404
+ "mod" => "Moderator",
405
+ "mon" => "Monitor",
406
+ "mrk" => "Markup editor",
407
+ "msd" => "Musical director",
408
+ "mte" => "Metal-engraver",
409
+ "mus" => "Musician",
410
+ "nrt" => "Narrator",
411
+ "opn" => "Opponent",
412
+ "org" => "Originator",
413
+ "orm" => "Organizer of meeting",
414
+ "oth" => "Other",
415
+ "own" => "Owner",
416
+ "pat" => "Patron",
417
+ "pbd" => "Publishing director",
418
+ "pbl" => "Publisher",
419
+ "pdr" => "Project director",
420
+ "pfr" => "Proofreader",
421
+ "pht" => "Photographer",
422
+ "plt" => "Platemaker",
423
+ "pma" => "Permitting agency",
424
+ "pmn" => "Production manager",
425
+ "pop" => "Printer of plates",
426
+ "ppm" => "Papermaker",
427
+ "ppt" => "Puppeteer",
428
+ "prc" => "Process contact",
429
+ "prd" => "Production personnel",
430
+ "prf" => "Performer",
431
+ "prg" => "Programmer",
432
+ "prm" => "Printmaker",
433
+ "pro" => "Producer",
434
+ "prt" => "Printer",
435
+ "pta" => "Patent applicant",
436
+ "pte" => "Plaintiff -appellee",
437
+ "ptf" => "Plaintiff",
438
+ "pth" => "Patent holder",
439
+ "ptt" => "Plaintiff-appellant",
440
+ "rbr" => "Rubricator",
441
+ "rce" => "Recording engineer",
442
+ "rcp" => "Recipient",
443
+ "red" => "Redactor",
444
+ "ren" => "Renderer",
445
+ "res" => "Researcher",
446
+ "rev" => "Reviewer",
447
+ "rps" => "Repository",
448
+ "rpt" => "Reporter",
449
+ "rpy" => "Responsible party",
450
+ "rse" => "Respondent-appellee",
451
+ "rsg" => "Restager",
452
+ "rsp" => "Respondent",
453
+ "rst" => "Respondent-appellant",
454
+ "rth" => "Research team head",
455
+ "rtm" => "Research team member",
456
+ "sad" => "Scientific advisor",
457
+ "sce" => "Scenarist",
458
+ "scl" => "Sculptor",
459
+ "scr" => "Scribe",
460
+ "sds" => "Sound designer",
461
+ "sec" => "Secretary",
462
+ "sgn" => "Signer",
463
+ "sht" => "Supporting host",
464
+ "sng" => "Singer",
465
+ "spk" => "Speaker",
466
+ "spn" => "Sponsor",
467
+ "spy" => "Second party",
468
+ "srv" => "Surveyor",
469
+ "std" => "Set designer",
470
+ "stl" => "Storyteller",
471
+ "stm" => "Stage manager",
472
+ "stn" => "Standards body",
473
+ "str" => "Stereotyper",
474
+ "tcd" => "Technical director",
475
+ "tch" => "Teacher",
476
+ "ths" => "Thesis advisor",
477
+ "trc" => "Transcriber",
478
+ "trl" => "Translator",
479
+ "tyd" => "Type designer",
480
+ "tyg" => "Typographer",
481
+ "vdg" => "Videographer",
482
+ "voc" => "Vocalist",
483
+ "wam" => "Writer of accompanying material",
484
+ "wdc" => "Woodcutter",
485
+ "wde" => "Wood -engraver",
486
+ "wit" => "Witness"}
487
+ end
488
+
489
+ def self.valid_child_types
490
+ ["data", "supporting file", "profile", "lorem ipsum", "dolor"]
491
+ end
492
+
493
+ def to_solr(solr_doc=Hash.new)
494
+ super(solr_doc)
495
+
496
+ extract_person_full_names.each_pair {|n,v| ::Solrizer::Extractor.insert_solr_field_value(solr_doc, n, v) }
497
+ extract_person_organizations.each_pair {|n,v| ::Solrizer::Extractor.insert_solr_field_value(solr_doc, n, v) }
498
+ extract_person_full_names_and_computing_ids.each_pair {|n,v| ::Solrizer::Extractor.insert_solr_field_value(solr_doc, n, v) }
499
+
500
+ ::Solrizer::Extractor.insert_solr_field_value(solr_doc, "object_type_facet", "Article")
501
+ ::Solrizer::Extractor.insert_solr_field_value(solr_doc, "mods_journal_title_info_facet", "Unknown") if solr_doc["mods_journal_title_info_facet"].nil? || solr_doc["mods_journal_title_info_facet"].blank?
502
+
503
+ solr_doc
504
+ end
505
+
506
+ # extracts the last_name##full_name##computing_id to be used by home view
507
+ def extract_person_full_names_and_computing_ids
508
+ names = {}
509
+ self.find_by_terms(:person).each do |person|
510
+ name_parts = person.children.inject({}) do |hash,child|
511
+ hash[child.get_attribute(:type)] = child.text if ["family","given"].include? child.get_attribute(:type)
512
+ hash["computing_id"] = child.text if child.name == 'computing_id'
513
+ hash
514
+ end
515
+ if name_parts.length == 3 and person.search(:roleTerm).children.text.include?("Author")
516
+ if name_parts["family"].blank? && name_parts["given"].blank? && name_parts["computing_id"].blank?
517
+ value = "Unknown Author"
518
+ else
519
+ value = "#{name_parts["family"]}, #{name_parts["given"]} (#{name_parts["computing_id"]})"
520
+ end
521
+ ::Solrizer::Extractor.insert_solr_field_value(names, "person_full_name_cid_facet", value) if name_parts.length == 3
522
+ end
523
+ end
524
+ names
525
+ end
526
+ end
527
+ end
528
+ end