forty_facets 0.1.9.1 → 0.2

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
  SHA256:
3
- metadata.gz: 69545229909e0d3d59609f54cd23590099dc656eb9c0450e38ec28ea23001edd
4
- data.tar.gz: c883ef1c6c6744a0066d006bed2ffe9810e32fadb0f0677f5b98d66564bd1e0e
3
+ metadata.gz: 145715b5814badb1b542b7eac19af6683c1c624e55aeeb4cd65a3f7e69d84d1a
4
+ data.tar.gz: bfc630bf7222be66578beca4923982e7172343fdf08f7b932819eb73f7072e7e
5
5
  SHA512:
6
- metadata.gz: 669f899ed5ec16ada4907272603db2c9bbcd6a27b42555a80aaafc841c2eed0863452905ae72753b35652159a40a4fdd5c42931e780ed04a58f4dd9a0fdd975a
7
- data.tar.gz: 3af3637c333eafe0723e8f695abcb0c1385c37bb089ac285375ea38b4975f7f1bec3e6381b1cfc53b53f280462d0aa4f52e23928b7ca47b199a22861b5ea1c2e
6
+ metadata.gz: 216b8f57082cd4d8b820484d089e47cde6e97ac21be0f9dd7761db01a150b30d110888d9826d617b6f9b8612880e446b5ffe86f0fddbdb7dddabe500d188d6c2
7
+ data.tar.gz: e635009e28fb7ec381295405d402f7026e9a3ca49eead6cd8541a93eea586734333eb9e60982e98fdd052869d4451fc32705d6045c328400cf3e3d7f8f07965c
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.5.1
1
+ 3.1.2
data/CHANGELOG ADDED
@@ -0,0 +1,8 @@
1
+ # CHANGELOG
2
+
3
+ ## 0.2
4
+
5
+ - introduction of CHANGELOG
6
+ - upgraded to Ruby 3.1
7
+ - upgraded to ActiveRecrd/Rails 7
8
+ - merged #27
data/forty_facets.gemspec CHANGED
@@ -18,11 +18,11 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.5"
21
+ spec.add_development_dependency "bundler"
22
22
  spec.add_development_dependency "rake"
23
23
  spec.add_development_dependency "minitest"
24
24
  spec.add_development_dependency "sqlite3"
25
25
  spec.add_development_dependency "coveralls"
26
- spec.add_development_dependency "activerecord", "~> 5.0"
26
+ spec.add_development_dependency "activerecord", "~> 7.0"
27
27
  spec.add_development_dependency "byebug" # travis doenst like byebug
28
28
  end
@@ -1,6 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module FortyFacets
2
4
  class FacetFilterDefinition < FilterDefinition
3
-
4
5
  class FacetFilter < Filter
5
6
  def values
6
7
  @values ||= Array.wrap(value).sort.uniq
@@ -12,12 +13,12 @@ module FortyFacets
12
13
  order_accessor = definition.options[:order]
13
14
  if order_accessor
14
15
  if order_accessor.is_a?(Proc)
15
- facet.sort_by!{|facet_value| order_accessor.call(facet_value.entity) }
16
+ facet.sort_by! { |facet_value| order_accessor.call(facet_value.entity) }
16
17
  else
17
- facet.sort_by!{|facet_value| facet_value.entity.send(order_accessor) }
18
+ facet.sort_by! { |facet_value| facet_value.entity.send(order_accessor) }
18
19
  end
19
20
  else
20
- facet.sort_by!{|facet_value| -facet_value.count }
21
+ facet.sort_by! { |facet_value| -facet_value.count }
21
22
  end
22
23
  facet
23
24
  end
@@ -49,12 +50,14 @@ module FortyFacets
49
50
  def selected
50
51
  entity = definition.origin_class
51
52
  column = entity.columns_hash[definition.attribute.to_s]
52
- values.map{|v| entity.connection.type_cast(v, column)}
53
+ type = entity.connection.lookup_cast_type_from_column(column)
54
+ values.map { |value| type.serialize(value) }
53
55
  end
