active-fedora 6.7.8 → 6.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -0
  3. data/.rubocop.yml +1 -0
  4. data/.rubocop_todo.yml +938 -0
  5. data/.travis.yml +5 -6
  6. data/Gemfile +3 -1
  7. data/Rakefile +7 -5
  8. data/active-fedora.gemspec +7 -8
  9. data/lib/active_fedora/om_datastream.rb +1 -0
  10. data/lib/active_fedora/rdf_xml_writer.rb +31 -62
  11. data/lib/active_fedora/version.rb +1 -1
  12. data/spec/config_helper.rb +14 -14
  13. data/spec/integration/associations_spec.rb +232 -232
  14. data/spec/integration/attributes_spec.rb +11 -12
  15. data/spec/integration/auditable_spec.rb +10 -10
  16. data/spec/integration/base_spec.rb +163 -163
  17. data/spec/integration/bug_spec.rb +7 -7
  18. data/spec/integration/complex_rdf_datastream_spec.rb +88 -88
  19. data/spec/integration/datastream_collections_spec.rb +69 -69
  20. data/spec/integration/datastream_spec.rb +43 -43
  21. data/spec/integration/datastreams_spec.rb +63 -63
  22. data/spec/integration/delegating_spec.rb +14 -14
  23. data/spec/integration/delete_all_spec.rb +38 -42
  24. data/spec/integration/fedora_solr_sync_spec.rb +5 -5
  25. data/spec/integration/full_featured_model_spec.rb +101 -101
  26. data/spec/integration/has_many_associations_spec.rb +24 -24
  27. data/spec/integration/model_spec.rb +30 -30
  28. data/spec/integration/nested_attribute_spec.rb +41 -41
  29. data/spec/integration/ntriples_datastream_spec.rb +107 -107
  30. data/spec/integration/om_datastream_spec.rb +67 -67
  31. data/spec/integration/persistence_spec.rb +6 -6
  32. data/spec/integration/rdf_nested_attributes_spec.rb +56 -56
  33. data/spec/integration/relation_delegation_spec.rb +24 -26
  34. data/spec/integration/rels_ext_datastream_spec.rb +20 -20
  35. data/spec/integration/scoped_query_spec.rb +40 -41
  36. data/spec/integration/solr_instance_loader_spec.rb +4 -4
  37. data/spec/integration/solr_service_spec.rb +46 -46
  38. data/spec/rails3_test_app/config/application.rb +1 -1
  39. data/spec/rails3_test_app/config/environments/development.rb +0 -1
  40. data/spec/rails3_test_app/config/environments/production.rb +1 -1
  41. data/spec/rails3_test_app/spec/spec_helper.rb +3 -3
  42. data/spec/rails3_test_app/spec/unit/rails_3_init.rb +4 -4
  43. data/spec/samples/hydra-mods_article_datastream.rb +334 -334
  44. data/spec/samples/hydra-rights_metadata_datastream.rb +57 -57
  45. data/spec/samples/marpa-dc_datastream.rb +17 -17
  46. data/spec/samples/models/audio_record.rb +16 -16
  47. data/spec/samples/models/image.rb +2 -2
  48. data/spec/samples/models/mods_article.rb +5 -5
  49. data/spec/samples/models/oral_history.rb +18 -18
  50. data/spec/samples/models/seminar.rb +24 -24
  51. data/spec/samples/models/seminar_audio_file.rb +17 -17
  52. data/spec/samples/oral_history_sample_model.rb +21 -21
  53. data/spec/samples/special_thing.rb +14 -14
  54. data/spec/spec_helper.rb +7 -11
  55. data/spec/support/an_active_model.rb +2 -2
  56. data/spec/support/mock_fedora.rb +16 -17
  57. data/spec/unit/active_fedora_spec.rb +58 -58
  58. data/spec/unit/association_proxy_spec.rb +5 -7
  59. data/spec/unit/base_active_model_spec.rb +25 -26
  60. data/spec/unit/base_cma_spec.rb +5 -5
  61. data/spec/unit/base_datastream_management_spec.rb +27 -27
  62. data/spec/unit/base_delegate_spec.rb +80 -82
  63. data/spec/unit/base_delegate_to_spec.rb +37 -39
  64. data/spec/unit/base_extra_spec.rb +48 -48
  65. data/spec/unit/base_spec.rb +300 -300
  66. data/spec/unit/callback_spec.rb +19 -19
  67. data/spec/unit/code_configurator_spec.rb +17 -17
  68. data/spec/unit/config_spec.rb +16 -8
  69. data/spec/unit/content_model_spec.rb +60 -60
  70. data/spec/unit/datastream_collections_spec.rb +229 -229
  71. data/spec/unit/datastream_spec.rb +57 -54
  72. data/spec/unit/datastreams_spec.rb +77 -77
  73. data/spec/unit/file_configurator_spec.rb +217 -217
  74. data/spec/unit/has_and_belongs_to_many_collection_spec.rb +26 -26
  75. data/spec/unit/has_many_collection_spec.rb +9 -9
  76. data/spec/unit/inheritance_spec.rb +12 -13
  77. data/spec/unit/model_spec.rb +41 -51
  78. data/spec/unit/nom_datastream_spec.rb +15 -15
  79. data/spec/unit/ntriples_datastream_spec.rb +112 -112
  80. data/spec/unit/om_datastream_spec.rb +233 -227
  81. data/spec/unit/persistence_spec.rb +6 -6
  82. data/spec/unit/predicates_spec.rb +73 -73
  83. data/spec/unit/property_spec.rb +9 -17
  84. data/spec/unit/qualified_dublin_core_datastream_spec.rb +33 -33
  85. data/spec/unit/query_spec.rb +188 -217
  86. data/spec/unit/rdf_datastream_spec.rb +28 -21
  87. data/spec/unit/rdf_list_nested_attributes_spec.rb +34 -34
  88. data/spec/unit/rdf_list_spec.rb +80 -104
  89. data/spec/unit/rdf_node_spec.rb +7 -7
  90. data/spec/unit/rdf_xml_writer_spec.rb +10 -10
  91. data/spec/unit/rdfxml_rdf_datastream_spec.rb +27 -27
  92. data/spec/unit/relationship_graph_spec.rb +51 -51
  93. data/spec/unit/rels_ext_datastream_spec.rb +75 -69
  94. data/spec/unit/rspec_matchers/belong_to_associated_active_fedora_object_matcher_spec.rb +15 -15
  95. data/spec/unit/rspec_matchers/have_many_associated_active_fedora_objects_matcher_spec.rb +15 -15
  96. data/spec/unit/rspec_matchers/have_predicate_matcher_spec.rb +15 -15
  97. data/spec/unit/rspec_matchers/match_fedora_datastream_matcher_spec.rb +12 -12
  98. data/spec/unit/rubydora_connection_spec.rb +5 -5
  99. data/spec/unit/semantic_node_spec.rb +59 -59
  100. data/spec/unit/serializers_spec.rb +4 -4
  101. data/spec/unit/service_definitions_spec.rb +26 -26
  102. data/spec/unit/simple_datastream_spec.rb +17 -17
  103. data/spec/unit/solr_config_options_spec.rb +27 -28
  104. data/spec/unit/solr_digital_object_spec.rb +21 -21
  105. data/spec/unit/solr_service_spec.rb +81 -81
  106. data/spec/unit/unsaved_digital_object_spec.rb +20 -20
  107. data/spec/unit/validations_spec.rb +21 -21
  108. metadata +70 -58
  109. data/gemfiles/gemfile.rails3 +0 -11
  110. data/gemfiles/gemfile.rails4 +0 -10
