faceted_search 3.0.2 → 3.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 723f4aee4045acfda2a5de29d3278787b9aa9f8eb9af52ad4e44438374a880f4
4
- data.tar.gz: f27bbdfb8ee732c12c761b251b1198a6f7f8b01036f462e7d3856f2c14b4b5cc
3
+ metadata.gz: 40e1b27cf5c4266abfb4adeb45a75e915985334d6b57027e126f0dde3df31703
4
+ data.tar.gz: cd236dc85e1405e760b481b54a412e0379bda78f87e4c4d84ce5ce96ea856c11
5
5
  SHA512:
6
- metadata.gz: 32bcd675c7620682358f7d7d8decf72b25f4e488830651bd7d75bc6e46bc7c0e1fee0b1c9d2cc0b81138eba1896048ebef1db7673e7d8a9a3b9d64ee9b6fcdf1
7
- data.tar.gz: 00e77168dbc238c594a866681e6b32275adb42caa7db3e695b5a3da29da527f12eb12f2f7599f9e59c817900ec0741fc533efb48439a4c9c0c46b1099f077447
6
+ metadata.gz: 0a78d0cc408c4428e5764e6fd4df090a6a298288054ed18c9dfa8e3ac31f8df55ee57f696fbd885dc2d664dfb284f8bf549442478468968e6fd4b4b56a9bda8a
7
+ data.tar.gz: 49a64dfd21621fff301272072fa0d0529b244d775da075c2ff19a92bc45a1c983f5249b63ac0dc845f1a8291c505afe719105c1bc2d2f86a121d684a6bf8c087
data/README.md CHANGED
@@ -49,6 +49,13 @@ Create a model defining your facets:
49
49
  children.order(:title)
50
50
  }
51
51
  }
52
+ # Other tree option, shows all values
53
+ # filter_with_full_tree :categories, {
54
+ # habtm: true,
55
+ # children_scope: Proc.new { |children|
56
+ # children.order(:title)
57
+ # }
58
+ # }
52
59
  end
53
60
  end
54
61
 
@@ -82,5 +89,23 @@ If you need, you can add an anchor to the links:
82
89
  <%= render 'faceted_search/facets', facets: @facets, anchor: "#identifier" %>
83
90
 
84
91
 
92
+ ## Note about full tree
93
+
94
+ Tagging must be logical in order to use filter_with_full_tree.
95
+ With these categories:
96
+
97
+ Blues
98
+ Chicago blues
99
+ Delta Blues
100
+ Memphis Blues
101
+ Jazz
102
+ Free jazz
103
+ Swing
104
+ Latin jazz
105
+
106
+ If something is tagged as "Delta blues", it MUST be tagged as "Blues" as well.
107
+ Otherwise, it creates very odd comportments (selecting "Blues" does not show the object, whereas it is "Delta blues").
108
+ There is no inference whatsoever, so the data MUST be clean.
109
+
85
110
  ## License
86
111
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,22 @@
1
+ module FacetedSearch
2
+ class Facets::FullTree < Facets::DefaultList
3
+ def children_scope
4
+ @options[:children_scope] ||= Proc.new { |children| children }
5
+ end
6
+
7
+ def child_values(value)
8
+ filtered children_scope.call(value.children)
9
+ end
10
+
11
+ def values
12
+ filtered source.root
13
+ end
14
+
15
+ protected
16
+
17
+ def filtered(list)
18
+ joined_table = facets.model_table_name.to_sym
19
+ list.joins(joined_table).where(joined_table => { id: facets.results }).distinct
20
+ end
21
+ end
22
+ end
@@ -1,12 +1,12 @@
1
1
  module FacetedSearch
2
2
  class Facets::List < Facets::DefaultList
3
3
 
4
- # Show all values that have corresponding results.
4
+ # Show all values that have corresponding results with the current params.
5
5
  # This is a regular SQL inner join.
6
6
  def values
7
7
  unless @values
8
8
  joined_table = facets.model_table_name.to_sym
9
- @values = source.all.joins(joined_table).where(joined_table => { id: facets.model }).distinct
9
+ @values = source.all.joins(joined_table).where(joined_table => { id: facets.results }).distinct
10
10
  end
11
11
  @values
12
12
  end
@@ -32,7 +32,7 @@ module FacetedSearch
32
32
  list.each do |facet|
33
33
  scope = facet.add_scope(scope)
34
34
  end
35
- scope
35
+ scope.distinct
36
36
  end
37
37
 
38
38
  def model_table_name
@@ -53,6 +53,10 @@ module FacetedSearch
53
53
  add_facet Tree, value, options
