blacklight 3.0.0pre6 → 3.0.0pre7

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 (123) hide show
  1. data/Rakefile +1 -0
  2. data/VERSION +1 -1
  3. data/app/controllers/bookmarks_controller.rb +1 -0
  4. data/app/controllers/feedback_controller.rb +1 -0
  5. data/app/controllers/folder_controller.rb +11 -10
  6. data/app/controllers/saved_searches_controller.rb +1 -0
  7. data/app/controllers/search_history_controller.rb +1 -0
  8. data/app/helpers/blacklight_helper.rb +1 -0
  9. data/app/helpers/bookmarks_helper.rb +2 -1
  10. data/app/helpers/catalog_helper.rb +23 -10
  11. data/app/helpers/feedback_helper.rb +1 -0
  12. data/app/helpers/hash_as_hidden_fields.rb +1 -0
  13. data/app/helpers/render_constraints_helper.rb +1 -0
  14. data/app/helpers/saved_searches_helper.rb +1 -0
  15. data/app/helpers/search_history_helper.rb +2 -1
  16. data/app/models/bookmark.rb +2 -1
  17. data/app/models/record_mailer.rb +1 -0
  18. data/app/models/search.rb +2 -1
  19. data/app/views/catalog/_opensearch_response_metadata.html.erb +3 -2
  20. data/app/views/catalog/_results_pagination.html.erb +3 -3
  21. data/app/views/kaminari/blacklight/_page.html.erb +1 -1
  22. data/blacklight.gemspec +2 -20
  23. data/config/routes.rb +1 -0
  24. data/db/seeds.rb +1 -0
  25. data/install.rb +1 -0
  26. data/lib/blacklight.rb +1 -0
  27. data/lib/blacklight/catalog.rb +1 -0
  28. data/lib/blacklight/comma_link_renderer.rb +1 -0
  29. data/lib/blacklight/configurable.rb +1 -0
  30. data/lib/blacklight/controller.rb +1 -0
  31. data/lib/blacklight/engine.rb +1 -0
  32. data/lib/blacklight/exceptions.rb +1 -0
  33. data/lib/blacklight/routes.rb +1 -0
  34. data/lib/blacklight/search_fields.rb +1 -0
  35. data/lib/blacklight/solr.rb +1 -0
  36. data/lib/blacklight/solr/document.rb +1 -0
  37. data/lib/blacklight/solr/document/dublin_core.rb +1 -0
  38. data/lib/blacklight/solr/document/email.rb +1 -0
  39. data/lib/blacklight/solr/document/marc.rb +1 -0
  40. data/lib/blacklight/solr/document/marc_export.rb +1 -0
  41. data/lib/blacklight/solr/document/sms.rb +1 -0
  42. data/lib/blacklight/solr/facet_paginator.rb +2 -1
  43. data/lib/blacklight/solr_helper.rb +32 -11
  44. data/lib/blacklight/user.rb +1 -0
  45. data/lib/blacklight/version.rb +1 -0
  46. data/lib/colorize.rb +1 -0
  47. data/lib/generators/blacklight/assets_generator.rb +1 -0
  48. data/lib/generators/blacklight/blacklight_generator.rb +10 -0
  49. data/lib/generators/blacklight/jetty_generator.rb +3 -0
  50. data/lib/generators/blacklight/solr_conf_generator.rb +1 -0
  51. data/lib/generators/blacklight/templates/catalog_controller.rb +1 -0
  52. data/lib/generators/blacklight/templates/config/blacklight_config.rb +1 -0
  53. data/lib/generators/blacklight/templates/migrations/add_user_types_to_bookmarks_searches.rb +7 -0
  54. data/lib/generators/blacklight/templates/migrations/create_bookmarks.rb +2 -1
  55. data/lib/generators/blacklight/templates/migrations/create_searches.rb +1 -0
  56. data/lib/generators/blacklight/templates/migrations/remove_editable_fields_from_bookmarks.rb +1 -0
  57. data/lib/generators/blacklight/templates/public/javascripts/blacklight/blacklight.js +1 -0
  58. data/lib/generators/blacklight/templates/public/stylesheets/blacklight/blacklight.css +1 -1
  59. data/lib/generators/blacklight/templates/solr_document.rb +1 -0
  60. data/lib/railties/blacklight_cucumber.rake +3 -2
  61. data/lib/railties/jetty_solr_server.rb +1 -0
  62. data/test_support/bin/test.sh +121 -0
  63. data/test_support/features/search_results.feature +1 -1
  64. data/test_support/features/step_definitions/bookmarks_steps.rb +1 -0
  65. data/test_support/features/step_definitions/error_steps.rb +1 -0
  66. data/test_support/features/step_definitions/folder_steps.rb +1 -0
  67. data/test_support/features/step_definitions/general_steps.rb +1 -0
  68. data/test_support/features/step_definitions/record_view_steps.rb +1 -0
  69. data/test_support/features/step_definitions/saved_searches_steps.rb +1 -0
  70. data/test_support/features/step_definitions/search_facets_steps.rb +1 -0
  71. data/test_support/features/step_definitions/search_history_steps.rb +1 -0
  72. data/test_support/features/step_definitions/search_result_steps.rb +1 -0
  73. data/test_support/features/step_definitions/search_steps.rb +1 -0
  74. data/test_support/features/step_definitions/user_steps.rb +2 -1
  75. data/test_support/features/step_definitions/web_steps.rb +1 -0
  76. data/test_support/features/support/env.rb +5 -0
  77. data/test_support/features/support/paths.rb +1 -0
  78. data/test_support/features/support/selectors.rb +1 -0
  79. data/test_support/spec/controllers/application_controller_spec.rb +1 -0
  80. data/test_support/spec/controllers/catalog_controller_spec.rb +1 -0
  81. data/test_support/spec/controllers/folder_controller_spec.rb +1 -0
  82. data/test_support/spec/controllers/search_history_controller_spec.rb +1 -0
  83. data/test_support/spec/data/sample_docs.yml +1 -1
  84. data/test_support/spec/helpers/blacklight_helper_spec.rb +1 -0
  85. data/test_support/spec/helpers/catalog_helper_spec.rb +1 -0
  86. data/test_support/spec/helpers/hash_as_hidden_fields_spec.rb +1 -0
  87. data/test_support/spec/helpers/render_constraints_helper_spec.rb +1 -0
  88. data/test_support/spec/helpers/search_history_helper_spec.rb +1 -0
  89. data/test_support/spec/helpers/solr_helper_spec.rb +33 -5
  90. data/test_support/spec/lib/blacklight_email_spec.rb +1 -0
  91. data/test_support/spec/lib/blacklight_sms_spec.rb +1 -0
  92. data/test_support/spec/lib/blacklight_solr_document_dublin_core_spec.rb +1 -0
  93. data/test_support/spec/lib/blacklight_solr_document_marc_spec.rb +1 -0
  94. data/test_support/spec/lib/blacklight_solr_document_spec.rb +1 -0
  95. data/test_support/spec/lib/blacklight_spec.rb +1 -0
  96. data/test_support/spec/lib/blacklight_user_spec.rb +1 -0
  97. data/test_support/spec/lib/configurable_spec.rb +1 -0
  98. data/test_support/spec/lib/facet_paginator_spec.rb +1 -0
  99. data/test_support/spec/lib/marc_export_spec.rb +1 -0
  100. data/test_support/spec/lib/search_fields_spec.rb +1 -0
  101. data/test_support/spec/lib/tasks/blacklight_task_spec.rb +1 -0
  102. data/test_support/spec/lib/tasks/solr_marc_task_spec.rb +1 -0
  103. data/test_support/spec/models/bookmark_spec.rb +1 -0
  104. data/test_support/spec/models/record_mailer_spec.rb +1 -1
  105. data/test_support/spec/models/search_spec.rb +1 -0
  106. data/test_support/spec/models/solr_docment_spec.rb +1 -1
  107. data/test_support/spec/spec_helper.rb +1 -0
  108. data/test_support/spec/support/action_controller.rb +1 -0
  109. data/test_support/spec/support/assert_difference.rb +1 -0
  110. data/test_support/spec/support/include_text.rb +1 -0
  111. data/test_support/spec/views/catalog/_constraints_element.html.erb_spec.rb +1 -0
  112. data/test_support/spec/views/catalog/_document_list.html.erb_spec.rb +1 -0
  113. data/test_support/spec/views/catalog/_facets.html.erb_spec.rb +1 -0
  114. data/test_support/spec/views/catalog/_index_partials/_default.erb_spec.rb +1 -0
  115. data/test_support/spec/views/catalog/_show_partials/_default.html.erb_spec.rb +1 -0
  116. data/test_support/spec/views/catalog/index.atom.builder_spec.rb +3 -5
  117. data/test_support/spec/views/catalog/show.html.erb_spec.rb +1 -0
  118. data/test_support/spec/views/catalog/unapi.xml.builder_spec.rb +1 -0
  119. data/uninstall.rb +1 -0
  120. metadata +29 -44
  121. data/features/default_setup.feature +0 -52
  122. data/features/generators.feature +0 -58
  123. data/features/support/aruba.rb +0 -9
