faceted_search 1.1.8 → 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.
- checksums.yaml +4 -4
- data/app/models/faceted_search/facets/default.rb +5 -14
- data/app/models/faceted_search/facets/filter.rb +40 -44
- data/app/models/faceted_search/facets/search.rb +4 -20
- data/app/models/faceted_search/facets.rb +4 -15
- data/app/views/faceted_search/facets/_filter.html.erb +2 -3
- data/lib/faceted_search/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 85b178d8ebe6784b6a4f5314795e448ad235122f70011f5e928a3d22cb6d8b71
|
4
|
+
data.tar.gz: cb478862460627e6ff37983212f1a4ef17af809bc64cba208edb432cad6b010d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aab3bff63a1cb917d6e5fd5439f8d0f02a61ff81005d4fc2f2f57c316c5d61f3df626b9d05e37100c10a54f0dec54fa1de871342f9c2e49c97ef926e7ac0cfb5
|
7
|
+
data.tar.gz: d290071a7050fefd94fb87cb71563827f8267427bad0f0086f86e331e5c222dd9e4deb86902ab75cefeaf1d1d05b3ca9ea6f26097e5e7a010ba138ea1eee14ef
|
@@ -1,25 +1,16 @@
|
|
1
1
|
module FacetedSearch
|
2
2
|
class Facets::Default
|
3
|
-
attr_reader :name, :params, :facets
|
3
|
+
attr_reader :name, :params, :facets
|
4
4
|
|
5
|
-
def initialize(
|
6
|
-
params:,
|
7
|
-
facets:,
|
8
|
-
find_by: nil,
|
9
|
-
source: nil,
|
10
|
-
habtm: false,
|
11
|
-
title: nil)
|
5
|
+
def initialize(name, params, facets, options)
|
12
6
|
@name = name
|
13
|
-
@title = title
|
14
7
|
@params = params
|
15
8
|
@facets = facets
|
16
|
-
@
|
17
|
-
@source = source
|
18
|
-
@habtm = habtm
|
9
|
+
@options = options
|
19
10
|
end
|
20
11
|
|
21
12
|
def title
|
22
|
-
@title
|
13
|
+
@options[:title] || name.to_s.humanize.titleize
|
23
14
|
end
|
24
15
|
|
25
16
|
def kind
|
@@ -37,7 +28,7 @@ module FacetedSearch
|
|
37
28
|
|
38
29
|
def path(custom_params = @params)
|
39
30
|
return '' if custom_params.blank?
|
40
|
-
"&facets[#{
|
31
|
+
"&facets[#{name}]=#{custom_params}"
|
41
32
|
end
|
42
33
|
|
43
34
|
def to_s
|
@@ -1,35 +1,35 @@
|
|
1
1
|
module FacetedSearch
|
2
2
|
class Facets::Filter < Facets::Default
|
3
|
-
attr_reader :display_method
|
4
3
|
|
5
|
-
def
|
6
|
-
|
7
|
-
facets:,
|
8
|
-
display_method:,
|
9
|
-
find_by: nil,
|
10
|
-
source: nil,
|
11
|
-
habtm: false,
|
12
|
-
title: nil)
|
13
|
-
super(name: name,
|
14
|
-
title: title,
|
15
|
-
facets: facets,
|
16
|
-
params: params,
|
17
|
-
find_by: find_by,
|
18
|
-
source: source,
|
19
|
-
habtm: habtm,
|
20
|
-
title: title)
|
21
|
-
@display_method = display_method
|
4
|
+
def tree?
|
5
|
+
@options[:tree]
|
22
6
|
end
|
23
7
|
|
24
|
-
def
|
25
|
-
|
26
|
-
custom_params = params_array.dup
|
27
|
-
selected?(value) ? custom_params.delete(value)
|
28
|
-
: custom_params.push(value)
|
29
|
-
path(custom_params.join(','))
|
8
|
+
def display_method
|
9
|
+
@options[:display_method] ||= Proc.new { |object| object.to_s }
|
30
10
|
end
|
31
11
|
|
32
|
-
|
12
|
+
# Adds a scope corresponding to this facet
|
13
|
+
# to the scope sent as an argument
|
14
|
+
# and return the modified scope
|
15
|
+
def add_scope(scope)
|
16
|
+
return scope if params_array.blank?
|
17
|
+
habtm? ? scope.joins(name).where(name => { find_by => params_array })
|
18
|
+
: scope.where(name => params_array)
|
19
|
+
end
|
20
|
+
|
21
|
+
def find_by
|
22
|
+
@options[:find_by] || :id
|
23
|
+
end
|
24
|
+
|
25
|
+
# Show all values that have corresponding results.
|
26
|
+
# This is a regular SQL inner join.
|
27
|
+
def values
|
28
|
+
joined_table = facets.model_table_name.to_sym
|
29
|
+
source.all.joins(joined_table).where(joined_table => { id: facets.model }).distinct
|
30
|
+
end
|
31
|
+
|
32
|
+
def value_selected?(value)
|
33
33
|
value.to_s.in? params_array
|
34
34
|
end
|
35
35
|
|
@@ -42,38 +42,34 @@ module FacetedSearch
|
|
42
42
|
scope
|
43
43
|
end
|
44
44
|
|
45
|
-
def
|
46
|
-
|
45
|
+
def path_for(value)
|
46
|
+
value = value.to_s
|
47
|
+
custom_params = params_array.dup
|
48
|
+
value_selected?(value) ? custom_params.delete(value)
|
49
|
+
: custom_params.push(value)
|
50
|
+
path(custom_params.join(','))
|
47
51
|
end
|
48
52
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
return scope if params_array.blank?
|
54
|
-
@habtm ? scope.joins(name).where(name => { find_by => params_array })
|
55
|
-
: scope.where(name => params_array)
|
53
|
+
protected
|
54
|
+
|
55
|
+
def params_array
|
56
|
+
@params_array ||= @params.to_s.split(',')
|
56
57
|
end
|
57
58
|
|
58
59
|
# Adds a scope corresponding to this facet
|
59
60
|
# to the scope sent as an argument with specific value
|
60
61
|
# and return the modified scope
|
61
62
|
def add_scope_with_value(scope, value)
|
62
|
-
|
63
|
+
habtm? ? scope.joins(name).where(name => { find_by => value })
|
63
64
|
: scope.where(name => value)
|
64
65
|
end
|
65
66
|
|
66
|
-
|
67
|
-
|
68
|
-
def values
|
69
|
-
joined_table = @facets.model_table_name.to_sym
|
70
|
-
source.all.joins(joined_table).where(joined_table => { id: @facets.model }).distinct
|
67
|
+
def source
|
68
|
+
@options[:source] || name.to_s.singularize.titleize.constantize
|
71
69
|
end
|
72
70
|
|
73
|
-
|
74
|
-
|
75
|
-
def source
|
76
|
-
@source ||= @name.to_s.singularize.titleize.constantize
|
71
|
+
def habtm?
|
72
|
+
@options[:habtm]
|
77
73
|
end
|
78
74
|
end
|
79
75
|
end
|
@@ -1,29 +1,13 @@
|
|
1
1
|
module FacetedSearch
|
2
2
|
class Facets::Search < Facets::Default
|
3
|
-
attr_reader :placeholder
|
4
3
|
|
5
|
-
def
|
6
|
-
|
7
|
-
facets:,
|
8
|
-
placeholder: nil,
|
9
|
-
find_by: nil,
|
10
|
-
source: nil,
|
11
|
-
habtm: false,
|
12
|
-
title: nil)
|
13
|
-
super(name: name,
|
14
|
-
title: title,
|
15
|
-
facets: facets,
|
16
|
-
params: params,
|
17
|
-
find_by: find_by,
|
18
|
-
source: source,
|
19
|
-
habtm: habtm,
|
20
|
-
title: title)
|
21
|
-
@placeholder = placeholder
|
4
|
+
def placeholder
|
5
|
+
@options[:placeholder]
|
22
6
|
end
|
23
7
|
|
24
8
|
def add_scope(scope)
|
25
|
-
return scope if
|
26
|
-
scope.where("#{
|
9
|
+
return scope if params.blank?
|
10
|
+
scope.where("#{facets.model_table_name}.#{name} ILIKE ?", "%#{params}%")
|
27
11
|
end
|
28
12
|
end
|
29
13
|
end
|
@@ -41,23 +41,12 @@ module FacetedSearch
|
|
41
41
|
|
42
42
|
protected
|
43
43
|
|
44
|
-
def search(value,
|
45
|
-
add(Search.new(
|
46
|
-
params: params_for(value),
|
47
|
-
placeholder: placeholder,
|
48
|
-
facets: self,
|
49
|
-
title: title))
|
44
|
+
def search(value, options = {})
|
45
|
+
add(Search.new(value, params_for(value), self, options))
|
50
46
|
end
|
51
47
|
|
52
|
-
def filter(value,
|
53
|
-
add(Filter.new(
|
54
|
-
params: params_for(value),
|
55
|
-
facets: self,
|
56
|
-
find_by: find_by,
|
57
|
-
source: source,
|
58
|
-
habtm: habtm,
|
59
|
-
title: title,
|
60
|
-
display_method: display_method))
|
48
|
+
def filter(value, options = {})
|
49
|
+
add(Filter.new(value, params_for(value), self, options))
|
61
50
|
end
|
62
51
|
|
63
52
|
def params_for(value)
|
@@ -1,13 +1,12 @@
|
|
1
|
-
<ul class="faceted__facet__filter list-unstyled">
|
1
|
+
<ul class="faceted__facet__filter<%= '--tree' if facet.tree? %> list-unstyled">
|
2
2
|
<% facet.values.each do |value| %>
|
3
3
|
<%
|
4
4
|
identifier = value.send facet.find_by
|
5
|
-
selected = facet.selected? identifier
|
6
5
|
results_count = facet.results_with(identifier).count
|
7
6
|
display_value = facet.display_method.call(value)
|
8
7
|
next if results_count.zero?
|
9
8
|
%>
|
10
|
-
<li class="faceted__facet__filter__value<%= '--selected' if
|
9
|
+
<li class="faceted__facet__filter__value<%= '--selected' if facet.value_selected?(identifier) %>">
|
11
10
|
<%= link_to "#{display_value} (#{results_count})", facet.facets.path_for(facet, identifier) %>
|
12
11
|
</li>
|
13
12
|
<% 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:
|
4
|
+
version: 2.0.0
|
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-03-
|
13
|
+
date: 2019-03-25 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -139,7 +139,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
139
|
- !ruby/object:Gem::Version
|
140
140
|
version: '0'
|
141
141
|
requirements: []
|
142
|
-
|
142
|
+
rubyforge_project:
|
143
|
+
rubygems_version: 2.7.6
|
143
144
|
signing_key:
|
144
145
|
specification_version: 4
|
145
146
|
summary: Faceted search with Active Record
|