caoutsearch 0.0.4 → 0.0.5

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: 3c909350638d5b778a223df94d8b5692984c1060aa1d3a8ade199d9b92a7e278
4
- data.tar.gz: 760e99bffe678f12997a49855b860bd8dd8f85e871e67e01603fa6a1507b58b2
3
+ metadata.gz: 9a9f19fbbee99086c07a66881e1b3d5f5df90f4dc06d32ce4a4d4dfc323a85bb
4
+ data.tar.gz: cf8736b55478e95f3e98a529d9e2f4102de8a59921108bf99703d9c6fe742a54
5
5
  SHA512:
6
- metadata.gz: 7f2ed2ab8c08ba6d7a2ac9077a8c59e5bb92b9606ab3fd825b8b10fdea039a2c2a3aefa7b2705c98601e150de5b48becb0cea7dbfa4eb15256e5b650f0251523
7
- data.tar.gz: e33c6d5ed88ecd9d3fbd03aad636bd3c636098775c8a35295df8aa3ec8518cccd1ea125689052a25fab3270af22739d9977b3bda2e6511ac9d427dd0fb94b401
6
+ metadata.gz: 3ee219e96b1b77bbdea6b20a91bb252915b2f557c82924892e67d9ca6d08caf7013f8a8ac05852375f9821cda4e7fb0ba23226ff04943e03a4a7f2d16dd80bf4
7
+ data.tar.gz: d154e911d74f71f14540d551ead74a9452770660a8be4b991a73d2d2dbed3a206274b51a30b1c7090587e6bbdea389729104af293fd6f542211ae7fd952ec12a
data/README.md CHANGED
@@ -187,14 +187,15 @@ You can define simple to complex aggregations.
187
187
 
188
188
  ````ruby
189
189
  class ArticleSearch < Caoutsearch::Search::Base
190
- has_aggregation :view_count, sum: { field: :view_count }
191
- has_aggregation :popular_tags,
190
+ has_aggregation :view_count, { sum: { field: :view_count } }
191
+ has_aggregation :popular_tags, {
192
192
  filter: { term: { published: true } },
193
193
  aggs: {
194
194
  published: {
195
195
  terms: { field: :tags, size: 10 }
196
196
  }
197
197
  }
198
+ }
198
199
  end
199
200
  ````
200
201
 
@@ -314,8 +315,8 @@ You can also use transformations to combine multiple aggregations:
314
315
 
315
316
  ````ruby
316
317
  class ArticleSearch < Caoutsearch::Search::Base
317
- has_aggregation :blog_count, filter: { term: { category: "blog" } }
318
- has_aggregation :archives_count, filter: { term: { archived: true } }
318
+ has_aggregation :blog_count, { filter: { term: { category: "blog" } } }
319
+ has_aggregation :archives_count, { filter: { term: { archived: true } } }
319
320
 
320
321
  transform_aggregation :stats, from: %i[blog_count archives_count] do |aggs|
321
322
  {
@@ -335,9 +336,10 @@ This is also usefull to unify the API between different search engines:
335
336
 
336
337
  ````ruby
337
338
  class ArticleSearch < Caoutsearch::Search::Base
338
- has_aggregation :popular_tags,
339
+ has_aggregation :popular_tags, {
339
340
  filter: { term: { published: true } },
340
341
  aggs: { published: { terms: { field: :tags, size: 10 } } }
342
+ }
341
343
 
342
344
  transform_aggregation :popular_tags do |aggs|
343
345
  aggs.dig(:popular_tags, :published, :buckets).pluck(:key)
@@ -345,8 +347,9 @@ class ArticleSearch < Caoutsearch::Search::Base
345
347
  end
346
348
 
347
349
  class TagSearch < Caoutsearch::Search::Base
348
- has_aggregation :popular_tags,
350
+ has_aggregation :popular_tags, {
349
351
  terms: { field: "label", size: 20, order: { used_count: "desc" } }
352
+ }
350
353
 
351
354
  transform_aggregation :popular_tags do |aggs|
352
355
  aggs.dig(:popular_tags, :buckets).pluck(:key)
@@ -366,7 +369,7 @@ Transformations are performed on demand and result is memorized. That means:
366
369
 
367
370
  ````ruby
368
371
  class ArticleSearch < Caoutsearch::Search::Base
369
- has_aggregation :popular_tags, …
372
+ has_aggregation :popular_tags, {}
370
373
 
371
374
  transform_aggregation :popular_tags do |aggs|
372
375
  tags = aggs.dig(:popular_tags, :published, :buckets).pluck(:key)
@@ -27,8 +27,6 @@ module Caoutsearch
27
27
  build_range_query(input)
28
28
  when ::Hash
29
29
  case input
30
- in { operator:, value:, **other}
31
- build_legacy_range_query_from_hash(input)
32
30
  in { between: dates }
33
31
  build_range_query(dates)
34
32
  else
@@ -61,23 +59,6 @@ module Caoutsearch
61
59
  query
62
60
  end
63
61
 
64
- def build_legacy_range_query_from_hash(input)
65
- ActiveSupport::Deprecation.warn("This form of hash to search for dates will be removed")
66
- operator, value, unit = input.values_at(:operator, :value, :unit)
67
-
68
- case operator
69
- when "less_than"
70
- {range: {key => {gte: cast_date(value, unit)}}}
71
- when "greater_than"
72
- {range: {key => {lt: cast_date(value, unit)}}}
73
- when "between"
74
- dates = value.map { |v| cast_date(v, unit) }.sort
75
- {range: {key => {gte: dates[0], lt: dates[1]}}}
76
- else
77
- raise ArgumentError, "unknown operator #{operator.inspect} in #{value.inspect}"
78
- end
79
- end
80
-
81
62
  RANGE_OPERATORS = {
82
63
  "less_than" => "lt",
83
64
  "less_than_or_equal" => "lte",
@@ -68,11 +68,11 @@ module Caoutsearch
68
68
  sort(new_name) { |direction| sort_by(old_name, direction) }
69
69
  end
70
70
 
71
- def has_aggregation(name, **options, &block)
72
- raise ArgumentError, "has_aggregation accepts options or block but not both" if block && options.any?
71
+ def has_aggregation(name, definition = {}, &block)
72
+ raise ArgumentError, "has_aggregation accepts Hash definition or block but not both" if block && definition.any?
73
73
 
74
74
  self.aggregations = aggregations.dup
75
- aggregations[name.to_s] = Caoutsearch::Search::DSL::Item.new(name, options, &block)
75
+ aggregations[name.to_s] = Caoutsearch::Search::DSL::Item.new(name, definition, &block)
76
76
  end
77
77
 
78
78
  def alias_aggregation(new_name, old_name)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Caoutsearch
4
- VERSION = "0.0.4"
4
+ VERSION = "0.0.5"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caoutsearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Savater Sebastien
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-01-04 00:00:00.000000000 Z
12
+ date: 2023-01-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -179,7 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
181
  requirements: []
182
- rubygems_version: 3.1.6
182
+ rubygems_version: 3.3.7
183
183
  signing_key:
184
184
  specification_version: 4
185
185
  summary: An alternative approach to index & search with Elasticsearch & Ruby on Rails