blacklight_advanced_search 1.2.4 → 2.0.0

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.
data/Gemfile CHANGED
@@ -3,3 +3,4 @@ source 'http://rubygems.org'
3
3
  gemspec
4
4
 
5
5
  gem 'combustion'
6
+ gem 'blacklight', :git => 'git://github.com/projectblacklight/blacklight.git'
data/README.rdoc CHANGED
@@ -167,12 +167,16 @@ You may also find the rspecs for parsing a user-entered query and converting it
167
167
 
168
168
  == Running tests
169
169
 
170
- (experimental, in progress).
170
+ The Blacklight Advanced Search acceptance tests require a copy of the blacklight-jetty demo index. You can get a copy by running:
171
+
172
+ git submodule init
173
+ git submodule update
174
+
175
+ (Limited) test coverage is provided with rspec, run all tests (and start the jetty instance) by running:
176
+ rake ci
171
177
 
172
- (Limited) test coverage is provided with rspec, run all tests by running:
173
- rspec
178
+ from the blacklight_advanced_search directory. Note: you may need to `bundle install` first.
174
179
 
175
- from the blacklight_advanced_search directory. you may need to `bundle install` first.
176
180
 
177
181
  == To Do
178
182
 
data/Rakefile CHANGED
@@ -4,3 +4,54 @@ require 'rake/rdoctask'
4
4
 
5
5
  require 'bundler'
6
6
  Bundler::GemHelper.install_tasks