data/Rakefile CHANGED
@@ -7,3 +7,4 @@ rescue LoadError
7
7
  end
8
8
 
9
9
  require 'rake'
10
+ Bundler::GemHelper.install_tasks
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.0.0pre6
1
+ 3.0.0pre7
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  # note that while this is mostly restful routing, the #update and #destroy actions
2
3
  # take the Solr document ID as the :id, NOT the id of the actual Bookmark action.
3
4
  class BookmarksController < ApplicationController
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  class FeedbackController < ApplicationController
2
3
 
3
4
  # http://expressica.com/simple_captcha/
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  class FolderController < ApplicationController
2
3
  include Blacklight::SolrHelper
3
4
  helper CatalogHelper
@@ -23,17 +24,17 @@ class FolderController < ApplicationController
23
24
  # remove a document_id from the folder. :id of action is solr_doc_id
24
25
  def destroy
25
26
  session[:folder_document_ids].delete(params[:id])
26
-
27
- unless request.xhr?
28
- respond_to do |format|
29
- format.html do
30
- flash[:notice] = "#{params[:title] || "Item"} successfully removed from selected items"
31
- redirect_to :back
32
- end
27
+
28
+ respond_to do |format|
29
+ format.html do
30
+ flash[:notice] = "#{params[:title] || "Item"} successfully removed from selected items"
31
+ redirect_to :back
33
32
  end
