blacklight 3.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 (170) hide show
  1. data/.gitignore +17 -0
  2. data/.gitmodules +6 -0
  3. data/.yardopts +4 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE +14 -0
  6. data/README.rdoc +168 -0
  7. data/Rakefile +9 -0
  8. data/app/controllers/bookmarks_controller.rb +98 -0
  9. data/app/controllers/feedback_controller.rb +37 -0
  10. data/app/controllers/folder_controller.rb +49 -0
  11. data/app/controllers/saved_searches_controller.rb +45 -0
  12. data/app/controllers/search_history_controller.rb +25 -0
  13. data/app/helpers/blacklight_helper.rb +606 -0
  14. data/app/helpers/bookmarks_helper.rb +3 -0
  15. data/app/helpers/catalog_helper.rb +65 -0
  16. data/app/helpers/feedback_helper.rb +2 -0
  17. data/app/helpers/hash_as_hidden_fields.rb +57 -0
  18. data/app/helpers/render_constraints_helper.rb +120 -0
  19. data/app/helpers/saved_searches_helper.rb +2 -0
  20. data/app/helpers/search_history_helper.rb +2 -0
  21. data/app/models/bookmark.rb +6 -0
  22. data/app/models/record_mailer.rb +43 -0
  23. data/app/models/search.rb +19 -0
  24. data/app/views/_flash_msg.html.erb +6 -0
  25. data/app/views/_user_util_links.html.erb +13 -0
  26. data/app/views/bookmarks/index.html.erb +33 -0
  27. data/app/views/catalog/_bookmark_control.html.erb +25 -0
  28. data/app/views/catalog/_bookmark_form.html.erb +8 -0
  29. data/app/views/catalog/_citation.html.erb +15 -0
  30. data/app/views/catalog/_constraints.html.erb +7 -0
  31. data/app/views/catalog/_constraints_element.html.erb +33 -0
  32. data/app/views/catalog/_did_you_mean.html.erb +10 -0
  33. data/app/views/catalog/_document_list.html.erb +30 -0
  34. data/app/views/catalog/_email_form.html.erb +11 -0
  35. data/app/views/catalog/_facet_limit.html.erb +33 -0
  36. data/app/views/catalog/_facet_pagination.html.erb +28 -0
  37. data/app/views/catalog/_facets.html.erb +9 -0
  38. data/app/views/catalog/_folder_control.html.erb +12 -0
  39. data/app/views/catalog/_home.html.erb +6 -0
  40. data/app/views/catalog/_home_text.html.erb +6 -0
  41. data/app/views/catalog/_index_partials/_default.erb +11 -0
  42. data/app/views/catalog/_marc_view.html.erb +33 -0
  43. data/app/views/catalog/_opensearch_response_metadata.html.erb +3 -0
  44. data/app/views/catalog/_previous_next_doc.html.erb +6 -0
  45. data/app/views/catalog/_refworks_form.html.erb +7 -0
  46. data/app/views/catalog/_results_pagination.html.erb +11 -0
  47. data/app/views/catalog/_search_form.html.erb +14 -0
  48. data/app/views/catalog/_show_partials/_default.html.erb +9 -0
  49. data/app/views/catalog/_show_sidebar.html.erb +1 -0
  50. data/app/views/catalog/_show_tools.html.erb +46 -0
  51. data/app/views/catalog/_sms_form.html.erb +23 -0
  52. data/app/views/catalog/_solr_request.html.erb +5 -0
  53. data/app/views/catalog/_sort_and_per_page.html.erb +20 -0
  54. data/app/views/catalog/_unapi_microformat.html.erb +1 -0
  55. data/app/views/catalog/citation.html.erb +1 -0
  56. data/app/views/catalog/email.erb +1 -0
  57. data/app/views/catalog/endnote.endnote.erb +1 -0
  58. data/app/views/catalog/facet.html.erb +28 -0
  59. data/app/views/catalog/index.atom.builder +108 -0
  60. data/app/views/catalog/index.html.erb +37 -0
  61. data/app/views/catalog/index.rss.builder +19 -0
  62. data/app/views/catalog/librarian_view.html.erb +3 -0
  63. data/app/views/catalog/opensearch.json.erb +0 -0
  64. data/app/views/catalog/opensearch.xml.erb +11 -0
  65. data/app/views/catalog/send_email_record.erb +0 -0
  66. data/app/views/catalog/show.endnote.erb +1 -0
  67. data/app/views/catalog/show.html.erb +42 -0
  68. data/app/views/catalog/show.refworks.erb +1 -0
  69. data/app/views/catalog/sms.erb +1 -0
  70. data/app/views/catalog/unapi.xml.builder +6 -0
  71. data/app/views/feedback/complete.html.erb +3 -0
  72. data/app/views/feedback/show.html.erb +20 -0
  73. data/app/views/folder/_tools.html.erb +23 -0
  74. data/app/views/folder/index.html.erb +44 -0
  75. data/app/views/layouts/blacklight.html.erb +49 -0
  76. data/app/views/record_mailer/email_record.erb +6 -0
  77. data/app/views/record_mailer/sms_record.erb +4 -0
  78. data/app/views/saved_searches/index.html.erb +27 -0
  79. data/app/views/search_history/index.html.erb +23 -0
  80. data/blacklight.gemspec +50 -0
  81. data/config.ru +4 -0
  82. data/config/routes.rb +54 -0
  83. data/db/seeds.rb +7 -0
  84. data/features/generators.feature +77 -0
  85. data/features/support/aruba.rb +9 -0
  86. data/install.rb +0 -0
  87. data/install/solr.yml +8 -0
  88. data/lib/blacklight.rb +121 -0
  89. data/lib/blacklight/catalog.rb +311 -0
  90. data/lib/blacklight/comma_link_renderer.rb +27 -0
  91. data/lib/blacklight/configurable.rb +46 -0
  92. data/lib/blacklight/controller.rb +121 -0
  93. data/lib/blacklight/engine.rb +32 -0
  94. data/lib/blacklight/exceptions.rb +13 -0
  95. data/lib/blacklight/marc.rb +46 -0
  96. data/lib/blacklight/marc/citation.rb +251 -0
  97. data/lib/blacklight/search_fields.rb +107 -0
  98. data/lib/blacklight/solr.rb +7 -0
  99. data/lib/blacklight/solr/document.rb +239 -0
  100. data/lib/blacklight/solr/document/dublin_core.rb +40 -0
  101. data/lib/blacklight/solr/document/email.rb +15 -0
  102. data/lib/blacklight/solr/document/marc.rb +84 -0
  103. data/lib/blacklight/solr/document/marc_export.rb +430 -0
  104. data/lib/blacklight/solr/document/sms.rb +13 -0
  105. data/lib/blacklight/solr/facet_paginator.rb +93 -0
  106. data/lib/blacklight/solr_helper.rb +413 -0
  107. data/lib/blacklight/user.rb +55 -0
  108. data/lib/blacklight/version.rb +3 -0
  109. data/lib/colorize.rb +196 -0
  110. data/lib/generators/blacklight/blacklight_generator.rb +134 -0
  111. data/lib/generators/blacklight/templates/SolrMarc.jar +0 -0
  112. data/lib/generators/blacklight/templates/catalog_controller.rb +8 -0
  113. data/lib/generators/blacklight/templates/config/SolrMarc/config-test.properties +37 -0
  114. data/lib/generators/blacklight/templates/config/SolrMarc/config.properties +37 -0
  115. data/lib/generators/blacklight/templates/config/SolrMarc/index.properties +97 -0
  116. data/lib/generators/blacklight/templates/config/SolrMarc/index_scripts/dewey.bsh +47 -0
  117. data/lib/generators/blacklight/templates/config/SolrMarc/index_scripts/format.bsh +126 -0
  118. data/lib/generators/blacklight/templates/config/SolrMarc/translation_maps/README_MAPS +1 -0
  119. data/lib/generators/blacklight/templates/config/SolrMarc/translation_maps/callnumber_map.properties +407 -0
  120. data/lib/generators/blacklight/templates/config/SolrMarc/translation_maps/composition_era_map.properties +56 -0
  121. data/lib/generators/blacklight/templates/config/SolrMarc/translation_maps/country_map.properties +379 -0
  122. data/lib/generators/blacklight/templates/config/SolrMarc/translation_maps/format_map.properties +50 -0
  123. data/lib/generators/blacklight/templates/config/SolrMarc/translation_maps/instrument_map.properties +101 -0
  124. data/lib/generators/blacklight/templates/config/SolrMarc/translation_maps/language_map.properties +490 -0
  125. data/lib/generators/blacklight/templates/config/blacklight_config.rb +245 -0
  126. data/lib/generators/blacklight/templates/config/solr.yml +6 -0
  127. data/lib/generators/blacklight/templates/migrations/add_user_types_to_bookmarks_searches.rb +11 -0
  128. data/lib/generators/blacklight/templates/migrations/create_bookmarks.rb +17 -0
  129. data/lib/generators/blacklight/templates/migrations/create_searches.rb +15 -0
  130. data/lib/generators/blacklight/templates/migrations/remove_editable_fields_from_bookmarks.rb +11 -0
  131. data/lib/generators/blacklight/templates/public/images/blacklight/bg.png +0 -0
  132. data/lib/generators/blacklight/templates/public/images/blacklight/border.png +0 -0
  133. data/lib/generators/blacklight/templates/public/images/blacklight/bul_sq_gry.gif +0 -0
  134. data/lib/generators/blacklight/templates/public/images/blacklight/checkmark.gif +0 -0
  135. data/lib/generators/blacklight/templates/public/images/blacklight/logo.png +0 -0
  136. data/lib/generators/blacklight/templates/public/images/blacklight/magnifying_glass.gif +0 -0
  137. data/lib/generators/blacklight/templates/public/images/blacklight/remove.gif +0 -0
  138. data/lib/generators/blacklight/templates/public/images/blacklight/separator.gif +0 -0
  139. data/lib/generators/blacklight/templates/public/images/blacklight/start_over.gif +0 -0
  140. data/lib/generators/blacklight/templates/public/javascripts/blacklight.js +485 -0
  141. data/lib/generators/blacklight/templates/public/javascripts/jquery-1.4.2.min.js +154 -0
  142. data/lib/generators/blacklight/templates/public/javascripts/jquery-ui-1.8.1.custom.min.js +756 -0
  143. data/lib/generators/blacklight/templates/public/stylesheets/blacklight.css +487 -0
  144. data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  145. data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  146. data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  147. data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  148. data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  149. data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  150. data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-bg_gloss-wave_35_558fd0_500x100.png +0 -0
  151. data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  152. data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  153. data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  154. data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  155. data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-icons_2e4f81_256x240.png +0 -0
  156. data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  157. data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  158. data/lib/generators/blacklight/templates/public/stylesheets/jquery/ui-lightness/jquery-ui-1.8.1.custom.css +486 -0
  159. data/lib/generators/blacklight/templates/public/stylesheets/yui.css +31 -0
  160. data/lib/generators/blacklight/templates/solr_document.rb +30 -0
  161. data/lib/railties/blacklight.rake +66 -0
  162. data/lib/railties/cucumber.rake +53 -0
  163. data/lib/railties/rspec.rake +188 -0
  164. data/lib/railties/solr_marc.rake +148 -0
  165. data/lib/railties/test_solr_server.rb +130 -0
  166. data/spec/helpers/catalog_helper_spec.rb +111 -0
  167. data/spec/views/catalog/_sms_form.html.erb_spec.rb +19 -0
  168. data/tasks/blacklight_tasks.rake +4 -0
  169. data/uninstall.rb +1 -0
  170. metadata +431 -0
