hydra-head 3.0.0pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. data/.gitignore +71 -0
  2. data/.gitmodules +6 -0
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +257 -0
  5. data/README.textile +150 -0
  6. data/README_RAILS3_CHANGES.textile +42 -0
  7. data/Rakefile +5 -0
  8. data/TESTING.textile +85 -0
  9. data/app/controllers/assets_controller.rb +117 -0
  10. data/app/controllers/contributors_controller.rb +54 -0
  11. data/app/controllers/file_assets_controller.rb +152 -0
  12. data/app/controllers/permissions_controller.rb +137 -0
  13. data/app/controllers/user_sessions_controller.rb +14 -0
  14. data/app/helpers/article_metadata_helper.rb +80 -0
  15. data/app/helpers/blacklight_helper.rb +192 -0
  16. data/app/helpers/downloads_helper.rb +19 -0
  17. data/app/helpers/generic_content_objects_helper.rb +16 -0
  18. data/app/helpers/hydra_assets_helper.rb +75 -0
  19. data/app/helpers/hydra_djatoka_helper.rb +23 -0
  20. data/app/helpers/hydra_fedora_metadata_helper.rb +365 -0
  21. data/app/helpers/hydra_helper.rb +155 -0
  22. data/app/helpers/hydra_uploader_helper.rb +18 -0
  23. data/app/helpers/inline_editable_metadata_helper.rb +15 -0
  24. data/app/helpers/javascript_includes_helper.rb +93 -0
  25. data/app/helpers/release_process_helper.rb +32 -0
  26. data/app/models/audio_asset.rb +8 -0
  27. data/app/models/file_asset.rb +111 -0
  28. data/app/models/generic_content.rb +21 -0
  29. data/app/models/generic_image.rb +62 -0
  30. data/app/models/image_asset.rb +8 -0
  31. data/app/models/mods_asset.rb +6 -0
  32. data/app/models/role_mapper.rb +22 -0
  33. data/app/models/superuser.rb +6 -0
  34. data/app/models/video_asset.rb +8 -0
  35. data/app/views/_add_assets_links.html.erb +13 -0
  36. data/app/views/_brown_sidebar.html +15 -0
  37. data/app/views/_user_util_links.html.erb +31 -0
  38. data/app/views/catalog/_citation.html.erb +11 -0
  39. data/app/views/catalog/_constraints_element.html.erb +34 -0
  40. data/app/views/catalog/_delete_partials/_default.html.erb +29 -0
  41. data/app/views/catalog/_document_list.html.erb +11 -0
  42. data/app/views/catalog/_edit_partials/_default.html.erb +64 -0
  43. data/app/views/catalog/_edit_partials/_default_details.html.erb +15 -0
  44. data/app/views/catalog/_email_form.html.erb +9 -0
  45. data/app/views/catalog/_facets.html.erb +37 -0
  46. data/app/views/catalog/_flash_msg.html.erb +17 -0
  47. data/app/views/catalog/_home.html.erb +6 -0
  48. data/app/views/catalog/_home_text.html.erb +10 -0
  49. data/app/views/catalog/_index_partials/_default.html.erb +20 -0
  50. data/app/views/catalog/_index_partials/_default_details.html.erb +11 -0
  51. data/app/views/catalog/_index_partials/_default_group.html.erb +15 -0
  52. data/app/views/catalog/_search_form.html.erb +12 -0
  53. data/app/views/catalog/_show_partials/_default.html.erb +23 -0
  54. data/app/views/catalog/_show_partials/_default_details.html.erb +12 -0
  55. data/app/views/catalog/_show_partials/_facets.html.erb +52 -0
  56. data/app/views/catalog/_sms_form.html.erb +21 -0
  57. data/app/views/catalog/_sort_and_per_page.html.erb +22 -0
  58. data/app/views/catalog/_uva_tabs.html.erb +10 -0
  59. data/app/views/catalog/about.html.erb +0 -0
  60. data/app/views/catalog/show.html.erb +48 -0
  61. data/app/views/contributors/_add_contributor_split_button.html.erb +10 -0
  62. data/app/views/contributors/_edit_conference.html.erb +29 -0
  63. data/app/views/contributors/_edit_organization.html.erb +29 -0
  64. data/app/views/contributors/_edit_person.html.erb +42 -0
  65. data/app/views/contributors/_index.html.erb +12 -0
  66. data/app/views/contributors/_new.html.erb +10 -0
  67. data/app/views/contributors/_show_conference.html.erb +22 -0
  68. data/app/views/contributors/_show_organization.html.erb +29 -0
  69. data/app/views/contributors/_show_person.html.erb +17 -0
  70. data/app/views/contributors/new.html.erb +13 -0
  71. data/app/views/downloads/index.html.erb +1 -0
  72. data/app/views/file_assets/_deletable_result.html.erb +5 -0
  73. data/app/views/file_assets/_index.html.erb +15 -0
  74. data/app/views/file_assets/_new.html.erb +2 -0
  75. data/app/views/file_assets/_result.html.erb +16 -0
  76. data/app/views/file_assets/index.html.erb +5 -0
  77. data/app/views/fluid_infusion/_uploader.html.erb +81 -0
  78. data/app/views/fluid_infusion/_uploader_generic_content_objects.js.erb +38 -0
  79. data/app/views/fluid_infusion/_uploader_js.erb +45 -0
  80. data/app/views/generic_content_objects/_edit_description.html.erb +50 -0
  81. data/app/views/generic_content_objects/_new.html.erb +0 -0
  82. data/app/views/generic_content_objects/_show_description.html.erb +68 -0
  83. data/app/views/generic_content_objects/contributors/_edit_conference.html.erb +29 -0
  84. data/app/views/generic_content_objects/contributors/_edit_organization.html.erb +29 -0
  85. data/app/views/generic_content_objects/contributors/_edit_person.html.erb +37 -0
  86. data/app/views/generic_content_objects/contributors/_new.html.erb +10 -0
  87. data/app/views/generic_content_objects/contributors/_show_conference.html.erb +22 -0
  88. data/app/views/generic_content_objects/contributors/_show_organization.html.erb +22 -0
  89. data/app/views/generic_content_objects/contributors/_show_person.html.erb +38 -0
  90. data/app/views/generic_contents/_edit.html.erb +59 -0
  91. data/app/views/generic_contents/_index.html.erb +23 -0
  92. data/app/views/generic_contents/_show.html.erb +18 -0
  93. data/app/views/generic_contents/_show_content.html.erb +4 -0
  94. data/app/views/generic_images/_edit.html.erb +59 -0
  95. data/app/views/generic_images/_index.html.erb +24 -0
  96. data/app/views/generic_images/_show.html.erb +18 -0
  97. data/app/views/generic_images/_show_all.html.erb +14 -0
  98. data/app/views/generic_images/_show_content.html.erb +7 -0
  99. data/app/views/layouts/application.html.erb +57 -0
  100. data/app/views/layouts/hydra-head.html.erb +12 -0
  101. data/app/views/mods_assets/_edit.html.erb +49 -0
  102. data/app/views/mods_assets/_edit_description.html.erb +82 -0
  103. data/app/views/mods_assets/_edit_journal.html.erb +72 -0
  104. data/app/views/mods_assets/_index.html.erb +1 -0
  105. data/app/views/mods_assets/_index_list.html.erb +37 -0
  106. data/app/views/mods_assets/_index_table.html.erb +7 -0
  107. data/app/views/mods_assets/_progress_box.html.erb +82 -0
  108. data/app/views/mods_assets/_show.html.erb +44 -0
  109. data/app/views/mods_assets/_show_description.html.erb +44 -0
  110. data/app/views/mods_assets/_show_journal.html.erb +42 -0
  111. data/app/views/mods_assets/_show_permissions.html.erb +14 -0
  112. data/app/views/permissions/_edit_person_permissions.html.erb +35 -0
  113. data/app/views/permissions/_index.html.erb +55 -0
  114. data/app/views/permissions/_new.html.erb +18 -0
  115. data/app/views/permissions/index.html.erb +1 -0
  116. data/app/views/permissions/new.html.erb +1 -0
  117. data/app/views/shared/_delete_asset_confirmation.html.erb +17 -0
  118. data/app/views/user_sessions/_login_form.html.erb +10 -0
  119. data/app/views/user_sessions/logged_out.html.erb +1 -0
  120. data/config/routes.rb +12 -0
  121. data/fedora_conf/conf/fedora.fcfg +1021 -0
  122. data/hydra-head.gemspec +70 -0
  123. data/lib/application_controller.rb +25 -0
  124. data/lib/application_helper.rb +2 -0
  125. data/lib/engine.rb +30 -0
  126. data/lib/generators/hydra/head_generator.rb +152 -0
  127. data/lib/generators/hydra/templates/config/fedora.yml +17 -0
  128. data/lib/generators/hydra/templates/config/initializers/blacklight_config.rb +246 -0
  129. data/lib/generators/hydra/templates/config/initializers/fedora_config.rb +23 -0
  130. data/lib/generators/hydra/templates/config/initializers/hydra_config.rb +29 -0
  131. data/lib/generators/hydra/templates/config/role_map_cucumber.yml +10 -0
  132. data/lib/generators/hydra/templates/config/role_map_development.yml +12 -0
  133. data/lib/generators/hydra/templates/config/role_map_production.yml +2 -0
  134. data/lib/generators/hydra/templates/config/role_map_test.yml +15 -0
  135. data/lib/generators/hydra/templates/config/solr.yml +10 -0
  136. data/lib/generators/hydra/templates/config/solr_mappings.yml +22 -0
  137. data/lib/generators/hydra/templates/fedora_conf/conf/fedora.fcfg +1021 -0
  138. data/lib/generators/hydra/templates/migrations/add_user_attributes_table.rb +15 -0
  139. data/lib/generators/hydra/templates/migrations/create_superusers.rb +12 -0
  140. data/lib/generators/hydra/templates/solr_conf/conf/schema.xml +118 -0
  141. data/lib/generators/hydra/templates/solr_conf/conf/solrconfig.xml +332 -0
  142. data/lib/generators/hydra/templates/solr_conf/solr.xml +35 -0
  143. data/lib/hydra-head.rb +29 -0
  144. data/lib/hydra-head/engine.rb +9 -0
  145. data/lib/hydra-head/routes.rb +87 -0
  146. data/lib/hydra-head/version.rb +4 -0
  147. data/lib/hydra.rb +22 -0
  148. data/lib/hydra/access_controls_enforcement.rb +236 -0
  149. data/lib/hydra/access_controls_evaluation.rb +97 -0
  150. data/lib/hydra/assets_controller_helper.rb +144 -0
  151. data/lib/hydra/catalog.rb +64 -0
  152. data/lib/hydra/common_mods_index_methods.rb +42 -0
  153. data/lib/hydra/controller.rb +7 -0
  154. data/lib/hydra/file_assets_helper.rb +144 -0
  155. data/lib/hydra/fixtures.rb +43 -0
  156. data/lib/hydra/generic_content.rb +113 -0
  157. data/lib/hydra/generic_image.rb +100 -0
  158. data/lib/hydra/image.rb +177 -0
  159. data/lib/hydra/model_methods.rb +95 -0
  160. data/lib/hydra/model_mixins.rb +2 -0
  161. data/lib/hydra/model_mixins/common_metadata.rb +24 -0
  162. data/lib/hydra/model_mixins/mods_object.rb +16 -0
  163. data/lib/hydra/mods_article.rb +505 -0
  164. data/lib/hydra/mods_dataset.rb +165 -0
  165. data/lib/hydra/mods_generic_content.rb +494 -0
  166. data/lib/hydra/mods_image.rb +494 -0
  167. data/lib/hydra/repository_controller.rb +102 -0
  168. data/lib/hydra/rights_metadata.rb +189 -0
  169. data/lib/hydra/superuser_attributes.rb +12 -0
  170. data/lib/hydra/testing_server.rb +183 -0
  171. data/lib/hydra/user.rb +22 -0
  172. data/lib/mediashelf/active_fedora_helper.rb +72 -0
  173. data/lib/railties/all_tests.rake +23 -0
  174. data/lib/railties/hydra-fixtures.rake +184 -0
  175. data/lib/railties/hydra_jetty.rake +79 -0
  176. data/lib/railties/hyhead_cucumber.rake +127 -0
  177. data/lib/railties/hyhead_rspec.rake +137 -0
  178. data/lib/stanford/searchworks_helper.rb +1338 -0
  179. data/lib/stanford/solr_helper.rb +108 -0
  180. data/lib/uva/mods_index_methods.rb +24 -0
  181. data/solr_conf/conf/schema.xml +122 -0
  182. data/solr_conf/conf/solrconfig.xml +332 -0
  183. data/solr_conf/solr.xml +35 -0
  184. data/tasks/hydra-head-fixtures.rake +54 -0
  185. data/tasks/hydra-head.rake +247 -0
  186. data/tasks/hydra_jetty.rake +79 -0
  187. data/tasks/replicator.rake +27 -0
  188. data/tasks/solrizer-fedora.rake +53 -0
  189. data/tasks/solrizer.rake +13 -0
  190. data/test_support/etc/Gemfile +29 -0
  191. data/test_support/etc/rvmrc +32 -0
  192. data/test_support/features/button_add_assets.feature +22 -0
  193. data/test_support/features/button_add_generic_content.feature +11 -0
  194. data/test_support/features/button_add_image.feature +11 -0
  195. data/test_support/features/button_add_mods_asset.feature +11 -0
  196. data/test_support/features/contributor_add.feature +39 -0
  197. data/test_support/features/file_assets_list.feature +32 -0
  198. data/test_support/features/file_upload.feature +40 -0
  199. data/test_support/features/home_page.feature +9 -0
  200. data/test_support/features/html_validity.feature +47 -0
  201. data/test_support/features/mods_asset_contributors_edit.feature +80 -0
  202. data/test_support/features/mods_asset_create.feature +12 -0
  203. data/test_support/features/mods_asset_edit.feature +33 -0
  204. data/test_support/features/mods_asset_edit_without_permission.feature +10 -0
  205. data/test_support/features/mods_asset_search_result.feature +13 -0
  206. data/test_support/features/mods_asset_show.feature +39 -0
  207. data/test_support/features/permissions_add.feature +15 -0
  208. data/test_support/features/permissions_edit.feature +63 -0
  209. data/test_support/features/step_definitions/catalog_index_steps.rb +14 -0
  210. data/test_support/features/step_definitions/create_asset_steps.rb +7 -0
  211. data/test_support/features/step_definitions/edit_metadata_steps.rb +73 -0
  212. data/test_support/features/step_definitions/file_list_steps.rb +28 -0
  213. data/test_support/features/step_definitions/hydra_metadata_steps.rb +3 -0
  214. data/test_support/features/step_definitions/hydra_steps.rb +8 -0
  215. data/test_support/features/step_definitions/inline_editable_edit_steps.rb +77 -0
  216. data/test_support/features/step_definitions/search_steps.rb +88 -0
  217. data/test_support/features/step_definitions/searching_steps.rb +22 -0
  218. data/test_support/features/step_definitions/show_document_steps.rb +85 -0
  219. data/test_support/features/step_definitions/user_steps.rb +36 -0
  220. data/test_support/features/step_definitions/web_steps.rb +219 -0
  221. data/test_support/features/support/env.rb +55 -0
  222. data/test_support/features/support/paths.rb +80 -0
  223. data/test_support/features/switch_users.feature +14 -0
  224. data/test_support/features/view_catalog_index.feature +18 -0
  225. data/test_support/fixtures/empty_file.txt +0 -0
  226. data/test_support/fixtures/hydrangea_fixture_archivist_only_mods_article.foxml.xml +1212 -0
  227. data/test_support/fixtures/hydrangea_fixture_file_asset1.foxml.xml +4946 -0
  228. data/test_support/fixtures/hydrangea_fixture_mods_article1.foxml.xml +234 -0
  229. data/test_support/fixtures/hydrangea_fixture_mods_article2.foxml.xml +177 -0
  230. data/test_support/fixtures/hydrangea_fixture_mods_article3.foxml.xml +170 -0
  231. data/test_support/fixtures/hydrangea_fixture_mods_dataset1.foxml.xml +187 -0
  232. data/test_support/fixtures/hydrangea_fixture_uploaded_svg1.foxml.xml +676 -0
  233. data/test_support/fixtures/image.jp2 +0 -0
  234. data/test_support/fixtures/libra-oa_1.foxml.xml +2324 -0
  235. data/test_support/fixtures/libra-oa_2.foxml.xml +2422 -0
  236. data/test_support/spec/controllers/assets_controller_spec.rb +113 -0
  237. data/test_support/spec/controllers/catalog_controller_spec.rb +148 -0
  238. data/test_support/spec/controllers/catalog_controller_viewing_context_spec.rb +62 -0
  239. data/test_support/spec/controllers/contributors_controller_spec.rb +47 -0
  240. data/test_support/spec/controllers/file_assets_controller_spec.rb +189 -0
  241. data/test_support/spec/controllers/hydra_controller_spec.rb +15 -0
  242. data/test_support/spec/controllers/permissions_controller_spec.rb +80 -0
  243. data/test_support/spec/controllers/user_sessions_controller_spec.rb +35 -0
  244. data/test_support/spec/generators/hydra-head_generator_spec.rb +14 -0
  245. data/test_support/spec/helpers/access_controls_enforcement_spec.rb +212 -0
  246. data/test_support/spec/helpers/access_controls_evaluation_spec.rb +35 -0
  247. data/test_support/spec/helpers/assets_controller_helper_spec.rb +71 -0
  248. data/test_support/spec/helpers/blacklight_helper_spec.rb +64 -0
  249. data/test_support/spec/helpers/file_assets_helper_spec.rb +107 -0
  250. data/test_support/spec/helpers/hydra-repository_controller_spec.rb +32 -0
  251. data/test_support/spec/helpers/hydra_assets_helper_spec.rb +195 -0
  252. data/test_support/spec/helpers/hydra_djatoka_helper_spec.rb +32 -0
  253. data/test_support/spec/helpers/hydra_fedora_metadata_helper_spec.rb +215 -0
  254. data/test_support/spec/helpers/hydra_helper_spec.rb +73 -0
  255. data/test_support/spec/helpers/hydra_model_methods_spec.rb +95 -0
  256. data/test_support/spec/helpers/hydra_uploader_helper_spec.rb +18 -0
  257. data/test_support/spec/helpers/javascript_includes_helper_spec.rb +43 -0
  258. data/test_support/spec/integration/file_asset_spec.rb +150 -0
  259. data/test_support/spec/lib/active_fedora_helper_spec.rb +56 -0
  260. data/test_support/spec/lib/catalog_spec.rb +16 -0
  261. data/test_support/spec/lib/common_mods_index_methods_spec.rb +28 -0
  262. data/test_support/spec/models/audio_asset_spec.rb +23 -0
  263. data/test_support/spec/models/file_asset_spec.rb +42 -0
  264. data/test_support/spec/models/generic_content_spec.rb +29 -0
  265. data/test_support/spec/models/generic_image_spec.rb +58 -0
  266. data/test_support/spec/models/hydra_rights_metadata_spec.rb +162 -0
  267. data/test_support/spec/models/image_asset_spec.rb +23 -0
  268. data/test_support/spec/models/mods_asset_spec.rb +29 -0
  269. data/test_support/spec/models/role_mapper_spec.rb +22 -0
  270. data/test_support/spec/models/user_spec.rb +52 -0
  271. data/test_support/spec/models/video_asset_spec.rb +23 -0
  272. data/test_support/spec/rcov.opts +3 -0
  273. data/test_support/spec/spec.opts +4 -0
  274. data/test_support/spec/spec_helper.rb +44 -0
  275. data/test_support/spec/support/matchers/helper_matcher.rb +14 -0
  276. data/test_support/spec/support/matchers/solr_matchers.rb +60 -0
  277. data/test_support/spec/unit/hydra-head-engine_spec.rb +8 -0
  278. data/test_support/spec/unit/hydra-head_spec.rb +8 -0
  279. data/test_support/spec/utilities/hydra_testing_server_spec.rb +49 -0
  280. data/test_support/spec/views/uploader.html.erb_spec.rb +30 -0
  281. data/vendor/cache/RedCloth-4.2.3.gem +0 -0
  282. data/vendor/cache/abstract-1.0.0.gem +0 -0
  283. data/vendor/cache/actionmailer-3.0.9.gem +0 -0
  284. data/vendor/cache/actionpack-3.0.9.gem +0 -0
  285. data/vendor/cache/active-fedora-2.3.3.gem +0 -0
  286. data/vendor/cache/activemodel-3.0.9.gem +0 -0
  287. data/vendor/cache/activerecord-3.0.9.gem +0 -0
  288. data/vendor/cache/activeresource-3.0.9.gem +0 -0
  289. data/vendor/cache/activesupport-3.0.9.gem +0 -0
  290. data/vendor/cache/arel-2.0.10.gem +0 -0
  291. data/vendor/cache/blacklight-3.0.0.gem +0 -0
  292. data/vendor/cache/block_helpers-0.3.3.gem +0 -0
  293. data/vendor/cache/builder-2.1.2.gem +0 -0
  294. data/vendor/cache/capybara-1.0.0.gem +0 -0
  295. data/vendor/cache/childprocess-0.2.0.gem +0 -0
  296. data/vendor/cache/columnize-0.3.4.gem +0 -0
  297. data/vendor/cache/crack-0.1.8.gem +0 -0
  298. data/vendor/cache/cucumber-1.0.2.gem +0 -0
  299. data/vendor/cache/cucumber-rails-1.0.2.gem +0 -0
  300. data/vendor/cache/curb-0.7.15.gem +0 -0
  301. data/vendor/cache/daemons-1.1.4.gem +0 -0
  302. data/vendor/cache/database_cleaner-0.6.7.gem +0 -0
  303. data/vendor/cache/diff-lcs-1.1.2.gem +0 -0
  304. data/vendor/cache/equivalent-xml-0.2.7.gem +0 -0
  305. data/vendor/cache/erubis-2.6.6.gem +0 -0
  306. data/vendor/cache/facets-2.8.4.gem +0 -0
  307. data/vendor/cache/factory_girl-1.3.3.gem +0 -0
  308. data/vendor/cache/fastercsv-1.5.4.gem +0 -0
  309. data/vendor/cache/ffi-1.0.9.gem +0 -0
  310. data/vendor/cache/gherkin-2.4.5.gem +0 -0
  311. data/vendor/cache/haml-3.1.2.gem +0 -0
  312. data/vendor/cache/httparty-0.7.8.gem +0 -0
  313. data/vendor/cache/i18n-0.5.0.gem +0 -0
  314. data/vendor/cache/jettywrapper-0.0.10.gem +0 -0
  315. data/vendor/cache/json-1.5.3.gem +0 -0
  316. data/vendor/cache/json_pure-1.5.3.gem +0 -0
  317. data/vendor/cache/kaminari-0.12.4.gem +0 -0
  318. data/vendor/cache/launchy-2.0.3.gem +0 -0
  319. data/vendor/cache/linecache-0.46.gem +0 -0
  320. data/vendor/cache/logger-1.2.8.gem +0 -0
  321. data/vendor/cache/mail-2.2.19.gem +0 -0
  322. data/vendor/cache/marc-0.4.3.gem +0 -0
  323. data/vendor/cache/mediashelf-loggable-0.4.2.gem +0 -0
  324. data/vendor/cache/mime-types-1.16.gem +0 -0
  325. data/vendor/cache/mocha-0.9.12.gem +0 -0
  326. data/vendor/cache/multipart-post-1.1.2.gem +0 -0
  327. data/vendor/cache/nokogiri-1.5.0.gem +0 -0
  328. data/vendor/cache/om-1.2.5.gem +0 -0
  329. data/vendor/cache/polyglot-0.3.1.gem +0 -0
  330. data/vendor/cache/rack-1.2.3.gem +0 -0
  331. data/vendor/cache/rack-mount-0.6.14.gem +0 -0
  332. data/vendor/cache/rack-test-0.5.7.gem +0 -0
  333. data/vendor/cache/rails-3.0.9.gem +0 -0
  334. data/vendor/cache/railties-3.0.9.gem +0 -0
  335. data/vendor/cache/rake-0.9.2.gem +0 -0
  336. data/vendor/cache/rbx-require-relative-0.0.5.gem +0 -0
  337. data/vendor/cache/rcov-0.9.9.gem +0 -0
  338. data/vendor/cache/rdoc-3.8.gem +0 -0
  339. data/vendor/cache/rsolr-1.0.2.gem +0 -0
  340. data/vendor/cache/rsolr-ext-1.0.3.gem +0 -0
  341. data/vendor/cache/rspec-2.6.0.gem +0 -0
  342. data/vendor/cache/rspec-core-2.6.4.gem +0 -0
  343. data/vendor/cache/rspec-expectations-2.6.0.gem +0 -0
  344. data/vendor/cache/rspec-mocks-2.6.0.gem +0 -0
  345. data/vendor/cache/rspec-rails-2.6.1.gem +0 -0
  346. data/vendor/cache/ruby-debug-0.10.4.gem +0 -0
  347. data/vendor/cache/ruby-debug-base-0.10.4.gem +0 -0
  348. data/vendor/cache/rubyzip-0.9.4.gem +0 -0
  349. data/vendor/cache/sanitize-2.0.3.gem +0 -0
  350. data/vendor/cache/selenium-webdriver-0.2.2.gem +0 -0
  351. data/vendor/cache/solr-ruby-0.0.8.gem +0 -0
  352. data/vendor/cache/solrizer-1.1.0.gem +0 -0
  353. data/vendor/cache/solrizer-fedora-1.1.0.gem +0 -0
  354. data/vendor/cache/sqlite3-ruby-1.2.5.gem +0 -0
  355. data/vendor/cache/stomp-1.1.9.gem +0 -0
  356. data/vendor/cache/term-ansicolor-1.0.5.gem +0 -0
  357. data/vendor/cache/thor-0.14.6.gem +0 -0
  358. data/vendor/cache/treetop-1.4.9.gem +0 -0
  359. data/vendor/cache/trollop-1.16.2.gem +0 -0
  360. data/vendor/cache/tzinfo-0.3.29.gem +0 -0
  361. data/vendor/cache/unicode-0.4.0.gem +0 -0
  362. data/vendor/cache/will_paginate-2.3.15.gem +0 -0
  363. data/vendor/cache/xml-simple-1.1.0.gem +0 -0
  364. data/vendor/cache/xpath-0.1.4.gem +0 -0
  365. data/vendor/cache/yard-0.7.2.gem +0 -0
  366. metadata +1110 -0