34
- else
35
- render :text => "OK"
36
- end
33
+ format.js do
34
+ render :json => {"OK" => "OK"}
35
+ end
36
+ end
37
+
37
38
  end
38
39
 
39
40
  # get rid of the items in the folder
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  class SavedSearchesController < ApplicationController
2
3
  before_filter :verify_user
3
4
 
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  class SearchHistoryController < ApplicationController
2
3
  def index
3
4
  @searches = searches_from_history
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  # -*- coding: utf-8 -*-
2
3
  #
3
4
  # Methods added to this helper will be available to all templates in the hosting application
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  module BookmarksHelper
2
3
 
3
- end
4
+ end
@@ -1,22 +1,34 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  module CatalogHelper
2
3
 
3
- def paginate_rsolr_response(response, options = {}, &block)
4
+ # Pass in an RSolr::Response (or duck-typed similar) object,
5
+ # it translates to a Kaminari-paginatable
6
+ # object, with the keys Kaminari views expect.
7
+ def paginate_params(response)
4
8
  per_page = response.rows
5
9
  per_page = 1 if per_page < 1
6
10
  current_page = (response.start / per_page).ceil + 1
7
11
  num_pages = (response.total / per_page.to_f).ceil
12
+ Struct.new(:current_page, :num_pages, :limit_value).new(current_page, num_pages, per_page)
13
+ end
8
14
 