@@ -34,7 +34,7 @@ module TestApp
34
34
  # config.action_view.javascript_expansions[:defaults] = %w(jquery rails)
35
35
 
36
36
  # Configure the default encoding used in templates for Ruby 1.9.
37
- config.encoding = "utf-8"
37
+ config.encoding = 'utf-8'
38
38
 
39
39
  # Configure sensitive parameters which will be filtered from the log file.
40
40
  config.filter_parameters += [:password]
@@ -23,4 +23,3 @@ TestApp::Application.configure do
23
23
  # Only use best-standards-support built into browsers
24
24
  config.action_dispatch.best_standards_support = :builtin
25
25
  end
26
-
@@ -10,7 +10,7 @@ TestApp::Application.configure do
10
10
  config.action_controller.perform_caching = true
11
11
 
12
12
  # Specifies the header that your server uses for sending files
13
- config.action_dispatch.x_sendfile_header = "X-Sendfile"
13
+ config.action_dispatch.x_sendfile_header = 'X-Sendfile'
14
14
 
15
15
  # For nginx:
16
16
  # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect'
@@ -1,11 +1,11 @@
1
1
  # This file is copied to spec/ when you run 'rails generate rspec:install'
2
- ENV["RAILS_ENV"] ||= 'test'
3
- require File.expand_path("../../config/environment", __FILE__)
2
+ ENV['RAILS_ENV'] ||= 'test'
3
+ require File.expand_path('../../config/environment', __FILE__)
4
4
  require 'rspec/rails'
5
5
 
6
6
  # Requires supporting ruby files with custom matchers and macros, etc,
7
7
  # in spec/support/ and its subdirectories.
8
- Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
8
+ Dir[Rails.root.join('spec/support/**/*.rb')].each {|f| require f}
9
9
 
10
10
  RSpec.configure do |config|
11
11
  # == Mock Framework
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "initializing active-fedora in a rails 3 app" do
4
- it "should include ActiveFedora::Railtie" do
3
+ describe 'initializing active-fedora in a rails 3 app' do
4
+ it 'should include ActiveFedora::Railtie' do
5
5
  begin
6
6
  ActiveFedora::Railtie
7
7
  railtie_loaded = true
@@ -9,7 +9,7 @@ describe "initializing active-fedora in a rails 3 app" do
9
9
  railtie_loaded = false
10
10
  end
11
11
 
12
- railtie_loaded.should be_true
13
-
12
+ expect(railtie_loaded).to be_truthy
13
+
14
14
  end
15
15
  end
@@ -1,6 +1,6 @@
1
- require "active-fedora"
1
+ require 'active-fedora'
2
2
  module Hydra
3
-
3
+
4
4
  # This is an example of a OmDatastream that defines an OM terminology for MODS xml
5
5
  # It focuses on the aspects of MODS that deal with descriptive metadata for published articles
6
6
  # This is not the hydra-head plugin version of this OM Terminology; See https://github.com/projecthydra/hydra-head/blob/master/lib/hydra/mods_article.rb
@@ -11,135 +11,135 @@ module Hydra
11
11
  # * Defines a term lang_code that maps to "languageTerm[@type=code]"
12
12
  # * Defines a variety of terms, date, last_name, first_name & terms_of_address, that all map to mods:namePart but use varying attributes to distinguish themselves
13
13
  # * Uses proxy terms to define familar terms like start_page and end_page that map to non-intuitive xml structures "extent[@unit=pages]/start" and "extent[@unit=pages]/end"
14
- # * Uses proxy terms, publication_url, peer_reviewed, and title, to allow convenient access to frequently used terms
14
+ # * Uses proxy terms, publication_url, peer_reviewed, and title, to allow convenient access to frequently used terms
15
15
  #
16
16
  # Things to note about the additional methods it defines:
17
- #
17
+ #
18
18
  # * Defines a series of templates, person_template, organization_template, etc. for generating a whole set of xml nodes to insert into the document (note: the new OM::TemplateRegistry provides an even better way to do this)
19
19
  # * Defines a custom method, insert_contributor, that uses the Terminology to manipulate xml documents in specialized ways
20
20
  # * Defines a series of relator_term Hashes that can then be used when generating views, etc. In this case, the Hashes are hard-coded into the Class. Ideally, they might be read from a configuration file or mixed into the class using a module
21
- class ModsArticleDatastream < ActiveFedora::OmDatastream
21
+ class ModsArticleDatastream < ActiveFedora::OmDatastream
22
22
 
23
23
  set_terminology do |t|