@@ -0,0 +1,31 @@
1
+ /*
2
+ Copyright (c) 2008, Yahoo! Inc. All rights reserved.
3
+ Code licensed under the BSD License:
4
+ http://developer.yahoo.net/yui/license.txt
5
+ version: 2.6.0
6
+ */
7
+ html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}input,textarea,select{*font-size:100%;}legend{color:#000;}del,ins{text-decoration:none;}
8
+
9
+ /*
10
+ Copyright (c) 2008, Yahoo! Inc. All rights reserved.
11
+ Code licensed under the BSD License:
12
+ http://developer.yahoo.net/yui/license.txt
13
+ version: 2.6.0
14
+ */
15
+ h1{font-size:138.5%;}h2{font-size:123.1%;}h3{font-size:108%;}h1,h2,h3{margin:1em 0;}h1,h2,h3,h4,h5,h6,strong{font-weight:bold;}abbr,acronym{border-bottom:1px dotted #000;cursor:help;} em{font-style:italic;}blockquote,ul,ol,dl{margin:1em;}ol,ul,dl{margin-left:2em;}ol li{list-style:decimal outside;}ul li{list-style:disc outside;}dl dd{margin-left:1em;}th,td{border:1px solid #000;padding:.5em;}th{font-weight:bold;text-align:center;}caption{margin-bottom:.5em;text-align:center;}p,fieldset,table,pre{margin-bottom:1em;}input[type=text],input[type=password],textarea{width:12.25em;*width:11.9em;}
16
+
17
+ /*
18
+ Copyright (c) 2008, Yahoo! Inc. All rights reserved.
19
+ Code licensed under the BSD License:
20
+ http://developer.yahoo.net/yui/license.txt
21
+ version: 2.6.0
22
+ */
23
+ body{font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}select,input,button,textarea{font:99% arial,helvetica,clean,sans-serif;}table{font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%;}
24
+
25
+ /*
26
+ Copyright (c) 2008, Yahoo! Inc. All rights reserved.
27
+ Code licensed under the BSD License:
28
+ http://developer.yahoo.net/yui/license.txt
29
+ version: 2.6.0
30
+ */
31
+ body{text-align:center;}#ft{clear:both;}#doc,#doc2,#doc3,#doc4,.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6,.yui-t7{margin:auto;text-align:left;width:57.69em;*width:56.25em;min-width:750px;}#doc2{width:73.076em;*width:71.25em;}#doc3{margin:auto 10px;width:auto;}#doc4{width:74.923em;*width:73.05em;}.yui-b{position:relative;}.yui-b{_position:static;}#yui-main .yui-b{position:static;}#yui-main,.yui-g .yui-u .yui-g{width:100%;}{width:100%;}.yui-t1 #yui-main,.yui-t2 #yui-main,.yui-t3 #yui-main{float:right;margin-left:-25em;}.yui-t4 #yui-main,.yui-t5 #yui-main,.yui-t6 #yui-main{float:left;margin-right:-25em;}.yui-t1 .yui-b{float:left;width:12.30769em;*width:12.00em;}.yui-t1 #yui-main .yui-b{margin-left:13.30769em;*margin-left:13.05em;}.yui-t2 .yui-b{float:left;width:13.8461em;*width:13.50em;}.yui-t2 #yui-main .yui-b{margin-left:14.8461em;*margin-left:14.55em;}.yui-t3 .yui-b{float:left;width:23.0769em;*width:22.50em;}.yui-t3 #yui-main .yui-b{margin-left:24.0769em;*margin-left:23.62em;}.yui-t4 .yui-b{float:right;width:13.8456em;*width:13.50em;}.yui-t4 #yui-main .yui-b{margin-right:14.8456em;*margin-right:14.55em;}.yui-t5 .yui-b{float:right;width:18.4615em;*width:18.00em;}.yui-t5 #yui-main .yui-b{margin-right:19.4615em;*margin-right:19.125em;}.yui-t6 .yui-b{float:right;width:23.0769em;*width:22.50em;}.yui-t6 #yui-main .yui-b{margin-right:24.0769em;*margin-right:23.62em;}.yui-t7 #yui-main .yui-b{display:block;margin:0 0 1em 0;}#yui-main .yui-b{float:none;width:auto;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf,.yui-gc .yui-u,.yui-gd .yui-g,.yui-g .yui-gc .yui-u,.yui-ge .yui-u,.yui-ge .yui-g,.yui-gf .yui-g,.yui-gf .yui-u{float:right;}.yui-g div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first,.yui-ge div.first,.yui-gf div.first,.yui-g .yui-gc div.first,.yui-g .yui-ge div.first,.yui-gc div.first div.first{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf{width:49.1%;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{width:32%;margin-left:1.99%;}.yui-gb .yui-u{*margin-left:1.9%;*width:31.9%;}.yui-gc div.first,.yui-gd .yui-u{width:66%;}.yui-gd div.first{width:32%;}.yui-ge div.first,.yui-gf .yui-u{width:74.2%;}.yui-ge .yui-u,.yui-gf div.first{width:24%;}.yui-g .yui-gb div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first{margin-left:0;}.yui-g .yui-g .yui-u,.yui-gb .yui-g .yui-u,.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u,.yui-ge .yui-g .yui-u,.yui-gf .yui-g .yui-u{width:49%;*width:48.1%;*margin-left:0;}.yui-g .yui-g .yui-u{width:48.1%;}.yui-g .yui-gb div.first,.yui-gb .yui-gb div.first{*margin-right:0;*width:32%;_width:31.7%;}.yui-g .yui-gc div.first,.yui-gd .yui-g{width:66%;}.yui-gb .yui-g div.first{*margin-right:4%;_margin-right:1.3%;}.yui-gb .yui-gc div.first,.yui-gb .yui-gd div.first{*margin-right:0;}.yui-gb .yui-gb .yui-u,.yui-gb .yui-gc .yui-u{*margin-left:1.8%;_margin-left:4%;}.yui-g .yui-gb .yui-u{_margin-left:1.0%;}.yui-gb .yui-gd .yui-u{*width:66%;_width:61.2%;}.yui-gb .yui-gd div.first{*width:31%;_width:29.5%;}.yui-g .yui-gc .yui-u,.yui-gb .yui-gc .yui-u{width:32%;_float:right;margin-right:0;_margin-left:0;}.yui-gb .yui-gc div.first{width:66%;*float:left;*margin-left:0;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf .yui-u{margin:0;}.yui-gb .yui-gb .yui-u{_margin-left:.7%;}.yui-gb .yui-g div.first,.yui-gb .yui-gb div.first{*margin-left:0;}.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u{*width:48.1%;*margin-left:0;} .yui-gb .yui-gd div.first{width:32%;}.yui-g .yui-gd div.first{_width:29.9%;}.yui-ge .yui-g{width:24%;}.yui-gf .yui-g{width:74.2%;}.yui-gb .yui-ge div.yui-u,.yui-gb .yui-gf div.yui-u{float:right;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf div.first{float:left;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf div.first{*width:24%;_width:20%;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf .yui-u{*width:73.5%;_width:65.5%;}.yui-ge div.first .yui-gd .yui-u{width:65%;}.yui-ge div.first .yui-gd div.first{width:32%;}#bd:after,.yui-g:after,.yui-gb:after,.yui-gc:after,.yui-gd:after,.yui-ge:after,.yui-gf:after{content:".";display:block;height:0;clear:both;visibility:hidden;}#bd,.yui-g,.yui-gb,.yui-gc,.yui-gd,.yui-ge,.yui-gf{zoom:1;}
@@ -0,0 +1,30 @@
1
+ class SolrDocument
2
+
3
+ include Blacklight::Solr::Document
4
+
5
+ # The following shows how to setup this blacklight document to display marc documents
6
+ extension_parameters[:marc_source_field] = :marc_display
7
+ extension_parameters[:marc_format_type] = :marcxml
8
+ use_extension( Blacklight::Solr::Document::Marc) do |document|
9
+ document.key?( :marc_display )
10
+ end
11
+
12
+ # Email uses the semantic field mappings below to generate the body of an email.
13
+ SolrDocument.use_extension( Blacklight::Solr::Document::Email )
14
+
15
+ # SMS uses the semantic field mappings below to generate the body of an SMS email.
16
+ SolrDocument.use_extension( Blacklight::Solr::Document::Sms )
17
+
18
+ # DublinCore uses the semantic field mappings below to assemble an OAI-compliant Dublin Core document
19
+ # Semantic mappings of solr stored fields. Fields may be multi or
20
+ # single valued. See Blacklight::Solr::Document::ExtendableClassMethods#field_semantics
21
+ # and Blacklight::Solr::Document#to_semantic_values
22
+ # Recommendation: Use field names from Dublin Core
23
+ use_extension( Blacklight::Solr::Document::DublinCore)
24
+ field_semantics.merge!(
25
+ :title => "title_display",
26
+ :author => "author_display",
27
+ :language => "language_facet",
28
+ :format => "format"
29
+ )
30
+ end
@@ -0,0 +1,66 @@
1
+ namespace :blacklight do
2
+
3
+ # task to clean out old, unsaved searches
4
+ # rake blacklight:delete_old_searches[days_old]
5
+ # example cron entry to delete searches older than 7 days at 2:00 AM every day:
6
+ # 0 2 * * * cd /path/to/your/app && /path/to/rake blacklight:delete_old_searches[7] RAILS_ENV=your_env
7
+ desc "Removes entries in the searches table that are older than the number of days given."
8
+ task :delete_old_searches, :days_old, :needs => :environment do |t, args|
9
+ Search.delete_old_searches(args[:days_old].to_i)
10
+ end
11
+
12
+ end
13
+
14
+ # Rake tasks for Blacklight plugin
15
+
16
+ # if you would like to see solr startup messages on STDERR
17
+ # when starting solr test server during functional tests use:
18
+ #
19
+ # rake SOLR_CONSOLE=true
20
+ require File.expand_path(File.join(File.dirname(__FILE__), 'test_solr_server.rb'))
21
+
22
+
23
+ SOLR_PARAMS = {
24
+ :quiet => ENV['SOLR_CONSOLE'] ? false : true,
25
+ :jetty_home => ENV['SOLR_JETTY_HOME'] || File.expand_path('./jetty'),
26
+ :jetty_port => ENV['SOLR_JETTY_PORT'] || 8888,
27
+ :solr_home => ENV['SOLR_HOME'] || File.expand_path('./jetty/solr')
28
+ }
29
+
30
+ NO_JETTY_MSG = "In order to use solr:spec, you much checkout Blacklight-jetty from our github repository, and place it in the root of your application under the directory /jetty. \n prompt> git clone git@github.com:projectblacklight/blacklight-jetty.git jetty \n You will also need to pupulate your test instance of solr with test data. You can do this with: \n prompt> rake solr:marc:index_test_data RAILS_ENV=test"
31
+
32
+ namespace :solr do
33
+
34
+ desc "Calls RSpec Examples wrapped in the test instance of Solr"
35
+ task :spec do
36
+ raise NO_JETTY_MSG unless File.exists? SOLR_PARAMS[:jetty_home]
37
+ # wrap tests with a test-specific Solr server
38
+ error = TestSolrServer.wrap(SOLR_PARAMS) do
39
+ rm_f "coverage.data"
40
+ Rake::Task["rake:spec"].invoke
41
+ #puts `ps aux | grep start.jar`
42
+ end
43
+ raise "test failures: #{error}" if error
44
+ end
45
+
46
+ desc "Calls Cucumber Features wrapped in the test instance of Solr"
47
+ task :features do
48
+ # wrap tests with a test-specific Solr server
49
+ error = TestSolrServer.wrap(SOLR_PARAMS) do
50
+ Rake::Task["cucumber:all"].invoke
51
+ #puts `ps aux | grep start.jar`
52
+ end
53
+ raise "test failures: #{error}" if error
54
+ end
55
+
56
+ desc "Runs all features and specs"
57
+ task :all do
58
+ error = TestSolrServer.wrap(SOLR_PARAMS) do
59
+ Rake::Task["rake:spec"].invoke
60
+ Rake::Task["cucumber:all"].invoke
61
+ end
62
+ raise "test failures: #{error}" if error
63
+ end
64
+
65
+ end
66
+
@@ -0,0 +1,53 @@
1
+ # IMPORTANT: This file is generated by cucumber-rails - edit at your own peril.
2
+ # It is recommended to regenerate this file in the future when you upgrade to a
3
+ # newer version of cucumber-rails. Consider adding your own code to a new file
4
+ # instead of editing this one. Cucumber will automatically load all features/**/*.rb
5
+ # files.
6
+
7
+
8
+ unless ARGV.any? {|a| a =~ /^gems/} # Don't load anything when running the gems:* tasks
9
+
10
+ vendored_cucumber_bin = Dir["#{Rails.root}/vendor/{gems,plugins}/cucumber*/bin/cucumber"].first
11
+ $LOAD_PATH.unshift(File.dirname(vendored_cucumber_bin) + '/../lib') unless vendored_cucumber_bin.nil?
12
+
13
+ begin
14
+ require 'cucumber/rake/task'
15
+
16
+ namespace :cucumber do
17
+ Cucumber::Rake::Task.new({:ok => 'db:test:prepare'}, 'Run features that should pass') do |t|
18
+ t.binary = vendored_cucumber_bin # If nil, the gem's binary is used.
19
+ t.fork = true # You may get faster startup if you set this to false
20
+ t.profile = 'default'
21
+ end
22
+
23
+ Cucumber::Rake::Task.new({:wip => 'db:test:prepare'}, 'Run features that are being worked on') do |t|
24
+ t.binary = vendored_cucumber_bin
25
+ t.fork = true # You may get faster startup if you set this to false
26
+ t.profile = 'wip'
27
+ end
28
+
29
+ Cucumber::Rake::Task.new({:rerun => 'db:test:prepare'}, 'Record failing features and run only them if any exist') do |t|
30
+ t.binary = vendored_cucumber_bin
31
+ t.fork = true # You may get faster startup if you set this to false
32
+ t.profile = 'rerun'
33
+ end
34
+
35
+ desc 'Run all features'
36
+ task :all => [:ok, :wip]
37
+ end
38
+ desc 'Alias for cucumber:ok'
39
+ task :cucumber => 'cucumber:ok'
40
+
41
+ task :default => :cucumber
42
+
43
+ task :features => :cucumber do
44
+ STDERR.puts "*** The 'features' task is deprecated. See rake -T cucumber ***"
45
+ end
46
+ rescue LoadError
47
+ desc 'cucumber rake task not available (cucumber not installed)'
48
+ task :cucumber do
49
+ abort 'Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin'
50
+ end
51
+ end
52
+
53
+ end
@@ -0,0 +1,188 @@
1
+ blacklight_plugin_dir = "#{File.dirname(__FILE__)}/../.."
2
+
3
+ gem 'test-unit', '1.2.3' if RUBY_VERSION.to_f >= 1.9
4
+ rspec_gem_dir = nil
5
+ Dir["#{blacklight_plugin_dir}/vendor/gems/*"].each do |subdir|
6
+ rspec_gem_dir = subdir if subdir.gsub("#{blacklight_plugin_dir}/vendor/gems/","") =~ /^(\w+-)?rspec-(\d+)/ && File.exist?("#{subdir}/lib/spec/rake/spectask.rb")
7
+ end
8
+ rspec_plugin_dir = File.expand_path(File.dirname(__FILE__) + '/../../vendor/plugins/rspec')
9
+
10
+ if rspec_gem_dir && (test ?d, rspec_plugin_dir)
11
+ raise "\n#{'*'*50}\nYou have rspec installed in both vendor/gems and vendor/plugins\nPlease pick one and dispose of the other.\n#{'*'*50}\n\n"
12
+ end
13
+
14
+ if rspec_gem_dir
15
+ $LOAD_PATH.unshift("#{rspec_gem_dir}/lib")
16
+ elsif File.exist?(rspec_plugin_dir)
17
+ $LOAD_PATH.unshift("#{rspec_plugin_dir}/lib")
18
+ end
19
+
20
+ # Don't load rspec if running "rake gems:*"
21
+ unless ARGV.any? {|a| a =~ /^gems/}
22
+
23
+ begin
24
+ require 'spec/rake/spectask'
25
+ rescue MissingSourceFile
26
+ module Spec
27
+ module Rake
28
+ class SpecTask
29
+ def initialize(name)
30
+ task name do
31
+ # if rspec-rails is a configured gem, this will output helpful material and exit ...
32
+ require File.expand_path(File.dirname(__FILE__) + "/../../config/environment")
33
+
34
+ # ... otherwise, do this:
35
+ raise <<-MSG
36
+
37
+ #{"*" * 80}
38
+ * You are trying to run an rspec rake task defined in
39
+ * #{__FILE__},
40
+ * but rspec can not be found in vendor/gems, vendor/plugins or system gems.
41
+ #{"*" * 80}
42
+ MSG
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+
50
+ # Rake.application.instance_variable_get('@tasks').delete('default')
51
+
52
+ spec_prereq = File.exist?(File.join(::Rails.root.to_s, 'config', 'database.yml')) ? "db:test:prepare" : :noop
53
+ task :noop do
54
+ end
55
+
56
+ # task :default => :spec
57
+ task :stats => "spec:statsetup"
58
+
59
+ desc "Run all specs in spec directory (excluding plugin specs)"
60
+ Spec::Rake::SpecTask.new(:spec => spec_prereq) do |t|
61
+ t.spec_opts = ['--options', "\"#{blacklight_plugin_dir}/spec/spec.opts\""]
62
+ t.spec_files = FileList['spec/**/*_spec.rb']
63
+ t.rcov = true
64
+ t.rcov_opts = lambda do
65
+ IO.readlines("#{blacklight_plugin_dir}/spec/rcov.opts").map {|l| l.chomp.split " "}.flatten
66
+ end
67
+ end
68
+
69
+ namespace :spec do
70
+ desc "Run all specs in spec directory with RCov (excluding plugin specs)"
71
+ Spec::Rake::SpecTask.new(:rcov) do |t|
72
+ t.spec_opts = ['--options', "\"#{blacklight_plugin_dir}/spec/spec.opts\""]
73
+ t.spec_files = FileList['spec/**/*_spec.rb']
74
+ t.rcov = true
75
+ t.rcov_opts = lambda do
76
+ IO.readlines("#{blacklight_plugin_dir}/spec/rcov.opts").map {|l| l.chomp.split " "}.flatten
77
+ end
78
+ end
79
+
80
+ desc "Print Specdoc for all specs (excluding plugin specs)"
81
+ Spec::Rake::SpecTask.new(:doc) do |t|
82
+ t.spec_opts = ["--format", "specdoc", "--dry-run"]
83
+ t.spec_files = FileList['spec/**/*_spec.rb']
84
+ end
85
+
86
+ desc "Print Specdoc for all plugin examples"
87
+ Spec::Rake::SpecTask.new(:plugin_doc) do |t|
88
+ t.spec_opts = ["--format", "specdoc", "--dry-run"]
89
+ t.spec_files = FileList['vendor/plugins/**/spec/**/*_spec.rb'].exclude('vendor/plugins/rspec/*')
90
+ end
91
+
92
+ [:models, :controllers, :views, :helpers, :lib, :integration].each do |sub|
93
+ desc "Run the code examples in spec/#{sub}"
94
+ Spec::Rake::SpecTask.new(sub => spec_prereq) do |t|
95
+ t.spec_opts = ['--options', "\"#{blacklight_plugin_dir}/spec/spec.opts\""]
96
+ t.spec_files = FileList["spec/#{sub}/**/*_spec.rb"]
97
+ end
98
+ end
99
+
100
+ desc "Run the code examples in vendor/plugins (except RSpec's own)"
101
+ Spec::Rake::SpecTask.new(:plugins => spec_prereq) do |t|
102
+ t.spec_opts = ['--options', "\"#{blacklight_plugin_dir}/spec/spec.opts\""]
103
+ t.spec_files = FileList['vendor/plugins/**/spec/**/*_spec.rb'].exclude('vendor/plugins/rspec/*').exclude("vendor/plugins/rspec-rails/*")
104
+ end
105
+
106
+ namespace :plugins do
107
+ desc "Runs the examples for rspec_on_rails"
108
+ Spec::Rake::SpecTask.new(:rspec_on_rails) do |t|
109
+ t.spec_opts = ['--options', "\"#{blacklight_plugin_dir}/spec/spec.opts\""]
110
+ t.spec_files = FileList['vendor/plugins/rspec-rails/spec/**/*_spec.rb']
111
+ end
112
+ end
113
+
114
+ # Setup specs for stats
115
+ task :statsetup do
116
+ require 'code_statistics'
117
+ ::STATS_DIRECTORIES << %w(Model\ specs spec/models) if File.exist?('spec/models')
118
+ ::STATS_DIRECTORIES << %w(View\ specs spec/views) if File.exist?('spec/views')
119
+ ::STATS_DIRECTORIES << %w(Controller\ specs spec/controllers) if File.exist?('spec/controllers')
120
+ ::STATS_DIRECTORIES << %w(Helper\ specs spec/helpers) if File.exist?('spec/helpers')
121
+ ::STATS_DIRECTORIES << %w(Library\ specs spec/lib) if File.exist?('spec/lib')
122
+ ::STATS_DIRECTORIES << %w(Routing\ specs spec/routing) if File.exist?('spec/routing')
123
+ ::STATS_DIRECTORIES << %w(Integration\ specs spec/integration) if File.exist?('spec/integration')
124
+ ::CodeStatistics::TEST_TYPES << "Model specs" if File.exist?('spec/models')
125
+ ::CodeStatistics::TEST_TYPES << "View specs" if File.exist?('spec/views')
126
+ ::CodeStatistics::TEST_TYPES << "Controller specs" if File.exist?('spec/controllers')
127
+ ::CodeStatistics::TEST_TYPES << "Helper specs" if File.exist?('spec/helpers')
128
+ ::CodeStatistics::TEST_TYPES << "Library specs" if File.exist?('spec/lib')
129
+ ::CodeStatistics::TEST_TYPES << "Routing specs" if File.exist?('spec/routing')
130
+ ::CodeStatistics::TEST_TYPES << "Integration specs" if File.exist?('spec/integration')
131
+ end
132
+
133
+ namespace :db do
134
+ namespace :fixtures do
135
+ desc "Load fixtures (from spec/fixtures) into the current environment's database. Load specific fixtures using FIXTURES=x,y. Load from subdirectory in test/fixtures using FIXTURES_DIR=z."
136
+ task :load => :environment do
137
+ ActiveRecord::Base.establish_connection(Rails.env)
138
+ base_dir = File.join(Rails.root, 'spec', 'fixtures')
139
+ fixtures_dir = ENV['FIXTURES_DIR'] ? File.join(base_dir, ENV['FIXTURES_DIR']) : base_dir
140
+
141
+ require 'active_record/fixtures'
142
+ (ENV['FIXTURES'] ? ENV['FIXTURES'].split(/,/).map {|f| File.join(fixtures_dir, f) } : Dir.glob(File.join(fixtures_dir, '*.{yml,csv}'))).each do |fixture_file|
143
+ Fixtures.create_fixtures(File.dirname(fixture_file), File.basename(fixture_file, '.*'))
144
+ end
145
+ end
146
+ end
147
+ end
148
+
149
+ namespace :server do
150
+ daemonized_server_pid = File.expand_path("#{blacklight_plugin_dir}/tmp/pids/spec_server.pid")
151
+
152
+ desc "start spec_server."
153
+ task :start do
154
+ if File.exist?(daemonized_server_pid)
155
+ $stderr.puts "spec_server is already running."
156
+ else
157
+ $stderr.puts %Q{Starting up spec_server ...}
158
+ FileUtils.mkdir_p('tmp/pids') unless test ?d, 'tmp/pids'
159
+ system("ruby", "script/spec_server", "--daemon", "--pid", daemonized_server_pid)
160
+ end
161
+ end
162
+
163
+ desc "stop spec_server."
164
+ task :stop do
165
+ unless File.exist?(daemonized_server_pid)
166
+ $stderr.puts "No server running."
167
+ else
168
+ $stderr.puts "Shutting down spec_server ..."
169
+ system("kill", "-s", "TERM", File.read(daemonized_server_pid).strip) &&
170
+ File.delete(daemonized_server_pid)
171
+ end
172
+ end
173
+
174
+ desc "restart spec_server."
175
+ task :restart => [:stop, :start]
176
+
177
+ desc "check if spec server is running"
178
+ task :status do
179
+ if File.exist?(daemonized_server_pid)
180
+ $stderr.puts %Q{spec_server is running (PID: #{File.read(daemonized_server_pid).gsub("\n","")})}
181
+ else
182
+ $stderr.puts "No server running."
183
+ end
184
+ end
185
+ end
186
+ end
187
+
188
+ end
@@ -0,0 +1,148 @@
1
+ # -*- coding: undecided -*-
2
+ # Rake tasks for the SolrMarc Java indexer.
3
+ # Marc Record defaults to indexing lc_records.utf8.mrc
4
+ # config.properties defaults to config/demo_config.properties (in the plugin, not the rails app)
5
+
6
+
7
+ require 'fileutils'
8
+
9
+
10
+
11
+ namespace :solr do
12
+ namespace :marc do
13
+
14
+
15
+ desc "Index the supplied test data into Solr"
16
+ task :index_test_data do
17
+ ENV['MARC_FILE'] = locate_path("spec", "data", "test_data.utf8.mrc")
18
+
19
+ Rake::Task[ "solr:marc:index:work" ].invoke
20
+ end
21
+
22
+ desc "Index marc data using SolrMarc. Available environment variables: MARC_RECORDS_PATH, CONFIG_PATH, SOLR_MARC_MEM_ARGS"
23
+ task :index => "index:work"
24
+
25
+ namespace :index do
26
+
27
+ task :work do
28
+ solrmarc_arguments = compute_arguments
29
+
30
+ # If no marc records given, display :info task
31
+ if (ENV["NOOP"] || (!solrmarc_arguments["MARC_FILE"]))
32
+ Rake::Task[ "solr:marc:index:info" ].execute
33
+ else
34
+ commandStr = solrmarc_command_line( solrmarc_arguments )
35
+ puts commandStr
36
+ puts
37
+ `#{commandStr}`
38
+ end
39
+
40
+ end # work
41
+
42
+ desc "Shows more info about the solr:marc:index task."
43
+ task :info do
44
+ solrmarc_arguments = compute_arguments
45
+ puts <<-EOS
46
+ Solr to write to is taken from current environment in config/solr.yml,
47
+ key :replicate_master_url is supported, taking precedence over :url
48
+ for where to write to.
49
+
50
+ Possible environment variables, with settings as invoked. You can set these
51
+ variables on the command line, eg:
52
+ rake solr:marc:index MARC_FILE=/some/file.mrc
53
+
54
+ MARC_FILE: #{solrmarc_arguments["MARC_FILE"] || "[marc records path needed]"}
55
+
56
+ CONFIG_PATH: #{solrmarc_arguments[:config_properties_path]}
57
+ Defaults to RAILS_ROOT/config/SolrMarc/config(-RAILS_ENV).properties
58
+ or else RAILS_ROOT/vendor/plugins/blacklight/SolrMarc/config ...
59
+
60
+ Note that SolrMarc search path includes directory of config_path,
61
+ so translation_maps and index_scripts dirs will be found there.
62
+
63
+ SOLRMARC_JAR_PATH: #{solrmarc_arguments[:solrmarc_jar_path]}
64
+
65
+ SOLRMARC_MEM_ARGS: #{solrmarc_arguments[:solrmarc_mem_arg]}
66
+
67
+ SolrMarc command that will be run:
68
+
69
+ #{solrmarc_command_line(solrmarc_arguments)}
70
+ EOS
71
+ end
72
+ end # index
73
+ end # :marc
74
+ end # :solr
75
+
76
+ # Computes arguments to Solr, returns hash
77
+ # Calculate default args based on location of rake file itself,
78
+ # which we assume to be in the plugin, or in the Rails executing
79
+ # this rake task, at RAILS_ROOT.
80
+ def compute_arguments
81
+
82
+ arguments = {}
83
+
84
+ arguments["MARC_FILE"] = ENV["MARC_FILE"]
85
+
86
+
87
+ app_site_path = File.expand_path(File.join(Rails.root, "config", "SolrMarc"))
88
+ plugin_site_path = File.expand_path(File.join(Rails.root, "vendor", "plugins", "blacklight", "config", "SolrMarc"))
89
+
90
+
91
+ # Find config in local app or plugin, possibly based on our RAILS_ENV (::Rails.env)
92
+ arguments[:config_properties_path] = ENV['CONFIG_PATH']
93
+ unless arguments[:config_properties_path]
94
+ [ File.join(app_site_path, "config-#{::Rails.env}.properties" ),
95
+ File.join( app_site_path, "config.properties"),
96
+ File.join( plugin_site_path, "config-#{::Rails.env}.properties"),
97
+ File.join( plugin_site_path, "config.properties"),
98
+ ].each do |file_path|
99
+ if File.exists?(file_path)
100
+ arguments[:config_properties_path] = file_path
101
+ break
102
+ end
103
+ end
104
+ end
105
+
106
+ #java mem arg is from env, or default
107
+
108
+ arguments[:solrmarc_mem_arg] = ENV['SOLRMARC_MEM_ARGS'] || '-Xmx512m'
109
+
110
+ # SolrMarc is embedded in the plugin, or could be a custom
111
+ # one in local app.
112
+ arguments[:solrmarc_jar_path] = ENV['SOLRMARC_JAR_PATH'] || locate_path("lib", "SolrMarc.jar")
113
+
114
+
115
+
116
+
117
+ # Solr URL, find from solr.yml, app or plugin
118
+ # use :replicate_master_url for current env if present, otherwise :url
119
+ # for current env.
120
+ solr_yml_path = locate_path("config", "solr.yml")
121
+ if ( File.exists?( solr_yml_path ))
122
+ solr_config = YAML::load(File.open(solr_yml_path))
123
+ arguments[:solr_url] = solr_config[ ::Rails.env ]['url'] if solr_config[::Rails.env]
124
+ end
125
+
126
+
127
+ return arguments
128
+ end
129
+
130
+ def solrmarc_command_line(arguments)
131
+ cmd = "java #{arguments[:solrmarc_mem_arg]} "
132
+ cmd += " -Dsolr.hosturl=#{arguments[:solr_url]} " unless arguments[:solr_url].blank?
133
+ cmd += " -jar #{arguments[:solrmarc_jar_path]} #{arguments[:config_properties_path]} #{arguments["MARC_FILE"]}"
134
+ return cmd
135
+ end
136
+
137
+
138
+ def locate_path(*subpath_fragments)
139
+ local_root = File.expand_path File.join(File.dirname(__FILE__), '..', '..')
140
+ puts "The local_root is #{local_root}"
141
+ subpath = subpath_fragments.join('/')
142
+ base_match = [Rails.root, local_root].find do |base|
143
+ File.exists? File.join(base, subpath)
144
+ end
145
+ File.join(base_match.to_s, subpath) if base_match
146
+ end
147
+
148
+