forty_facets 0.1.1 → 0.1.2

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
  SHA1:
3
- metadata.gz: 0c4e5f1187a806a2d29a592deb215db699c940ca
4
- data.tar.gz: f744711ed252d741a508583565c033531d70f5f1
3
+ metadata.gz: 1b86da7ae3b989602b2dcbd37699c80466901e16
4
+ data.tar.gz: afd3024e01104aa310b23a4ac564fdd4c478c093
5
5
  SHA512:
6
- metadata.gz: 97da5234fce9ebb01fff1c1f5994ca739724a62b61b343de9e58dd7eacae1e4eb543743b9e338862f098e3c0abbac7aed716848bcc71b16f746bc43aff0675e3
7
- data.tar.gz: 0ade8fdfb9ee93d93f76f642412f90f60b2dd2959f5f0a092efaf19031b8ed45daa0ee91993ff9854c5630f621e0d5b36711108ebb7ae2c859265cc07f8e722f
6
+ metadata.gz: 3ef1428c9e97396a80f8c2577c7290b201208c603e4ade01b045ed2499ea8c137bb3a1b015a272787bd52979ccb29207accd274ce13593fb7012745e7a6e8ce5
7
+ data.tar.gz: 172f6758103dbea345a9bbd1ea67139fc4dff60da450a7c2285089ce528b452c67d80faa132add9a87ffd51ebf8ae4a34c4ec4259d4fb9b83a44d33cfd3095ea
data/README.md CHANGED
@@ -67,6 +67,8 @@ class HomeController < ApplicationController
67
67
  orders 'Title' => :title,
68
68
  'price, cheap first' => "price asc",
69
69
  'price, expensive first' => {price: :desc, title: :desc}
70
+ custom :for_manual_handling
71
+
70
72
  end
71
73
 
72
74
  def index
@@ -124,6 +126,7 @@ end
124
126
  | facet | | creates a facetted filter on the specified model attribute (attribute or belongs_to) |
125
127
  | range | | creates a range filter (param format 'FROM - TO') limiting result to entities with values in that range |
126
128
  | orders | | takes a hash mapping a label to an argument that the active record `order` method can be called with to sort the result |
129
+ | custom | | doesnt affect the query directly, just handles the request param. access via @search.filter(:custom_filter).set(..) /@search.filter(:custom_filter).value |
127
130
 
128
131
  ## FAQ
129
132
 
data/lib/forty_facets.rb CHANGED
@@ -9,6 +9,7 @@ require "forty_facets/filter"
9
9
  require "forty_facets/filter_definition"
10
10
  require "forty_facets/filter/range_filter_definition"
11
11
  require "forty_facets/filter/text_filter_definition"
12
+ require "forty_facets/filter/custom_filter_definition"
12
13
  require "forty_facets/filter/scope_filter_definition"
13
14
  require "forty_facets/filter/facet_filter_definition"
14
15
  require "forty_facets/filter/sql_facet_filter_definition"
@@ -15,6 +15,7 @@ module FortyFacets
15
15
  # 'price, cheap first' => "price asc",
16
16
  # 'price, expensive first' => {price: :desc, title: :desc},
17
17
  # 'Title, reverse' => {order: "title desc", default: true}
18
+ # custom :for_manual_handling
18
19
  #
19
20
  # end
20
21
  class FacetSearch
@@ -33,6 +34,10 @@ module FortyFacets
33
34
  definitions << TextFilterDefinition.new(self, path, opts)
34
35
  end
35
36
 
37
+ def custom(path, opts = {})
38
+ definitions << CustomFilterDefinition.new(self, path, opts)
39
+ end
40
+
36
41
  def scope(path, opts = {})
37
42
  definitions << ScopeFilterDefinition.new(self, path, opts)
38
43
  end
@@ -0,0 +1,26 @@
1
+ module FortyFacets
2
+ class CustomFilterDefinition < FilterDefinition
3
+ class CustomFilter < Filter
4
+ def build_scope
5
+ return Proc.new { |base| base } # the custom filter doesn alter the query at all
6
+ # but you can use it's state to modify the base_scope
7
+ # in your controller
8
+ end
9
+
10
+ def set(new_value)
11
+ new_params = search_instance.params || {}
12
+
13
+ new_params[definition.request_param] = new_value
14
+ search_instance.class.new_unwrapped(new_params, search_instance.root)
15
+ end
16
+
17
+ end
18
+
19
+ def build_filter(search_instance, value)
20
+ CustomFilter.new(self, search_instance, value)
21
+ end
22
+
23
+ end
24
+ end
25
+
26
+
@@ -1,3 +1,3 @@
1
1
  module FortyFacets
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
data/test/smoke_test.rb CHANGED
@@ -29,6 +29,7 @@ class MovieSearch < FortyFacets::FacetSearch
29
29
  { name: "Classic" })
30
30
  text [:studio, :description], name: 'Studio Description'
31
31
  scope :classics, 'Name classics'
32
+ custom :needs_complex_filtering
32
33
  end
33
34
 
34
35
  class SmokeTest < Minitest::Test
@@ -273,4 +274,11 @@ class SmokeTest < Minitest::Test
273
274
  assert search_with_scope.result.count < Movie.count, 'Activating the scope should yield a smaller set of movies'
274
275
  end
275
276
 
277
+ def test_custom_filter
278
+ search = MovieSearch.new
279
+ new_search = search.filter(:needs_complex_filtering).set('foo')
280
+
281
+ assert_equal 'foo', new_search.filter(:needs_complex_filtering).value
282
+ end
283
+
276
284
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forty_facets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Axel Tetzlaff
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-10 00:00:00.000000000 Z
11
+ date: 2015-08-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -115,6 +115,7 @@ files:
115
115
  - lib/forty_facets.rb
116
116
  - lib/forty_facets/facet_search.rb
117
117
  - lib/forty_facets/filter.rb
118
+ - lib/forty_facets/filter/custom_filter_definition.rb
118
119
  - lib/forty_facets/filter/facet_filter_definition.rb
119
120
  - lib/forty_facets/filter/range_filter_definition.rb
120
121
  - lib/forty_facets/filter/scope_filter_definition.rb