54
56
 
55
57
  def build_scope
56
- return Proc.new { |base| base } if empty?
57
- Proc.new do |base|
58
+ return proc { |base| base } if empty?
59
+
60
+ proc do |base|
58
61
  base.joins(definition.joins).where(definition.qualified_column_name => value)
59
62
  end
60
63
  end
@@ -90,8 +93,9 @@ module FortyFacets
90
93
 
91
94
  class BelongsToFilter < AssociationFacetFilter
92
95
  def build_scope
93
- return Proc.new { |base| base } if empty?
94
- Proc.new do |base|
96
+ return proc { |base| base } if empty?
97
+
98
+ proc do |base|
95
99
  base.joins(definition.joins).where(definition.qualified_column_name => values)
96
100
  end
97
101
  end
@@ -115,8 +119,9 @@ module FortyFacets
115
119
 
116
120
  class HasManyFilter < AssociationFacetFilter
117
121
  def build_scope
118
- return Proc.new { |base| base } if empty?
119
- Proc.new do |base|
122
+ return proc { |base| base } if empty?
123
+
124
+ proc do |base|
120
125
  base_table = definition.origin_class.table_name
121
126
 
122
127
  primary_key_column = "#{base_table}.#{definition.origin_class.primary_key}"
@@ -130,13 +135,13 @@ module FortyFacets
130
135
  def facet
131
136
  base_table = definition.search.root_class.table_name
132
137
  join_name = [definition.association.name.to_s, base_table.to_s].sort.join('_')
133
- foreign_id_col = definition.association.name.to_s.singularize + '_id'
134
- my_column = join_name + '.' + foreign_id_col
138
+ foreign_id_col = "#{definition.association.name.to_s.singularize}_id"
139
+ my_column = "#{join_name}.#{foreign_id_col}"
135
140
  counts = without.result(skip_ordering: true)
136
- .distinct
137
- .joins(definition.joins)
138
- .select("#{my_column} as foreign_id, count(#{my_column}) as occurrences")
139
- .group(my_column)
141
+ .distinct
142
+ .joins(definition.joins)
143
+ .select("#{my_column} as foreign_id, count(#{my_column}) as occurrences")
144
+ .group(my_column)
140
145
  counts.includes_values = []
141
146
  entities_by_id = definition.association.klass.unscoped.find(counts.map(&:foreign_id)).group_by(&:id)
142
147
 
@@ -152,11 +157,12 @@ module FortyFacets
152
157
 
153
158
  def build_filter(search_instance, param_value)
154
159
  if association
155
- if association.macro == :belongs_to
160
+ case association.macro
161
+ when :belongs_to
156
162
  BelongsToFilter.new(self, search_instance, param_value)
157
- elsif association.macro == :has_many
163
+ when :has_many
158
164
  HasManyFilter.new(self, search_instance, param_value)
159
- elsif association.macro == :has_and_belongs_to_many
165
+ when :has_and_belongs_to_many
160
166
  HasManyFilter.new(self, search_instance, param_value)
161
167
  else
162
168
  raise "Unsupported association type: #{association.macro}"
@@ -1,23 +1,27 @@
1
1
  module FortyFacets
2
2
  class RangeFilterDefinition < FilterDefinition
3
3
  class RangeFilter < Filter
4
+ RANGE_REGEX = /(\d*) - (\d*)/.freeze
5
+
4
6
  def build_scope
5
7
  return Proc.new { |base| base } if empty?
6
8
 
7
9
  Proc.new do |base|
8
- base.joins(definition.joins)
9
- .where("#{definition.qualified_column_name} >= ? AND #{definition.qualified_column_name} <= ? ", min_value, max_value )
10
+ scope = base.joins(definition.joins)
11
+ scope = scope.where("#{definition.qualified_column_name} >= ?", min_value) if min_value.present?
12
+ scope = scope.where("#{definition.qualified_column_name} <= ?", max_value) if max_value.present?
13
+ scope
10
14
  end
