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
@@ -2,7 +2,7 @@ module Ddr::Auth
2
2
  RSpec.describe EffectivePermissions do
3
3
 
4
4
  let(:resource) { FactoryGirl.build(:item) }
5
- let(:policy) { Collection.new(pid: "coll:1") }
5
+ let(:policy) { Collection.new(pid: "coll-1") }
6
6
  let(:agents) { [ "Editors", "bob@example.com" ] }
7
7
 
8
8
  before do
@@ -2,7 +2,7 @@ module Ddr::Auth
2
2
  RSpec.describe EffectiveRoles do
3
3
 
4
4
  let(:resource) { FactoryGirl.build(:item) }
5
- let(:policy) { Collection.new(pid: "coll:1") }
5
+ let(:policy) { Collection.new(pid: "coll-1") }
6
6
  let(:agents) { [ "Editors", "bob@example.com", "public" ] }
7
7
  let(:editor) { Roles::Role.build type: "Editor", agent: "Editors", scope: "policy" }
8
8
  let(:downloader) { FactoryGirl.build(:role, :downloader, :public) }
@@ -0,0 +1,9 @@
1
+ require "net/ldap"
2
+
3
+ module Ddr::Auth
4
+ RSpec.describe LdapGateway do
5
+
6
+ # write some tests or delete this module
7
+
8
+ end
9
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ module Ddr
4
+ RSpec.describe Contacts, contacts: true do
5
+
6
+ before do
7
+ allow(YAML).to receive(:load_file) { { 'a' => { 'name' => 'Contact A', 'short_name' => 'A' },
8
+ 'b' => { 'name' => 'Contact B', 'short_name' => 'B' } } }
9
+ Contacts.load_contacts
10
+ end
11
+
12
+ describe "load_contacts" do
13
+ it "should load the contacts" do
14
+ expect(Contacts.contacts.to_h).to_not be_empty
15
+ end
16
+ end
17
+
18
+ describe "get" do
19
+ it "should return the appropriate contact" do
20
+ expect(Contacts.get('a').name).to eq('Contact A')
21
+ expect(Contacts.get('b').name).to eq('Contact B')
22
+ end
23
+ end
24
+
25
+ end
26
+ end
@@ -31,17 +31,17 @@ RSpec.describe ApplicationController, type: :controller do
31
31
  collections[2].roles.grant type: "Viewer", agent: "foo:bar", scope: "policy"
32
32
  collections[2].save
33
33
  end
34
- it "should return a list of internal URIs for collections on which the current ability has a role" do
35
- expect(subject.policy_role_policies).to match_array([collections[0].internal_uri, collections[1].internal_uri])
34
+ it "should return a list of IDs for collections on which the current ability has a role" do
35
+ expect(subject.policy_role_policies).to match_array([collections[0].id, collections[1].id])
36
36
  end
37
37
  end
38
38
 
39
39
  describe "#policy_role_filters" do
40
40
  before do
41
- allow(subject).to receive(:policy_role_policies) { ["info:fedora/test:13", "info:fedora/test:45"] }
41
+ allow(subject).to receive(:policy_role_policies) { ["test-13", "test-45"] }
42
42
  end
43
- it "should include clauses for is_governed_by relationships to the #policy_role_policies" do
44
- expect(subject.policy_role_filters).to eq("_query_:\"{!raw f=#{Ddr::Index::Fields::IS_GOVERNED_BY}}info:fedora/test:13\" OR _query_:\"{!raw f=#{Ddr::Index::Fields::IS_GOVERNED_BY}}info:fedora/test:45\"")
43
+ it "should include clauses for isGovernedBy relationships to the #policy_role_policies" do
44
+ expect(subject.policy_role_filters).to eq("_query_:\"{!raw f=#{Ddr::Index::Fields::IS_GOVERNED_BY}}test-13\" OR _query_:\"{!raw f=#{Ddr::Index::Fields::IS_GOVERNED_BY}}test-45\"")
45
45
  end
46
46
  end
