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,75 @@
1
+ require 'mediashelf/active_fedora_helper'
2
+
3
+ module HydraAssetsHelper
4
+ include MediaShelf::ActiveFedoraHelper
5
+
6
+ # Create a link for creating a new asset of the specified content_type
7
+ # If user is not logged in, the link leads to the login page with appropriate redirect params for creating the asset after logging in
8
+ # @param [String] link_label for the link
9
+ # @param [String] content_type
10
+ def link_to_create_asset(link_label, content_type)
11
+ if current_user
12
+ link_to link_label, {:action => 'new', :controller => 'assets', :content_type => content_type}, :class=>"create_asset"
13
+ else
14
+ link_to link_label, new_user_session_path(:redirect_params => {:action => "new", :controller=> "assets", :content_type => content_type}), :class=>"create_asset"
15
+ end
16
+ end
17
+
18
+ # Render a link to delete the given asset from the repository.
19
+ # Includes a confirmation message.
20
+ def delete_asset_link(pid, asset_type_display="asset")
21
+ "<a href=\"#{ url_for(:action=>:delete, :controller=>:catalog, :id=>pid)}\" class=\"delete_asset\" >Delete this #{asset_type_display}</a>".html_safe
22
+ end
23
+
24
+ def document_type(document)
25
+ document.fetch( Blacklight.config[:show][:display_type],[""]).first.gsub("info:fedora/afmodel:","")
26
+ end
27
+
28
+ def get_person_from_role(doc,role,opts={})
29
+ i = 0
30
+ while i < 10
31
+ persons_roles = doc["person_#{i}_role_t"].map{|w|w.strip.downcase} unless doc["person_#{i}_role_t"].nil?
32
+ if persons_roles and persons_roles.include?(role.downcase)
33
+ return {:first=>doc["person_#{i}_first_name_t"], :last=>doc["person_#{i}_last_name_t"]}
34
+ end
35
+ i += 1
36
+ end
37
+ end
38
+
39
+ def get_file_asset_count(document)
40
+ count = 0
41
+ obj = load_af_instance_from_solr(document)
42
+ count += obj.file_objects.length unless obj.nil?
43
+ count
44
+ end
45
+
46
+ def get_file_asset_description(document)
47
+ obj = load_af_instance_from_solr(document)
48
+ if obj.nil? || obj.file_objects.empty?
49
+ return ""
50
+ else
51
+ fobj = FileAsset.load_instance_from_solr(obj.file_objects.first.pid)
52
+ fobj.nil? ? "" : short_description(fobj.datastreams["descMetadata"].get_values("description").first)
53
+ end
54
+ end
55
+
56
+ def short_description(desc,max=150)
57
+ if desc.length > max
58
+ desc = desc[0..max].concat("...")
59
+ end
60
+ short_description = desc.capitalize
61
+ end
62
+
63
+ def datastream_disseminator_url pid, datastream_name
64
+ begin
65
+ base_url = Fedora::Repository.instance.send(:connection).site.to_s
66
+ rescue
67
+ base_url = "http://localhost:8983/fedora"
68
+ end
69
+ "#{base_url}/get/#{pid}/#{datastream_name}"
70
+ end
71
+
72
+ def disseminator_link pid, datastream_name
73
+ "<a class=\"fbImage\" href=\"#{ datastream_disseminator_url(pid, datastream_name) }\">view</a>"
74
+ end
75
+ end
@@ -0,0 +1,23 @@
1
+ module HydraDjatokaHelper
2
+
3
+ def hydra_djatoka_url_for(document, opts={})
4
+
5
+ if document.kind_of?(SolrDocument)
6
+ pid = document.id
7
+ elsif document.kind_of?(Mash)
8
+ pid = document[:id]
9
+ elsif document.respond_to?(:pid)
10
+ pid = document.pid
11
+ end
12
+
13
+ if !pid.nil?
14
+ if opts[:scale]
15
+ result = url_for(:controller=>:get,:action=>"show",:id=>pid, :format=>"jp2", "image_server[scale]"=>opts[:scale])
16
+ else
17
+ result = url_for(:controller=>:get,:action=>"show",:id=>pid, :format=>"jp2", "image_server"=>true)
18
+ end
19
+ end
20
+
21
+ end
22
+
23
+ end
@@ -0,0 +1,365 @@
1
+ require "inline_editable_metadata_helper"
2
+ require "block_helpers"
3
+ require "active_support"
4
+ require "redcloth" # Provides textile parsing support for textile_area method
5
+ require 'sanitize' # Replaces white_list_helper
6
+
7
+ module HydraFedoraMetadataHelper
8
+
9
+ def fedora_text_field(resource, datastream_name, field_key, opts={})
10
+ field_name = field_name_for(field_key)
11
+ field_values = get_values_from_datastream(resource, datastream_name, field_key, opts)
12
+ field_values = [""] if field_values.empty?
13
+ if opts.fetch(:multiple, true)
14
+ container_tag_type = :li
15
+ else
16
+ field_values = [field_values.first]
17
+ container_tag_type = :span
18
+ end
19
+
20
+ body = ""
21
+
22
+ field_values.each_with_index do |current_value, z|
23
+ base_id = generate_base_id(field_name, current_value, field_values, opts)
24
+ name = "asset[#{datastream_name}][#{field_name}][#{z}]"
25
+ body << "<#{container_tag_type.to_s} class=\"editable-container field\" id=\"#{base_id}-container\">"
26
+ body << "<a href=\"\" title=\"Delete '#{h(current_value)}'\" class=\"destructive field\">Delete</a>" if opts.fetch(:multiple, true) && !current_value.empty?
27
+ body << "<span class=\"editable-text text\" id=\"#{base_id}-text\" style=\"display:none;\">#{h(current_value.lstrip)}</span>"
28
+ body << "<input class=\"editable-edit edit\" id=\"#{base_id}\" data-datastream-name=\"#{datastream_name}\" rel=\"#{field_name}\" name=\"#{name}\" value=\"#{h(current_value.lstrip)}\"/>"
29
+ body << "</#{container_tag_type}>"
30
+ end
31
+ result = field_selectors_for(datastream_name, field_key)
32
+ if opts.fetch(:multiple, true)
33
+ result << content_tag(:ol, body.html_safe, :rel=>field_name)
34
+ else
35
+ result << body
36
+ end
37
+
38
+ result.html_safe
39
+ end
40
+
41
+ def fedora_text_area(resource, datastream_name, field_key, opts={})
42
+ fedora_textile_text_area(resource, datastream_name, field_key, opts)
43
+ end
44
+
45
+ # Textile textarea varies from the other methods in a few ways
46
+ # Since we're using jeditable with this instead of fluid, we need to provide slightly different hooks for the javascript
47
+ # * we are storing the datastream name in data-datastream-name so that we can construct a load url on the fly when initializing the textarea
48
+ def fedora_textile_text_area(resource, datastream_name, field_key, opts={})
49
+ field_name = field_name_for(field_key)
50
+ field_values = get_values_from_datastream(resource, datastream_name, field_key, opts)
51
+ field_values = [""] if field_values.empty?
52
+ if opts.fetch(:multiple, true)
53
+ container_tag_type = :li
54
+ else
55
+ field_values = [field_values.first]
56
+ container_tag_type = :span
57
+ end
58
+ body = ""
59
+
60
+ field_values.each_with_index do |current_value, z|
61
+ base_id = generate_base_id(field_name, current_value, field_values, opts)
62
+ name = "asset[#{datastream_name}][#{field_name}][#{z}]".html_safe
63
+ processed_field_value = Sanitize.clean( RedCloth.new(current_value, [:sanitize_html]).to_html, Sanitize::Config::BASIC)
64
+
65
+ body << "<#{container_tag_type.to_s} class=\"editable-container field\" id=\"#{base_id}-container\">".html_safe
66
+ # Not sure why there is we're not allowing the for the first textile to be deleted, but this was in the original helper.
67
+ body << "<a href=\"\" title=\"Delete '#{h(current_value)}'\" class=\"destructive field\">Delete</a>".html_safe unless z == 0
68
+ body << "<span class=\"editable-text text\" id=\"#{base_id}-text\" style=\"display:none;\">#{processed_field_value}</span>".html_safe
69
+ body << "<textarea class=\"editable-edit edit\" id=\"#{base_id}\" data-datastream-name=\"#{datastream_name}\" rel=\"#{field_name}\" name=\"#{name}\" rows=\"10\" cols=\"25\">#{h(current_value)}</textarea>".html_safe
70
+ body << "</#{container_tag_type}>".html_safe
71
+ end
72
+
73
+ result = field_selectors_for(datastream_name, field_key)
74
+
75
+ if opts.fetch(:multiple, true)
76
+ result << content_tag(:ol, body.html_safe, :rel=>field_name)
77
+ else
78
+ result << body
79
+ end
80
+ result.html_safe
81
+
82
+ end
83
+
84
+ # Expects :choices option. Option tags for the select are generated from the :choices option using Rails "options_for_select":http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/options_for_select helper
85
+ # If no :choices option is provided, returns a regular fedora_text_field
86
+ def fedora_select(resource, datastream_name, field_key, opts={})
87
+ if opts[:choices].nil?
88
+ result = fedora_text_field(resource, datastream_name, field_key, opts)
89
+ else
90
+ choices = opts[:choices]
91
+ field_name = field_name_for(field_key)
92
+ field_values = get_values_from_datastream(resource, datastream_name, field_key, opts)
93
+
94
+ body = ""
95
+ z = 0
96
+ base_id = generate_base_id(field_name, field_values.first, field_values, opts.merge({:multiple=>false}))
97
+ name = "asset[#{datastream_name}][#{field_name}][#{z}]".html_safe
98
+
99
+ body << "<select name=\"#{name}\" class=\"metadata-dd select-edit\" id=\"#{field_name}\" rel=\"#{field_name}\">".html_safe
100
+ body << options_for_select(choices, field_values)
101
+ body << "</select>".html_safe
102
+
103
+ result = field_selectors_for(datastream_name, field_key)
104
+ result << body.html_safe
105
+ end
106
+ return result
107
+ end
108
+
109
+ def fedora_date_select(resource, datastream_name, field_key, opts={})
110
+ field_name = field_name_for(field_key)
111
+ field_values = get_values_from_datastream(resource, datastream_name, field_key, opts)
112
+ base_id = generate_base_id(field_name, field_values.first, field_values, opts.merge({:multiple=>false}))
113
+ name = "asset[#{datastream_name}][#{base_id}]".html_safe
114
+
115
+ value = field_values.first
116
+ field_value = value.nil? ? "" : value
117
+
118
+ field_value[/(\d+)-(\d+)-(\d+)/]
119
+ year = ($1.nil? or $1.empty?) ? "" : $1.to_i
120
+ month = ($2.nil? or $2.empty?) ? "-1" : $2
121
+ day = ($3.nil? or $3.empty?) ? "-1" : $3
122
+
123
+ # Make sure that month and day values are double-digit
124
+ [month, day].each {|v| v.length == 1 ? v.insert(0, "0") : nil }
125
+
126
+
127
+ year_options = Array.new(101) {|i| 1910+i}
128
+ # year_options = Array.new(4) {|i| 1990+i}
129
+
130
+ year_options.insert(0, ["Year", "-1"])
131
+
132
+ body = ""
133
+ body << "<div class=\"date-select\" name=\"#{name}\" rel=\"#{field_name}\">".html_safe
134
+ body << "<input class=\"controlled-date-part w4em\" style=\"width:4em;\" type=\"text\" id=\"#{base_id}-sel-y\" name=\"#{base_id}-sel-y\" maxlength=\"4\" value=\"#{year}\" />".html_safe
135
+ body << "<select class=\"controlled-date-part\" id=\"#{base_id}-sel-mm\" name=\"#{base_id}-sel-mm\">".html_safe
136
+ body << options_for_select([["Month","-1"],["January", "01"],["February", "02"],["March", "03"],
137
+ ["April", "04"],["May", "05"],["June", "06"],["July", "07"],["August", "08"],
138
+ ["September", "09"],["October", "10"],["November", "11"],["December", "12"]
139
+ ], month)
140
+ body << "</select> / ".html_safe
141
+ body << "<select class=\"controlled-date-part\" id=\"#{base_id}-sel-dd\" name=\"#{base_id}-sel-dd\">".html_safe
142
+ body << options_for_select([["Day","-1"],"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"], day)
143
+ body << "</select>".html_safe
144
+ body << "</div>".html_safe
145
+
146
+ script = <<-EOF
147
+ <script type="text/javascript">
148
+ // <![CDATA[
149
+ // since the form element ids need to be generated on the server side for the options, the options are attached to the wrapping div via the jQuery data() method.
150
+ $('div.date-select[name="#{name}"]').data("opts", {
151
+ formElements:{"#{base_id}-sel-dd":"d","#{base_id}-sel-y":"Y","#{base_id}-sel-mm":"m"}
152
+ });
153
+ // ]]>
154
+ </script>
155
+ EOF
156
+ body << script.html_safe
157
+
158
+
159
+ result = field_selectors_for(datastream_name, field_key)
160
+ result << body.html_safe
161
+ return result
162
+ end
163
+
164
+ def fedora_submit(resource, datastream_name, field_key, opts={})
165
+ result = ""
166
+ h_name = OM::XML::Terminology.term_hierarchical_name(*field_key)
167
+ field_key.each do |pointer|
168
+ result << tag(:input, :type=>"submit", :rel=>h_name, :name=>"field_selectors[#{datastream_name}][#{h_name}]", :value => field_key.to_s.capitalize)
169
+ end
170
+ return result
171
+ end
172
+
173
+ def fedora_checkbox(resource, datastream_name, field_key, opts={})
174
+ result = ""
175
+ field_values = get_values_from_datastream(resource, datastream_name, field_key, opts)
176
+ h_name = OM::XML::Terminology.term_hierarchical_name(*field_key)
177
+
178
+ v_name = field_key.last.to_s
179
+
180
+ checked = field_values.first.downcase == "yes" ? "checked" : ""
181
+
182
+ result = field_selectors_for(datastream_name, field_key)
183
+
184
+ # adding so that customized checked and unchecked values can be passed in
185
+ checked_value = (opts[:default_values] && opts[:default_values][:checked]) ? opts[:default_values][:checked] : "yes"
186
+ unchecked_value = (opts[:default_values] && opts[:default_values][:unchecked]) ? opts[:default_values][:unchecked] : "no"
187
+
188
+ result << tag(:input, :type=>"hidden", :id=>"#{h_name}_checked_value", :value=>checked_value )
189
+ result << tag(:input, :type=>"hidden", :id=>"#{h_name}_unchecked_value", :value=>unchecked_value )
190
+
191
+ if field_values.first.downcase == "yes"
192
+ result << tag(:input, :type=>"checkbox", :id=>h_name, :class=>"fedora-checkbox", :rel=>h_name, :name=>"asset[#{datastream_name}][#{h_name}][0]", :value=>checked_value, :checked=>"checked")
193
+ else
194
+ result << tag(:input, :type=>"checkbox", :id=>h_name, :class=>"fedora-checkbox", :rel=>h_name, :name=>"asset[#{datastream_name}][#{h_name}][0]", :value=>unchecked_value)
195
+ end
196
+ return result
197
+ end
198
+
199
+ # Expects :choices option.
200
+ # :choices should be a hash with value/label pairs
201
+ # :choices => {"first_choice"=>"Apple", "second_choice"=>"Pear" }
202
+ # If no :choices option is provided, returns a regular fedora_text_field
203
+ def fedora_radio_button(resource, datastream_name, field_key, opts={})
204
+ if opts[:choices].nil?
205
+ result = fedora_text_field(resource, datastream_name, field_key, opts)
206
+ else
207
+ choices = opts[:choices]
208
+
209
+ field_name = field_name_for(field_key)
210
+ field_values = get_values_from_datastream(resource, datastream_name, field_key, opts)
211
+ h_name = OM::XML::Terminology.term_hierarchical_name(*field_key)
212
+ default_value = opts.keys.include?(:default_value) ? opts[:default_value] : ""
213
+
214
+ selected_value = field_values.empty? ? "" : field_values.first
215
+ selected_value = default_value if selected_value.blank?
216
+
217
+ body = ""
218
+ z = 0
219
+ base_id = generate_base_id(field_name, field_values.first, field_values, opts.merge({:multiple=>false}))
220
+ name = "asset[#{datastream_name}][#{field_name}][#{z}]"
221
+
222
+ result = field_selectors_for(datastream_name, field_key)
223
+ choices.sort.each do |choice,label|
224
+ if choice == selected_value
225
+ result << tag(:input, :type=>"radio", :id=>"availability_#{choice}", :class=>"fedora-radio-button", :rel=>h_name, :name=>"asset[#{datastream_name}][#{h_name}][0]", :value=>choice.downcase, :checked=>true)
226
+ else
227
+ result << tag(:input, :type=>"radio", :id=>"availability_#{choice}", :class=>"fedora-radio-button", :rel=>h_name, :name=>"asset[#{datastream_name}][#{h_name}][0]", :value=>choice.downcase)
228
+ end
229
+ result << " <label>#{label}</label> ".html_safe
230
+ end
231
+ result
232
+ end
233
+ return result
234
+ end
235
+
236
+
237
+ def fedora_text_field_insert_link(datastream_name, field_key, opts={})
238
+ field_name = field_name_for(field_key) || field_key
239
+ field_type = field_name == "person" ? "person" : "textfield"
240
+ link_text = "Add #{(opts[:label] || field_key.last || field_key).to_s.camelize.titlecase}"
241
+ "<a class='addval #{field_type}' href='#' data-datastream-name=\"#{datastream_name}\" rel=\"#{field_name}\" title='#{link_text}'>#{link_text}</a>".html_safe
242
+ end
243
+
244
+ def fedora_text_area_insert_link(datastream_name, field_key, opts={})
245
+ field_name = field_name_for(field_key)
246
+ link_text = "Add #{(opts[:label] || field_key.last || field_key).to_s.camelize.titlecase}".html_safe
247
+ "<a class='addval textarea' href='#' data-datastream-name=\"#{datastream_name}\" rel=\"#{field_name}\" title='#{link_text}'>#{link_text}</a>".html_safe
248
+ end
249
+
250
+ def fedora_field_label(datastream_name, field_key, label=nil)
251
+ field_name = field_name_for(field_key)
252
+ if label.nil?
253
+ label = field_name
254
+ end
255
+ return content_tag "label", label, :for=>field_name
256
+ end
257
+
258
+ # Generate hidden inputs to handle mapping field names to server-side metadata mappings
259
+ # this allows us to round-trip OM metadata mappings
260
+ # also (importantly) allows us to avoid executing xpath queries from http requests.
261
+ # *Note*: It's important that you serialize these inputs in order from top to bottom (standard HTML form behavior)
262
+ def field_selectors_for(datastream_name, field_key)
263
+ result = ""
264
+ if field_key.kind_of?(Array)
265
+ h_name = OM::XML::Terminology.term_hierarchical_name(*field_key)
266
+ field_key.each do |pointer|
267
+ if pointer.kind_of?(Hash)
268
+ k = pointer.keys.first
269
+ v = pointer.values.first
270
+ # result << "<input type=\"hidden\", rel=\"#{h_name}\" name=\"field_selectors[#{datastream_name}][#{h_name}][][#{k}]\" value=\"#{v}\"/>"
271
+ result << tag(:input, :type=>"hidden", :class=>"fieldselector", :rel=>h_name, :name=>"field_selectors[#{datastream_name}][#{h_name}][][#{k}]", :value=>v)
272
+ else
273
+ result << tag(:input, :type=>"hidden", :class=>"fieldselector", :rel=>h_name, :name=>"field_selectors[#{datastream_name}][#{h_name}][]", :value=>pointer.to_s)
274
+ end
275
+ end
276
+ end
277
+ return result
278
+ end
279
+
280
+ # hydra_form_for block helper
281
+ # allows you to construct an entire hydra form by passing a block into this method
282
+ class HydraFormFor < BlockHelpers::Base
283
+
284
+ def initialize(resource, opts={})
285
+ @resource = resource
286
+ end
287
+
288
+ def fedora_label(datastream_name, field_key, opts={})
289
+ helper.fedora_label(@resource, datastream_name, field_key, opts)
290
+ end
291
+
292
+ def fedora_text_field(datastream_name, field_key, opts={})
293
+ helper.fedora_label(@resource, datastream_name, field_key, opts)
294
+ end
295
+
296
+ def fedora_text_area(datastream_name, field_key, opts={})
297
+ helper.fedora_text_area(@resource, datastream_name, field_key, opts)
298
+ end
299
+
300
+ def fedora_select(datastream_name, field_key, opts={})
301
+ helper.fedora_select(@resource, datastream_name, field_key, opts)
302
+ end
303
+
304
+ def fedora_submit(datastream_name, field_key, opts={})
305
+ helper.fedora_submit(@resource, datastream_name, field_key, opts)
306
+ end
307
+
308
+ def fedora_checkbox(datastream_name, field_key, opts={})
309
+ helper.fedora_checkbox(@resource, datastream_name, field_key, opts)
310
+ end
311
+
312
+ def fedora_radio_button(datastream_name, field_key, opts={})
313
+ helper.fedora_radio_button(@resource, datastream_name, field_key, opts)
314
+ end
315
+
316
+ def fedora_text_field_insert_link(datastream_name, field_key, opts={})
317
+ helper.fedora_text_field_insert_link(@resource, datastream_name, field_key, opts={})
318
+ end
319
+
320
+ def fedora_field_label(datastream_name, field_key, opts={})
321
+ helper.fedora_field_label(@resource, datastream_name, field_key, opts)
322
+ end
323
+
324
+ def display(body)
325
+ inner_html = content_tag :input, :type=>"hidden", :name=>"content_type", :value=>@resource.class.to_s.underscore
326
+ inner_html = inner_html << body
327
+ content_tag :form, inner_html
328
+ end
329
+
330
+ end
331
+
332
+ #
333
+ # Internal helper methods
334
+ #
335
+
336
+ # retrieve field values from datastream.
337
+ # If :values is provided, skips accessing the datastream and returns the contents of :values instead.
338
+ def get_values_from_datastream(resource, datastream_name, field_key, opts={})
339
+ if opts.has_key?(:values)
340
+ values = opts[:values]
341
+ if values.nil? then values = [opts.fetch(:default, "")] end
342
+ else
343
+ values = resource.get_values_from_datastream(datastream_name, field_key, opts.fetch(:default, ""))
344
+ if values.empty? then values = [ opts.fetch(:default, "") ] end
345
+ end
346
+ return values
347
+ end
348
+
349
+ def field_name_for(field_key)
350
+ if field_key.kind_of?(Array)
351
+ return OM::XML::Terminology.term_hierarchical_name(*field_key)
352
+ else
353
+ field_key.to_s
354
+ end
355
+ end
356
+
357
+ def generate_base_id(field_name, current_value, values, opts)
358
+ if opts.fetch(:multiple, true)
359
+ return field_name+"_"+values.index(current_value).to_s
360
+ else
361
+ return field_name
362
+ end
363
+ end
364
+
365
+ end