11
15
  end
12
16
 
13
17
  def min_value
14
- return nil if empty?
15
- value.split(' - ').first
18
+ min, _max = range_values
19
+ min
16
20
  end
17
21
 
18
22
  def max_value
19
- return nil if empty?
20
- value.split(' - ').last
23
+ _min, max = range_values
24
+ max
21
25
  end
22
26
 
23
27
  def absolute_interval
@@ -32,6 +36,11 @@ module FortyFacets
32
36
  absolute_interval.max
33
37
  end
34
38
 
39
+ private
40
+
41
+ def range_values
42
+ value&.match(RANGE_REGEX)&.captures
43
+ end
35
44
  end
36
45
 
37
46
  def build_filter(search_instance, value)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module FortyFacets
2
- VERSION = "0.1.9.1"
4
+ VERSION = '0.2'
3
5
  end
data/test/smoke_test.rb CHANGED
@@ -1,47 +1,49 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'coveralls'
2
4
  Coveralls.wear!
3
5
 
4
- require "minitest/autorun"
6
+ require 'minitest/autorun'
5
7
  require 'test_helper'
6
8
  require 'logger'
7
9
  # require 'byebug'# travis doenst like byebug
8
10
  require_relative '../lib/forty_facets'
9
11
 
10
- #silence_warnings do
12
+ # silence_warnings do
11
13
  require_relative 'fixtures'
12
- #end
14
+ # end
13
15
 
14
16
  class MovieSearch < FortyFacets::FacetSearch
15
17
  model 'Movie'
16
18
 
17
19
  text :title, name: 'Title'
18
20
  facet :studio, name: 'Studio'
19
- facet :year, order: Proc.new {|year| -year}
21
+ facet :year, order: proc { |year| -year }
20
22
  facet :genres, name: 'Genre'
21
23
  facet :actors, name: 'Actor'
22
24
  range :price, name: 'Price'
23
25
  facet :writers, name: 'Writer'
24
- facet [:studio, :country], name: 'Country'
25
- facet [:studio, :status], name: 'Studio status'
26
- facet [:studio, :producers], name: 'Producers'
26
+ facet %i[studio country], name: 'Country'
27
+ facet %i[studio status], name: 'Studio status'
28
+ facet %i[studio producers], name: 'Producers'
27
29
  sql_facet({ uschis: "studios.name = 'Uschi'", non_uschis: "studios.name != 'USCHI'" },
28
- { name: "Uschis", path: [:studio, :uschis], joins: [:studio] })
29
- sql_facet({ classic: "year <= 1980", non_classic: "year > 1980" },
30
- { name: "Classic", path: :classic })
31
- sql_facet({ classic: "year <= 1980", non_classic: "year > 1980" },
32
- { name: "Classic" })
33
- text [:studio, :description], name: 'Studio Description'
30
+ { name: 'Uschis', path: %i[studio uschis], joins: [:studio] })
31
+ sql_facet({ classic: 'year <= 1980', non_classic: 'year > 1980' },
32
+ { name: 'Classic', path: :classic })
33
+ sql_facet({ classic: 'year <= 1980', non_classic: 'year > 1980' },
34
+ { name: 'Classic' })
35
+ text %i[studio description], name: 'Studio Description'
34
36
  scope :classics, name: 'Name classics'
35
37
  scope :year_lte, name: 'Year less than or equal', pass_value: true
36
38
  custom :needs_complex_filtering
37
39
  end
38
40
 
39
41
  class SmokeTest < Minitest::Test
40
-
41
42
  def test_sql_facet_with_belongs_to
42
- search = MovieSearch.new({'studio-uschis' => {}})
43
+ search = MovieSearch.new({ 'studio-uschis' => {} })
43
44
  assert_equal Movie.count, search.result.size