9
- paginate Struct.new(:current_page, :num_pages, :limit_value).new(current_page, num_pages, per_page), options, &block
15
+ # Equivalent to kaminari "paginate", but takes an RSolr::Response as first argument.
16
+ # Will convert it to something kaminari can deal with (using #paginate_params), and
17
+ # then call kaminari paginate with that. Other arguments (options and block) same as
18
+ # kaminari paginate, passed on through.
19
+ # will output HTML pagination controls.
20
+ def paginate_rsolr_response(response, options = {}, &block)
21
+ paginate paginate_params(response), options, &block
10
22
  end
11
23
 
12
24
  #
13
- # shortcut for built-in Rails helper, "number_with_delimiter"
14
- #
15
- def format_num(num); number_with_delimiter(num) end
25
+ # shortcut for built-in Rails helper, "number_with_delimiter"
26
+ #
27
+ def format_num(num); number_with_delimiter(num) end
16
28
 
17
- #
18
- # Displays the "showing X through Y of N" message.
19
- def render_pagination_info(response, options = {})
29
+ #
30
+ # Pass in an RSolr::Response. Displays the "showing X through Y of N" message.
31
+ def render_pagination_info(response, options = {})
20
32
  start = response.start + 1
21
33
  per_page = response.rows
22
34
  current_page = (response.start / per_page).ceil + 1
@@ -41,8 +53,9 @@ module CatalogHelper
41
53
  end
42
54
  end
43
55
 
44
- # Like the mysteriously named #page_entry_info above, but for an individual
45
- # item show page. Displays "showing X of Y items" message.
56
+ # Like #render_pagination_info above, but for an individual
57
+ # item show page. Displays "showing X of Y items" message. Actually takes
58
+ # data from session though (not a great design).
46
59
  # Code should call this method rather than interrogating session directly,
47
60
  # because implementation of where this data is stored/retrieved may change.
48
61
  def item_page_entry_info
@@ -1,2 +1,3 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  module FeedbackHelper
2
3
  end
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  # Rails Helper methods to take a hash and turn it to form <input type="hidden">
2
3
  # fields, works with hash nested with other hashes and arrays, standard rails
3
4
  # serialization style. Oddly while Hash#to_query will do this for a URL
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  # All methods in here are 'api' that may be over-ridden by plugins and local
2
3
  # code, so method signatures and semantics should not be changed casually.
3
4
  # implementations can be of course.
@@ -1,2 +1,3 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  module SavedSearchesHelper
2
3
  end
@@ -1,2 +1,3 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  module SearchHistoryHelper
2
- end
3
+ end
@@ -1,6 +1,7 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  class Bookmark < ActiveRecord::Base
2
3
 
3
4
  belongs_to :user
4
5
  validates_presence_of :user_id, :scope=>:document_id
5
6
 
6
- end
7
+ end
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  # Only works for documents with a #to_marc right now.
2
3
  class RecordMailer < ActionMailer::Base
3
4
 
data/app/models/search.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  class Search < ActiveRecord::Base
2
3
 
3
4
  belongs_to :user
@@ -16,4 +17,4 @@ class Search < ActiveRecord::Base
16
17
  self.destroy_all(['created_at < ? AND user_id IS NULL', Date.today - days_old])
17
18
  end
18
19
 
19
- end
20
+ end
@@ -1,3 +1,4 @@
1
+ <% page_info = paginate_params(@response) %>
1
2
  <%= tag :meta, :name => "totalResults", :content => @response.total %>