24
- t.root(:path=>"mods", :xmlns=>"http://www.loc.gov/mods/v3", :schema=>"http://www.loc.gov/standards/mods/v3/mods-3-2.xsd")
24
+ t.root(:path => 'mods', :xmlns => 'http://www.loc.gov/mods/v3', :schema => 'http://www.loc.gov/standards/mods/v3/mods-3-2.xsd')
25
25
 
26
26
 
27
- t.title_info(:path=>"titleInfo") {
28
- t.main_title(:index_as=>[:facetable],:path=>"title", :label=>"title")
29
- t.language(:index_as=>[:facetable],:path=>{:attribute=>"lang"})
30
- }
27
+ t.title_info(:path => 'titleInfo') {
28
+ t.main_title(:index_as => [:facetable], :path => 'title', :label => 'title')
29
+ t.language(:index_as => [:facetable], :path => {:attribute => 'lang'})
30
+ }
31
31
  t.language{
32
- t.lang_code(:index_as=>[:facetable], :path=>"languageTerm", :attributes=>{:type=>"code"})
32
+ t.lang_code(:index_as => [:facetable], :path => 'languageTerm', :attributes => {:type => 'code'})
33
33
  }
34
- t.abstract
34
+ t.abstract
35
35
  t.subject {
36
- t.topic(:index_as=>[:facetable])
37
- }
38
- t.topic_tag(:proxy=>[:subject, :topic])
36
+ t.topic(:index_as => [:facetable])
37
+ }
38
+ t.topic_tag(:proxy => [:subject, :topic])
39
39
  # t.topic_tag(:index_as=>[:facetable],:path=>"subject", :default_content_path=>"topic")
40
40
  # This is a mods:name. The underscore is purely to avoid namespace conflicts.