44
- assert_equal search.filter([:studio, :uschis]).facet, [FortyFacets::FacetValue.new(:uschis, 0, false), FortyFacets::FacetValue.new(:non_uschis, 40, false)]
45
+ assert_equal search.filter(%i[studio uschis]).facet,
46
+ [FortyFacets::FacetValue.new(:uschis, 0, false), FortyFacets::FacetValue.new(:non_uschis, 40, false)]
45
47
  end
46
48
 
47
49
  def test_it_finds_all_movies
@@ -50,57 +52,57 @@ class SmokeTest < Minitest::Test
50
52
  end
51
53
 
52
54
  def test_scope_filter
53
- search = MovieSearch.new("search" => {})
55
+ search = MovieSearch.new('search' => {})
54
56
  assert_equal 40, search.result.size
55
57
  assert search.filter(:classic).facet.include? FortyFacets::FacetValue.new(:classic, 6, false)
56
58
  assert search.filter(:classic).facet.include? FortyFacets::FacetValue.new(:non_classic, 34, false)
57
59
 
58
- search = MovieSearch.new("search" => { "classic" => "classic" })
60
+ search = MovieSearch.new('search' => { 'classic' => 'classic' })
59
61
  assert_equal 6, search.result.size
60
62
  assert search.filter(:classic).facet.include? FortyFacets::FacetValue.new(:classic, 6, true)
61
63
  assert search.filter(:classic).facet.include? FortyFacets::FacetValue.new(:non_classic, 34, false)
62
64
 
63
- search = MovieSearch.new("search" => { "classic" => "non_classic" })
65
+ search = MovieSearch.new('search' => { 'classic' => 'non_classic' })
64
66
  assert_equal 34, search.result.size
65
67
  assert search.filter(:classic).facet.include? FortyFacets::FacetValue.new(:classic, 6, false)
66
68
  assert search.filter(:classic).facet.include? FortyFacets::FacetValue.new(:non_classic, 34, true)
67
69
 
68
- search = MovieSearch.new("search" => { "classic" => ["non_classic", "classic"] })
70
+ search = MovieSearch.new('search' => { 'classic' => %w[non_classic classic] })
69
71
  assert_equal 40, search.result.size
70
72
  assert search.filter(:classic).facet.include? FortyFacets::FacetValue.new(:classic, 6, true)
71
73
  assert search.filter(:classic).facet.include? FortyFacets::FacetValue.new(:non_classic, 34, true)
72
74
  end
73
75
 
74
76
  def test_scope_filter_without_path
75
- search = MovieSearch.new("search" => {})
77
+ search = MovieSearch.new('search' => {})
76
78
  assert_equal 40, search.result.size
77
- assert search.filter([:classic, :non_classic]).facet.include? FortyFacets::FacetValue.new(:classic, 6, false)
78
- assert search.filter([:classic, :non_classic]).facet.include? FortyFacets::FacetValue.new(:non_classic, 34, false)
79
+ assert search.filter(%i[classic non_classic]).facet.include? FortyFacets::FacetValue.new(:classic, 6, false)
80
+ assert search.filter(%i[classic non_classic]).facet.include? FortyFacets::FacetValue.new(:non_classic, 34, false)
79
81
 
80
- search = MovieSearch.new("search" => { "classic-non_classic" => "classic" })
82
+ search = MovieSearch.new('search' => { 'classic-non_classic' => 'classic' })
81
83
  assert_equal 6, search.result.size
82
- assert search.filter([:classic, :non_classic]).facet.include? FortyFacets::FacetValue.new(:classic, 6, true)
83
- assert search.filter([:classic, :non_classic]).facet.include? FortyFacets::FacetValue.new(:non_classic, 34, false)
84
+ assert search.filter(%i[classic non_classic]).facet.include? FortyFacets::FacetValue.new(:classic, 6, true)
85
+ assert search.filter(%i[classic non_classic]).facet.include? FortyFacets::FacetValue.new(:non_classic, 34, false)
84
86
 
