blacklight 3.0.0pre6 → 3.0.0pre7

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