2
- <%= tag :meta, :name => "startIndex", :content => (@response.docs.next_page == 2 ? 1 : @response.docs.previous_page * @response.docs.per_page + 1) %>
3
- <%= tag :meta, :name => "itemsPerPage", :content => @response.docs.per_page %>
3
+ <%= tag :meta, :name => "startIndex", :content => (page_info.current_page == 1 ? 1 : @response.start ) %>
4
+ <%= tag :meta, :name => "itemsPerPage", :content => page_info.limit_value %>
@@ -1,6 +1,6 @@
1
- <% if @response.total > 1 %>
1
+ <% if paginate_params(@response).num_pages > 1 %>
2
2
  <div class="pagination">
3
3
  <h2>Results navigation</h2>
4
- <%= paginate_rsolr_response @response, :theme => 'blacklight' %>
4
+ <%= paginate_rsolr_response @response, :outer_window => 2, :theme => 'blacklight' %>
5
5
  </div>
6
- <% end %>
6
+ <% end %>
@@ -8,5 +8,5 @@
8
8
  remote: data-remote
9
9
  -%>
10
10
  <span class="page<%= ' current' if page.current? %>">
11
- <%= link_to_unless page.current?, page, url, opts = {:remote => remote, :rel => page.next? ? 'next' : page.prev? ? 'prev' : nil} %>
11
+ <%= link_to_unless page.current?, number_with_delimiter(page.to_s), url, opts = {:remote => remote, :rel => page.next? ? 'next' : page.prev? ? 'prev' : nil} %>
12
12
  </span>
data/blacklight.gemspec CHANGED
@@ -19,31 +19,13 @@ Gem::Specification.new do |s|
19
19
  s.require_paths = ["lib"]
20
20
 
21
21
  # PRODUCTION GEM REQUIREMENTS
22
- # ---------------------------------------
23
- # JRuby Specific Gems - and their counterparts
24
- if defined?(JRUBY_VERSION)
25
- # Jruby specific gems should go here.
26
- else
27
- s.add_dependency "unicode" # provides C-form normalization of unicode characters, as required by refworks.
28
- end
29
-
30
- # Required Gems
22
+ # ---------------------------------------
31
23
  s.add_dependency "rails", "~> 3.0"
32
24
  s.add_dependency "nokogiri", "~>1.5.0.beta.3" # XML Parser
25
+ s.add_dependency "unicode" # provides C-form normalization of unicode characters, as required by refworks.
33
26
  s.add_dependency "marc", "~> 0.4.3" # Marc record parser
34
27
  s.add_dependency "rsolr", '~> 1.0' # Library for interacting with rSolr.
35
28
  s.add_dependency "rsolr-ext", '~> 1.0' # extension to the above for some rails-ish behaviors - currently embedded in our solr document ojbect.
36
29
  s.add_dependency "kaminari" # the pagination (page 1,2,3, etc..) of our search results
37
30
 
38
- # TESTING GEM REQUIREMENTS
39
- # -------------------------------------------
40
- # For testing the generators
41
- # s.add_dependency "cucumber-rails"
42
- # s.add_dependency "capybara"
43
- # s.add_dependency "aruba"
44
-
45
- # s.add_dependency "rspec-rails", "~>2.3.0"
46
- # s.add_dependency "webrat"
47
- # s.add_dependency "database_cleaner"
48
-
49
31
  end
data/config/routes.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  Rails.application.routes.draw do
2
3
  # A Note on User Sessions:
3
4
  # Blacklight expects the following named routes or at least the associated path helper methods to be defined.
data/db/seeds.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  # This file should contain all the record creation needed to seed the database with its default values.
2
3
  # The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
3
4
  #
data/install.rb CHANGED
@@ -0,0 +1 @@
1
+ # -*- encoding : utf-8 -*-
data/lib/blacklight.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  require 'kaminari'
2
3
  require 'marc'