85
- search = MovieSearch.new("search" => { "classic-non_classic" => "non_classic" })
87
+ search = MovieSearch.new('search' => { 'classic-non_classic' => 'non_classic' })
86
88
  assert_equal 34, search.result.size
87
- assert search.filter([:classic, :non_classic]).facet.include? FortyFacets::FacetValue.new(:classic, 6, false)
88
- assert search.filter([:classic, :non_classic]).facet.include? FortyFacets::FacetValue.new(:non_classic, 34, true)
89
+ assert search.filter(%i[classic non_classic]).facet.include? FortyFacets::FacetValue.new(:classic, 6, false)
90
+ assert search.filter(%i[classic non_classic]).facet.include? FortyFacets::FacetValue.new(:non_classic, 34, true)
89
91
 
90
- search = MovieSearch.new("search" => { "classic-non_classic" => ["non_classic", "classic"] })
92
+ search = MovieSearch.new('search' => { 'classic-non_classic' => %w[non_classic classic] })
91
93
  assert_equal 40, search.result.size
92
- assert search.filter([:classic, :non_classic]).facet.include? FortyFacets::FacetValue.new(:classic, 6, true)
93
- assert search.filter([:classic, :non_classic]).facet.include? FortyFacets::FacetValue.new(:non_classic, 34, true)
94
+ assert search.filter(%i[classic non_classic]).facet.include? FortyFacets::FacetValue.new(:classic, 6, true)
95
+ assert search.filter(%i[classic non_classic]).facet.include? FortyFacets::FacetValue.new(:non_classic, 34, true)
94
96
  end
95
97
 
96
98
  def test_text_filter
97
- search = MovieSearch.new({'search' => { 'title' => 'ipsum' }})
99
+ search = MovieSearch.new({ 'search' => { 'title' => 'ipsum' } })
98
100
  assert_equal 1, search.result.size
99
101
  assert_equal 'ipsum', search.result.first.title
100
102
  end
101
103
 
102
104
  def test_year_filter
103
- search = MovieSearch.new({'search' => { 'year' => '2011' }})
105
+ search = MovieSearch.new({ 'search' => { 'year' => '2011' } })
104
106
  assert_equal [2011], search.result.map(&:year).uniq
105
107
 
106
108
  facet = search.filter(:year).facet
@@ -108,34 +110,43 @@ class SmokeTest < Minitest::Test
108
110
  end
109
111
 
110
112
  def test_range_filter
111
- search = MovieSearch.new({'search' => {'price' => '0 - 20'}})
113
+ search = MovieSearch.new({ 'search' => { 'price' => '0 - 20' } })
112
114
  assert_equal Movie.count, search.result.size
113
115
 
114
- search = MovieSearch.new({'search' => {'price' => '0 - 10'}})
115
- assert_equal Movie.all.reject{|m| m.price > 10}.size, search.result.size
116
+ search = MovieSearch.new({ 'search' => { 'price' => '5 - 10' } })
117
+ assert_equal Movie.where('price >= ? AND price <= ?', 5, 10).count, search.result.size
118
+
119
+ search = MovieSearch.new({ 'search' => { 'price' => '5 - ' } })
120
+ assert_equal Movie.where('price >= ?', 5).count, search.result.size
121
+
122
+ search = MovieSearch.new({ 'search' => { 'price' => ' - 5' } })
123
+ assert_equal Movie.where('price <= ?', 5).count, search.result.size
124
+
125
+ search = MovieSearch.new({ 'search' => { 'price' => '' } })
126
+ assert_equal Movie.count, search.result.size
116
127
  end
117
128
 
118
129
  def test_text_filter_via_belongs_to
119
130
  description = Studio.first.description
120
- search = MovieSearch.new({'search' => { 'studio-description' => description }})
131
+ search = MovieSearch.new({ 'search' => { 'studio-description' => description } })
121
132
 