54
54
  end
55
55
 
56
+ def filter_with_full_tree(value, options = {})
57
+ add_facet FullTree, value, options
58
+ end
59
+
56
60
  def params_for(value)
57
61
  @params[value] if @params.has_key? value
58
62
  end
@@ -1,14 +1,15 @@
1
1
  <%
2
2
  anchor ||= ''
3
+ reset ||= 'Reset'
3
4
  %>
4
5
  <ul class="faceted__facets list-unstyled">
5
6
  <% facets.list.each do |facet| %>
6
- <li>
7
- <% unless facet.title.blank? %>
8
- <b><%= facet.title %></b>
9
- <% end %>
10
- <%= render facet.kind.underscore, facet: facet, anchor: anchor %>
11
- </li>
7
+ <%= render facet.kind.underscore, facet: facet, anchor: anchor %>
12
8
  <% end %>
13
- <li class="faceted__facet__reinit"><a href="<%= facets.path%>"><i class="fas fa-ban"></i></a></li>
9
+ <li class="faceted__facet__reinit">
10
+ <a href="<%= facets.path%>">
11
+ <i class="fas fa-ban"></i>
12
+ <%= reset %>
13
+ </a>
14
+ </li>
14
15
  </ul>
@@ -0,0 +1,8 @@
1
+ <% if facet.values.any? %>
2
+ <li>
3
+ <% unless facet.title.blank? %><b><%= facet.title %></b><% end %>
4
+ <ol class="faceted__facet__full_tree list-unstyled ">
5
+ <%= render 'faceted_search/facets/full_tree/values', values: facet.values, facet: facet %>
6
+ </ol>
7
+ </li>
8
+ <% end %>
@@ -1,11 +1,16 @@
1
- <ol class="faceted__facet__list list-unstyled">
2
- <% facet.values.each do |value| %>
3
- <%
4
- identifier = value.send facet.find_by
5
- display_value = facet.display_method.call(value)
6
- %>
7
- <li class="faceted__facet__list__value<%= '--selected' if facet.value_selected?(identifier) %>">
8
- <%= link_to display_value, facet.facets.path_for(facet, identifier) + anchor %>
9
- </li>
10
- <% end %>
11
- </ol>
1
+ <% if facet.values.any? %>
2
+ <li>
3
+ <% unless facet.title.blank? %><b><%= facet.title %></b><% end %>
4
+ <ol class="faceted__facet__list list-unstyled">
5
+ <% facet.values.each do |value| %>
6
+ <%
7
+ identifier = value.send facet.find_by
8
+ display_value = facet.display_method.call(value)
9
+ %>
10
+ <li class="faceted__facet__list__value<%= '--selected' if facet.value_selected?(identifier) %>">
11
+ <%= link_to display_value, facet.facets.path_for(facet, identifier) + anchor %>
12
+ </li>
13
+ <% end %>
14
+ </ol>
15
+ </li>
16
+ <% end %>
@@ -1,18 +1,21 @@
1
- <% value = params[:facets][facet.name] if params[:facets] && params[:facets].has_key?(facet.name) %>
2
- <form action="<%= anchor %>" class="faceted__facet__text form-inline">
3
- <% facet.facets.list.each do |f| %>
4
- <% next if f == facet %>
5
- <% next if f.params.blank? %>
6
- <input type="hidden"
7
- name="facets[<%= f.name %>]"
8
- value="<%= f.params %>" />
9
- <% end %>
10
- <input type="search"
11
- name="facets[<%= facet.name %>]"
12
- placeholder="<%= facet.placeholder %>"
13
- value="<%= value %>"
14
- class="form-control" />
15
- <input type="submit"
16
- class="btn btn-light"
17
- value="OK" />
18
- </form>
1
+ <li>
2
+ <% unless facet.title.blank? %><b><%= facet.title %></b><% end %>
3
+ <% value = params[:facets][facet.name] if params[:facets] && params[:facets].has_key?(facet.name) %>
4
+ <form action="<%= anchor %>" class="faceted__facet__text form-inline">
5
+ <% facet.facets.list.each do |f| %>
6
+ <% next if f == facet %>
7
+ <% next if f.params.blank? %>
8
+ <input type="hidden"
9
+ name="facets[<%= f.name %>]"
10
+ value="<%= f.params %>" />
11
+ <% end %>
12
+ <input type="search"
13
+ name="facets[<%= facet.name %>]"
14
+ placeholder="<%= facet.placeholder %>"
15
+ value="<%= value %>"
16
+ class="form-control" />
17
+ <input type="submit"
18
+ class="btn btn-light"
19
+ value="OK" />
20
+ </form>
21
+ </li>
@@ -1,26 +1,32 @@
1
- <div class="faceted__facet__tree<% if facet.selected_object %> faceted__facet__tree--selected<% end %>">
2
- <% if facet.selected_object %>
3
- <%
4
- display_value = facet.display_method.call(facet.selected_object)
5
- identifier = facet.selected_object.send facet.find_by
6
- path = facet.facets.path_for(facet, identifier)
7
- %>
8
- <div class="faceted__facet__tree__back">
9
- <%= link_to path do %>
10
- <i class="fas fa-arrow-left"></i> <%= display_value %>
1
+ <% if facet.values.any? %>
2
+ <li>
3
+ <% unless facet.title.blank? %><b><%= facet.title %></b><% end %>
4
+ <div class="faceted__facet__tree<% if facet.selected_object %> faceted__facet__tree--selected<% end %>">
5
+ <% if facet.selected_object %>
6
+ <%
7
+ display_value = facet.display_method.call(facet.selected_object)
8
+ identifier = facet.selected_object.send facet.find_by
9
+ path = facet.facets.path_for(facet, identifier)
10
+ %>
11
+ <div class="faceted__facet__tree__back">
12
+ <%= link_to path do %>
13
+ <i class="fas fa-arrow-left"></i> <%= display_value %>
14
+ <% end %>
15
+ </div>
11
16
  <% end %>