3
4
  require 'rsolr'
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  module Blacklight::Catalog
2
3
  extend ActiveSupport::Concern
3
4
  include Blacklight::SolrHelper
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  require 'will_paginate/view_helpers/link_renderer'
2
3
 
3
4
  # Custom link renderer for WillPaginate
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  module Blacklight::Configurable
2
3
 
3
4
  # The config environment name used by the #config method
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  #
2
3
  # Filters added to this controller apply to all controllers in the hosting application
3
4
  # as this module is mixed-in to the application controller in the hosting app on installation.
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  # lib/blacklight/engine.rb
2
3
  require "blacklight"
3
4
  require "rails"
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  module Blacklight
2
3
  module Exceptions
3
4
 
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  module Blacklight
2
3
  class Routes
3
4
 
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  ##
2
3
  # Module to deal with accessing (and setting some defaults) in an array of
3
4
  # hashes that describe Blacklight search fields. Requires the base class this
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  module Blacklight::Solr
2
3
 
3
4
  autoload :Facets, 'blacklight/solr/facets'
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  require 'rsolr'
2
3
  require 'rsolr-ext'
3
4
  ##
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  require 'builder'
2
3
 
3
4
  # This module provide Dublin Core export based on the document's semantic values
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  # This module provides the body of an email export based on the document's semantic values
2
3
  module Blacklight::Solr::Document::Email
3
4
 
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
 
2
3
  # This is a document extension meant to be mixed into a
3
4
  # Blacklight::Solr::Document class, such as SolrDocument. It provides support
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  # -*- coding: utf-8 -*-
2
3
  # Written for use with Blacklight::Solr::Document::Marc, but you can use
3
4
  # it for your own custom Blacklight document Marc extension too -- just
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  # This module provides the body of an email export based on the document's semantic values
2
3
  module Blacklight::Solr::Document::Sms
3
4
 
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  module Blacklight::Solr
2
3
 
3
4
 
@@ -90,4 +91,4 @@ module Blacklight::Solr
90
91
 
91
92
  end
92
93
 
93
- end
94
+ end
@@ -1,3 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  # SolrHelper is a controller layer mixin. It is in the controller scope: request params, session etc.
2
3
  #
3
4
  # NOTE: Be careful when creating variables here as they may be overriding something that already exists.
@@ -69,6 +70,23 @@ module Blacklight::SolrHelper
69
70
  # CatalogController.solr_search_params_logic.delete(:we_dont_want)
70
71
  self.solr_search_params_logic = [:default_solr_parameters , :add_query_to_solr, :add_facet_fq_to_solr, :add_facetting_to_solr, :add_sorting_paging_to_solr ]
71
72
  end
73
+
74
+ def force_to_utf8(value)
75
+ case value
76
+ when Hash
77
+ value.each { |k, v| value[k] = force_to_utf8(v) }
78
+ when Array
79
+ value.each { |v| force_to_utf8(v) }
80
+ when String
81
+ value.force_encoding("utf-8") if value.respond_to?(:force_encoding)
82
+ end
83
+ value
84
+ end
85
+
86
+ def find(params)
87
+ response = force_to_utf8(Blacklight.solr.find(params))
88
+ end
89
+
72
90
 
73
91
  # A helper method used for generating solr LocalParams, put quotes
74
92
  # around the term unless it's a bare-word. Escape internal quotes
@@ -128,9 +146,14 @@ module Blacklight::SolrHelper
128
146
  # Omit empty strings and nil values.
129
147
  # Apparently RSolr takes :per_page and converts it to Solr :rows,
130
148
  # so we let it.
131
- [:page, :sort, :per_page].each do |key|
149
+ [:page, :per_page, :sort].each do |key|
132
150
  solr_parameters[key] = user_params[key] unless user_params[key].blank?
133
151
  end