47
47
 
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ module Ddr::Derivatives
4
+ RSpec.describe MultiresImage do
5
+
6
+ subject { described_class }
7
+
8
+ let(:object) { Component.new }
9
+
10
+ describe '#generatable?' do
11
+ context 'object does not have content' do
12
+ it "should not be generatable" do
13
+ expect(subject.generatable?(object)).to be_falsey
14
+ end
15
+ end
16
+ context 'object has content' do
17
+ before { allow(object).to receive(:has_content?) { true } }
18
+ context 'content is a tiff image' do
19
+ before { allow(object).to receive(:content_type) { 'image/tiff' } }
20
+ it "should be generatable" do
21
+ expect(subject.generatable?(object)).to be_truthy
22
+ end
23
+ end
24
+ context 'content is not a tiff image' do
25
+ before { allow(object).to receive(:content_type) { 'image/jpeg' } }
26
+ it "should not be generatable" do
27
+ expect(subject.generatable?(object)).to be_falsey
28
+ end
29
+ end
30
+ end
31
+
32
+ describe '.has_derivative?' do
33
+ context 'does not have multires image' do
34
+ it 'should not have the derivative' do
35
+ expect(subject.has_derivative?(object)).to be_falsey
36
+ end
37
+ end
38
+ context 'has multires image' do
39
+ before { allow(object).to receive(:multires_image_file_path) { '/tmp/foo.ptif' } }
40
+ it 'should have the derivative' do
41
+ expect(subject.has_derivative?(object)).to be_truthy
42
+ end
43
+ end
44
+ end
45
+
46
+ end
47
+ end
48
+ end
@@ -1,27 +1,22 @@
1
+ require 'spec_helper'
2
+
1
3
  module Ddr::Derivatives
2
4
  RSpec.describe PngGenerator do
3
5
 
4
6
  describe "generate" do
5
7
  let(:tempdir) { Dir.mktmpdir }
6
- let(:output_file) { File.new(File.join(tempdir, "output.png"), 'wb') }
8
+ let(:output_path) { File.join(tempdir, "output.png") }
7
9
  let(:options) { "-resize '100x100>'" }
8
- let(:generator) { described_class.new(source, output_file.path, options) }
10
+ let(:generator) { described_class.new(options) }
9
11
  after { FileUtils.rmdir(tempdir) }
10
12
  context "tiff source" do
11
- let(:source) { File.join(Ddr::Models::Engine.root, "spec", "fixtures", "imageA.tif") }
12
- it "should generate a non-empty file" do
13
- generator.generate
14
- expect(File.size(output_file.path)).to be > 0
15
- end
16
- end
17
- context "animated gif source" do
18
- let(:source) { File.join(Ddr::Models::Engine.root, "spec", "fixtures", "arrow1rightred_e0.gif") }
13
+ let(:source_path) { File.join(Ddr::Models::Engine.root, "spec", "fixtures", "imageA.tif") }
19
14
  it "should generate a non-empty file" do
20
- generator.generate
21
- expect(File.size(output_file.path)).to be > 0
15
+ generator.generate(source_path, output_path)
16
+ expect(File.size(output_path)).to be > 0
22
17
  end
23
18
  end
24
19
  end
25
20
 
26
21
  end
27
- end
22
+ end
@@ -1,29 +1,31 @@
1
+ require 'spec_helper'
2
+
1
3
  module Ddr::Derivatives
2
4
  RSpec.describe PtifGenerator do
3
5
 
4
6
  describe "generate" do
5
7
  let(:tempdir) { Dir.mktmpdir }
6
- let(:output_file) { File.new(File.join(tempdir, "output.ptif"), 'wb') }
8
+ let(:output_path) { File.join(tempdir, "output.ptif") }
7
9
  let(:options) { "jpeg:90,tile:256x256,pyramid" }
8
- let(:generator) { described_class.new(source, output_file.path, options) }
10
+ let(:generator) { described_class.new(options) }
9
11
  after { FileUtils.rmdir(tempdir) }
10
12
  context "tiff source" do
11
13
  context "8-bit source" do
12
- let(:source) { File.join(Ddr::Models::Engine.root, "spec", "fixtures", "8bit.tif") }
14
+ let(:source_path) { File.join(Ddr::Models::Engine.root, "spec", "fixtures", "8bit.tif") }
13
15
  it "should generate a non-empty file" do
14
- generator.generate
15
- expect(File.size(output_file.path)).to be > 0
16
+ generator.generate(source_path, output_path)
17
+ expect(File.size(output_path)).to be > 0
16
18
  end
17
19
  end
18
20
  context "16-bit source" do
19
- let(:source) { File.join(Ddr::Models::Engine.root, "spec", "fixtures", "16bit.tif") }
21
+ let(:source_path) { File.join(Ddr::Models::Engine.root, "spec", "fixtures", "16bit.tif") }
20
22
  it "should generate a non-empty file" do
21
- generator.generate
22
- expect(File.size(output_file.path)).to be > 0
23
+ generator.generate(source_path, output_path)
24
+ expect(File.size(output_path)).to be > 0
23
25
  end
24
26
  end
25
27
  end
26
28
  end
27
29
 
28
30
  end