12
- </div>
13
- <% end %>
14
17
 
15
- <ol class="faceted__facet__tree__values list-unstyled ">
16
- <% facet.values.each do |value| %>
17
- <%
18
- display_value = facet.display_method.call(value)
19
- identifier = value.send facet.find_by
20
- path = facet.facets.path_for(facet, identifier)
21
- %>
22
- <li class="faceted__facet__tree__value">
23
- <%= link_to display_value, path %>
24
- </li>
25
- <% end %>
26
- </div>
18
+ <ol class="faceted__facet__tree__values list-unstyled ">
19
+ <% facet.values.each do |value| %>
20
+ <%
21
+ display_value = facet.display_method.call(value)
22
+ identifier = value.send facet.find_by
23
+ path = facet.facets.path_for(facet, identifier)
24
+ %>
25
+ <li class="faceted__facet__tree__value">
26
+ <%= link_to display_value, path %>
27
+ </li>
28
+ <% end %>
29
+ </ol>
30
+ </div>
31
+ </li>
32
+ <% end %>
@@ -0,0 +1,16 @@
1
+ <% values.each do |value| %>
2
+ <%
3
+ display_value = facet.display_method.call(value)
4
+ identifier = value.send facet.find_by
5
+ path = facet.facets.path_for(facet, identifier)
6
+ %>
7
+ <li class="faceted__facet__full_tree__value<%= '--selected' if facet.value_selected?(identifier) %>">
8
+ <%= link_to display_value, path %>
9
+ <% child_values = facet.child_values(value) %>
10
+ <% if child_values.any? %>
11
+ <ol>
12
+ <%= render 'faceted_search/facets/full_tree/values', values: child_values, facet: facet %>
13
+ </ol>
14
+ <% end %>
15
+ </li>
16
+ <% end %>
@@ -1,3 +1,3 @@
1
1
  module FacetedSearch
2
- VERSION = '3.0.2'
2
+ VERSION = '3.0.3'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faceted_search
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.2
4
+ version: 3.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arnaud Levy
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-04-01 00:00:00.000000000 Z
13
+ date: 2019-04-03 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
@@ -125,13 +125,16 @@ files:
125
125
  - app/models/faceted_search/facets.rb
126
126
  - app/models/faceted_search/facets/default.rb
127
127
  - app/models/faceted_search/facets/default_list.rb
128
+ - app/models/faceted_search/facets/full_tree.rb
128
129
  - app/models/faceted_search/facets/list.rb
129
130
  - app/models/faceted_search/facets/text.rb
130
131
  - app/models/faceted_search/facets/tree.rb
131
132
  - app/views/faceted_search/_facets.html.erb
133
+ - app/views/faceted_search/facets/_full_tree.html.erb
132
134
  - app/views/faceted_search/facets/_list.html.erb
133
135
  - app/views/faceted_search/facets/_text.html.erb
134
136
  - app/views/faceted_search/facets/_tree.html.erb
137
+ - app/views/faceted_search/facets/full_tree/_values.html.erb
135
138
  - lib/faceted_search.rb
136
139
  - lib/faceted_search/engine.rb
137
140
  - lib/faceted_search/railtie.rb