122
- assert_equal Movie.all.reject{|m| m.studio.description != description}.size, search.result.size
133
+ assert_equal Movie.all.select { |m| m.studio.description == description }.size, search.result.size
123
134
  assert_equal description, search.result.first.studio.description
124
135
  end
125
136
 
126
137
  def test_country_filter
127
- search = MovieSearch.new('search' => { 'studio-country' => Country.first.id.to_s})
128
- assert_equal [Country.first], search.result.map{|m| m.studio.country}.uniq
138
+ search = MovieSearch.new('search' => { 'studio-country' => Country.first.id.to_s })
139
+ assert_equal [Country.first], search.result.map { |m| m.studio.country }.uniq
129
140
  assert_equal Movie.count / 2, search.result.count
130
141
 
131
- search = MovieSearch.new('search' => { 'studio-country' => Country.last.id.to_s})
132
- assert_equal [Country.last], search.result.map{|m| m.studio.country}.uniq
142
+ search = MovieSearch.new('search' => { 'studio-country' => Country.last.id.to_s })
143
+ assert_equal [Country.last], search.result.map { |m| m.studio.country }.uniq
133
144
  assert_equal Movie.count / 2, search.result.count
134
145
  end
135
146
 
136
147
  def test_selected_country_filter
137
- search = MovieSearch.new('search' => { 'studio-country' => Country.first.id.to_s})
138
- filter = search.filter([:studio, :country])
148
+ search = MovieSearch.new('search' => { 'studio-country' => Country.first.id.to_s })
149
+ filter = search.filter(%i[studio country])
139
150
  assert_equal FortyFacets::FacetFilterDefinition::BelongsToFilter, filter.class
140
151
  assert_equal [Country.first], filter.selected
141
152
 
@@ -143,17 +154,16 @@ class SmokeTest < Minitest::Test
143
154
  end
144
155
 
145
156
  def test_studio_status_filter
146
- search = MovieSearch.new('search' => { 'studio-status' => 'active'})
147
- assert_equal ['active'], search.result.map{|m| m.studio.status}.uniq
157
+ search = MovieSearch.new('search' => { 'studio-status' => 'active' })
158
+ assert_equal ['active'], search.result.map { |m| m.studio.status }.uniq
148
159
  assert_equal Movie.count / 2, search.result.count
149
160
 
150
- filter = search.filter([:studio, :status])
161
+ filter = search.filter(%i[studio status])
151
162
  assert_equal ['active'], filter.selected
152
163
  end
153
164
 
154
165
  def test_year_add_remove_filter
155
-
156
- search = MovieSearch.new()
166
+ search = MovieSearch.new
157
167
 
158
168
  search = search.filter(:year).add(2010)
159
169
  assert_equal Movie.where(year: 2010).count, search.result.count
@@ -166,7 +176,7 @@ class SmokeTest < Minitest::Test
166
176
  end
167
177
 
168
178
  def test_selected_year_filter
169
- search = MovieSearch.new()
179
+ search = MovieSearch.new
170
180
 
171
181
  search = search.filter(:year).add(2010)
172
182
  assert_equal [2010], search.filter(:year).selected
@@ -175,9 +185,9 @@ class SmokeTest < Minitest::Test
175
185
  assert_equal [2010, 2011], search.filter(:year).selected
176
186
 
177
187
  facet = search.filter(:year).facet
178
- assert facet.find{|fv| fv.entity == 2010}.selected
179
- assert facet.find{|fv| fv.entity == 2011}.selected
180
- assert !facet.find{|fv| fv.entity == 2012}.selected
188
+ assert facet.find { |fv| fv.entity == 2010 }.selected
189
+ assert facet.find { |fv| fv.entity == 2011 }.selected
190
+ assert !facet.find { |fv| fv.entity == 2012 }.selected
181
191
  end
182
192
 
183
193
  def test_belongs_to_filter
@@ -186,7 +196,7 @@ class SmokeTest < Minitest::Test
186
196
  studio = first_facet_value.entity