29
- end
31
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ module Ddr::Derivatives
4
+ RSpec.describe Thumbnail do
5
+
6
+ subject { described_class }
7
+
8
+ let(:object) { Component.new }
9
+
10
+ describe '.generatable?' do
11
+ context 'object does not have content' do
12
+ it "should not be generatable" do
13
+ expect(subject.generatable?(object)).to be_falsey
14
+ end
15
+ end
16
+ context 'object has content' do
17
+ before { allow(object).to receive(:has_content?) { true } }
18
+ context 'content is an image' do
19
+ before { allow(object).to receive(:image?) { true } }
20
+ it "should be generatable" do
21
+ expect(subject.generatable?(object)).to be_truthy
22
+ end
23
+ end
24
+ context 'content is not an image' do
25
+ before { allow(object).to receive(:image?) { false } }
26
+ it "should not be generatable" do
27
+ expect(subject.generatable?(object)).to be_falsey
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ describe '.has_derivative?' do
34
+ context 'does not have thumbnail' do
35
+ it 'should not have the derivative' do
36
+ expect(subject.has_derivative?(object)).to be_falsey
37
+ end
38
+ end
39
+ context 'has thumbnail' do
40
+ before { allow(object).to receive(:has_thumbnail?) { true } }
41
+ it 'should have the derivative' do
42
+ expect(subject.has_derivative?(object)).to be_truthy
43
+ end
44
+ end
45
+ end
46
+
47
+ end
48
+ end
@@ -13,7 +13,7 @@ Rails.application.configure do
13
13
  config.eager_load = false
14
14
 
15
15
  # Configure static asset server for tests with Cache-Control for performance.
16
- config.serve_static_files = true
16
+ config.serve_static_assets = true
17
17
  config.static_cache_control = 'public, max-age=3600'
18
18
 
19
19
  # Show full error reports and disable caching.
@@ -11,50 +11,48 @@
11
11
  #
12
12
  # It's strongly recommended that you check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(version: 20161021201011) do
14
+ ActiveRecord::Schema.define(version: 20150713171838) do
15
15
 
16
- create_table "events", force: :cascade do |t|
16
+ create_table "events", force: true do |t|
17
17
  t.datetime "event_date_time"
18
18
  t.integer "user_id"
19
- t.string "type", limit: 255
20
- t.string "pid", limit: 255
21
- t.string "software", limit: 255
19
+ t.string "type"
20
+ t.string "pid"
21
+ t.string "software"
22
22
  t.text "comment"
23
23
  t.datetime "created_at"
24
24
  t.datetime "updated_at"
25
- t.string "summary", limit: 255
26
- t.string "outcome", limit: 255
25
+ t.string "summary"
26
+ t.string "outcome"
27
27
  t.text "detail"
28
28
  t.text "exception", limit: 65535
29
- t.string "user_key", limit: 255
30
- t.string "permanent_id", limit: 255
29
+ t.string "user_key"
31
30
  end
32
31
 
33
32
  add_index "events", ["event_date_time"], name: "index_events_on_event_date_time"
34
33
  add_index "events", ["outcome"], name: "index_events_on_outcome"
35
- add_index "events", ["permanent_id"], name: "index_events_on_permanent_id"
36
34
  add_index "events", ["pid"], name: "index_events_on_pid"
37
35
  add_index "events", ["type"], name: "index_events_on_type"
38
36
 
39
- create_table "users", force: :cascade do |t|
40
- t.string "email", limit: 255, default: "", null: false
41
- t.string "encrypted_password", limit: 255, default: "", null: false
42
- t.string "reset_password_token", limit: 255
37
+ create_table "users", force: true do |t|
38
+ t.string "email", default: "", null: false
39
+ t.string "encrypted_password", default: "", null: false
40
+ t.string "reset_password_token"
43
41
  t.datetime "reset_password_sent_at"
44
42
  t.datetime "remember_created_at"
45
- t.integer "sign_in_count", default: 0
43
+ t.integer "sign_in_count", default: 0
46
44
  t.datetime "current_sign_in_at"
47
45
  t.datetime "last_sign_in_at"
48
- t.string "current_sign_in_ip", limit: 255
49
- t.string "last_sign_in_ip", limit: 255
50
- t.datetime "created_at", null: false
51
- t.datetime "updated_at", null: false
52
- t.string "username", limit: 255, default: "", null: false
53
- t.string "first_name", limit: 255
54
- t.string "middle_name", limit: 255
55
- t.string "nickname", limit: 255
56
- t.string "last_name", limit: 255
57
- t.string "display_name", limit: 255
46
+ t.string "current_sign_in_ip"
47
+ t.string "last_sign_in_ip"
48
+ t.datetime "created_at", null: false
49
+ t.datetime "updated_at", null: false
50
+ t.string "username", default: "", null: false
51
+ t.string "first_name"
52
+ t.string "middle_name"
53
+ t.string "nickname"
54
+ t.string "last_name"
55
+ t.string "display_name"
58
56
  end
