ddr-models 2.11.0 → 3.0.0.alpha.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (268) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -1
  3. data/.travis.yml +7 -6
  4. data/Gemfile +2 -3
  5. data/Rakefile +5 -5
  6. data/app/controllers/users/sessions_controller.rb +5 -0
  7. data/app/helpers/models_helper.rb +7 -0
  8. data/app/models/attachment.rb +3 -5
  9. data/app/models/collection.rb +12 -79
  10. data/app/models/component.rb +8 -67
  11. data/app/models/item.rb +8 -73
  12. data/app/models/target.rb +6 -5
  13. data/config/initializers/active_fedora_base.rb +11 -30
  14. data/config/initializers/{active_fedora_datastream.rb → active_fedora_file.rb} +1 -1
  15. data/config/initializers/devise.rb +2 -3
  16. data/config/initializers/subscriptions.rb +2 -19
  17. data/ddr-models.gemspec +10 -14
  18. data/lib/ddr/actions/fixity_check.rb +1 -1
  19. data/lib/ddr/actions/virus_check.rb +17 -10
  20. data/lib/ddr/auth.rb +6 -38
  21. data/lib/ddr/auth/ability.rb +1 -5
  22. data/lib/ddr/auth/ability_definitions/collection_ability_definitions.rb +0 -16
  23. data/lib/ddr/auth/ability_definitions/datastream_ability_definitions.rb +10 -4
  24. data/lib/ddr/auth/ability_definitions/role_based_ability_definitions.rb +16 -9
  25. data/lib/ddr/auth/ability_factory.rb +25 -2
  26. data/lib/ddr/auth/abstract_ability.rb +1 -2
  27. data/lib/ddr/auth/auth_context.rb +0 -18
  28. data/lib/ddr/auth/auth_context_factory.rb +2 -0
  29. data/lib/ddr/auth/group.rb +0 -6
  30. data/lib/ddr/auth/grouper_gateway.rb +0 -24
  31. data/lib/ddr/auth/permissions.rb +1 -12
  32. data/lib/ddr/auth/role_based_access_controls_enforcement.rb +5 -5
  33. data/lib/ddr/auth/roles.rb +1 -11
  34. data/lib/ddr/auth/roles/role_set.rb +0 -7
  35. data/lib/ddr/auth/roles/roles_datastream.rb +9 -0
  36. data/lib/ddr/contacts.rb +25 -0
  37. data/lib/ddr/datastreams.rb +10 -28
  38. data/lib/ddr/datastreams/datastream_behavior.rb +30 -100
  39. data/lib/ddr/datastreams/descriptive_metadata_datastream.rb +28 -31
  40. data/lib/ddr/datastreams/fits_datastream.rb +9 -22
  41. data/lib/ddr/datastreams/metadata_datastream.rb +17 -31
  42. data/lib/ddr/derivatives.rb +13 -16
  43. data/lib/ddr/derivatives/derivative.rb +68 -0
  44. data/lib/ddr/derivatives/{generator.rb → generators/generator.rb} +11 -7
  45. data/lib/ddr/derivatives/generators/png_generator.rb +23 -0
  46. data/lib/ddr/derivatives/generators/ptif_generator.rb +56 -0
  47. data/lib/ddr/derivatives/multires_image.rb +59 -0
  48. data/lib/ddr/derivatives/thumbnail.rb +36 -0
  49. data/lib/ddr/events.rb +0 -1
  50. data/lib/ddr/events/deletion_event.rb +9 -5
  51. data/lib/ddr/events/event.rb +8 -13
  52. data/lib/ddr/events/fixity_check_event.rb +0 -6
  53. data/lib/ddr/events/ingestion_event.rb +9 -5
  54. data/lib/ddr/events/update_event.rb +4 -17
  55. data/lib/ddr/index.rb +4 -4
  56. data/lib/ddr/index/abstract_query_result.rb +4 -3
  57. data/lib/ddr/index/connection.rb +9 -28
  58. data/lib/ddr/index/csv_query_result.rb +32 -47
  59. data/lib/ddr/index/field.rb +1 -11
  60. data/lib/ddr/index/fields.rb +16 -99
  61. data/lib/ddr/index/filter.rb +30 -103
  62. data/lib/ddr/index/filters.rb +19 -0
  63. data/lib/ddr/index/query.rb +11 -58
  64. data/lib/ddr/index/query_builder.rb +36 -147
  65. data/lib/ddr/index/query_clause.rb +19 -79
  66. data/lib/ddr/index/query_result.rb +4 -36
  67. data/lib/ddr/index/query_value.rb +18 -0
  68. data/lib/ddr/index/response.rb +2 -19
  69. data/lib/ddr/jobs.rb +12 -0
  70. data/lib/ddr/jobs/fits_file_characterization.rb +51 -0
  71. data/lib/ddr/jobs/permanent_id.rb +23 -0
  72. data/lib/ddr/managers.rb +1 -0
  73. data/lib/ddr/managers/derivatives_manager.rb +53 -93
  74. data/lib/ddr/managers/permanent_id_manager.rb +91 -0
  75. data/lib/ddr/managers/technical_metadata_manager.rb +10 -24
  76. data/lib/ddr/managers/workflow_manager.rb +10 -29
  77. data/lib/ddr/models.rb +50 -101
  78. data/lib/ddr/models/access_controllable.rb +12 -0
  79. data/lib/ddr/models/admin_set.rb +5 -16
  80. data/lib/ddr/models/base.rb +45 -165
  81. data/lib/ddr/models/describable.rb +19 -21
  82. data/lib/ddr/models/engine.rb +11 -39
  83. data/lib/ddr/models/error.rb +0 -3
  84. data/lib/ddr/models/file_management.rb +36 -72
  85. data/lib/ddr/models/finding_aid.rb +2 -35
  86. data/lib/ddr/models/fixity_checkable.rb +4 -0
  87. data/lib/ddr/models/governable.rb +3 -1
  88. data/lib/ddr/models/has_admin_metadata.rb +82 -56
  89. data/lib/ddr/models/has_attachments.rb +3 -1
  90. data/lib/ddr/models/has_children.rb +3 -7
  91. data/lib/ddr/models/has_content.rb +35 -32
  92. data/lib/ddr/models/has_multires_image.rb +7 -12
  93. data/lib/ddr/models/has_struct_metadata.rb +44 -6
  94. data/lib/ddr/models/has_thumbnail.rb +1 -4
  95. data/lib/ddr/models/indexing.rb +97 -186
  96. data/lib/ddr/models/licenses/admin_policy_license.rb +11 -0
  97. data/lib/ddr/models/licenses/effective_license.rb +9 -0
  98. data/lib/ddr/models/licenses/inherited_license.rb +9 -0
  99. data/lib/ddr/models/licenses/license.rb +21 -0
  100. data/lib/ddr/models/licenses/parent_license.rb +11 -0
  101. data/lib/ddr/models/metadata/descriptive_metadata.rb +50 -0
  102. data/lib/ddr/models/metadata/metadata.rb +37 -0
  103. data/lib/ddr/models/metadata/metadata_mapper.rb +32 -0
  104. data/lib/ddr/models/metadata/metadata_mappers.rb +18 -0
  105. data/lib/ddr/models/metadata/metadata_term.rb +24 -0
  106. data/lib/ddr/models/metadata/metadata_vocabularies.rb +18 -0
  107. data/lib/ddr/models/metadata/metadata_vocabulary.rb +34 -0
  108. data/lib/ddr/models/solr_document.rb +24 -156
  109. data/lib/ddr/models/struct_div.rb +63 -0
  110. data/lib/ddr/models/structure.rb +39 -175
  111. data/lib/ddr/models/version.rb +1 -1
  112. data/lib/ddr/models/year_facet.rb +118 -60
  113. data/lib/ddr/notifications.rb +12 -10
  114. data/lib/ddr/utils.rb +15 -28
  115. data/lib/ddr/vocab.rb +17 -15
  116. data/lib/ddr/vocab/asset.rb +17 -42
  117. data/lib/ddr/vocab/contact.rb +7 -5
  118. data/lib/ddr/vocab/display.rb +8 -6
  119. data/lib/ddr/vocab/duke_terms.rb +10 -8
  120. data/lib/ddr/vocab/rdf_vocabulary_parser.rb +39 -37
  121. data/lib/ddr/vocab/roles.rb +19 -17
  122. data/lib/ddr/vocab/sources/duketerms.rdf +8 -22
  123. data/lib/ddr/vocab/vocabulary.rb +26 -26
  124. data/spec/auth/ability_factory_spec.rb +1 -18
  125. data/spec/auth/ability_spec.rb +15 -119
  126. data/spec/auth/effective_permissions_spec.rb +1 -1
  127. data/spec/auth/effective_roles_spec.rb +1 -1
  128. data/spec/auth/ldap_gateway_spec.rb +9 -0
  129. data/spec/contacts/contacts_spec.rb +26 -0
  130. data/spec/controllers/including_role_based_access_controls_enforcement_spec.rb +5 -5
  131. data/spec/derivatives/multires_image_spec.rb +48 -0
  132. data/spec/derivatives/png_generator_spec.rb +8 -13
  133. data/spec/derivatives/ptif_generator_spec.rb +11 -9
  134. data/spec/derivatives/thumbnail_spec.rb +48 -0
  135. data/spec/dummy/config/environments/test.rb +1 -1
  136. data/spec/dummy/db/schema.rb +23 -25
  137. data/spec/factories/attachment_factories.rb +2 -2
  138. data/spec/factories/collection_factories.rb +2 -3
  139. data/spec/factories/component_factories.rb +2 -2
  140. data/spec/factories/item_factories.rb +2 -2
  141. data/spec/factories/structure_factories.rb +2 -8
  142. data/spec/factories/test_model_factories.rb +12 -4
  143. data/spec/fixtures/fits/document.xml +44 -42
  144. data/spec/fixtures/fits/image.xml +41 -42
  145. data/spec/helpers/models_helper_spec.rb +11 -0
  146. data/spec/index/filter_spec.rb +30 -208
  147. data/spec/index/filters_spec.rb +17 -0
  148. data/spec/index/query_spec.rb +10 -82
  149. data/spec/jobs/fits_file_characterization_spec.rb +52 -0
  150. data/spec/managers/derivatives_manager_spec.rb +105 -107
  151. data/spec/managers/technical_metadata_manager_spec.rb +27 -34
  152. data/spec/models/active_fedora_base_spec.rb +105 -5
  153. data/spec/models/active_fedora_datastream_spec.rb +39 -106
  154. data/spec/models/admin_set_spec.rb +10 -43
  155. data/spec/models/attachment_spec.rb +2 -3
  156. data/spec/models/collection_spec.rb +11 -225
  157. data/spec/models/component_spec.rb +4 -106
  158. data/spec/models/descriptive_metadata_spec.rb +38 -0
  159. data/spec/models/effective_license_spec.rb +64 -0
  160. data/spec/models/events_spec.rb +59 -52
  161. data/spec/models/file_management_spec.rb +13 -113
  162. data/spec/models/finding_aid_spec.rb +8 -31
  163. data/spec/models/has_admin_metadata_spec.rb +122 -131
  164. data/spec/models/has_children_spec.rb +3 -3
  165. data/spec/models/has_struct_metadata_spec.rb +37 -50
  166. data/spec/models/indexing_spec.rb +23 -160
  167. data/spec/models/item_spec.rb +2 -133
  168. data/spec/models/license_spec.rb +24 -0
  169. data/spec/models/solr_document_spec.rb +47 -236
  170. data/spec/models/struct_div_spec.rb +70 -0
  171. data/spec/models/structure_spec.rb +11 -89
  172. data/spec/models/target_spec.rb +2 -4
  173. data/spec/models/year_facet_spec.rb +23 -50
  174. data/spec/spec_helper.rb +13 -17
  175. data/spec/support/ezid_mock_identifier.rb +2 -2
  176. data/spec/support/shared_examples_for_auth_contexts.rb +0 -33
  177. data/spec/support/shared_examples_for_ddr_models.rb +94 -142
  178. data/spec/support/shared_examples_for_describables.rb +36 -31
  179. data/spec/support/shared_examples_for_governables.rb +2 -3
  180. data/spec/support/shared_examples_for_has_content.rb +46 -101
  181. data/spec/support/shared_examples_for_indexing.rb +6 -6
  182. data/spec/support/shared_examples_for_non_collection_models.rb +1 -32
  183. data/spec/support/structural_metadata_helper.rb +59 -230
  184. data/spec/utils_spec.rb +2 -0
  185. metadata +96 -229
  186. data/.ruby-version +0 -1
  187. data/config/initializers/rsolr_monkey_patches.rb +0 -7
  188. data/config/initializers/rubydora_monkey_patch.rb +0 -11
  189. data/config/locales/ddr-models.en.yml +0 -81
  190. data/db/migrate/20161021201011_add_permanent_id_to_events.rb +0 -8
  191. data/lib/ddr/auth/ability_definitions/admin_set_ability_definitions.rb +0 -9
  192. data/lib/ddr/auth/ability_definitions/lock_ability_definitions.rb +0 -13
  193. data/lib/ddr/auth/ability_definitions/publication_ability_definitions.rb +0 -16
  194. data/lib/ddr/datastreams/administrative_metadata_datastream.rb +0 -75
  195. data/lib/ddr/datastreams/caption_datastream.rb +0 -5
  196. data/lib/ddr/datastreams/content_datastream.rb +0 -17
  197. data/lib/ddr/datastreams/delete_external_files.rb +0 -29
  198. data/lib/ddr/datastreams/external_file_datastream.rb +0 -80
  199. data/lib/ddr/datastreams/intermediate_file_datastream.rb +0 -5
  200. data/lib/ddr/datastreams/multires_image_datastream.rb +0 -5
  201. data/lib/ddr/datastreams/streamable_media_datastream.rb +0 -5
  202. data/lib/ddr/derivatives/png_generator.rb +0 -17
  203. data/lib/ddr/derivatives/ptif_generator.rb +0 -55
  204. data/lib/ddr/derivatives/update_derivatives.rb +0 -25
  205. data/lib/ddr/events/deaccession_event.rb +0 -8
  206. data/lib/ddr/index/field_attribute.rb +0 -22
  207. data/lib/ddr/index/query_params.rb +0 -40
  208. data/lib/ddr/index/sort_order.rb +0 -28
  209. data/lib/ddr/models/cache.rb +0 -20
  210. data/lib/ddr/models/captionable.rb +0 -37
  211. data/lib/ddr/models/contact.rb +0 -23
  212. data/lib/ddr/models/file_characterization.rb +0 -37
  213. data/lib/ddr/models/has_intermediate_file.rb +0 -41
  214. data/lib/ddr/models/language.rb +0 -31
  215. data/lib/ddr/models/media_type.rb +0 -22
  216. data/lib/ddr/models/permanent_id.rb +0 -240
  217. data/lib/ddr/models/rights_statement.rb +0 -25
  218. data/lib/ddr/models/streamable.rb +0 -37
  219. data/lib/ddr/models/structures/agent.rb +0 -49
  220. data/lib/ddr/models/structures/component_type_term.rb +0 -29
  221. data/lib/ddr/models/structures/div.rb +0 -64
  222. data/lib/ddr/models/structures/f_locat.rb +0 -54
  223. data/lib/ddr/models/structures/file.rb +0 -52
  224. data/lib/ddr/models/structures/file_grp.rb +0 -35
  225. data/lib/ddr/models/structures/file_sec.rb +0 -22
  226. data/lib/ddr/models/structures/fptr.rb +0 -31
  227. data/lib/ddr/models/structures/mets_hdr.rb +0 -37
  228. data/lib/ddr/models/structures/mptr.rb +0 -49
  229. data/lib/ddr/models/structures/struct_map.rb +0 -40
  230. data/lib/ddr/models/with_content_file.rb +0 -37
  231. data/spec/datastreams/external_file_datastream_spec.rb +0 -48
  232. data/spec/dummy/config/structure_component_type.yml +0 -18
  233. data/spec/fixtures/abcd1234.vtt +0 -38
  234. data/spec/fixtures/arrow1rightred_e0.gif +0 -0
  235. data/spec/fixtures/extractedText1.txt +0 -1
  236. data/spec/fixtures/extractedText2.txt +0 -1
  237. data/spec/fixtures/extractedText3.txt +0 -3
  238. data/spec/fixtures/imageA.jpg +0 -0
  239. data/spec/fixtures/imageB.jpg +0 -0
  240. data/spec/index/csv_query_result_spec.rb +0 -44
  241. data/spec/index/fields_spec.rb +0 -380
  242. data/spec/index/query_builder_spec.rb +0 -140
  243. data/spec/index/query_clause_spec.rb +0 -68
  244. data/spec/models/cache_spec.rb +0 -32
  245. data/spec/models/contact_spec.rb +0 -56
  246. data/spec/models/descriptive_metadata_datastream_spec.rb +0 -139
  247. data/spec/models/file_characterization_spec.rb +0 -39
  248. data/spec/models/language_spec.rb +0 -59
  249. data/spec/models/media_type_spec.rb +0 -46
  250. data/spec/models/permanent_id_spec.rb +0 -432
  251. data/spec/models/rights_statement_spec.rb +0 -55
  252. data/spec/models/structures/agent_spec.rb +0 -30
  253. data/spec/models/structures/component_type_term_spec.rb +0 -14
  254. data/spec/models/structures/div_spec.rb +0 -26
  255. data/spec/models/structures/f_locat_spec.rb +0 -78
  256. data/spec/models/structures/file_grp_spec.rb +0 -23
  257. data/spec/models/structures/file_sec_spec.rb +0 -22
  258. data/spec/models/structures/file_spec.rb +0 -60
  259. data/spec/models/structures/fptr_spec.rb +0 -23
  260. data/spec/models/structures/mets_hdr_spec.rb +0 -26
  261. data/spec/models/structures/mptr_spec.rb +0 -25
  262. data/spec/models/structures/struct_map_spec.rb +0 -24
  263. data/spec/models/with_content_file_spec.rb +0 -37
  264. data/spec/support/shared_examples_for_associations.rb +0 -8
  265. data/spec/support/shared_examples_for_captionable.rb +0 -23
  266. data/spec/support/shared_examples_for_has_intermediate_file.rb +0 -28
  267. data/spec/support/shared_examples_for_publication.rb +0 -43
  268. data/spec/support/shared_examples_for_streamable_media.rb +0 -23
