blacklight 3.0pre1

Sign up to get free protection for your applications and to get access to all the features.
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
+