blacklight_advanced_search 1.2.4 → 2.0.0

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