152
+
153
+ if solr_parameters[:sort].blank?
154
+ default_sort_field = Blacklight.config[:sort_fields].first || [nil, nil]
155
+ solr_parameters[:sort] = default_sort_field.last unless default_sort_field.last.blank?
156
+ end
134
157
 
135
158
  # limit to MaxPerPage (100). Tests want this to be a string not an integer,
136
159
  # not sure why.
@@ -246,11 +269,9 @@ module Blacklight::SolrHelper
246
269
  # better for us.
247
270
  bench_start = Time.now
248
271
 
249
- solr_response = Blacklight.solr.find( self.solr_search_params(user_params).merge(extra_controller_params))
250
-
251
- document_list = solr_response.docs.collect {|doc| SolrDocument.new(doc, solr_response)}
252
-
253
- Rails.logger.debug("Solr fetch: #{self.class}#get_search_results (#{'%.1f' % ((Time.now.to_f - bench_start.to_f)*1000)}ms)")
272
+ solr_response = find(self.solr_search_params(user_params).merge(extra_controller_params))
273
+ document_list = solr_response.docs.collect {|doc| SolrDocument.new(doc, solr_response)}
274
+ Rails.logger.debug("Solr fetch: #{self.class}#get_search_results (#{'%.1f' % ((Time.now.to_f - bench_start.to_f)*1000)}ms)")
254
275
 
255
276
  return [solr_response, document_list]
256
277
  end
@@ -270,7 +291,7 @@ module Blacklight::SolrHelper
270
291
  # a solr query method
271
292
  # retrieve a solr document, given the doc id
272
293
  def get_solr_response_for_doc_id(id=nil, extra_controller_params={})
273
- solr_response = Blacklight.solr.find solr_doc_params(id).merge(extra_controller_params)
294
+ solr_response = find solr_doc_params(id).merge(extra_controller_params)
274
295
  raise Blacklight::Exceptions::InvalidSolrID.new if solr_response.docs.empty?
275
296
  document = SolrDocument.new(solr_response.docs.first, solr_response)
276
297
  [solr_response, document]
@@ -294,7 +315,7 @@ module Blacklight::SolrHelper
294
315
  :spellcheck => 'false'
295
316
  }.merge(extra_solr_params)
296
317
 
297
- solr_response = Blacklight.solr.find( self.solr_search_params().merge(solr_params) )
318
+ solr_response = find( self.solr_search_params().merge(solr_params) )
298
319
  document_list = solr_response.docs.collect{|doc| SolrDocument.new(doc, solr_response) }
299
320
  [solr_response,document_list]
300
321
  end
@@ -340,7 +361,7 @@ module Blacklight::SolrHelper
340
361
  solr_params = solr_facet_params(facet_field, params, extra_controller_params)
341
362
 
342
363
  # Make the solr call
343
- response = Blacklight.solr.find(solr_params)
364
+ response =find(solr_params)
344
365
 
345
366
  limit =
346
367
  if respond_to?(:facet_list_limit)
@@ -376,7 +397,7 @@ module Blacklight::SolrHelper
376
397
  solr_params[:per_page] = 1
377
398
  solr_params[:rows] = 1
378
399
  solr_params[:fl] = '*'
379
- Blacklight.solr.find(solr_params).docs.first
400
+ solr_response = find(solr_params).docs.first
380
401
  end
381
402
 
382
403
  # returns a solr params hash
@@ -398,7 +419,7 @@ module Blacklight::SolrHelper
398
419
  # where the field is the "field" argument passed in.
399
420
  def get_opensearch_response(field=nil, extra_controller_params={})
400
421
  solr_params = solr_opensearch_params().merge(extra_controller_params)
401
- response = Blacklight.solr.find(solr_params)
422
+ response = find(solr_params)
402
423
  a = [solr_params[:q]]
403
424
  a << response.docs.map {|doc| doc[solr_params[:fl]].to_s }
404
425
  end