187
197
  assert_kind_of Studio, studio
188
198
 
189
- movies_with_studio = Movie.where(studio: studio)
199
+ movies_with_studio = Movie.where(studio:)
190
200
  search_with_studio = blank_search.filter(:studio).add(studio)
191
201
 
192
202
  assert_equal movies_with_studio.size, search_with_studio.result.size
@@ -196,7 +206,7 @@ class SmokeTest < Minitest::Test
196
206
  def test_belongs_to_filter_with_default_scope
197
207
  wrap_in_db_transaction do
198
208
  deleted_studio = Studio.create!(name: 'Deleted studio', status: 'active')
199
- movie = Movie.create!(studio: deleted_studio)
209
+ Movie.create!(studio: deleted_studio)
200
210
  deleted_studio.update!(deleted_at: Time.now)
201
211
 
202
212
  blank_search = MovieSearch.new
@@ -216,7 +226,7 @@ class SmokeTest < Minitest::Test
216
226
  def test_has_many
217
227
  blank_search = MovieSearch.new
218
228
  genre = Genre.first
219
- expected = Movie.order(:id).select{|m| m.genres.include?(genre)}
229
+ expected = Movie.order(:id).select { |m| m.genres.include?(genre) }
220
230
  assert blank_search.filter(:genres).is_a?(FortyFacets::FacetFilterDefinition::HasManyFilter)
221
231
  search = blank_search.filter(:genres).add(genre)
222
232
  actual = search.result
@@ -227,9 +237,9 @@ class SmokeTest < Minitest::Test
227
237
  def test_hast_many_via_belongs_to
228
238
  blank_search = MovieSearch.new
229
239
  producer = Producer.first
230
- expected = Movie.order(:id).select{|m| m.studio.producers.include? producer}
231
- assert blank_search.filter([:studio, :producers]).is_a?(FortyFacets::FacetFilterDefinition::HasManyFilter)
232
- search = blank_search.filter([:studio, :producers]).add(producer)
240
+ expected = Movie.order(:id).select { |m| m.studio.producers.include? producer }
241
+ assert blank_search.filter(%i[studio producers]).is_a?(FortyFacets::FacetFilterDefinition::HasManyFilter)
242
+ search = blank_search.filter(%i[studio producers]).add(producer)
233
243
  actual = search.result
234
244
 
235
245
  assert_equal expected.size, actual.size
@@ -238,7 +248,7 @@ class SmokeTest < Minitest::Test
238
248
  def test_has_many_writers
239
249
  blank_search = MovieSearch.new
240
250
  writer = Writer.first
241
- expected = Movie.order(:id).select{|m| m.writers.include?(writer)}
251
+ expected = Movie.order(:id).select { |m| m.writers.include?(writer) }
242
252
  assert blank_search.filter(:writers).is_a?(FortyFacets::FacetFilterDefinition::HasManyFilter)
243
253
  search = blank_search.filter(:writers).add(writer)
244
254
  actual = search.result
@@ -251,8 +261,8 @@ class SmokeTest < Minitest::Test
251
261
  genre = Genre.first
252
262
  actor = Actor.first
253
263
  expected = Movie.order(:id)
254
- .select{|m| m.genres.include?(genre)}
255
- .select{|m| m.actors.include?(actor)}
264
+ .select { |m| m.genres.include?(genre) }
265
+ .select { |m| m.actors.include?(actor) }
256
266
  assert blank_search.filter(:genres).is_a?(FortyFacets::FacetFilterDefinition::HasManyFilter)
257
267
  search_with_genre = blank_search.filter(:genres).add(genre)
258
268
  search_with_genre_and_actor = search_with_genre.filter(:actors).add(actor)
@@ -267,11 +277,11 @@ class SmokeTest < Minitest::Test
267
277
 
268
278
  search.filter(:writers).facet.each do |facet_value|
269
279
  writer = facet_value.entity