59
57
 
60
58
  add_index "users", ["email"], name: "index_users_on_email"
@@ -1,8 +1,8 @@
1
1
  FactoryGirl.define do
2
2
 
3
3
  factory :attachment do
4
- title [ "Test Attachment" ]
5
- sequence(:identifier) { |n| [ "att%05d" % n ] }
4
+ dc_title [ "Test Attachment" ]
5
+ sequence(:dc_identifier) { |n| [ "att%05d" % n ] }
6
6
  after(:build) do |a|
7
7
  a.upload File.new(File.join(Ddr::Models::Engine.root.to_s, 'spec', 'fixtures', 'sample.docx'))
8
8
  end
@@ -1,9 +1,8 @@
1
1
  FactoryGirl.define do
2
2
 
3
3
  factory :collection do
4
- title [ "Test Collection" ]
5
- admin_set "foo"
6
- sequence(:identifier) { |n| [ "coll%05d" % n ] }
4
+ dc_title [ "Test Collection" ]
5
+ sequence(:dc_identifier) { |n| [ "coll%05d" % n ] }
7
6
  end
8
7
 
9
8
  end
@@ -1,8 +1,8 @@
1
1
  FactoryGirl.define do
2
2
 
3
3
  factory :component do
4
- title [ "Test Component" ]
5
- sequence(:identifier) { |n| [ "cmp%05d" % n ] }
4
+ dc_title [ "Test Component" ]
5
+ sequence(:dc_identifier) { |n| [ "cmp%05d" % n ] }
6
6
  after(:build) do |c|
7
7
  c.upload File.new(File.join(Ddr::Models::Engine.root.to_s, "spec", "fixtures", "imageA.tif"))
8
8
  end
@@ -1,8 +1,8 @@
1
1
  FactoryGirl.define do
2
2
 
3
3
  factory :item do
4
- title [ "Test Item" ]
5
- sequence(:identifier) { |n| [ "item%05d" % n ] }
4
+ dc_title [ "Test Item" ]
5
+ sequence(:dc_identifier) { |n| [ "item%05d" % n ] }
6
6
  end
7
7
 
8
8
  end
@@ -2,7 +2,7 @@ require 'support/structural_metadata_helper'
2
2
 
3
3
  FactoryGirl.define do
4
4
 
5
- factory :structures, class: Ddr::Models::Structure do
5
+ factory :structure, class: Ddr::Models::Structure do
6
6
 
7
7
  factory :simple_structure do
8
8
  initialize_with do
@@ -16,12 +16,6 @@ FactoryGirl.define do
16
16
  end
17
17
  end
18
18
 
19
- factory :nested_structure_mptr do
20
- initialize_with do
21
- new(nested_structure_mptr_document)
22
- end
23
- end
24
-
25
19
  factory :multiple_struct_maps_structure do
26
20
  initialize_with do
27
21
  new(multiple_struct_maps_structure_document)
@@ -30,4 +24,4 @@ FactoryGirl.define do
30
24
 
31
25
  end
32
26
 
33
- end
27
+ end
@@ -7,19 +7,27 @@ end
7
7
 
8
8
  class TestParent < TestModel
9
9
  include Ddr::Models::HasChildren
10
- has_many :children, property: :is_part_of, class_name: 'TestChild'
10
+ has_many :children,
11
+ predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf,
12
+ class_name: 'TestChild'
11
13
  end
12
14
 
13
15
  class TestChild < TestModel
14
- belongs_to :parent, property: :is_part_of, class_name: 'TestParent'
16
+ belongs_to :parent,
17
+ predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf,
18
+ class_name: 'TestParent'
15
19
  end
16
20
 
17
21
  class TestModelOmnibus < TestModel
18
22
  include Ddr::Models::Governable
19
23
  include Ddr::Models::HasContent
20
24
  include Ddr::Models::HasAttachments
21
- has_many :children, property: :is_part_of, class_name: 'TestChild'
22
- belongs_to :parent, property: :is_part_of, class_name: 'TestParent'
25
+ has_many :children,
26
+ predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf,
27
+ class_name: 'TestChild'
28
+ belongs_to :parent,
29
+ predicate: ActiveFedora::RDF::Fcrepo::RelsExt.isPartOf,
30
+ class_name: 'TestParent'
23
31
  end
24
32
 
25
33
  FactoryGirl.define do