@@ -1,49 +0,0 @@
1
- module Ddr::Models::Structures
2
- #
3
- # Wraps a Nokogiri (XML) 'mptr' node
4
- #
5
- class Mptr < SimpleDelegator
6
-
7
- def id
8
- self['ID']
9
- end
10
-
11
- def loctype
12
- self['LOCTYPE']
13
- end
14
-
15
- def otherloctype
16
- self['OTHERLOCTYPE']
17
- end
18
-
19
- def href
20
- self['xlink:href']
21
- end
22
-
23
- def ark?
24
- loctype == 'ARK'
25
- end
26
-
27
- def ark
28
- href if ark?
29
- end
30
-
31
- def repo_id
32
- SolrDocument.find_by_permanent_id(ark).id if ark?
33
- end
34
-
35
- def dereferenced_hash
36
- { id: id, repo_id: repo_id }.compact
37
- end
38
-
39
- def self.build(args)
40
- node = Nokogiri::XML::Node.new('mptr', args[:document])
41
- node['ID'] = args[:id] if args[:id]
42
- node['LOCTYPE'] = args[:loctype] if args[:loctype]
43
- node['OTHERLOCTYPE'] = args[:otherloctype] if args[:otherloctype]
44
- node['xlink:href'] = args[:href] if args[:href]
45
- node
46
- end
47
-
48
- end
49
- end
@@ -1,40 +0,0 @@
1
- module Ddr::Models::Structures
2
- #
3
- # Wraps a Nokogiri (XML) 'structMap' node
4
- #
5
- class StructMap < SimpleDelegator
6
-
7
- def id
8
- self['ID']
9
- end
10
-
11
- def label
12
- self['LABEL']
13
- end
14
-
15
- def type
16
- self['TYPE']
17
- end
18
-
19
- def divs
20
- xpath('xmlns:div').map { |node| Div.new(node) }
21
- end
22
-
23
- def dereferenced_hash
24
- contents = []
25
- contents.concat(divs.map { |div| div.dereferenced_hash }) unless divs.empty?
26
- dh = { id: id, label: label, type: type }.compact
27
- dh[:contents] = contents unless contents.empty?
28
- dh
29
- end
30
-
31
- def self.build(args)
32
- node = Nokogiri::XML::Node.new('structMap', args[:document])
33
- node['ID'] = args[:id] if args[:id]
34
- node['LABEL'] = args[:label] if args[:label]
35
- node['TYPE'] = args[:type] if args[:type]
36
- node
37
- end
38
-
39
- end
40
- end
@@ -1,37 +0,0 @@
1
- require "tempfile"
2
- require "delegate"
3
-
4
- module Ddr::Models
5
- class WithContentFile < SimpleDelegator
6
-
7
- def initialize(obj, &block)
8
- super(obj)
9
- with_temp_file &block
10
- end
11
-
12
- # Yields path of tempfile containing content to block
13
- # @yield [String] the path to the tempfile containing content
14
- def with_temp_file
15
- filename = original_filename || content.default_file_name
16
- basename = [ File.basename(filename, ".*"), File.extname(filename) ]
17
- infile = Tempfile.open(basename, Ddr::Models.tempdir, encoding: 'ascii-8bit')
18
- begin
19
- infile.write(content.content)
20
- infile.close
21
- verify_checksum!(infile)
22
- yield infile.path
23
- ensure
24
- infile.close unless infile.closed?
25
- File.unlink(infile)
26
- end
27
- end
28
-
29
- def verify_checksum!(file)
30
- digest = Ddr::Utils.digest(File.read(file), content.checksumType)
31
- if digest != content.checksum
32
- raise ChecksumInvalid, "The checksum of the downloaded file does not match the stored checksum of the content."
33
- end
34
- end
35
-
36
- end
37
- end
@@ -1,48 +0,0 @@
1
- module Ddr::Datastreams
2
- RSpec.describe ExternalFileDatastream do
3
-
4
- let(:obj) { Component.new }
5
- let(:file1) { fixture_file_upload("sample.pdf", "application/pdf") }
6
- let(:file2) { fixture_file_upload("sample.docx") }
7
-
8
- subject { obj.content }
9
-
10
- its(:file_size) { is_expected.to be_nil }
11
- its(:file_path) { is_expected.to be_nil }
12
- its(:file_paths) { is_expected.to be_empty }
13
-
14
- specify {
15
- expect(File).not_to receive(:read).with(file1.path)
16
- subject.add_file(file1.path, mime_type: file1.content_type)
17
- obj.save!
18
- path1 = subject.file_path
19
- expect(::File.exist?(path1)).to be true
20
- expect(subject.file_size).to eq 83777
21
- expect(subject.mimeType).to eq "application/pdf"
22
- subject.add_file(file2.path)
23
- obj.save!
24
- path2 = subject.file_path
25
- expect(::File.exist?(path2)).to be true
26
- expect(subject.file_size).to eq 12552
27
- expect(subject.mimeType).to eq "application/octet-stream"
28
- expect(subject.file_paths).to contain_exactly(path1, path2)
29
- subject.delete
30
- expect(::File.exist?(path1)).to be false
31
- expect(::File.exist?(path2)).to be false
32
- expect(subject.file_size).to be_nil
33
- expect(subject.dsLocation).to be_nil
34
- expect(subject.file_path).to be_nil
35
- }
36
-
37
- describe "checksum validation" do
38
- before do
39
- subject.add_file(file1.path, mime_type: file1.content_type)
40
- obj.save!
41
- end
42
- it "should not call Rubydora to retrieve datastream content" do
43
- expect(subject).to_not receive(:content)
44
- subject.validate_checksum!('a6ae0d815c1a2aef551b45fe34a35ceea1828a4d', Ddr::Datastreams::CHECKSUM_TYPE_SHA1)
45
- end
46
- end
47
- end
48
- end
@@ -1,18 +0,0 @@
1
- # NOTE: This configuration and the associated application functionality does not
2
- # account for precedence among the media types and associated type designations.
3
- # In practical terms, this means that the media type for any given Component is
4
- # to match no more than one of the indicated media type values. If the media type
5
- # for a Component matches more than one media type value, the type designation
6
- # that is used is arbitrary.
7
- Documents:
8
- - application/pdf
9
- - application/msword
10
- - application/vnd.openxmlformats-officedocument.wordprocessingml*
11
- - application/vnd.ms-word*
12
- - application/rtf
13
- - text/*
14
- Images:
15
- - image/*
16
- Media:
17
- - audio/*
18
- - video/*
@@ -1,38 +0,0 @@
1
- WEBVTT
2
-
3
- 00:01.835 --> 00:02.736
4
- Lorem ipsum dolor sit amet.
5
-
6
- 00:02.736 --> 00:03.837
7
- Vestibulum pretium ligula quis nunc commodo dictum.
8
-
9
- 00:03.837 --> 00:04.637
10
- Donec sit amet eros rutrum, elementum neque vitae, volutpat sapien.
11
-
12
- 00:04.637 --> 00:05.939
13
- Vivamus sed turpis ut nisi cursus volutpat in non arcu.
14
-
15
- 00:05.939 --> 00:07.574
16
- Praesent dignissim lectus sed dignissim ultricies.
17
-
18
- 00:07.574 --> 00:08.942
19
- >> ♪ Quisque eget neque maximus, lobortis sem quis, dapibus ipsum.
20
-
21
- 00:08.942 --> 00:09.542
22
- Pellentesque eu risus id tellus placerat maximus.
23
-
24
- 00:09.542 --> 00:11.778
25
- ♪ Proin dapibus purus et magna euismod, non vestibulum ligula pellentesque.
26
-
27
- 00:11.778 --> 00:13.980
28
- Vivamus porttitor nibh eget nunc semper, ac tristique arcu scelerisque.
29
-
30
- 00:13.980 --> 00:15.882
31
- ♪ Maecenas gravida justo sit amet urna scelerisque, eget porttitor mauris interdum.
32
-
33
- 00:15.882 --> 00:18.752
34
- Pellentesque consectetur lacus eget bibendum rutrum.
35
-
36
- 00:18.752 --> 00:20.387
37
- ♪ Quisque semper magna ultrices libero iaculis fermentum.
38
-
@@ -1 +0,0 @@
1
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis scelerisque diam in lacus sollicitudin maximus. Duis molestie rutrum hendrerit. Vestibulum lobortis augue a ultrices mollis. Mauris semper eu odio posuere scelerisque. Donec vel condimentum nunc. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Morbi fermentum, sem vel interdum suscipit, lacus risus ultricies sem, in lacinia ligula risus ut est. Integer gravida, orci ac lobortis blandit, eros tortor bibendum turpis, quis semper velit erat in augue.
@@ -1 +0,0 @@
1
- Proin convallis nibh quis ex iaculis, eget porttitor elit consequat. Duis in tincidunt ipsum. Aenean imperdiet lacinia libero nec egestas. Fusce a metus volutpat, vehicula augue accumsan, mattis lorem. Donec ex tellus, tempus vitae orci sit amet, sollicitudin pharetra velit. Fusce egestas nunc vitae placerat elementum. Nullam pharetra porta eros, quis tempor sem pulvinar a. Ut in neque cursus, hendrerit neque in, congue est. Phasellus neque mauris, eleifend in sem ac, posuere tincidunt odio. Duis lectus nibh, ultricies a elementum a, consectetur vitae turpis.
@@ -1,3 +0,0 @@
1
- Ut eu consequat turpis. Proin commodo facilisis pretium. Vestibulum tristique volutpat lobortis. Donec efficitur tincidunt porta. Sed dui massa, rutrum iaculis interdum at, scelerisque nec velit. Suspendisse potenti. Aliquam quis mauris sed magna convallis ullamcorper non ut ipsum.
2
-
3
- Donec dolor urna, malesuada id condimentum ut, feugiat consectetur lectus. Morbi dignissim nibh neque, a bibendum ex semper vel. Nunc pellentesque varius bibendum. Etiam posuere lorem nibh, sit amet iaculis dolor lobortis nec. Nam congue dui non lectus luctus scelerisque. Aliquam turpis orci, porta non dapibus eu, accumsan sed tortor. Phasellus placerat ac mauris sed vehicula. Sed dolor massa, fringilla vitae urna vel, efficitur porta eros. Ut massa nisi, bibendum id mollis quis, aliquet eu purus. Aliquam erat volutpat. Phasellus accumsan felis eget dui vulputate, eget feugiat diam eleifend. Donec facilisis massa odio, ac auctor eros ullamcorper quis. Donec sit amet malesuada lectus. Aenean egestas, leo id lacinia mattis, dui ex tempor tellus, vel mollis velit leo a ante.
Binary file
Binary file
@@ -1,44 +0,0 @@
1
- module Ddr::Index
2
- RSpec.describe CSVQueryResult do
3
-
4
- subject { described_class.new(query) }
5
-
6
- before do
7
- Item.create(title: ["Testing 1"],
8
- identifier: ["test1"],
9
- description: ["The process of\r\neliminating errors\nmust include checking newlines."])
10
- Item.create(title: ["Testing 2"],
11
- identifier: ["test2"])
12
- Item.create(title: ["Testing 3"])
13
- end
14
-
15
- let(:query) {
16
- Ddr::Index::Query.new do
17
- fields Ddr::Index::Fields::ID
18
- fields Ddr::Index::Fields.descmd
19
- end
20
- }
21
-
22
- specify {
23
- expect(subject["title"]).to contain_exactly("Testing 1", "Testing 2", "Testing 3")
24
- expect(subject["identifier"]).to contain_exactly("test1", "test2", nil)
25
- expect(subject["description"]).to contain_exactly("The process of\r\neliminating errors\nmust include checking newlines.", nil, nil)
26
- expect(subject["creator"]).to contain_exactly(nil, nil, nil)
27
- expect(subject.headers).to include("creator")
28
- expect(subject.to_s).to match(/creator/)
29
- }
30
-
31
- describe "#delete_empty_columns!" do
32
- specify {
33
- subject.delete_empty_columns!
34
- expect(subject["title"]).to contain_exactly("Testing 1", "Testing 2", "Testing 3")
35
- expect(subject["identifier"]).to contain_exactly("test1", "test2", nil)
36
- expect(subject["description"]).to contain_exactly("The process of\r\neliminating errors\nmust include checking newlines.", nil, nil)
37
- expect(subject["creator"]).to contain_exactly(nil, nil, nil)
38
- expect(subject.headers).to contain_exactly("pid", "title", "identifier", "description")
39
- expect(subject.to_s).not_to match(/creator/)
40
- }
41
- end
42
-
43
- end
44
- end
@@ -1,380 +0,0 @@
1
- module Ddr::Index
2
- RSpec.describe Fields do
3
-
4
- describe "module methods" do
5
- specify {
6
- expect(Fields.techmd).to contain_exactly(
7
- Fields::TECHMD_COLOR_SPACE,
8
- Fields::TECHMD_CREATING_APPLICATION,
9
- Fields::TECHMD_CREATION_TIME,
10
- Fields::TECHMD_FILE_SIZE,
11
- Fields::TECHMD_FITS_VERSION,
12
- Fields::TECHMD_FITS_DATETIME,
13
- Fields::TECHMD_FORMAT_LABEL,
14
- Fields::TECHMD_FORMAT_VERSION,
15
- Fields::TECHMD_ICC_PROFILE_NAME,
16
- Fields::TECHMD_ICC_PROFILE_VERSION,
17
- Fields::TECHMD_IMAGE_HEIGHT,
18
- Fields::TECHMD_IMAGE_WIDTH,
19
- Fields::TECHMD_MD5,
20
- Fields::TECHMD_MEDIA_TYPE,
21
- Fields::TECHMD_MODIFICATION_TIME,
22
- Fields::TECHMD_PRONOM_IDENTIFIER,
23
- Fields::TECHMD_VALID,
24
- Fields::TECHMD_WELL_FORMED
25
- )
26
- }
27
- end
28
-
29
- describe "constants" do
30
- describe "ID" do
31
- subject { Fields::ID }
32
- its(:label) { is_expected.to eq "Fedora PID" }
33
- its(:heading) { is_expected.to eq "pid" }
34
- end
35
-
36
- describe "ACCESS_ROLE" do
37
- subject { Fields::ACCESS_ROLE }
38
- its(:label) { is_expected.to eq "Access Role" }
39
- its(:heading) { is_expected.to eq "access_role" }
40
- end
41
-
42
- describe "ACTIVE_FEDORA_MODEL" do
43
- subject { Fields::ACTIVE_FEDORA_MODEL }
44
- its(:label) { is_expected.to eq "Model" }
45
- its(:heading) { is_expected.to eq "model" }
46
- end
47
-
48
- describe "ADMIN_SET" do
49
- subject { Fields::ADMIN_SET }
50
- its(:label) { is_expected.to eq "Admin Set" }
51
- its(:heading) { is_expected.to eq "admin_set" }
52
- end
53
-
54
- describe "ARRANGER_FACET" do
55
- subject { Fields::ARRANGER_FACET }
56
- its(:label) { is_expected.to eq "Arranger Facet" }
57
- its(:heading) { is_expected.to eq "arranger_facet" }
58
- end
59
-
60
- describe "ASPACE_ID" do
61
- subject { Fields::ASPACE_ID }
62
- its(:label) { is_expected.to eq "ArchivesSpace ID" }
63
- its(:heading) { is_expected.to eq "aspace_id" }
64
- end
65
-
66
- describe "BIBLICAL_BOOK_FACET" do
67
- subject { Fields::BIBLICAL_BOOK_FACET }
68
- its(:label) { is_expected.to eq "Biblical Book Facet" }
69
- its(:heading) { is_expected.to eq "biblical_book_facet" }
70
- end
71
-
72
- describe "CATEGORY_FACET" do
73
- subject { Fields::CATEGORY_FACET }
74
- its(:label) { is_expected.to eq "Category Facet" }
75
- its(:heading) { is_expected.to eq "category_facet" }
76
- end
77
-
78
- describe "CHAPTER_AND_VERSE_FACET" do
79
- subject { Fields::CHAPTER_AND_VERSE_FACET }
80
- its(:label) { is_expected.to eq "Chapter And Verse Facet" }
81
- its(:heading) { is_expected.to eq "chapter_and_verse_facet" }
82
- end
83
-
84
- describe "COMPANY_FACET" do
85
- subject { Fields::COMPANY_FACET }
86
- its(:label) { is_expected.to eq "Company Facet" }
87
- its(:heading) { is_expected.to eq "company_facet" }
88
- end
89
-
90
- describe "COMPOSER_FACET" do
91
- subject { Fields::COMPOSER_FACET }
92
- its(:label) { is_expected.to eq "Composer Facet" }
93
- its(:heading) { is_expected.to eq "composer_facet" }
94
- end
95
-
96
- describe "DOI" do
97
- subject { Fields::DOI }
98
- its(:label) { is_expected.to eq "DOI" }
99
- its(:heading) { is_expected.to eq "doi" }
100
- end
101
-
102
- describe "EAD_ID" do
103
- subject { Fields::EAD_ID }
104
- its(:label) { is_expected.to eq "EAD ID" }
105
- its(:heading) { is_expected.to eq "ead_id" }
106
- end
107
-
108
- describe "ENGRAVER FACET" do
109
- subject { Fields::ENGRAVER_FACET }
110
- its(:label) { is_expected.to eq "Engraver Facet" }
111
- its(:heading) { is_expected.to eq "engraver_facet" }
112
- end
113
-
114
- describe "FOLDER_FACET" do
115
- subject { Fields::FOLDER_FACET }
116
- its(:label) { is_expected.to eq "Folder Facet" }
117
- its(:heading) { is_expected.to eq "folder_facet" }
118
- end
119
-
120
- describe "GENRE_FACET" do
121
- subject { Fields::GENRE_FACET }
122
- its(:label) { is_expected.to eq "Genre Facet" }
123
- its(:heading) { is_expected.to eq "genre_facet" }
124
- end
125
-
126
- describe "LOCAL_ID" do
127
- subject { Fields::LOCAL_ID }
128
- its(:label) { is_expected.to eq "Local ID" }
129
- its(:heading) { is_expected.to eq "local_id" }
130
- end
131
-
132
- describe "ILLUSTRATED_FACET" do
133
- subject { Fields::ILLUSTRATED_FACET }
134
- its(:label) { is_expected.to eq "Illustrated Facet" }
135
- its(:heading) { is_expected.to eq "illustrated_facet" }
136
- end
137
-
138
- describe "ILLUSTRATOR_FACET" do
139
- subject { Fields::ILLUSTRATOR_FACET }
140
- its(:label) { is_expected.to eq "Illustrator Facet" }
141
- its(:heading) { is_expected.to eq "illustrator_facet" }
142
- end
143
-
144
- describe "INSTRUMENTATION_FACET" do
145
- subject { Fields::INSTRUMENTATION_FACET }
146
- its(:label) { is_expected.to eq "Instrumentation Facet" }
147
- its(:heading) { is_expected.to eq "instrumentation_facet" }
148
- end
149
-
150
- describe "INTERVIEWER_NAME_FACET" do
151
- subject { Fields::INTERVIEWER_NAME_FACET }
152
- its(:label) { is_expected.to eq "Interviewer Name Facet" }
153
- its(:heading) { is_expected.to eq "interviewer_name_facet" }
154
- end
155
-
156
- describe "LANGUAGE_FACET" do
157
- subject { Fields::LANGUAGE_FACET }
158
- its(:label) { is_expected.to eq "Language Facet" }
159
- its(:heading) { is_expected.to eq "language_facet" }
160
- end
161
-
162
- describe "LANGUAGE_NAME" do
163
- subject { Fields::LANGUAGE_NAME }
164
- its(:label) { is_expected.to eq "Language Name" }
165
- its(:heading) { is_expected.to eq "language_name" }
166
- end
167
-
168
- describe "LITHOGRAPHER_FACET" do
169
- subject { Fields::LITHOGRAPHER_FACET }
170
- its(:label) { is_expected.to eq "Lithographer Facet" }
171
- its(:heading) { is_expected.to eq "lithographer_facet" }
172
- end
173
-
174
- describe "LYRICIST_FACET" do
175
- subject { Fields::LYRICIST_FACET }
176
- its(:label) { is_expected.to eq "Lyricist Facet" }
177
- its(:heading) { is_expected.to eq "lyricist_facet" }
178
- end
179
-
180
- describe "MEDIUM_FACET" do
181
- subject { Fields::MEDIUM_FACET }
182
- its(:label) { is_expected.to eq "Medium Facet" }
183
- its(:heading) { is_expected.to eq "medium_facet" }
184
- end
185
-
186
- describe "OBJECT_CREATE_DATE" do
187
- subject { Fields::OBJECT_CREATE_DATE }
188
- its(:label) { is_expected.to eq "Creation Date" }
189
- its(:heading) { is_expected.to eq "creation_date" }
190
- end
191
-
192
- describe "OBJECT_MODIFIED_DATE" do
193
- subject { Fields::OBJECT_MODIFIED_DATE }
194
- its(:label) { is_expected.to eq "Modification Date" }
195
- its(:heading) { is_expected.to eq "modification_date" }
196
- end
197
-
198
- describe "PERFORMER_FACET" do
199
- subject { Fields::PERFORMER_FACET }
200
- its(:label) { is_expected.to eq "Performer Facet" }
201
- its(:heading) { is_expected.to eq "performer_facet" }
202
- end
203
-
204
- describe "PERMANENT_ID" do
205
- subject { Fields::PERMANENT_ID }
206
- its(:label) { is_expected.to eq "Permanent ID" }
207
- its(:heading) { is_expected.to eq "permanent_id" }
208
- end
209
-
210
- describe "PERMANENT_URL" do
211
- subject { Fields::PERMANENT_URL }
212
- its(:label) { is_expected.to eq "Permanent URL" }
213
- its(:heading) { is_expected.to eq "permanent_url" }
214
- end
215
-
216
- describe "PLACEMENT_COMPANY_FACET" do
217
- subject { Fields::PLACEMENT_COMPANY_FACET }
218
- its(:label) { is_expected.to eq "Placement Company Facet" }
219
- its(:heading) { is_expected.to eq "placement_company_facet" }
220
- end
221
-
222
- describe "PRODUCER_FACET" do
223
- subject { Fields::PRODUCER_FACET }
224
- its(:label) { is_expected.to eq "Producer Facet" }
225
- its(:heading) { is_expected.to eq "producer_facet" }
226
- end
227
-
228
- describe "PRODUCT_FACET" do
229
- subject { Fields::PRODUCT_FACET }
230
- its(:label) { is_expected.to eq "Product Facet" }
231
- its(:heading) { is_expected.to eq "product_facet" }
232
- end
233
-
234
- describe "PUBLICATION_FACET" do
235
- subject { Fields::PUBLICATION_FACET }
236
- its(:label) { is_expected.to eq "Publication Facet" }
237
- its(:heading) { is_expected.to eq "publication_facet" }
238
- end
239
-
240
- describe "ROLL_NUMBER_FACET" do
241
- subject { Fields::ROLL_NUMBER_FACET }
242
- its(:label) { is_expected.to eq "Roll Number Facet" }
243
- its(:heading) { is_expected.to eq "roll_number_facet" }
244
- end
245
-
246
- describe "SETTING_FACET" do
247
- subject { Fields::SETTING_FACET }
248
- its(:label) { is_expected.to eq "Setting Facet" }
249
- its(:heading) { is_expected.to eq "setting_facet" }
250
- end
251
-
252
- describe "STREAMABLE_MEDIA_TYPE" do
253
- subject { Fields::STREAMABLE_MEDIA_TYPE }
254
- its(:label) { is_expected.to eq "Streamable Media Type" }
255
- its(:heading) { is_expected.to eq "streamable_media_type" }
256
- end
257
-
258
- describe "SUBSERIES_FACET" do
259
- subject { Fields::SUBSERIES_FACET }
260
- its(:label) { is_expected.to eq "Subseries Facet" }
261
- its(:heading) { is_expected.to eq "subseries_facet" }
262
- end
263
-
264
- describe "TECHMD_COLOR_SPACE" do
265
- subject { Fields::TECHMD_COLOR_SPACE }
266
- its(:label) { is_expected.to eq "Color Space" }
267
- its(:heading) { is_expected.to eq "color_space" }
268
- end
269
-
270
- describe "TECHMD_CREATING_APPLICATION" do
271
- subject { Fields::TECHMD_CREATING_APPLICATION }
272
- its(:label) { is_expected.to eq "Creating Application" }
273
- its(:heading) { is_expected.to eq "creating_application" }
274
- end
275
-
276
- describe "TECHMD_CREATION_TIME" do
277
- subject { Fields::TECHMD_CREATION_TIME }
278
- its(:label) { is_expected.to eq "Creation Time" }
279
- its(:heading) { is_expected.to eq "creation_time" }
280
- end
281
-
282
- describe "TECHMD_FILE_SIZE" do
283
- subject { Fields::TECHMD_FILE_SIZE }
284
- its(:label) { is_expected.to eq "File Size" }
285
- its(:heading) { is_expected.to eq "file_size" }
286
- end
287
-
288
- describe "TECHMD_FITS_VERSION" do
289
- subject { Fields::TECHMD_FITS_VERSION }
290
- its(:label) { is_expected.to eq "FITS Version" }
291
- its(:heading) { is_expected.to eq "fits_version" }
292
- end
293
-
294
- describe "TECHMD_FITS_DATETIME" do
295
- subject { Fields::TECHMD_FITS_DATETIME }
296
- its(:label) { is_expected.to eq "FITS Run At" }
297
- its(:heading) { is_expected.to eq "fits_datetime" }
298
- end
299
-
300
- describe "TECHMD_FORMAT_LABEL" do
301
- subject { Fields::TECHMD_FORMAT_LABEL }
302
- its(:label) { is_expected.to eq "Format Label" }
303
- its(:heading) { is_expected.to eq "format_label" }
304
- end
305
-
306
- describe "TECHMD_FORMAT_VERSION" do
307
- subject { Fields::TECHMD_FORMAT_VERSION }
308
- its(:label) { is_expected.to eq "Format Version" }
309
- its(:heading) { is_expected.to eq "format_version" }
310
- end
311
-
312
- describe "TECHMD_IMAGE_HEIGHT" do
313
- subject { Fields::TECHMD_IMAGE_HEIGHT }
314
- its(:label) { is_expected.to eq "Image Height" }
315
- its(:heading) { is_expected.to eq "image_height" }
316
- end
317
-
318
- describe "TECHMD_IMAGE_WIDTH" do
319
- subject { Fields::TECHMD_IMAGE_WIDTH }
320
- its(:label) { is_expected.to eq "Image Width" }
321
- its(:heading) { is_expected.to eq "image_width" }
322
- end
323
-
324
- describe "TECHMD_MD5" do
325
- subject { Fields::TECHMD_MD5 }
326
- its(:label) { is_expected.to eq "MD5" }
327
- its(:heading) { is_expected.to eq "md5" }
328
- end
329
-
330
- describe "TECHMD_MEDIA_TYPE" do
331
- subject { Fields::TECHMD_MEDIA_TYPE }
332
- its(:label) { is_expected.to eq "Media Type" }
333
- its(:heading) { is_expected.to eq "media_type" }
334
- end
335
-
336
- describe "TECHMD_MODIFICATION_TIME" do
337
- subject { Fields::TECHMD_MODIFICATION_TIME }
338
- its(:label) { is_expected.to eq "Modification Time" }
339
- its(:heading) { is_expected.to eq "modification_time" }
340
- end
341
-
342
- describe "TECHMD_PRONOM_IDENTIFIER" do
343
- subject { Fields::TECHMD_PRONOM_IDENTIFIER }
344
- its(:label) { is_expected.to eq "PRONOM Unique ID" }
345
- its(:heading) { is_expected.to eq "pronom_uid" }
346
- end
347
-
348
- describe "TECHMD_VALID" do
349
- subject { Fields::TECHMD_VALID }
350
- its(:label) { is_expected.to eq "Valid" }
351
- its(:heading) { is_expected.to eq "valid" }
352
- end
353
-
354
- describe "TECHMD_WELL_FORMED" do
355
- subject { Fields::TECHMD_WELL_FORMED }
356
- its(:label) { is_expected.to eq "Well-formed" }
357
- its(:heading) { is_expected.to eq "well_formed" }
358
- end
359
-
360
- describe "TEMPORAL_FACET" do
361
- subject { Fields::TEMPORAL_FACET }
362
- its(:label) { is_expected.to eq "Temporal Facet" }
363
- its(:heading) { is_expected.to eq "temporal_facet" }
364
- end
365
-
366
- describe "TONE_FACET" do
367
- subject { Fields::TONE_FACET }
368
- its(:label) { is_expected.to eq "Tone Facet" }
369
- its(:heading) { is_expected.to eq "tone_facet" }
370
- end
371
-
372
- describe "VOLUME_FACET" do
373
- subject { Fields::VOLUME_FACET }
374
- its(:label) { is_expected.to eq "Volume Facet" }
375
- its(:heading) { is_expected.to eq "volume_facet" }
376
- end
377
- end
378
-
379
- end
380
- end