@@ -0,0 +1,113 @@
1
+ require "hydra"
2
+ require "httparty"
3
+ require "mime/types"
4
+
5
+ module Hydra::GenericContent
6
+
7
+ def self.included(klass)
8
+ klass.send :include, Hydra::ModelMethods
9
+ end
10
+
11
+ # For each value in DEFAULT_CONTENT_DATASTREAMS, instances will have 3 corresponding methods for
12
+ # * getting the datastream's content
13
+ # * setting a new file as the datastream's content
14
+ # * checking whether the current object has the datastream already
15
+ #
16
+ # Example: DEFAULT_CONTENT_DATASTREAMS = ['content','original']
17
+ # These methods will be available on the object:
18
+ #
19
+ # .has_original?, original, orginal=()
20
+ # .has_content?, content, content=()
21
+ #
22
+ DEFAULT_CONTENT_DATASTREAMS = ['content','original']
23
+
24
+ DEFAULT_CONTENT_DATASTREAMS.each do |m|
25
+ class_eval <<-EOM
26
+ def has_#{m}?
27
+ self.datastreams.keys.include? "#{m}"
28
+ end
29
+
30
+ def #{m}
31
+ datastreams["#{m}"].content if has_#{m}?
32
+ end
33
+
34
+ def #{m}=(file)
35
+ create_or_update_datastream( "#{m}", file )
36
+ end
37
+ EOM
38
+ end
39
+
40
+ private
41
+
42
+ def from_url url, ds_name
43
+ puts "creating datastream object for: #{url}"
44
+ ds = ActiveFedora::Datastream.new(:dsid=> ds_name, :label => ds_name, :controlGroup => "M", :dsLocation => url, :mimeType=>mime_type(url.split(/\//).last))
45
+ add_datastream(ds)
46
+ save
47
+ end
48
+
49
+ def from_binary binary_info, ds_name
50
+ file = binary_to_file(binary_info[:blob],ds_name,binary_info[:extension])
51
+ add_file_datastream(file,:dsid=>ds_name,:label=>ds_name)
52
+ save
53
+ end
54
+
55
+ def binary_to_file blob, suffix, ext=nil
56
+ file_name = Time.now.strftime("%Y%m%d-%H%M%S")
57
+ f = File.new("#{Rails.root}/tmp/#{file_name}-#{suffix}.#{ext}","w")
58
+ f.write blob
59
+ f.close
60
+ return f
61
+ end
62
+
63
+ def create_or_update_datastream ds_name, file
64
+ case file
65
+ when File
66
+ logger.debug "adding #{ds_name} file datastream"
67
+ add_file_datastream(file, :dsid => ds_name, :label => ds_name, :mimeType => mime_type(file.path))
68
+ when String
69
+ from_url(file, ds_name)
70
+ when Hash
71
+ if file.has_key? :blob
72
+ from_binary(file, ds_name)
73
+ elsif file.has_key? :file
74
+ add_file_datastream(file[:file], :dsid => ds_name, :label => ds_name, :mimeType => mime_type(file[:file_name]))
75
+ end
76
+ end
77
+ end
78
+
79
+ # Returns a human readable filesize appropriate for the given number of bytes (ie. automatically chooses 'bytes','KB','MB','GB','TB')
80
+ # Based on a bit of python code posted here: http://blogmag.net/blog/read/38/Print_human_readable_file_size
81
+ # @param [Numeric] file size in bits
82
+ def bits_to_human_readable(num)
83
+ ['bytes','KB','MB','GB','TB'].each do |x|
84
+ if num < 1024.0
85
+ return "#{num.to_i} #{x}"
86
+ else
87
+ num = num/1024.0
88
+ end
89
+ end
90
+ end
91
+
92
+ # augments add_file_datastream to also put file size (in bytes/KB/MB/GB/TB) in mods:physicaldescription/mods:extent
93
+ def add_file_datastream(file, opts={})
94
+ label = opts.has_key?(:label) ? opts[:label] : ""
95
+ mimeType = opts.has_key?(:mimeType) ? opts[:mimeType] : ""
96
+ ds = ActiveFedora::Datastream.new(:dsLabel => label, :controlGroup => 'M', :blob => file, :mimeType => mimeType)
97
+ opts.has_key?(:dsid) ? ds.dsid=(opts[:dsid]) : nil
98
+ add_datastream(ds)
99
+ if file.respond_to?(:size)
100
+ size = bits_to_human_readable(file.size)
101
+ elsif file.kind_of?(File)
102
+ size = bits_to_human_readable(File.size(file))
103
+ else
104
+ size = ""
105
+ end
106
+ datastreams_in_memory["descMetadata"].update_indexed_attributes( [:physical_description, :extent] => size )
107
+ end
108
+
109
+ def mime_type file_name
110
+ mime_types = MIME::Types.of(file_name)
111
+ mime_type = mime_types.empty? ? "application/octet-stream" : mime_types.first.content_type
112
+ end
113
+ end
@@ -0,0 +1,100 @@
1
+ # Hydra::GenericImage
2
+ #
3
+ # Default content datastreams:
4
+ # Included from Hydra::GenericContent: content, original (optional)
5
+ # Included from Hydra::GenericImage: max, thumbnail, screen
6
+ #
7
+ # Sample Usages:
8
+ # For good sample usage, see the documentation for HydraImage.
9
+ require "hydra"
10
+
11
+ module Hydra::GenericImage
12
+ def self.included klass
13
+ klass.send(:include, Hydra::GenericContent)
14
+ end
15
+
16
+ class Hydra::GenericImage::NoFileError < RuntimeError; end;
17
+ class Hydra::GenericImage::UnknownImageType < RuntimeError; end;
18
+
19
+ DEFAULT_IMAGE_DATASTREAMS = ["max","thumbnail","screen"]
20
+
21
+ DERIVATION_DEFAULTS = {
22
+ :max => {:op => "convert", :convertTo => "jpg"},
23
+ :thumbnail => {:op => "resize",:newWidth=> 100},
24
+ :screen => {:op => "resize", :newWidth => 960}
25
+ }
26
+
27
+ attr_accessor :derivation_overrides, :generate_derived_images
28
+
29
+ def derivation_options
30
+ if @derivation_overrides
31
+ return DERIVATION_DEFAULTS.merge( @derivation_overrides )
32
+ else
33
+ return DERIVATION_DEFAULTS
34
+ end
35
+ end
36
+
37
+ DEFAULT_IMAGE_DATASTREAMS.each do |ds_name|
38
+ class_eval <<-EOM
39
+ def has_#{ds_name}?
40
+ self.datastreams.keys.include? "#{ds_name}"
41
+ end
42
+
43
+ def #{ds_name}
44
+ datastreams["#{ds_name}"].content if has_#{ds_name}?
45
+ end
46
+
47
+ def #{ds_name}=(file)
48
+ create_or_update_datastream("#{ds_name}",file)
49
+ end
50
+
51
+ def derive_#{ds_name}
52
+ derive_datastream "#{ds_name}"
53
+ end
54
+ EOM
55
+ end
56
+
57
+ def derive_all
58
+ DEFAULT_IMAGE_DATASTREAMS.each { |ds| self.send "derive_#{ds.to_sym}" }
59
+ end
60
+
61
+
62
+ private
63
+
64
+ def delete_derivatives
65
+ DEFAULT_IMAGE_DATASTREAMS.each { |ds| datastreams[ds].delete if datastreams.has_key? ds }
66
+ end
67
+
68
+ def derive_datastream ds_name
69
+ ds_location = derivation_url(ds_name.to_sym, derivation_options[ds_name.to_sym])
70
+ ds = ActiveFedora::Datastream.new(:dsid => ds_name, :label => ds_name, :dsLocation => ds_location, :controlGroup => "M", :mimeType => "image/jpeg")
71
+ add_datastream(ds)
72
+ save
73
+ end
74
+
75
+ def derivation_url ds_name, opts={}
76
+ source_ds_name = ds_name == :max ? "content" : "max"
77
+ raise "Oops! Cannot find source datastream." unless datastreams.keys.include? source_ds_name
78
+ if ds_name == :max && datastreams["content"].attributes["mimeType"] == "image/jpeg"
79
+ url = datastream_url(source_ds_name)
80
+ else
81
+ opts_array=[]
82
+ opts.merge!(:url => datastream_url(source_ds_name)).each{|k,v| opts_array << "#{k}=#{v}" }
83
+ url = "#{admin_site}imagemanip/ImageManipulation?" + opts_array.join("&")
84
+ end
85
+ return url
86
+ end
87
+
88
+ def admin_site=admin_base_url
89
+ @admin_site = admin_base_url
90
+ end
91
+
92
+ def admin_site
93
+ @admin_site ||= Fedora::Repository.instance.send(:connection).site.to_s.gsub(/fedora$/,"")
94
+ end
95
+
96
+ def datastream_url ds_name="content"
97
+ "#{admin_site}fedora/objects/#{pid}/datastreams/#{ds_name}/content"
98
+ end
99
+
100
+ end
@@ -0,0 +1,177 @@
1
+ # Hydra::Image
2
+ #
3
+ # Default content datastreams: MASTER, MAX, THUMBNAIL, SCREEN
4
+ #
5
+ # Sample Usages:
6
+ #
7
+ # Generate an image and then assign an image to it:
8
+ # hi = Hydra::Image.new(:derivatives=>true)
9
+ # f = File.new("/path/to/image.tiff")
10
+ # hi.image=f
11
+ #
12
+ # Generate an image from a url:
13
+ # hi = Hydra::Image.new(:file=>"http://example.com/some_image.jpg", :derivatives=>true)
14
+ #
15
+ #
16
+ # Generate an image from a file:
17
+ # f = File.new("/path/to/image.tiff")
18
+ # hi = Hydra::Image.new(:file=>f, :derivatives=>true)
19
+ #
20
+ # Generate an image with alternate resizing:
21
+ # hi = Hydra::Image.new(:file=>file)
22
+ # hi.derivations = {:thumbnail=> {:op => "resize", :newWidth => 75 }
23
+ # hi.send(:generate_derivatives)
24
+ #
25
+
26
+ require "hydra"
27
+ require "httparty"
28
+
29
+ module Hydra
30
+ class Image < ActiveFedora::Base
31
+ include Hydra::ModelMethods
32
+ include HTTParty
33
+
34
+ class Hydra::Image::NoFileError < RuntimeError; end;
35
+ class Hydra::Image::UnknownImageType < RuntimeError; end;
36
+
37
+ DEFAULT_IMAGE_DATASTREAMS = ["MASTER","MAX","THUMBNAIL","SCREEN"]
38
+
39
+ DS_DEFAULTS = {
40
+ :max => {:op => "convert", :convertTo => "jpg"},
41
+ :thumbnail => {:op => "resize",:newWidth=> 100},
42
+ :screen => {:op => "resize", :newWidth => 960}
43
+ }
44
+
45
+ attr_accessor :derivations, :generate_derived_images
46
+
47
+ def initialize( attrs={})
48
+ existing_image = true if attrs[:pid]
49
+ @generate_derived_images = attrs[:derivatives] ? attrs[:derivatives] : false
50
+ super
51
+ unless existing_image
52
+ if attrs.has_key?(:file) #&& attrs[:file].class == File
53
+ self.image = attrs[:file]
54
+ attrs.delete(:file)
55
+ elsif attrs.has_key?(:stream) && attrs.has_key?(:image_type)
56
+ data = attrs[:stream]
57
+ attrs.delete(:stream)
58
+ self.image = data, attrs[:image_type]
59
+ else
60
+ #raise Hydra::Image::NoFileError, "No file indicated."
61
+ end
62
+ end
63
+ end
64
+
65
+ has_relationship "parts", :is_part_of, :inbound => true
66
+
67
+ # Uses the Hydra Rights Metadata Schema for tracking access permissions & copyright
68
+ has_metadata :name => "rightsMetadata", :type => Hydra::RightsMetadata
69
+
70
+ # A place to put extra metadata values
71
+ has_metadata :name => "properties", :type => ActiveFedora::MetadataDatastream do |m|
72
+ m.field 'collection', :string
73
+ m.field 'depositor', :string
74
+ end
75
+
76
+ def image=(image_data)
77
+ delete_file_datastreams
78
+ case image_data
79
+ when File
80
+ master_from_file image_data
81
+ when Array
82
+ needs_cleanup = true
83
+ image_file = string_to_file(image_data[0],"MASTER",image_data[1])
84
+ master_from_file image_file
85
+ when String
86
+ master_from_url image_data
87
+ else
88
+ raise Hydra::Image::UnknownImageType, "Specified image is neither a file nor an appropriate image blob: #{image_data.class.to_s}"
89
+ end
90
+ save
91
+ File.delete(image_file.path) if needs_cleanup
92
+ generate_derivatives if @generate_derived_images
93
+ end
94
+
95
+ def ds_options
96
+ if @derivations
97
+ return DS_DEFAULTS.merge( @derivations )
98
+ else
99
+ return DS_DEFAULTS
100
+ end
101
+ end
102
+
103
+ def derivative_datastream ds_name
104
+ opts = ds_options[ds_name]
105
+ ds_location = derivation_url(ds_name, opts)
106
+ ds = ActiveFedora::Datastream.new(:dsid => ds_name.to_s.upcase, :label => ds_name.to_s.upcase, :dsLocation => ds_location, :controlGroup => "M", :mimeType => "image/jpeg")
107
+ add_datastream(ds)
108
+ save
109
+ end
110
+
111
+ DEFAULT_IMAGE_DATASTREAMS.each do |m|
112
+ class_eval <<-EOM
113
+ def has_#{m.downcase}?
114
+ self.datastreams.keys.include? "#{m}"
115
+ end
116
+
117
+ def #{m.downcase}
118
+ datastreams["#{m}"].content if has_#{m.downcase}?
119
+ end
120
+ EOM
121
+ end
122
+
123
+ private
124
+
125
+ def master_from_file image_file
126
+ add_file_datastream(image_file,:dsid=>"MASTER",:label=>"MASTER")
127
+
128
+ end
129
+
130
+ def master_from_url url
131
+ puts "creating datastream object for: #{url}"
132
+ mime_types = MIME::Types.of(url.split(/\//).last)
133
+ mime_type ||= mime_types.empty? ? "application/octet-stream" : mime_types.first.content_type
134
+ ds = ActiveFedora::Datastream.new(:dsid=> "MASTER", :label => "MASTER", :controlGroup => "M", :dsLocation => url, :mimeType=>mime_type)
135
+ add_datastream(ds)
136
+ save
137
+ end
138
+
139
+ def generate_derivatives
140
+ DEFAULT_IMAGE_DATASTREAMS.each {|ds| derivative_datastream ds.downcase.to_sym unless ds == "MASTER"}
141
+ end
142
+
143
+ def delete_file_datastreams
144
+ DEFAULT_IMAGE_DATASTREAMS.each {|ds_name| datastreams[ds_name].delete if datastreams.has_key? ds_name}
145
+ end
146
+
147
+ def derivation_url ds_name, opts={}
148
+ source_ds_name = ds_name == :max ? "MASTER" : "MAX"
149
+ if ds_name == :max && datastreams["MASTER"].attributes["mimeType"] == "image/jpeg"
150
+ url = datastream_url(source_ds_name)
151
+ else
152
+ opts_array=[]
153
+ opts.merge!(:url => datastream_url(source_ds_name)).each{|k,v| opts_array << "#{k}=#{v}" }
154
+ url = "#{admin_site}imagemanip/ImageManipulation?" + opts_array.join("&")
155
+ end
156
+ return url
157
+ end
158
+
159
+ def admin_site
160
+ Fedora::Repository.instance.send(:connection).site.to_s.gsub(/fedora$/,"")
161
+ end
162
+
163
+ def string_to_file blob, suffix, ext=nil
164
+ file_name = Time.now.strftime("%Y%m%d-%H%M%S")
165
+ ext = "jpg" unless suffix == "MASTER"
166
+ f = File.new("#{Rails.root}/tmp/#{file_name}-#{suffix}.#{ext}","w")
167
+ f.write blob
168
+ f.close
169
+ return f
170
+ end
171
+
172
+ def datastream_url ds_name="MASTER"
173
+ "#{admin_site}fedora/objects/#{pid}/datastreams/#{ds_name}/content"
174
+ end
175
+
176
+ end
177
+ end
@@ -0,0 +1,95 @@
1
+ module Hydra::ModelMethods
2
+ #
3
+ # Adds metadata about the depositor to the asset
4
+ #
5
+ def apply_depositor_metadata(depositor_id)
6
+ prop_ds = self.datastreams_in_memory["properties"]
7
+ rights_ds = self.datastreams_in_memory["rightsMetadata"]
8
+
9
+ if !prop_ds.nil? && prop_ds.respond_to?(:depositor_values)
10
+ prop_ds.depositor_values = depositor_id unless prop_ds.nil?
11
+ end
12
+ rights_ds.update_indexed_attributes([:edit_access, :person]=>depositor_id) unless rights_ds.nil?
13
+ return true
14
+ end
15
+
16
+ #
17
+ # Set the collection type (e.g. hydrangea_article) for the asset
18
+ #
19
+ def set_collection_type(collection)
20
+ prop_ds = self.datastreams_in_memory["properties"]
21
+ if !prop_ds.nil? && prop_ds.respond_to?(:collection_values)
22
+ prop_ds.collection_values = collection
23
+ end
24
+ end
25
+
26
+ # Set the title and label on the current object
27
+ #
28
+ # @param [String] new_title
29
+ # @param [Hash] opts (optional) hash of configuration options
30
+ #
31
+ # @example Use :only_if_blank option to only update the values when the label is empty
32
+ # obj.set_title_and_label("My Title", :only_if_blank=> true)
33
+ def set_title_and_label(new_title, opts={})
34
+ if opts[:only_if_blank]
35
+ if self.label.nil? || self.label.empty?
36
+ self.label = new_title
37
+ self.set_title( new_title )
38
+ end
39
+ else
40
+ self.label = new_title
41
+ set_title( new_title )
42
+ end
43
+ end
44
+
45
+ # Set the title and label on the current object
46
+ #
47
+ # @param [String] new_title
48
+ # @param [Hash] opts (optional) hash of configuration options
49
+ def set_title(new_title, opts={})
50
+ if self.datastreams.has_key?("descMetadata")
51
+ desc_metadata_ds = self.datastreams["descMetadata"]
52
+ if desc_metadata_ds.kind_of?(ActiveFedora::NokogiriDatastream)
53
+ if desc_metadata_ds.class.terminology.has_term?(:title)
54
+ desc_metadata_ds.update_values([:title]=>new_title)
55
+ end
56
+ elsif desc_metadata_ds.respond_to?(:title_values)
57
+ desc_metadata_ds.title_values = new_title
58
+ end
59
+ end
60
+ end
61
+
62
+ # Call insert_contributor on the descMetadata datastream
63
+ def insert_contributor(type, opts={})
64
+ ds = self.datastreams_in_memory["descMetadata"]
65
+ node, index = ds.insert_contributor(type,opts)
66
+ return node, index
67
+ end
68
+
69
+ # Call remove_contributor on the descMetadata datastream
70
+ def remove_contributor(type, index)
71
+ ds = self.datastreams_in_memory["descMetadata"]
72
+ result = ds.remove_contributor(type,index)
73
+ return result
74
+ end
75
+
76
+ # Call to remove file obects
77
+ def destroy_child_assets
78
+ destroyable_child_assets.each.inject([]) do |destroyed,fo|
79
+ destroyed << fo.pid
80
+ fo.delete
81
+ destroyed
82
+ end
83
+
84
+ end
85
+
86
+ def destroyable_child_assets
87
+ return [] unless self.file_objects
88
+ self.file_objects.each.inject([]) do |file_assets, fo|
89
+ if fo.relationships[:self].has_key?(:is_part_of) && fo.relationships[:self][:is_part_of].length == 1 && fo.relationships[:self][:is_part_of][0].match(/#{self.pid}$/)
90
+ file_assets << fo
91
+ end
92
+ file_assets
93
+ end
94
+ end
95
+ end