270
- expected = Movie.order(:id).select{|m| m.writers.include?(writer)}.count
271
- assert_equal expected, facet_value.count, "The amount of movies for a writer should match the number indicated in the facet"
280
+ expected = Movie.order(:id).select { |m| m.writers.include?(writer) }.count
281
+ assert_equal expected, facet_value.count,
282
+ 'The amount of movies for a writer should match the number indicated in the facet'
272
283
  assert_equal writer.id == selected_writer.id, facet_value.selected
273
284
  end
274
-
275
285
  end
276
286
 
277
287
  def test_has_many_facet_values_genres
@@ -280,11 +290,11 @@ class SmokeTest < Minitest::Test
280
290
 
281
291
  search.filter(:genres).facet.each do |facet_value|
282
292
  genre = facet_value.entity
283
- expected = Movie.order(:id).select{|m| m.genres.include?(genre)}.count
284
- assert_equal expected, facet_value.count, "The amount of movies for a genre should match the number indicated in the facet"
293
+ expected = Movie.order(:id).select { |m| m.genres.include?(genre) }.count
294
+ assert_equal expected, facet_value.count,
295
+ 'The amount of movies for a genre should match the number indicated in the facet'
285
296
  assert_equal genre.id == selected_genre.id, facet_value.selected
286
297
  end
287
-
288
298
  end
289
299
 
290
300
  def test_includes_does_not_blow_up
@@ -293,14 +303,15 @@ class SmokeTest < Minitest::Test
293
303
  search.filter(:studio).facet.reject(&:selected).to_a
294
304
  end
295
305
 
296
- def test_scope_filter
297
- search_with_scope = MovieSearch.new().filter(:classics).add('1')
306
+ def test_activating_scope_filter
307
+ search_with_scope = MovieSearch.new.filter(:classics).add('1')
298
308
  assert search_with_scope.result.count < Movie.count, 'Activating the scope should yield a smaller set of movies'
299
309
  end
300
310
 
301
311
  def test_scope_filter_with_params
302
- search_with_scope = MovieSearch.new().filter(:year_lte).add(1980)
303
- assert search_with_scope.result.count < Movie.count, 'Activating the scope with filter should yield a smaller set of movies'
312
+ search_with_scope = MovieSearch.new.filter(:year_lte).add(1980)
313
+ assert search_with_scope.result.count < Movie.count,
314
+ 'Activating the scope with filter should yield a smaller set of movies'
304
315
  end
305
316
 
306
317
  def test_custom_filter
@@ -309,5 +320,4 @@ class SmokeTest < Minitest::Test
309
320
 
310
321
  assert_equal 'foo', new_search.filter(:needs_complex_filtering).value
311
322
  end
312
-
313
323
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forty_facets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9.1
4
+ version: '0.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Axel Tetzlaff
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-21 00:00:00.000000000 Z
11
+ date: 2022-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.5'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.5'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '5.0'
89
+ version: '7.0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '5.0'
96
+ version: '7.0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: byebug
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -121,6 +121,7 @@ files:
121
121
  - ".ruby-gemset"
122
122
  - ".ruby-version"
123
123
  - ".travis.yml"
124
+ - CHANGELOG
124
125
  - Gemfile
125
126
  - LICENSE.txt
126
127
  - README.md
@@ -146,7 +147,7 @@ homepage: https://github.com/fortytools/forty_facets
146
147
  licenses:
147
148
  - MIT
148
149
  metadata: {}
149
- post_install_message:
150
+ post_install_message:
150
151
  rdoc_options: []
151
152
  require_paths:
152
153
  - lib
@@ -161,8 +162,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
161
162
  - !ruby/object:Gem::Version
162
163
  version: '0'
163
164
  requirements: []
164
- rubygems_version: 3.0.6
165
- signing_key:
165
+ rubygems_version: 3.3.7
166
+ signing_key:
166
167
  specification_version: 4
167
168
  summary: Library for building facet searches for active_record models
168
169
  test_files: