forty_facets 0.1.0 → 0.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2775c3dbeacb02d6a306671c1f46306f03baaa7c
4
- data.tar.gz: 007b804dc78ebe61b1aff29a41f276f2986d62ed
3
+ metadata.gz: 0c4e5f1187a806a2d29a592deb215db699c940ca
4
+ data.tar.gz: f744711ed252d741a508583565c033531d70f5f1
5
5
  SHA512:
6
- metadata.gz: 86d860f3463b9c264010489f2520cf4ac8e216f7f2cfe94ba0e1a5839439e1d799275ccc88281636e5b6a1f0911f26744a826e0a9ca93929eb6c0fb68082800b
7
- data.tar.gz: 51c6d45ef8c18c8185d142baac5cbb7bccc1cd54888fb2453f7157d9559657b86d151fc72b5da83bf0cb708c456f2691a593b66210b8e63b2f39392a9507489f
6
+ metadata.gz: 97da5234fce9ebb01fff1c1f5994ca739724a62b61b343de9e58dd7eacae1e4eb543743b9e338862f098e3c0abbac7aed716848bcc71b16f746bc43aff0675e3
7
+ data.tar.gz: 0ade8fdfb9ee93d93f76f642412f90f60b2dd2959f5f0a092efaf19031b8ed45daa0ee91993ff9854c5630f621e0d5b36711108ebb7ae2c859265cc07f8e722f
data/README.md CHANGED
@@ -45,6 +45,8 @@ If you have Movies with a textual title, categotized by genre, studio and year w
45
45
  belongs_to :year
46
46
  belongs_to :studio
47
47
  has_and_belongs_to_many :genres
48
+
49
+ scope :classics, -> { where("year <= ?", 1980) }
48
50
  end
49
51
 
50
52
  You can then declare the structure of your search like so:
@@ -55,6 +57,7 @@ class HomeController < ApplicationController
55
57
  class MovieSearch < FortyFacets::FacetSearch
56
58
  model 'Movie' # which model to search for
57
59
  text :title # filter by a generic string entered by the user
60
+ scope :classics # only return movies which are in the scope 'classics'
58
61
  range :price, name: 'Price' # filter by ranges for decimal fields
59
62
  facet :year, name: 'Releaseyear', order: :year # additionally order values in the year field
60
63
  facet :studio, name: 'Studio', order: :name
@@ -117,6 +120,7 @@ end
117
120
  | keyword | options | |
118
121
  |---------|---------------|-------------------------------------------------------------------------------------------------------------------------|
119
122
  | text | prefix:true | creates a filter to limit search result to entities containing the filter value in the given field |
123
+ | scope | | creates a filter to limit search result to entities matching the scope with the given name |
120
124
  | facet | | creates a facetted filter on the specified model attribute (attribute or belongs_to) |
121
125
  | range | | creates a range filter (param format 'FROM - TO') limiting result to entities with values in that range |
122
126
  | orders | | takes a hash mapping a label to an argument that the active record `order` method can be called with to sort the result |
@@ -5,6 +5,7 @@ module FortyFacets
5
5
  # model 'Movie'
6
6
  #
7
7
  # text :title
8
+ # scope :someScope, name: 'Only very special'
8
9
  # range :price
9
10
  # facet :genre, name: 'Genre'
10
11
  # facet :year, name: 'Releaseyear', order: :year
@@ -32,6 +33,10 @@ module FortyFacets
32
33
  definitions << TextFilterDefinition.new(self, path, opts)
33
34
  end
34
35
 
36
+ def scope(path, opts = {})
37
+ definitions << ScopeFilterDefinition.new(self, path, opts)
38
+ end
39
+
35
40
  def range(path, opts = {})
36
41
  definitions << RangeFilterDefinition.new(self, path, opts)
37
42
  end
@@ -0,0 +1,32 @@
1
+ module FortyFacets
2
+ class ScopeFilterDefinition < FilterDefinition
3
+ class ScopeFilter < Filter
4
+ def active?
5
+ value == '1'
6
+ end
7
+
8
+ def build_scope
9
+ return Proc.new { |base| base } unless active?
10
+ Proc.new { |base| base.send(definition.path.first) }
11
+ end
12
+
13
+ def remove
14
+ new_params = search_instance.params || {}
15
+ new_params.delete(definition.request_param)
16
+ search_instance.class.new_unwrapped(new_params, search_instance.root)
17
+ end
18
+
19
+ def add
20
+ new_params = search_instance.params || {}
21
+ new_params[definition.request_param] = '1'
22
+ search_instance.class.new_unwrapped(new_params, search_instance.root)
23
+ end
24
+ end
25
+
26
+ def build_filter(search_instance, value)
27
+ ScopeFilter.new(self, search_instance, value)
28
+ end
29
+
30
+ end
31
+ end
32
+
@@ -1,3 +1,3 @@
1
1
  module FortyFacets
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
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/scope_filter_definition"
12
13
  require "forty_facets/filter/facet_filter_definition"
13
14
  require "forty_facets/filter/sql_facet_filter_definition"
14
15
  require "forty_facets/facet_search"
data/test/smoke_test.rb CHANGED
@@ -28,6 +28,7 @@ class MovieSearch < FortyFacets::FacetSearch
28
28
  sql_facet({ classic: "year <= 1980", non_classic: "year > 1980" },
29
29
  { name: "Classic" })
30
30
  text [:studio, :description], name: 'Studio Description'
31
+ scope :classics, 'Name classics'
31
32
  end
32
33
 
33
34
  class SmokeTest < Minitest::Test
@@ -267,4 +268,9 @@ class SmokeTest < Minitest::Test
267
268
  search.filter(:studio).facet.reject(&:selected).to_a
268
269
  end
269
270
 
271
+ def test_scope_filter
272
+ search_with_scope = MovieSearch.new().filter(:classics).add
273
+ assert search_with_scope.result.count < Movie.count, 'Activating the scope should yield a smaller set of movies'
274
+ end
275
+
270
276
  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.0
4
+ version: 0.1.1
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-03-23 00:00:00.000000000 Z
11
+ date: 2015-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -117,6 +117,7 @@ files:
117
117
  - lib/forty_facets/filter.rb
118
118
  - lib/forty_facets/filter/facet_filter_definition.rb
119
119
  - lib/forty_facets/filter/range_filter_definition.rb
120
+ - lib/forty_facets/filter/scope_filter_definition.rb
120
121
  - lib/forty_facets/filter/sql_facet_filter_definition.rb
121
122
  - lib/forty_facets/filter/text_filter_definition.rb
122
123
  - lib/forty_facets/filter_definition.rb