41
- t.name_(:index_as=>[:searchable]) {
41
+ t.name_(:index_as => [:searchable]) {
42
42
  # this is a namepart
43
- t.namePart(:type=>:string, :label=>"generic name")
43
+ t.namePart(:type => :string, :label => 'generic name')
44
44
  # affiliations are great
45
45
  t.affiliation
46
- t.institution(:path=>"affiliation", :index_as=>[:facetable], :label=>"organization")
46
+ t.institution(:path => 'affiliation', :index_as => [:facetable], :label => 'organization')
47
47
  t.displayForm
48
- t.role(:ref=>[:role])
49
- t.description(:index_as=>[:facetable])
50
- t.date(:path=>"namePart", :attributes=>{:type=>"date"})
51
- t.last_name(:path=>"namePart", :attributes=>{:type=>"family"})
52
- t.first_name(:path=>"namePart", :attributes=>{:type=>"given"}, :label=>"first name")
53
- t.terms_of_address(:path=>"namePart", :attributes=>{:type=>"termsOfAddress"})
48
+ t.role(:ref => [:role])
49
+ t.description(:index_as => [:facetable])
50
+ t.date(:path => 'namePart', :attributes => {:type => 'date'})
51
+ t.last_name(:path => 'namePart', :attributes => {:type => 'family'})
52
+ t.first_name(:path => 'namePart', :attributes => {:type => 'given'}, :label => 'first name')
53
+ t.terms_of_address(:path => 'namePart', :attributes => {:type => 'termsOfAddress'})
54
54
  t.computing_id
55
55
  }
56
- # lookup :person, :first_name
57
- t.person(:ref=>:name, :attributes=>{:type=>"personal"}, :index_as=>[:facetable, :stored_searchable])
58
- t.department(:proxy=>[:person,:description],:index_as=>[:facetable])
59
- t.organization(:ref=>:name, :attributes=>{:type=>"corporate"}, :index_as=>[:facetable])
60
- t.conference(:ref=>:name, :attributes=>{:type=>"conference"}, :index_as=>[:facetable])
61
- t.role(:index_as=>[:stored_searchable]) {
62
- t.text(:path=>"roleTerm",:attributes=>{:type=>"text"}, :index_as=>[:stored_searchable])
63
- t.code(:path=>"roleTerm",:attributes=>{:type=>"code"})
56
+ # lookup :person, :first_name
57
+ t.person(:ref => :name, :attributes => {:type => 'personal'}, :index_as => [:facetable, :stored_searchable])
58
+ t.department(:proxy => [:person, :description], :index_as => [:facetable])
59
+ t.organization(:ref => :name, :attributes => {:type => 'corporate'}, :index_as => [:facetable])
60
+ t.conference(:ref => :name, :attributes => {:type => 'conference'}, :index_as => [:facetable])
61
+ t.role(:index_as => [:stored_searchable]) {
62
+ t.text(:path => 'roleTerm', :attributes => {:type => 'text'}, :index_as => [:stored_searchable])
63
+ t.code(:path => 'roleTerm', :attributes => {:type => 'code'})
64
64
  }
65
- t.journal(:path=>'relatedItem', :attributes=>{:type=>"host"}) {
66
- t.title_info(:index_as=>[:facetable],:ref=>[:title_info])
67
- t.origin_info(:path=>"originInfo") {
65
+ t.journal(:path => 'relatedItem', :attributes => {:type => 'host'}) {
66
+ t.title_info(:index_as => [:facetable], :ref => [:title_info])
67
+ t.origin_info(:path => 'originInfo') {
68
68
  t.publisher
69
- t.date_issued(:path=>"dateIssued")
70
- t.issuance(:index_as=>[:facetable])
69
+ t.date_issued(:path => 'dateIssued')
70
+ t.issuance(:index_as => [:facetable])
71
71
  }
72
- t.issn(:path=>"identifier", :attributes=>{:type=>"issn"})
73
- t.issue(:path=>"part") {
74
- t.volume(:path=>"detail", :attributes=>{:type=>"volume"}, :default_content_path=>"number")
75
- t.level(:path=>"detail", :attributes=>{:type=>"number"}, :default_content_path=>"number")
72
+ t.issn(:path => 'identifier', :attributes => {:type => 'issn'})
73
+ t.issue(:path => 'part') {
74
+ t.volume(:path => 'detail', :attributes => {:type => 'volume'}, :default_content_path => 'number')
75
+ t.level(:path => 'detail', :attributes => {:type => 'number'}, :default_content_path => 'number')
76
76
  t.extent
77
- t.pages(:path=>"extent", :attributes=>{:unit=>"pages"}) {
77
+ t.pages(:path => 'extent', :attributes => {:unit => 'pages'}) {
78
78
  t.start
79
79
  t.end
80
80
  }
81
- t.start_page(:proxy=>[:pages, :start])
82
- t.end_page(:proxy=>[:pages, :end])
83
- t.publication_date(:path=>"date", :type=>:date, :index_as=>[:stored_searchable])
81
+ t.start_page(:proxy => [:pages, :start])
82
+ t.end_page(:proxy => [:pages, :end])
83
+ t.publication_date(:path => 'date', :type => :date, :index_as => [:stored_searchable])
84
84
  }
85
85
  }
86
86
  t.note
87
- t.location(:path=>"location") {
88
- t.url(:path=>"url")
87
+ t.location(:path => 'location') {
88
+ t.url(:path => 'url')
89
89
  }
90
- t.publication_url(:proxy=>[:location,:url])
91
- t.peer_reviewed(:proxy=>[:journal,:origin_info,:issuance], :index_as=>[:facetable])
92
- t.title(:proxy=>[:title_info, :main_title])
93
- t.journal_title(:proxy=>[:journal, :title_info, :main_title])
90
+ t.publication_url(:proxy => [:location, :url])
91
+ t.peer_reviewed(:proxy => [:journal, :origin_info, :issuance], :index_as => [:facetable])
92
+ t.title(:proxy => [:title_info, :main_title])
93
+ t.journal_title(:proxy => [:journal, :title_info, :main_title])
94
94
  end
95
-
95
+
96
96
  # Generates an empty Mods Article (used when you call ModsArticle.new without passing in existing xml)
97
97
  def self.xml_template
98
98
  builder = Nokogiri::XML::Builder.new do |xml|
99
- xml.mods(:version=>"3.3", "xmlns:xlink"=>"http://www.w3.org/1999/xlink",
100
- "xmlns:xsi"=>"http://www.w3.org/2001/XMLSchema-instance",
101
- "xmlns"=>"http://www.loc.gov/mods/v3",
102
- "xsi:schemaLocation"=>"http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-3.xsd") {
103
- xml.titleInfo(:lang=>"") {
99
+ xml.mods(:version => '3.3', 'xmlns:xlink' => 'http://www.w3.org/1999/xlink',
100
+ 'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
101
+ 'xmlns' => 'http://www.loc.gov/mods/v3',
102
+ 'xsi:schemaLocation' => 'http://www.loc.gov/mods/v3 http://www.loc.gov/standards/mods/v3/mods-3-3.xsd') {
103
+ xml.titleInfo(:lang => '') {
104
104
  xml.title
105
105
  }
106
- xml.name(:type=>"personal") {
107
- xml.namePart(:type=>"given")
108
- xml.namePart(:type=>"family")
106
+ xml.name(:type => 'personal') {
107
+ xml.namePart(:type => 'given')
108
+ xml.namePart(:type => 'family')
109
109
  xml.affiliation
110
110
  xml.computing_id
111
111
  xml.description
112
112
  xml.role {
113
- xml.roleTerm("Author", :authority=>"marcrelator", :type=>"text")
113
+ xml.roleTerm('Author', :authority => 'marcrelator', :type => 'text')
114
114
  }
115
115
  }
116
116
  xml.typeOfResource
117
- xml.genre(:authority=>"marcgt")
117
+ xml.genre(:authority => 'marcgt')
118
118
  xml.language {
119
- xml.languageTerm(:authority=>"iso639-2b", :type=>"code")
119
+ xml.languageTerm(:authority => 'iso639-2b', :type => 'code')
120
120
  }
121
121
  xml.abstract
122
122
  xml.subject {
123
123
  xml.topic
124
124
  }
125
- xml.relatedItem(:type=>"host") {
125
+ xml.relatedItem(:type => 'host') {
126
126
  xml.titleInfo {
127
127
  xml.title
128
128
  }
129
- xml.identifier(:type=>"issn")
129
+ xml.identifier(:type => 'issn')
130
130
  xml.originInfo {
131
131
  xml.publisher
132
132
  xml.dateIssued
133
133
  xml.issuance
134
134
  }
135
135
  xml.part {
136
- xml.detail(:type=>"volume") {
136
+ xml.detail(:type => 'volume') {
137
137
  xml.number
138
138
  }
139
- xml.detail(:type=>"number") {
139
+ xml.detail(:type => 'number') {
140
140
  xml.number
141
141
  }
142
- xml.extent(:unit=>"pages") {
142
+ xml.extent(:unit => 'pages') {
143
143
  xml.start
144
144
  xml.end
145
145
  }
@@ -153,18 +153,18 @@ module Hydra
153
153
  end
154
154
  return builder.doc
155
155
  end
156
-
156
+
157
157
  # Generates a new Person node
158
158
  def self.person_template
159
159
  builder = Nokogiri::XML::Builder.new do |xml|
160
- xml.name(:type=>"personal") {
161
- xml.namePart(:type=>"family")
162
- xml.namePart(:type=>"given")
160
+ xml.name(:type => 'personal') {
161
+ xml.namePart(:type => 'family')
162
+ xml.namePart(:type => 'given')
163
163
  xml.affiliation
164
164
  xml.computing_id
165
165
  xml.description
166
166
  xml.role {
167
- xml.roleTerm("Author", :type=>"text")
167
+ xml.roleTerm('Author', :type => 'text')
168
168
  }
169
169
  }
170
170
  end
@@ -173,7 +173,7 @@ module Hydra
173
173
 
174
174
  def self.full_name_template
175
175
  builder = Nokogiri::XML::Builder.new do |xml|
176
- xml.full_name(:type => "personal")
176
+ xml.full_name(:type => 'personal')
177
177
  end
178
178
  return builder.doc.root
179
179
  end
@@ -182,33 +182,33 @@ module Hydra
182
182
  # Uses mods:name[@type="corporate"]
183
183
  def self.organization_template
184
184
  builder = Nokogiri::XML::Builder.new do |xml|
185
- xml.name(:type=>"corporate") {
185
+ xml.name(:type => 'corporate') {
186
186
  xml.namePart
187
187
  xml.role {
188
- xml.roleTerm(:authority=>"marcrelator", :type=>"text")
189
- }
188
+ xml.roleTerm(:authority => 'marcrelator', :type => 'text')
189
+ }
190
190
  }
191
191
  end
192
192
  return builder.doc.root
193
193
  end
194
-
194
+
195
195
  # Generates a new Conference node
196
196
  def self.conference_template
197
197
  builder = Nokogiri::XML::Builder.new do |xml|
198
- xml.name(:type=>"conference") {
198
+ xml.name(:type => 'conference') {
199
199
  xml.namePart
200
200
  xml.role {
201
- xml.roleTerm(:authority=>"marcrelator", :type=>"text")
202
- }
201
+ xml.roleTerm(:authority => 'marcrelator', :type => 'text')
202
+ }
203
203
  }
204
204
  end
205
205
  return builder.doc.root
206
206
  end
207
-
207
+
208
208
  # Inserts a new contributor (mods:name) into the mods document
209
209
  # creates contributors of type :person, :organization, or :conference
210
- def insert_contributor(type, opts={})
211
- case type.to_sym
210
+ def insert_contributor(type, opts = {})
211
+ case type.to_sym
212
212
  when :person
213
213
  node = Hydra::ModsArticleDatastream.person_template
214
214
  nodeset = self.find_by_terms(:person)
@@ -223,7 +223,7 @@ module Hydra
223
223
  node = nil
224
224
  index = nil
225
225
  end
226
-
226
+
227
227
  unless nodeset.nil?
228
228
  if nodeset.empty?
229
229
  self.ng_xml.root.add_child(node)
@@ -234,282 +234,282 @@ module Hydra
234
234
  end
235
235
  self.dirty = true
236
236
  end
237
-
237
+
238
238
  return node, index
239
239
  end
240
-
240
+
241
241
  # Remove the contributor entry identified by @contributor_type and @index
242
242
  def remove_contributor(contributor_type, index)
243
243
  self.find_by_terms( {contributor_type.to_sym => index.to_i} ).first.remove
244
244
  self.dirty = true
245
245
  end
246
-
246
+
247
247
  def self.common_relator_terms
248
- {"aut" => "Author",
249
- "clb" => "Collaborator",
250
- "com" => "Compiler",
251
- "ctb" => "Contributor",
252
- "cre" => "Creator",
253
- "edt" => "Editor",
254
- "ill" => "Illustrator",
255
- "oth" => "Other",
256
- "trl" => "Translator",
248
+ {'aut' => 'Author',
249
+ 'clb' => 'Collaborator',
250
+ 'com' => 'Compiler',
251
+ 'ctb' => 'Contributor',
252
+ 'cre' => 'Creator',
253
+ 'edt' => 'Editor',
254
+ 'ill' => 'Illustrator',
255
+ 'oth' => 'Other',
256
+ 'trl' => 'Translator'
257
257
  }
258
258
  end
259
-
259
+
260
260
  def self.person_relator_terms
261
- {"aut" => "Author",
262
- "clb" => "Collaborator",
263
- "com" => "Compiler",
264
- "cre" => "Creator",
265
- "ctb" => "Contributor",
266
- "edt" => "Editor",
267
- "ill" => "Illustrator",
268
- "res" => "Researcher",
269
- "rth" => "Research team head",
270
- "rtm" => "Research team member",
271
- "trl" => "Translator"
261
+ {'aut' => 'Author',
262
+ 'clb' => 'Collaborator',
263
+ 'com' => 'Compiler',
264
+ 'cre' => 'Creator',
265
+ 'ctb' => 'Contributor',
266
+ 'edt' => 'Editor',
267
+ 'ill' => 'Illustrator',
268
+ 'res' => 'Researcher',
269
+ 'rth' => 'Research team head',
270
+ 'rtm' => 'Research team member',
271
+ 'trl' => 'Translator'
272
272
  }
273
273
  end
274
-
274
+
275
275
  def self.conference_relator_terms
276
276
  {
277
- "hst" => "Host"
277
+ 'hst' => 'Host'
278
278
  }
279
279
  end
280
-
280
+
281
281
  def self.organization_relator_terms
282
282
  {
283
- "fnd" => "Funder",
284
- "hst" => "Host"
283
+ 'fnd' => 'Funder',
284
+ 'hst' => 'Host'
285
285
  }
286
286
  end
287
-
287
+
288
288
  def self.dc_relator_terms
289
- {"acp" => "Art copyist",
290
- "act" => "Actor",
291
- "adp" => "Adapter",
292
- "aft" => "Author of afterword, colophon, etc.",
293
- "anl" => "Analyst",
294
- "anm" => "Animator",
295
- "ann" => "Annotator",
296
- "ant" => "Bibliographic antecedent",
297
- "app" => "Applicant",
298
- "aqt" => "Author in quotations or text abstracts",
299
- "arc" => "Architect",
300
- "ard" => "Artistic director ",
301
- "arr" => "Arranger",
302
- "art" => "Artist",
303
- "asg" => "Assignee",
304
- "asn" => "Associated name",
305
- "att" => "Attributed name",
306
- "auc" => "Auctioneer",
307
- "aud" => "Author of dialog",
308
- "aui" => "Author of introduction",
309
- "aus" => "Author of screenplay",
310
- "aut" => "Author",
311
- "bdd" => "Binding designer",
312
- "bjd" => "Bookjacket designer",
313
- "bkd" => "Book designer",
314
- "bkp" => "Book producer",
315
- "bnd" => "Binder",
316
- "bpd" => "Bookplate designer",
317
- "bsl" => "Bookseller",
318
- "ccp" => "Conceptor",
319
- "chr" => "Choreographer",
320
- "clb" => "Collaborator",
321
- "cli" => "Client",
322
- "cll" => "Calligrapher",
323
- "clt" => "Collotyper",
324
- "cmm" => "Commentator",
325
- "cmp" => "Composer",
326
- "cmt" => "Compositor",
327
- "cng" => "Cinematographer",
328
- "cnd" => "Conductor",
329
- "cns" => "Censor",
330
- "coe" => "Contestant -appellee",
331
- "col" => "Collector",
332
- "com" => "Compiler",
333
- "cos" => "Contestant",
334
- "cot" => "Contestant -appellant",
335
- "cov" => "Cover designer",
336
- "cpc" => "Copyright claimant",
337
- "cpe" => "Complainant-appellee",
338
- "cph" => "Copyright holder",
339
- "cpl" => "Complainant",
340
- "cpt" => "Complainant-appellant",
341
- "cre" => "Creator",
342
- "crp" => "Correspondent",
343
- "crr" => "Corrector",
344
- "csl" => "Consultant",
345
- "csp" => "Consultant to a project",
346
- "cst" => "Costume designer",
347
- "ctb" => "Contributor",
348
- "cte" => "Contestee-appellee",
349
- "ctg" => "Cartographer",
350
- "ctr" => "Contractor",
351
- "cts" => "Contestee",
352
- "ctt" => "Contestee-appellant",
353
- "cur" => "Curator",
354
- "cwt" => "Commentator for written text",
355
- "dfd" => "Defendant",
356
- "dfe" => "Defendant-appellee",
357
- "dft" => "Defendant-appellant",
358
- "dgg" => "Degree grantor",
359
- "dis" => "Dissertant",
360
- "dln" => "Delineator",
361
- "dnc" => "Dancer",
362
- "dnr" => "Donor",
363
- "dpc" => "Depicted",
364
- "dpt" => "Depositor",
365
- "drm" => "Draftsman",
366
- "drt" => "Director",
367
- "dsr" => "Designer",
368
- "dst" => "Distributor",
369
- "dtc" => "Data contributor ",
370
- "dte" => "Dedicatee",
371
- "dtm" => "Data manager ",
372
- "dto" => "Dedicator",
373
- "dub" => "Dubious author",
374
- "edt" => "Editor",
375
- "egr" => "Engraver",
376
- "elg" => "Electrician ",
377
- "elt" => "Electrotyper",
378
- "eng" => "Engineer",
379
- "etr" => "Etcher",
380
- "exp" => "Expert",
381
- "fac" => "Facsimilist",
382
- "fld" => "Field director ",
383
- "flm" => "Film editor",
384
- "fmo" => "Former owner",
385
- "fpy" => "First party",
386
- "fnd" => "Funder",
387
- "frg" => "Forger",
388
- "gis" => "Geographic information specialist ",
389
- "grt" => "Graphic technician",
390
- "hnr" => "Honoree",
391
- "hst" => "Host",
392
- "ill" => "Illustrator",
393
- "ilu" => "Illuminator",
394
- "ins" => "Inscriber",
395
- "inv" => "Inventor",
396
- "itr" => "Instrumentalist",
397
- "ive" => "Interviewee",
398
- "ivr" => "Interviewer",
399
- "lbr" => "Laboratory ",
400
- "lbt" => "Librettist",
401
- "ldr" => "Laboratory director ",
402
- "led" => "Lead",
403
- "lee" => "Libelee-appellee",
404
- "lel" => "Libelee",
405
- "len" => "Lender",
406
- "let" => "Libelee-appellant",
407
- "lgd" => "Lighting designer",
408
- "lie" => "Libelant-appellee",
409
- "lil" => "Libelant",
410
- "lit" => "Libelant-appellant",
411
- "lsa" => "Landscape architect",
412
- "lse" => "Licensee",
413
- "lso" => "Licensor",
414
- "ltg" => "Lithographer",
415
- "lyr" => "Lyricist",
416
- "mcp" => "Music copyist",
417
- "mfr" => "Manufacturer",
418
- "mdc" => "Metadata contact",
419
- "mod" => "Moderator",
420
- "mon" => "Monitor",
421
- "mrk" => "Markup editor",
422
- "msd" => "Musical director",
423
- "mte" => "Metal-engraver",
424
- "mus" => "Musician",
425
- "nrt" => "Narrator",
426
- "opn" => "Opponent",
427
- "org" => "Originator",
428
- "orm" => "Organizer of meeting",
429
- "oth" => "Other",
430
- "own" => "Owner",
431
- "pat" => "Patron",
432
- "pbd" => "Publishing director",
433
- "pbl" => "Publisher",
434
- "pdr" => "Project director",
435
- "pfr" => "Proofreader",
436
- "pht" => "Photographer",
437
- "plt" => "Platemaker",
438
- "pma" => "Permitting agency",
439
- "pmn" => "Production manager",
440
- "pop" => "Printer of plates",
441
- "ppm" => "Papermaker",
442
- "ppt" => "Puppeteer",
443
- "prc" => "Process contact",
444
- "prd" => "Production personnel",
445
- "prf" => "Performer",
446
- "prg" => "Programmer",
447
- "prm" => "Printmaker",
448
- "pro" => "Producer",
449
- "prt" => "Printer",
450
- "pta" => "Patent applicant",
451
- "pte" => "Plaintiff -appellee",
452
- "ptf" => "Plaintiff",
453
- "pth" => "Patent holder",
454
- "ptt" => "Plaintiff-appellant",
455
- "rbr" => "Rubricator",
456
- "rce" => "Recording engineer",
457
- "rcp" => "Recipient",
458
- "red" => "Redactor",
459
- "ren" => "Renderer",
460
- "res" => "Researcher",
461
- "rev" => "Reviewer",
462
- "rps" => "Repository",
463
- "rpt" => "Reporter",
464
- "rpy" => "Responsible party",
465
- "rse" => "Respondent-appellee",
466
- "rsg" => "Restager",
467
- "rsp" => "Respondent",
468
- "rst" => "Respondent-appellant",
469
- "rth" => "Research team head",
470
- "rtm" => "Research team member",
471
- "sad" => "Scientific advisor",
472
- "sce" => "Scenarist",
473
- "scl" => "Sculptor",
474
- "scr" => "Scribe",
475
- "sds" => "Sound designer",
476
- "sec" => "Secretary",
477
- "sgn" => "Signer",
478
- "sht" => "Supporting host",
479
- "sng" => "Singer",
480
- "spk" => "Speaker",
481
- "spn" => "Sponsor",
482
- "spy" => "Second party",
483
- "srv" => "Surveyor",
484
- "std" => "Set designer",
485
- "stl" => "Storyteller",
486
- "stm" => "Stage manager",
487
- "stn" => "Standards body",
488
- "str" => "Stereotyper",
489
- "tcd" => "Technical director",
490
- "tch" => "Teacher",
491
- "ths" => "Thesis advisor",
492
- "trc" => "Transcriber",
493
- "trl" => "Translator",
494
- "tyd" => "Type designer",
495
- "tyg" => "Typographer",
496
- "vdg" => "Videographer",
497
- "voc" => "Vocalist",
498
- "wam" => "Writer of accompanying material",
499
- "wdc" => "Woodcutter",
500
- "wde" => "Wood -engraver",
501
- "wit" => "Witness"}
289
+ {'acp' => 'Art copyist',
290
+ 'act' => 'Actor',
291
+ 'adp' => 'Adapter',
292
+ 'aft' => 'Author of afterword, colophon, etc.',
293
+ 'anl' => 'Analyst',
294
+ 'anm' => 'Animator',
295
+ 'ann' => 'Annotator',
296
+ 'ant' => 'Bibliographic antecedent',
297
+ 'app' => 'Applicant',
298
+ 'aqt' => 'Author in quotations or text abstracts',
299
+ 'arc' => 'Architect',
300
+ 'ard' => 'Artistic director ',
301
+ 'arr' => 'Arranger',
302
+ 'art' => 'Artist',
303
+ 'asg' => 'Assignee',
304
+ 'asn' => 'Associated name',
305
+ 'att' => 'Attributed name',
306
+ 'auc' => 'Auctioneer',
307
+ 'aud' => 'Author of dialog',
308
+ 'aui' => 'Author of introduction',
309
+ 'aus' => 'Author of screenplay',
310
+ 'aut' => 'Author',
311
+ 'bdd' => 'Binding designer',
312
+ 'bjd' => 'Bookjacket designer',
313
+ 'bkd' => 'Book designer',
314
+ 'bkp' => 'Book producer',
315
+ 'bnd' => 'Binder',
316
+ 'bpd' => 'Bookplate designer',
317
+ 'bsl' => 'Bookseller',
318
+ 'ccp' => 'Conceptor',
319
+ 'chr' => 'Choreographer',
320
+ 'clb' => 'Collaborator',
321
+ 'cli' => 'Client',
322
+ 'cll' => 'Calligrapher',
323
+ 'clt' => 'Collotyper',
324
+ 'cmm' => 'Commentator',
325
+ 'cmp' => 'Composer',
326
+ 'cmt' => 'Compositor',
327
+ 'cng' => 'Cinematographer',
328
+ 'cnd' => 'Conductor',
329
+ 'cns' => 'Censor',
330
+ 'coe' => 'Contestant -appellee',
331
+ 'col' => 'Collector',
332
+ 'com' => 'Compiler',
333
+ 'cos' => 'Contestant',
334
+ 'cot' => 'Contestant -appellant',
335
+ 'cov' => 'Cover designer',
336
+ 'cpc' => 'Copyright claimant',
337
+ 'cpe' => 'Complainant-appellee',
338
+ 'cph' => 'Copyright holder',
339
+ 'cpl' => 'Complainant',
340
+ 'cpt' => 'Complainant-appellant',
341
+ 'cre' => 'Creator',
342
+ 'crp' => 'Correspondent',
343
+ 'crr' => 'Corrector',
344
+ 'csl' => 'Consultant',
345
+ 'csp' => 'Consultant to a project',
346
+ 'cst' => 'Costume designer',
347
+ 'ctb' => 'Contributor',
348
+ 'cte' => 'Contestee-appellee',
349
+ 'ctg' => 'Cartographer',
350
+ 'ctr' => 'Contractor',
351
+ 'cts' => 'Contestee',
352
+ 'ctt' => 'Contestee-appellant',
353
+ 'cur' => 'Curator',
354
+ 'cwt' => 'Commentator for written text',
355
+ 'dfd' => 'Defendant',
356
+ 'dfe' => 'Defendant-appellee',
357
+ 'dft' => 'Defendant-appellant',
358
+ 'dgg' => 'Degree grantor',
359
+ 'dis' => 'Dissertant',
360
+ 'dln' => 'Delineator',
361
+ 'dnc' => 'Dancer',
362
+ 'dnr' => 'Donor',
363
+ 'dpc' => 'Depicted',
364
+ 'dpt' => 'Depositor',
365
+ 'drm' => 'Draftsman',
366
+ 'drt' => 'Director',
367
+ 'dsr' => 'Designer',
368
+ 'dst' => 'Distributor',
369
+ 'dtc' => 'Data contributor ',
370
+ 'dte' => 'Dedicatee',
371
+ 'dtm' => 'Data manager ',
372
+ 'dto' => 'Dedicator',
373
+ 'dub' => 'Dubious author',
374
+ 'edt' => 'Editor',
375
+ 'egr' => 'Engraver',
376
+ 'elg' => 'Electrician ',
377
+ 'elt' => 'Electrotyper',
378
+ 'eng' => 'Engineer',
379
+ 'etr' => 'Etcher',
380
+ 'exp' => 'Expert',
381
+ 'fac' => 'Facsimilist',
382
+ 'fld' => 'Field director ',
383
+ 'flm' => 'Film editor',
384
+ 'fmo' => 'Former owner',
385
+ 'fpy' => 'First party',
386
+ 'fnd' => 'Funder',
387
+ 'frg' => 'Forger',
388
+ 'gis' => 'Geographic information specialist ',
389
+ 'grt' => 'Graphic technician',
390
+ 'hnr' => 'Honoree',
391
+ 'hst' => 'Host',
392
+ 'ill' => 'Illustrator',
393
+ 'ilu' => 'Illuminator',
394
+ 'ins' => 'Inscriber',
395
+ 'inv' => 'Inventor',
396
+ 'itr' => 'Instrumentalist',
397
+ 'ive' => 'Interviewee',
398
+ 'ivr' => 'Interviewer',
399
+ 'lbr' => 'Laboratory ',
400
+ 'lbt' => 'Librettist',
401
+ 'ldr' => 'Laboratory director ',
402
+ 'led' => 'Lead',
403
+ 'lee' => 'Libelee-appellee',
404
+ 'lel' => 'Libelee',
405
+ 'len' => 'Lender',
406
+ 'let' => 'Libelee-appellant',
407
+ 'lgd' => 'Lighting designer',
408
+ 'lie' => 'Libelant-appellee',
409
+ 'lil' => 'Libelant',
410
+ 'lit' => 'Libelant-appellant',
411
+ 'lsa' => 'Landscape architect',
412
+ 'lse' => 'Licensee',
413
+ 'lso' => 'Licensor',
414
+ 'ltg' => 'Lithographer',
415
+ 'lyr' => 'Lyricist',
416
+ 'mcp' => 'Music copyist',
417
+ 'mfr' => 'Manufacturer',
418
+ 'mdc' => 'Metadata contact',
419
+ 'mod' => 'Moderator',
420
+ 'mon' => 'Monitor',
421
+ 'mrk' => 'Markup editor',
422
+ 'msd' => 'Musical director',
423
+ 'mte' => 'Metal-engraver',
424
+ 'mus' => 'Musician',
425
+ 'nrt' => 'Narrator',
426
+ 'opn' => 'Opponent',
427
+ 'org' => 'Originator',
428
+ 'orm' => 'Organizer of meeting',
429
+ 'oth' => 'Other',
430
+ 'own' => 'Owner',
431
+ 'pat' => 'Patron',
432
+ 'pbd' => 'Publishing director',
433
+ 'pbl' => 'Publisher',
434
+ 'pdr' => 'Project director',
435
+ 'pfr' => 'Proofreader',
436
+ 'pht' => 'Photographer',
437
+ 'plt' => 'Platemaker',
438
+ 'pma' => 'Permitting agency',
439
+ 'pmn' => 'Production manager',
440
+ 'pop' => 'Printer of plates',
441
+ 'ppm' => 'Papermaker',
442
+ 'ppt' => 'Puppeteer',
443
+ 'prc' => 'Process contact',
444
+ 'prd' => 'Production personnel',
445
+ 'prf' => 'Performer',
446
+ 'prg' => 'Programmer',
447
+ 'prm' => 'Printmaker',
448
+ 'pro' => 'Producer',
449
+ 'prt' => 'Printer',
450
+ 'pta' => 'Patent applicant',
451
+ 'pte' => 'Plaintiff -appellee',
452
+ 'ptf' => 'Plaintiff',
453
+ 'pth' => 'Patent holder',
454
+ 'ptt' => 'Plaintiff-appellant',
455
+ 'rbr' => 'Rubricator',
456
+ 'rce' => 'Recording engineer',
457
+ 'rcp' => 'Recipient',
458
+ 'red' => 'Redactor',
459
+ 'ren' => 'Renderer',
460
+ 'res' => 'Researcher',
461
+ 'rev' => 'Reviewer',
462
+ 'rps' => 'Repository',
463
+ 'rpt' => 'Reporter',
464
+ 'rpy' => 'Responsible party',
465
+ 'rse' => 'Respondent-appellee',
466
+ 'rsg' => 'Restager',
467
+ 'rsp' => 'Respondent',
468
+ 'rst' => 'Respondent-appellant',
469
+ 'rth' => 'Research team head',
470
+ 'rtm' => 'Research team member',
471
+ 'sad' => 'Scientific advisor',
472
+ 'sce' => 'Scenarist',
473
+ 'scl' => 'Sculptor',
474
+ 'scr' => 'Scribe',
475
+ 'sds' => 'Sound designer',
476
+ 'sec' => 'Secretary',
477
+ 'sgn' => 'Signer',
478
+ 'sht' => 'Supporting host',
479
+ 'sng' => 'Singer',
480
+ 'spk' => 'Speaker',
481
+ 'spn' => 'Sponsor',
482
+ 'spy' => 'Second party',
483
+ 'srv' => 'Surveyor',
484
+ 'std' => 'Set designer',
485
+ 'stl' => 'Storyteller',
486
+ 'stm' => 'Stage manager',
487
+ 'stn' => 'Standards body',
488
+ 'str' => 'Stereotyper',
489
+ 'tcd' => 'Technical director',
490
+ 'tch' => 'Teacher',
491
+ 'ths' => 'Thesis advisor',
492
+ 'trc' => 'Transcriber',
493
+ 'trl' => 'Translator',
494
+ 'tyd' => 'Type designer',
495
+ 'tyg' => 'Typographer',
496
+ 'vdg' => 'Videographer',
497
+ 'voc' => 'Vocalist',
498
+ 'wam' => 'Writer of accompanying material',
499
+ 'wdc' => 'Woodcutter',
500
+ 'wde' => 'Wood -engraver',
501
+ 'wit' => 'Witness'}
502
502
  end
503
-
503
+
504
504
  def self.valid_child_types
505
- ["data", "supporting file", "profile", "lorem ipsum", "dolor"]
505
+ ['data', 'supporting file', 'profile', 'lorem ipsum', 'dolor']
506
506
  end
507
507
 
508
- def to_solr(solr_doc=Hash.new)
508
+ def to_solr(solr_doc = {})
509
509
  super(solr_doc)
510
-
511
- ::Solrizer::Extractor.insert_solr_field_value(solr_doc, Solrizer.default_field_mapper.solr_name('object_type', :facetable), "Article")
512
- ::Solrizer::Extractor.insert_solr_field_value(solr_doc, Solrizer.default_field_mapper.solr_name('mods_journal_title_info', :facetable), "Unknown") if solr_doc["mods_journal_title_info_facet"].nil?
510
+
511
+ ::Solrizer::Extractor.insert_solr_field_value(solr_doc, Solrizer.default_field_mapper.solr_name('object_type', :facetable), 'Article')
512
+ ::Solrizer::Extractor.insert_solr_field_value(solr_doc, Solrizer.default_field_mapper.solr_name('mods_journal_title_info', :facetable), 'Unknown') if solr_doc['mods_journal_title_info_facet'].nil?
513
513
 
514
514
  solr_doc
515
515
  end