7
+
8
+ require 'rspec/core/rake_task'
9
+
10
+ require 'blacklight'
11
+ import File.join(Blacklight.root, 'lib', 'railties', 'solr_marc.rake')
12
+
13
+ task :default => :spec
14
+
15
+ desc "Run specs"
16
+ RSpec::Core::RakeTask.new do |t|
17
+
18
+ end
19
+
20
+
21
+ desc "Execute Continuous Integration build"
22
+ task :ci do
23
+
24
+ require 'combustion'
25
+ require 'blacklight'
26
+ Combustion.initialize!
27
+ unless ENV['environment'] == 'test'
28
+ exec("rake ci environment=test")
29
+ end
30
+
31
+ require 'rails/generators'
32
+ require File.join(Blacklight.root, 'lib', 'generators', 'blacklight', 'jetty_generator.rb')
33
+
34
+ Blacklight::Jetty.start(["--save_location=jetty", "--force"])
35
+
36
+ ENV['RAILS_ENV'] = 'test'
37
+ ENV['CONFIG_PATH'] = File.expand_path(File.join(Blacklight.root, 'lib', 'generators', 'blacklight', 'templates', 'config', 'SolrMarc', 'config-test.properties'))
38
+ ENV['SOLRMARC_JAR_PATH'] = File.expand_path(File.join(Blacklight.root, 'lib', 'SolrMarc.jar'))
39
+ ENV['SOLR_PATH'] = File.expand_path(File.join('jetty', 'solr'))
40
+ ENV['SOLR_WAR_PATH'] = File.expand_path(File.join('jetty', 'webapps', 'solr.war'))
41
+ Rake::Task['solr:marc:index_test_data'].invoke
42
+
43
+
44
+ require 'jettywrapper'
45
+ jetty_params = {
46
+ :jetty_home => File.expand_path(File.dirname(__FILE__) + '/jetty'),
47
+ :quiet => false,
48
+ :jetty_port => 8888,
49
+ :solr_home => File.expand_path(File.dirname(__FILE__) + '/jetty/solr'),
50
+ :startup_wait => 30
51
+ }
52
+
53
+ error = Jettywrapper.wrap(jetty_params) do
54
+ Rake::Task['spec'].invoke
55
+ end
56
+ raise "test failures: #{error}" if error
57
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.4
1
+ 2.0.0
@@ -1,53 +1,39 @@
1
1
  $(document).ready(function() {
2
- $('.limit_column ul').each(function(){
3
- var ul = $(this);
4
- // find all ul's that don't have any span descendants with a class of "selected"
5
- if($('span.selected', ul).length == 0){
6
- // hide it
7
- ul.hide();
8
- // attach the toggle behavior to the h3 tag
9
- $('h3', ul.parent()).click(function(){
10
- // toggle the next ul sibling
11
- $(this).next('ul').slideToggle();
12
- });
13
- }
14
- });
15
-
16
-
2
+
17
3
  /* Stuff for handling the checkboxes */
18
4
  /* When you click a checkbox, update readout */
19
-
20
-
5
+
6
+
21
7
  /* Pass in a jquery obj holding the "selected facet element" spans, get back
22
8
  a string for display representing currently checked things. */
23
9
  function checkboxesToString(checkbox_elements) {
24
10
  var selectedLabels = new Array();
25
11
  checkbox_elements.each(function() {
26
12
  if ($(this).is(":checked")) {
27
- selectedLabels.push( $(this).next('label').text());
13
+ selectedLabels.push( $(this).next('.facet-value').text());
28
14
  }
29
15
  });
30
16
  return selectedLabels.join(" OR ");
31
17
  }
32
-
18
+
33
19
  //Pass in JQuery object of zero or more <div class="facet_item"> blocks,
34
20
  //that contain an h3, some checkboxes, and a span.adv_facet_selections for
35
- //display of current selections. Will update the span.
21
+ //display of current selections. Will update the span.
36
22
  function updateSelectedDisplay(facet_item) {
37
23
  var checkboxes = $(facet_item).find("input:checkbox");
38
24
  var displaySpan = $(facet_item).find("span.adv_facet_selections");
39
25
  var displayStr = checkboxesToString( checkboxes );
40
-
26
+
41
27
  displaySpan.text( displayStr );
42
28
  if (displayStr == "") {
43
29
  displaySpan.hide();
44
30
  } else {
45
31
  displaySpan.show();
46
32
  }
47
-
48
-
33
+
34
+
49
35
  }
50
-
36
+
51
37
  // on page load, set initial properly
52
38
  $(".facet_item").each(function() {
53
39
  updateSelectedDisplay(this);
@@ -57,6 +43,6 @@ $(document).ready(function() {
57
43
  $(".facet_item input:checkbox").change( function() {
58
44
  updateSelectedDisplay( $(this).closest(".facet_item"));
59
45
  });
60
-
61
-
46
+
47
+
62
48
  });
@@ -1,39 +1,12 @@
1
1
 
2
2
  /* Random styles */
3
3
 
4
- .advanced_search_field label {
5
- display:block;
4
+ form.advanced h4 select {
5
+ height: auto;
6
+ margin: 0;
6
7
  }
7
8
 
8
- .advanced_search_field input {
9
- margin-bottom: 0.666em;
10
- width: 80%;
11
- }
12
-
13
- form.advanced label {
14
- font-weight:normal;
15
- }
16
-
17
- form.advanced h2 {
18
- font-weight: normal;
19
- background-color: #EEEEEE;
20
- height: 3em;
21
- }
22
-
23
- form.advanced .limit_column ul {
24
- margin: 1em;
25
- }
26
9
 
27
- form.advanced .limit_column li {
28
- list-style: none;
29
- padding: 0.1em 0.4em;
30
- font-size: 80%;
31
- }
32
-
33
- form.advanced .facet_item h3 {
34
- cursor: pointer;
35
- }
36
-
37
10
  form.advanced .adv_facet_selections {
38
11
  color:green;
39
12
  font-size: 80%;
@@ -41,65 +14,10 @@ form.advanced .adv_facet_selections {
41
14
  margin-top: 0.25em;
42
15
  }
43
16
 
44
- form.advanced .advanced_button {
45
- -moz-border-radius: 4px 4px 4px 4px;
46
- -webkit-border-radius: 4px 4px 4px 4px;
47
- border-radius: 4px 4px 4px 4px;
48
- background-color: #F6F6F6;
49
- border: 1px solid #CCCCCC;
50
- color: #2E4F81;
51
- display: inline-block;
52
- float: right;
53
- margin-right: 1em;
54
- padding: 0.4em 1em;
55
- text-decoration: none;
56
- }
57
-
58
- form.advanced .reset {
59
- }
60
-
61
-
62
17
 
63
18
  .advanced_help li {
64
19
  margin-top: 0.5em;
65
20
  margin-bottom: 0.5em;
66
21
  }
67
22
 
68
- form.advanced .sort_submit_buttons {
69
- background-color: #EEEEEE;
70
- padding: 1em;
71
- margin-top: 1em;
72
- overflow: hidden; /* trick into containing floats please */
73
- }
74
-
75
- form.advanced .constraints {
76
- padding: 1em;
77
- margin-top: 1em;
78
- background-color: #E2EDFE;
79
- border: 1px solid #C4DAFE;
80
- }
81
-
82
- form.advanced .constraints h4 {
83
- margin-bottom: 0.66em;
84
- }
85
-
86
- form.advanced .constraints .constraint {
87
- display:block;
88
- padding-left:2em;
89
- text-indent:-2em;
90
- }
91
-
92
- form.advanced .constraints .constraint .filterName {
93
- font-weight: bold;
94
- margin-right: 0.66em;
95
- }
96
-
97
- form.advanced .column > h2 {
98
- padding: 0.33em;
99
- }
100
- form.advanced .column > div {
101
- padding-left: 0.33em;
102
- padding-right: 0.33em;
103
- }
104
-
105
23
 
@@ -4,7 +4,7 @@ module AdvancedHelper
4
4
  # Fill in default from existing search, if present
5
5
  # -- if you are using same search fields for basic
6
6
  # search and advanced, will even fill in properly if existing
7
- # search used basic search on same field present in advanced.
7
+ # search used basic search on same field present in advanced.
8
8
  def label_tag_default_for(key)
9
9
  if (! params[key].blank?)
10
10
  return params[key]
@@ -12,7 +12,7 @@ module AdvancedHelper
12
12
  return params["q"]
13
13
  else
14
14
  return nil
15
- end
15
+ end
16
16
  end
17
17
 
18
18
  # Is facet value in adv facet search results?
@@ -21,7 +21,7 @@ module AdvancedHelper
21
21
  end
22
22
 
23
23
  # Current params without fields that will be over-written by adv. search,
24
- # or other fields we don't want.
24
+ # or other fields we don't want.
25
25
  def advanced_search_context
26
26
  my_params = params.dup
27
27
  [:page, :commit, :f_inclusive, :q, :search_field, :op, :action, :index, :sort, :controller].each do |bad_key|
@@ -33,20 +33,20 @@ module AdvancedHelper
33
33
  my_params
34
34
  end
35
35
 
36
- def search_fields_for_advanced_search
36
+ def search_fields_for_advanced_search
37
37
  # If we could count on 1.9.3 with ordered hashes and
38
- # Hash#select that worked reasonably, this would be trivial.
39
- # instead, a way compat with 1.8.7 and 1.9.x both.
38
+ # Hash#select that worked reasonably, this would be trivial.
39
+ # instead, a way compat with 1.8.7 and 1.9.x both.
40
40
  @search_fields_for_advanced_search ||= begin
41
41
  # make it an ActiveSupport::OrderedHash if it needs to be
42
42
  hash = blacklight_config.search_fields.class.new
43
-
43
+
44
44
  blacklight_config.search_fields.each_pair do |key, value|
45
45
  hash[key] = value unless value.include_in_advanced_search == false
46
46
  end
47
-
47
+
48
48
  hash
49
49
  end
50
50
  end
51
-
51
+
52
52
  end
@@ -1 +1,3 @@
1
- <%= render_facet_partials facet_field_names, :partial => 'facet_limit' %>
1
+ <div class="facets-collapse" id="facets">
2
+ <%= render_facet_partials facet_field_names %>
3
+ </div>
@@ -1,6 +1,6 @@
1
1
  <%- search_fields_for_advanced_search.each do |key, field_def| -%>
2
2
  <div class="advanced_search_field">
3
3
  <%= label_tag key, "#{field_def.label }:" %>
4
- <%= text_field_tag key, label_tag_default_for(key) %>
4
+ <%= text_field_tag key, label_tag_default_for(key), :class => 'input-block-level' %>
5
5
  </div>
6
6
  <%- end -%>
@@ -1,38 +1,42 @@
1
1
  <%= form_tag catalog_index_path, :class => 'advanced', :method => :get do %>
2
2
 
3
- <%= search_as_hidden_fields(:params => advanced_search_context ) %>
3
+ <%= search_as_hidden_fields(:params => advanced_search_context ) %>
4
+
5
+ <div class="input_columns row">
6
+
7
+ <div class="query_column span6">
8
+ <h4>Find items that match <%= select_tag(:op, options_for_select({'all'=>'AND','any'=>'OR'}.sort,'all'), :class => 'input-small') %> of the fields below:</h4>
4
9
 
5
- <div class="input_columns yui-g">
6
-
7
- <div class="query_column column">
8
- <h2>Find items that match <%= select_tag(:op, options_for_select({'all'=>'AND','any'=>'OR'}.sort,'all')) %> of the fields below:</h2>
9
-
10
10
  <div id="advanced_search">
11
11
  <%= render 'advanced/advanced_search_fields' %>
12
- </div>
12
+ </div>
13
13
  </div>
14
- <div class="limit_column column">
15
- <h2><strong>AND</strong> have these attributes:</h2>
16
-
14
+ <div class="limit_column offset1 span4">
15
+ <h4><strong>AND</strong> have these attributes:</h4>
16
+
17
17
  <div id="advanced_search_facets" class="limit_input">
18
18
  <%= render 'advanced_search_facets' %>
19
19
  </div>
20
20
  </div>
21
21
  </div>
22
-
22
+
23
23
  <% unless (search_context_str = render_search_to_s( advanced_search_context)).blank? %>
24
24
  <div class="constraints">
25
25
  <h4>Within search:</h4>
26
26
  <%= search_context_str %>
27
27
  </div>
28
28
  <% end %>
29
-
30
-
31
- <div class="sort_submit_buttons">
32
- <%= label_tag(:sort, "Sort results by") %>
29
+
30
+
31
+ <div class="sort_submit_buttons well clearfix">
32
+ <div class="pull-left">
33
+ <%= label_tag(:sort, "Sort results by") %>
33
34
  <%= select_tag(:sort, options_for_select(sort_fields, h(params[:sort]))) %>
34
35
  <%= hidden_field_tag(:search_field, blacklight_config.advanced_search[:url_key]) %>
35
- <%= submit_tag 'Search', :class=>'advanced_button', :id=>'advanced_search' %>
36
- <%= link_to "Start over", {:controller => "advanced", :action => "index"}, :class =>"reset advanced_button" %>
36
+ </div>
37
+ <div class="pull-right">
38
+ <%= submit_tag 'Search', :class=>'btn btn-primary', :id=>'advanced_search' %>
39
+ <%= link_to "Start over", {:controller => "advanced", :action => "index"}, :class =>"reset btn" %>
40
+ </div>
37
41
  </div>
38
42
  <% end %>
@@ -1,5 +1,5 @@
1
1
  <div class="facet_item blacklight-<%= facet_field.field.parameterize %>">
2
- <h3><%= facet_field.label -%> <span class="adv_facet_selections" style="display:none;"></span></h3>
2
+ <h5 class="twiddle"><%= facet_field.label -%> <i class="icon-chevron"></i><span class="adv_facet_selections" style="display:none;"></span></h5>
3
3
 
4
4
  <%= yield %>
5
5
  </div>
@@ -1,7 +1,7 @@
1
1
  <ul>
2
2
  <% display_facet.items.each do |item| -%>
3
3
  <li>
4
- <%= check_box_tag "f_inclusive[#{solr_field}][#{item.value.to_sym}]", 1, facet_value_checked?(solr_field, item.value)%> <%= label_tag "f_inclusive_#{solr_field}[#{item.value.to_sym}]", h(item.value) %> (<%= format_num item.hits %>)
4
+ <%= label_tag "f_inclusive_#{solr_field}[#{item.value.to_sym}]", (check_box_tag "f_inclusive[#{solr_field}][#{item.value.to_sym}]", 1, facet_value_checked?(solr_field, item.value)) + content_tag(:span, item.value, :class => 'facet-value') + " (#{format_num item.hits})".html_safe, :class => 'checkbox' %>
5
5
  </li>
6
6
  <% end -%>
7
7
  </ul>
@@ -3,9 +3,10 @@
3
3
  <h4>Any of:</h4>
4
4
  <ul>
5
5
  <% @advanced_query.filters[solr_field].each do |value| %>
6
- <li><span class="selected"><%= h(value) %></span> <%= link_to "[remove]", remove_advanced_facet_param(solr_field, value), :class=>"remove" %></li>
6
+ <li><span class="selected"><%= h(value) %></span> <%= link_to(content_tag(:i, '', :class => "icon-remove") + content_tag(:span, '[remove]', :class => 'hide-text'), remove_facet_params(solr_field, value, params), :class=>"remove") %></li>
7
7
  <% end %>
8
8
  </ul>
9
9
  </div>
10
-
10
+
11
11
  <%= render_facet_limit display_facet, :layout => nil, :partial => 'catalog/facet_limit' %>
12
+ </div>
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
19
19
 
20
20
 
21
21
  s.add_dependency "rails", "~> 3.0"
22
- s.add_dependency "blacklight", ">= 3.2.1", "~> 3.2"
22
+ s.add_dependency "blacklight", "~> 4.0"
23
23
  s.add_dependency "parslet"
24
24
 
25
25
  s.add_development_dependency "rspec"
@@ -27,4 +27,5 @@ Gem::Specification.new do |s|
27
27
  s.add_development_dependency "capybara"
28
28
  s.add_development_dependency "sqlite3"
29
29
  s.add_development_dependency 'launchy'
30
+ s.add_development_dependency 'jettywrapper'
30
31
  end
@@ -1,11 +1,15 @@
1
1
  # Meant to be applied on top of Blacklight view helpers, to over-ride
2
- # certain methods from RenderConstraintsHelper (newish in BL),
3
- # to effect constraints rendering and search history rendering,
2
+ # certain methods from RenderConstraintsHelper (newish in BL),
3
+ # to effect constraints rendering and search history rendering,
4
4
  module BlacklightAdvancedSearch::RenderConstraintsOverride
5
5
 
6
+ def query_has_constraints?(localized_params = params)
7
+ !(localized_params[:q].blank? and localized_params[:f].blank? and localized_params[:f_inclusive].blank?)
8
+ end
9
+
6
10
  #Over-ride of Blacklight method, provide advanced constraints if needed,
7
11
  # otherwise call super. Existence of an @advanced_query instance variable
8
- # is our trigger that we're in advanced mode.
12
+ # is our trigger that we're in advanced mode.
9
13
  def render_constraints_query(my_params = params)
10
14
  if (@advanced_query.nil? || @advanced_query.keyword_queries.empty? )
11
15
  return super(my_params)
@@ -19,53 +23,53 @@ module BlacklightAdvancedSearch::RenderConstraintsOverride
19
23
  catalog_index_path(remove_advanced_keyword_query(field,my_params))
20
24
  )
21
25
  end
22
- if (@advanced_query.keyword_op == "OR" &&
26
+ if (@advanced_query.keyword_op == "OR" &&
23
27
  @advanced_query.keyword_queries.length > 1)
24
28
  content = '<span class="inclusive_or appliedFilter">' + '<span class="operator">Any of:</span>' + content + '</span>'
25
29
  end
26
-
30
+
27
31
  return content
28
32
  end
29
33
  end
30
34
 
31
35
  #Over-ride of Blacklight method, provide advanced constraints if needed,
32
36
  # otherwise call super. Existence of an @advanced_query instance variable
33
- # is our trigger that we're in advanced mode.
37
+ # is our trigger that we're in advanced mode.
34
38
  def render_constraints_filters(my_params = params)
35
39
  content = super(my_params)
36
40
 
37
41
  if (@advanced_query)
38
42
  @advanced_query.filters.each_pair do |field, value_list|
39
43
  label = facet_field_labels[field]
40
- content << render_constraint_element(label,
44
+ content << render_constraint_element(label,
41
45
  value_list.join(" OR "),
42
46
  :remove => catalog_index_path( remove_advanced_filter_group(field, my_params) )
43
47
  )
44
48
  end
45
49
  end
46
-
50
+
47
51
  return content
48
52
  end
49
53
 
50
54
  def render_search_to_s_filters(my_params)
51
55
  content = super(my_params)
52
-
56
+
53
57
  advanced_query = BlacklightAdvancedSearch::QueryParser.new(my_params, blacklight_config )
54
-
58
+
55
59
  if (advanced_query.filters.length > 0)
56
60
  advanced_query.filters.each_pair do |field, values|
57
61
  label = facet_field_labels[field]
58
-
59
- content << render_search_to_s_element(
62
+
63
+ content << render_search_to_s_element(
60
64
  label,
61
65
  values.join(" OR ")
62
66
  )
63
- end
67
+ end
64
68
  end
65
69
  return content
66
70
  end
67
71
 
68
- def render_search_to_s_q(my_params)
72
+ def render_search_to_s_q(my_params)
69
73
  content = super(my_params)
70
74
 
71
75
  advanced_query = BlacklightAdvancedSearch::QueryParser.new(my_params, blacklight_config )
@@ -77,20 +81,20 @@ module BlacklightAdvancedSearch::RenderConstraintsOverride
77
81
  display_as = advanced_query.keyword_queries.collect do |field, query|
78
82
  h( search_field_def_for_key(field)[:label] + ": " + query )
79
83
  end.join(" ; ")
80
-
84
+
81
85
  content << render_search_to_s_element("Any of",
82
86
  display_as,
83
87
  :escape_value => false
84
88
  )
85
- elsif (advanced_query.keyword_queries.length > 0)
89
+ elsif (advanced_query.keyword_queries.length > 0)
86
90
  advanced_query.keyword_queries.each_pair do |field, query|
87
91
  label = search_field_def_for_key(field)[:label]
88
92
 
89
93
  content << render_search_to_s_element(label, query)
90
- end
94
+ end
91
95
  end
92
-
96
+
93
97
  return content
94
98
  end
95
-
99
+
96
100
  end
@@ -1,13 +1,23 @@
1
- <div id="search" class="search">
2
- <%= form_tag catalog_index_path, :method => :get do %>
3
- <h2 class="search"><%= label_tag(:q, "Search ") %></h2>
4
- <%= text_field_tag :q, params[:q], :class => "q" %>
5
- <%= label_tag(:search_field, " in ") %>
6
- <%= select_tag(:search_field, options_for_select(search_fields, h(params[:search_field])), :title => "Targeted search options", :class=>"search_field") %>
7
-
8
- <%= search_as_hidden_fields(:omit_keys => [:q, :search_field, :qt, :page]).html_safe %>
9
-
10
- <%= submit_tag 'search', :class=>'submit' %>
1
+ <%= form_tag search_action_url, :method => :get, :class => 'search-query-form form-inline clearfix' do %>
2
+ <%= search_as_hidden_fields(:omit_keys => [:q, :search_field, :qt, :page]).html_safe %>
3
+
4
+ <% unless search_fields.empty? %>
5
+ <div class="pull-left">
6
+ <label for="search_field" class="hide-text"><%= t('blacklight.search.form.search_field.label') %></label>
7
+ <%= select_tag(:search_field, options_for_select(search_fields, h(params[:search_field])), :title => t('blacklight.search.form.search_field.title'), :class=>"search_field input-small") %>
8
+ <span class="hide-text"><%= t('blacklight.search.form.search_field.post_label') %></span>
9
+ </div>
10
+ <% end %>
11
+ <div class="input-append pull-left">
12
+ <label for="q" class="hide-text"><%= t('blacklight.search.form.q') %></label>
13
+ <%= text_field_tag :q, params[:q], :placeholder => t('blacklight.search.form.q'), :class => "search_q q", :id => "q"%>
14
+ <button type="submit" class="btn btn-primary search-btn" id="search">
15
+ <span class="submit-search-text"><%=t('blacklight.search.form.submit')%></span>
16
+ <i class="icon-search icon-white"></i>
17
+ </button>
18
+
19
+ </div>
20
+
11
21
  <% end %>
12
- <%= link_to 'More options', params.merge(:controller=>"advanced", :action=>"index") , :class=>"advanced_search"%>
13
- </div>
22
+
23
+ <%= link_to 'More options', params.merge(:controller=>"advanced", :action=>"index") , :class=>"advanced_search"%>
@@ -1,19 +1,80 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "Blacklight Advanced Search Form" do
4
- before do
5
- AdvancedController.blacklight_config = Blacklight::Configuration.new
6
- AdvancedController.configure_blacklight do |config|
4
+ before(:all) do
5
+ CatalogController.configure_blacklight do |config|
6
+ config.default_solr_params = {
7
+ :qt => 'search',
8
+ :rows => 10
9
+ }
10
+
11
+ config.add_facet_field 'language_facet'
7
12
 
8
13
  config.add_search_field('title') do |field|
9
14
  field.solr_local_parameters = { :qf => "title_t", :pf => "title_t"}
10
15
  end
16
+
17
+ config.add_search_field('author') do |field|
18
+ field.solr_local_parameters = { :qf => "author_t", :pf => "author_t"}
19
+ end
20
+
21
+ config.add_search_field('dummy_field') do |field|
22
+ field.include_in_advanced_search = false
23
+ field.solr_local_parameters = { :qf => "author_t", :pf => "author_t"}
24
+ end
25
+ end
26
+ AdvancedController.copy_blacklight_config_from(CatalogController)
27
+ end
28
+
29
+ describe "advanced search form" do
30
+ before do
31
+ visit '/advanced'
32
+ end
33
+
34
+ it "should have field and facet blocks" do
35
+ page.should have_selector('.query_column')
36
+ page.should have_selector('.limit_column')
37
+ end
38
+
39
+ describe "query column" do
40
+ it "should give the user a choice between and/or queries" do
41
+ page.should have_selector('#op')
42
+ within('#op') do
43
+ page.should have_selector('option[value="AND"]')
44
+ page.should have_selector('option[value="OR"]')
45
+ end
46
+ end
47
+
48
+ it "should list the configured search fields" do
49
+ page.should have_selector '.advanced_search_field #title'
50
+ page.should have_selector '.advanced_search_field #author'
51
+ end
52
+
53
+ it "should not list the search fields listed as not to be included in adv search" do
54
+ page.should_not have_selector '.advanced_search_field #dummy_field'
55
+ end
56
+ end
57
+
58
+ describe "facet column" do
59
+ it "should list facets" do
60
+ page.should have_selector('.blacklight-language_facet')
61
+
62
+ within('.blacklight-language_facet') do
63
+ page.should have_content "Language Facet"
64
+ end
65
+ end
66
+ end
67
+
68
+ it "scope searches to fields" do
69
+ fill_in "title", :with => "Medicine"
70
+ click_on "Search"
71
+ page.should have_content "Remove constraint Title: Medicine"
72
+ page.should have_content "2007020969"
11
73
  end
12
74
  end
13
75
 
14
76
  it "should show the search fields" do
15
77
  visit '/advanced'
16
78
  page.should have_selector('input#title')
17
-
18
79
  end
19
80
  end
@@ -1,4 +1,6 @@
1
1
  class ApplicationController < ActionController::Base
2
2
  include Blacklight::Controller
3
3
 
4
+ layout 'blacklight'
5
+
4
6
  end
@@ -13,6 +13,6 @@
13
13
  development:
14
14
  url: http://127.0.0.1:8983/solr
15
15
  test: &test
16
- url: http://127.0.0.1:8983/solr
16
+ url: http://127.0.0.1:8888/solr
17
17
  cucumber:
18
18
  <<: *test
data/spec/spec_helper.rb CHANGED
@@ -3,14 +3,13 @@ require 'bundler'
3
3
 
4
4
  Bundler.require :default, :development
5
5
 
6
+ ENV["RAILS_ENV"] = "test"
7
+
6
8
  require 'blacklight/engine'
7
9
  require 'rsolr'
8
- require 'rsolr-ext'
9
10
  require 'capybara/rspec'
10
11
  Combustion.initialize!
11
12
 
12
- Blacklight.solr_config = { :url => 'http://127.0.0.1:8983/solr' }
13
-
14
13
  class SolrDocument
15
14
  include Blacklight::Solr::Document
16
15
  end
metadata CHANGED
@@ -1,155 +1,168 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: blacklight_advanced_search
3
- version: !ruby/object:Gem::Version
4
- hash: 23
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
5
  prerelease:
6
- segments:
7
- - 1
8
- - 2
9
- - 4
10
- version: 1.2.4
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Jonathan Rochkind
14
9
  - Chris Beer
15
10
  autorequire:
16
11
  bindir: bin
17
12
  cert_chain: []
18
-
19
- date: 2012-04-12 00:00:00 Z
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
13
+ date: 2012-11-30 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
22
16
  name: rails
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
25
18
  none: false
26
- requirements:
19
+ requirements:
27
20
  - - ~>
28
- - !ruby/object:Gem::Version
29
- hash: 7
30
- segments:
31
- - 3
32
- - 0
33
- version: "3.0"
21
+ - !ruby/object:Gem::Version
22
+ version: '3.0'
34
23
  type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: blacklight
38
24
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
25
+ version_requirements: !ruby/object:Gem::Requirement
40
26
  none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- hash: 13
45
- segments:
46
- - 3
47
- - 2
48
- - 1
49
- version: 3.2.1
27
+ requirements:
50
28
  - - ~>
51
- - !ruby/object:Gem::Version
52
- hash: 3
53
- segments:
54
- - 3
55
- - 2
56
- version: "3.2"
29
+ - !ruby/object:Gem::Version
30
+ version: '3.0'
31
+ - !ruby/object:Gem::Dependency
32
+ name: blacklight
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ~>
37
+ - !ruby/object:Gem::Version
38
+ version: '4.0'
57
39
  type: :runtime
58
- version_requirements: *id002
59
- - !ruby/object:Gem::Dependency
60
- name: parslet
61
40
  prerelease: false
62
- requirement: &id003 !ruby/object:Gem::Requirement
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: '4.0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: parslet
49
+ requirement: !ruby/object:Gem::Requirement
63
50
  none: false
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- hash: 3
68
- segments:
69
- - 0
70
- version: "0"
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
71
55
  type: :runtime
72
- version_requirements: *id003
73
- - !ruby/object:Gem::Dependency
74
- name: rspec
75
56
  prerelease: false
76
- requirement: &id004 !ruby/object:Gem::Requirement
57
+ version_requirements: !ruby/object:Gem::Requirement
77
58
  none: false
78
- requirements:
79
- - - ">="
80
- - !ruby/object:Gem::Version
81
- hash: 3
82
- segments:
83
- - 0
84
- version: "0"
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: rspec
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
85
71
  type: :development
86
- version_requirements: *id004
87
- - !ruby/object:Gem::Dependency
88
- name: rspec-rails
89
72
  prerelease: false
90
- requirement: &id005 !ruby/object:Gem::Requirement
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ - !ruby/object:Gem::Dependency
80
+ name: rspec-rails
81
+ requirement: !ruby/object:Gem::Requirement
91
82
  none: false
92
- requirements:
93
- - - ">="
94
- - !ruby/object:Gem::Version
95
- hash: 3
96
- segments:
97
- - 0
98
- version: "0"
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
99
87
  type: :development
100
- version_requirements: *id005
101
- - !ruby/object:Gem::Dependency
102
- name: capybara
103
88
  prerelease: false
104
- requirement: &id006 !ruby/object:Gem::Requirement
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: capybara
97
+ requirement: !ruby/object:Gem::Requirement
105
98
  none: false
106
- requirements:
107
- - - ">="
108
- - !ruby/object:Gem::Version
109
- hash: 3
110
- segments:
111
- - 0
112
- version: "0"
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
113
103
  type: :development
114
- version_requirements: *id006
115
- - !ruby/object:Gem::Dependency
116
- name: sqlite3
117
104
  prerelease: false
118
- requirement: &id007 !ruby/object:Gem::Requirement
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: sqlite3
113
+ requirement: !ruby/object:Gem::Requirement
119
114
  none: false
120
- requirements:
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- hash: 3
124
- segments:
125
- - 0
126
- version: "0"
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
127
119
  type: :development
128
- version_requirements: *id007
129
- - !ruby/object:Gem::Dependency
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ - !ruby/object:Gem::Dependency
130
128
  name: launchy
129
+ requirement: !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ type: :development
131
136
  prerelease: false
132
- requirement: &id008 !ruby/object:Gem::Requirement
137
+ version_requirements: !ruby/object:Gem::Requirement
133
138
  none: false
134
- requirements:
135
- - - ">="
136
- - !ruby/object:Gem::Version
137
- hash: 3
138
- segments:
139
- - 0
140
- version: "0"
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ - !ruby/object:Gem::Dependency
144
+ name: jettywrapper
145
+ requirement: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ! '>='
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
141
151
  type: :development
142
- version_requirements: *id008
152
+ prerelease: false
153
+ version_requirements: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ! '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
143
159
  description:
144
- email:
160
+ email:
145
161
  - blacklight-development@googlegroups.com
146
162
  executables: []
147
-
148
163
  extensions: []
149
-
150
164
  extra_rdoc_files: []
151
-
152
- files:
165
+ files:
153
166
  - .gitignore
154
167
  - Gemfile
155
168
  - LICENSE
@@ -213,38 +226,35 @@ files:
213
226
  - uninstall.rb
214
227
  homepage: http://projectblacklight.org/
215
228
  licenses: []
216
-
217
229
  post_install_message:
218
230
  rdoc_options: []
219
-
220
- require_paths:
231
+ require_paths:
221
232
  - lib
222
- required_ruby_version: !ruby/object:Gem::Requirement
233
+ required_ruby_version: !ruby/object:Gem::Requirement
223
234
  none: false
224
- requirements:
225
- - - ">="
226
- - !ruby/object:Gem::Version
227
- hash: 3
228
- segments:
235
+ requirements:
236
+ - - ! '>='
237
+ - !ruby/object:Gem::Version
238
+ version: '0'
239
+ segments:
229
240
  - 0
230
- version: "0"
231
- required_rubygems_version: !ruby/object:Gem::Requirement
241
+ hash: -4136791477781994072
242
+ required_rubygems_version: !ruby/object:Gem::Requirement
232
243
  none: false
233
- requirements:
234
- - - ">="
235
- - !ruby/object:Gem::Version
236
- hash: 3
237
- segments:
244
+ requirements:
245
+ - - ! '>='
246
+ - !ruby/object:Gem::Version
247
+ version: '0'
248
+ segments:
238
249
  - 0
239
- version: "0"
250
+ hash: -4136791477781994072
240
251
  requirements: []
241
-
242
252
  rubyforge_project: blacklight
243
- rubygems_version: 1.8.15
253
+ rubygems_version: 1.8.23
244
254
  signing_key:
245
255
  specification_version: 3
246
256
  summary: Blacklight Advanced Search plugin
247
- test_files:
257
+ test_files:
248
258
  - spec/acceptance/blacklight_advanced_search_form_spec.rb
249
259
  - spec/integration/blacklight_stub_spec.rb
250
260
  - spec/internal/app/controllers/application_controller.rb