Skip to content

Commit

Permalink
Merge 73f19bc into d362900
Browse files Browse the repository at this point in the history
  • Loading branch information
jnarowski committed Nov 16, 2018
2 parents d362900 + 73f19bc commit 62638d6
Show file tree
Hide file tree
Showing 9 changed files with 36 additions and 14 deletions.
2 changes: 1 addition & 1 deletion .ruby-version
@@ -1 +1 @@
2.4.0
2.5.1
7 changes: 6 additions & 1 deletion lib/forty_facets/facet_search.rb
Expand Up @@ -117,9 +117,14 @@ def order

def result(skip_ordering: false)
query = @filters.reject(&:empty?).inject(root) do |previous, filter|
# p 'PREVIOS'
# p previous
# p 'FILTER'
# p filter
# p '..........'
filter.build_scope.call(previous)
end

if order && !skip_ordering
query = order.apply(query)
else
Expand Down
1 change: 0 additions & 1 deletion lib/forty_facets/filter.rb
Expand Up @@ -3,7 +3,6 @@ module FortyFacets
# type of filter. Most FilterDefinitions will have their own Filter subclass
# to control values for display and rendering to request parameters.
Filter = Struct.new(:definition, :search_instance, :value) do

FacetValue = Struct.new(:entity, :count, :selected)

def name
Expand Down
1 change: 0 additions & 1 deletion lib/forty_facets/filter/facet_filter_definition.rb
Expand Up @@ -86,7 +86,6 @@ def add(value)
old_values << value.to_s
search_instance.class.new_unwrapped(new_params, search_instance.root)
end

end

class BelongsToFilter < AssociationFacetFilter
Expand Down
24 changes: 18 additions & 6 deletions lib/forty_facets/filter/scope_filter_definition.rb
Expand Up @@ -2,23 +2,35 @@ module FortyFacets
class ScopeFilterDefinition < FilterDefinition
class ScopeFilter < Filter
def active?
value == '1'
definition.options[:pass_value] ? value.present? : '1'
end

def selected
[value]
end

def build_scope
return Proc.new { |base| base } unless active?
Proc.new { |base| base.send(definition.path.first) }
return proc { |base| base } unless active?

proc { |base|
if definition.options[:pass_value]
base.send(definition.path.first, value)
else
base.send(definition.path.first)
end
}
end

def remove
# added value to standardize the API even though it's not used
def remove(value = nil)
new_params = search_instance.params || {}
new_params.delete(definition.request_param)
search_instance.class.new_unwrapped(new_params, search_instance.root)
end

def add
def add(value = nil)
new_params = search_instance.params || {}
new_params[definition.request_param] = '1'
new_params[definition.request_param] = value
search_instance.class.new_unwrapped(new_params, search_instance.root)
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/forty_facets/filter/sql_facet_filter_definition.rb
Expand Up @@ -59,7 +59,7 @@ def facet
"(#{sql_query}) as #{key}"
end.join(", ")
query += ", count(*) as occurrences"

counts = without.result.reorder("")
.select(query)
.group(definition.queries.keys)
Expand Down
2 changes: 1 addition & 1 deletion lib/forty_facets/version.rb
@@ -1,3 +1,3 @@
module FortyFacets
VERSION = "0.1.8"
VERSION = "0.1.8.9"
end
1 change: 1 addition & 0 deletions test/fixtures.rb
Expand Up @@ -89,6 +89,7 @@ class Movie < ActiveRecord::Base

scope :classics, -> { where("year <= ?", 1980) }
scope :non_classics, -> { where("year > ?", 1980) }
scope :year_lte, -> (year) { where("year > ?", year) }
end

LOREM = %w{Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren}
Expand Down
10 changes: 8 additions & 2 deletions test/smoke_test.rb
Expand Up @@ -30,7 +30,8 @@ class MovieSearch < FortyFacets::FacetSearch
sql_facet({ classic: "year <= 1980", non_classic: "year > 1980" },
{ name: "Classic" })
text [:studio, :description], name: 'Studio Description'
scope :classics, 'Name classics'
scope :classics, name: 'Name classics'
scope :year_lte, name: 'Year less than or equal', pass_value: true
custom :needs_complex_filtering
end

Expand Down Expand Up @@ -278,10 +279,15 @@ def test_includes_does_not_blow_up
end

def test_scope_filter
search_with_scope = MovieSearch.new().filter(:classics).add
search_with_scope = MovieSearch.new().filter(:classics).add('1')
assert search_with_scope.result.count < Movie.count, 'Activating the scope should yield a smaller set of movies'
end

def test_scope_filter_with_params
search_with_scope = MovieSearch.new().filter(:year_lte).add(1980)
assert search_with_scope.result.count < Movie.count, 'Activating the scope with filter should yield a smaller set of movies'
end

def test_custom_filter
search = MovieSearch.new
new_search = search.filter(:needs_complex_filtering).set('foo')
Expand Down

0 comments on commit 62638d6

Please sign in to comment.