forty_facets 0.1.9.1 → 0.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
  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: