daedal 0.0.15 → 0.0.16

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: 11c6ae3d232c10eb5d671406d9fe201d778c77dc
4
- data.tar.gz: b59495f804fbc653fb9515c1fe6d0f29478d4a55
3
+ metadata.gz: 67944926b6a5ef6c6eb5165191a03f089e784c89
4
+ data.tar.gz: 0082ced2272905533bf4eae8912abb2bdb178ab6
5
5
  SHA512:
6
- metadata.gz: 1886174417cd61ff5ffa31cd6807bb6eb1211f05f6237951ab39f7c09542edc744391bb70793caed483b92943a73b7b8bf4dd185f6a1d8cd97762f9bbe26a2f1
7
- data.tar.gz: f2a586eefd70d05cbfcd925427ee691198d8bb2caab383ab66e641325a0ecb8d4378e2eb2200b0a4981b0efef057cac0f940b54c5a7b1f4b348f1348a5ef56f4
6
+ metadata.gz: f2a28d5bc4314a4827127eee9c300e14fefc2417c2fd25c7bd660d19f41a40bab560d051365c2449da4ee163a3c039e186ae5790b379022b13ad850a4128173e
7
+ data.tar.gz: 80b821a4d5050ec57b8806548e1e2768a93b0b4af8df6b9299f11ba228950080aec796c201bb660d93585523fdccea9130e66c2954a5353d615fd095a6514f00
@@ -1,21 +1,20 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- daedal (0.0.15)
4
+ daedal (0.0.16)
5
5
  virtus (>= 1.0.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- axiom-types (0.0.5)
11
- descendants_tracker (~> 0.0.1)
12
- ice_nine (~> 0.9)
13
- backports (3.3.5)
10
+ axiom-types (0.1.1)
11
+ descendants_tracker (~> 0.0.4)
12
+ ice_nine (~> 0.11.0)
13
+ thread_safe (~> 0.3, >= 0.3.1)
14
14
  celluloid (0.15.2)
15
15
  timers (~> 1.1.0)
16
16
  coderay (1.1.0)
17
- coercible (0.2.0)
18
- backports (~> 3.0, >= 3.1.0)
17
+ coercible (1.0.0)
19
18
  descendants_tracker (~> 0.0.1)
20
19
  coveralls (0.7.0)
21
20
  multi_json (~> 1.3)
@@ -23,9 +22,10 @@ GEM
23
22
  simplecov (>= 0.7)
24
23
  term-ansicolor
25
24
  thor
26
- descendants_tracker (0.0.3)
25
+ descendants_tracker (0.0.4)
26
+ thread_safe (~> 0.3, >= 0.3.1)
27
27
  diff-lcs (1.2.5)
28
- equalizer (0.0.8)
28
+ equalizer (0.0.11)
29
29
  ffi (1.9.3)
30
30
  formatador (0.2.4)
31
31
  fuubar (1.2.1)
@@ -41,7 +41,7 @@ GEM
41
41
  guard-rspec (4.2.0)
42
42
  guard (>= 2.1.1)
43
43
  rspec (>= 2.14, < 4.0)
44
- ice_nine (0.10.0)
44
+ ice_nine (0.11.1)
45
45
  listen (2.4.0)
46
46
  celluloid (>= 0.15.2)
47
47
  rb-fsevent (>= 0.9.3)
@@ -77,13 +77,14 @@ GEM
77
77
  term-ansicolor (1.2.2)
78
78
  tins (~> 0.8)
79
79
  thor (0.18.1)
80
+ thread_safe (0.3.5)
80
81
  timers (1.1.0)
81
82
  tins (0.13.1)
82
- virtus (1.0.0)
83
- axiom-types (~> 0.0.5)
84
- coercible (~> 0.2)
85
- descendants_tracker (~> 0.0.1)
86
- equalizer (~> 0.0.7)
83
+ virtus (1.0.2)
84
+ axiom-types (~> 0.1)
85
+ coercible (~> 1.0)
86
+ descendants_tracker (~> 0.0.3)
87
+ equalizer (~> 0.0.9)
87
88
 
88
89
  PLATFORMS
89
90
  ruby
data/README.md CHANGED
@@ -92,6 +92,7 @@ bool_query.to_json # => "{\"bool\":{\"should\":[{\"match\":{\"lines\":{\"query\"
92
92
  Currently, the following queries have been implemented:
93
93
  * [bool query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html)
94
94
  * [constant score query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-constant-score-query.html)
95
+ * [function score query](http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html)
95
96
  * [dis max query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-dis-max-query.html)
96
97
  * [filtered query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html)
97
98
  * [fuzzy query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html)
@@ -19,6 +19,7 @@ require 'daedal/attributes/filter'
19
19
  require 'daedal/attributes/field'
20
20
  require 'daedal/attributes/query_value'
21
21
  require 'daedal/attributes/boost'
22
+ require 'daedal/attributes/score_function_array'
22
23
 
23
24
  # filters
24
25
  require 'daedal/filters/exists_filter'
@@ -47,5 +48,6 @@ require 'daedal/queries/query_string_query'
47
48
  require 'daedal/queries/term_query'
48
49
  require 'daedal/queries/terms_query'
49
50
  require 'daedal/queries/range_query'
51
+ require 'daedal/queries/function_score_query'
50
52
 
51
53
  # facets
@@ -0,0 +1,24 @@
1
+ module Daedal
2
+ module Attributes
3
+ """Custom coercer for the type attribute"""
4
+ class ScoreFunctionArray < Array
5
+ def <<(function)
6
+ raise Virtus::CoercionError.new(value, 'Daedal::Attributes::ScoreFunction') unless valid_score_function?(function)
7
+
8
+ super function
9
+ end
10
+
11
+ def unshift(function)
12
+ raise Virtus::CoercionError.new(f, 'Daedal::Attributes::ScoreFunctions') unless valid_score_function?(function)
13
+
14
+ super function
15
+ end
16
+
17
+
18
+ # Values should be an array of hashes with filter & weight
19
+ def valid_score_function?(score_function)
20
+ score_function[:filter].respond_to?(:hash) && score_function[:weight].respond_to?(:hash)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,37 @@
1
+ module Daedal
2
+ module Queries
3
+ """Class for the function score query"""
4
+ class FunctionScoreQuery < Query
5
+
6
+ # required attributes
7
+ attribute :query, Daedal::Attributes::Query
8
+ attribute :score_functions, Daedal::Attributes::ScoreFunctionArray
9
+
10
+ # non required attributes
11
+ attribute :boost, Daedal::Attributes::Boost, required: false
12
+ attribute :score_mode, Daedal::Attributes::LowerCaseString, required: false
13
+ attribute :filter, Daedal::Attributes::Filter, required: false
14
+
15
+ def to_hash
16
+ {
17
+ function_score: {
18
+ query: build_query,
19
+ functions: score_functions.map { |f| { filter: f[:filter].to_hash, weight: f[:weight] } },
20
+ boost: boost || 1,
21
+ score_mode: score_mode || "multiply"
22
+ }
23
+ }
24
+ end
25
+
26
+ private
27
+
28
+ def build_query
29
+ if filter
30
+ { filtered: { query: query.to_hash, filter: filter.to_hash } }
31
+ else
32
+ query.to_hash
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,3 +1,3 @@
1
1
  module Daedal
2
- VERSION = '0.0.15'
2
+ VERSION = '0.0.16'
3
3
  end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ describe Daedal::Queries::FunctionScoreQuery do
4
+
5
+ let(:score_functions) do
6
+ [
7
+ filter: Daedal::Filters::TermFilter.new(field: :foo, term: :bar),
8
+ weight: 100
9
+ ]
10
+ end
11
+
12
+ let(:query) do
13
+ Daedal::Queries::MatchAllQuery.new
14
+ end
15
+
16
+ let(:filter) do
17
+ Daedal::Filters::TermFilter.new(field: :foo, term: :bar)
18
+ end
19
+
20
+ context 'without a query specified' do
21
+ it 'will raise an error' do
22
+ expect{ described_class.new(score_functions: score_functions) }.to raise_error
23
+ end
24
+ end
25
+
26
+ context 'without a boost specified' do
27
+ it 'will raise an error' do
28
+ expect{ described_class.new(query: query, score_functions: score_functions) }.to raise_error(Virtus::CoercionError)
29
+ end
30
+ end
31
+
32
+ context 'with valid arguments' do
33
+ it 'converts to a valid query with filter' do
34
+ valid_query = described_class.new(query: query, score_functions: score_functions,
35
+ filter: filter, boost: 42, score_mode: 'sum')
36
+ expect(valid_query.to_hash[:function_score][:query][:filtered][:query]).to eq(query.to_hash)
37
+ expect(valid_query.to_hash[:function_score][:query][:filtered][:filter]).to eq(filter.to_hash)
38
+ expect(valid_query.to_hash[:function_score][:functions]).to eq(score_functions.map do |f|
39
+ { :filter => f[:filter].to_hash, :weight => f[:weight] }
40
+ end)
41
+ expect(valid_query.to_hash[:function_score][:boost]).to eq(42)
42
+ expect(valid_query.to_hash[:function_score][:score_mode]).to eq('sum')
43
+ end
44
+
45
+ it 'converts to a valid query without filter' do
46
+ valid_query = described_class.new(query: query, score_functions: score_functions, boost: 42, score_mode: 'sum')
47
+ expect(valid_query.to_hash[:function_score][:query]).to eq(query.to_hash)
48
+ expect(valid_query.to_hash[:function_score][:functions]).to eq(score_functions.map do |f|
49
+ { :filter => f[:filter].to_hash, :weight => f[:weight] }
50
+ end)
51
+ expect(valid_query.to_hash[:function_score][:boost]).to eq(42)
52
+ expect(valid_query.to_hash[:function_score][:score_mode]).to eq('sum')
53
+ end
54
+ end
55
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: daedal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.15
4
+ version: 0.0.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher Schuch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-09 00:00:00.000000000 Z
11
+ date: 2015-04-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: virtus
@@ -52,6 +52,7 @@ files:
52
52
  - lib/daedal/attributes/query.rb
53
53
  - lib/daedal/attributes/query_array.rb
54
54
  - lib/daedal/attributes/query_value.rb
55
+ - lib/daedal/attributes/score_function_array.rb
55
56
  - lib/daedal/attributes/score_mode.rb
56
57
  - lib/daedal/facets/facet.rb
57
58
  - lib/daedal/filters/and_filter.rb
@@ -69,6 +70,7 @@ files:
69
70
  - lib/daedal/queries/constant_score_query.rb
70
71
  - lib/daedal/queries/dis_max_query.rb
71
72
  - lib/daedal/queries/filtered_query.rb
73
+ - lib/daedal/queries/function_score_query.rb
72
74
  - lib/daedal/queries/fuzzy_query.rb
73
75
  - lib/daedal/queries/match_all_query.rb
74
76
  - lib/daedal/queries/match_query.rb
@@ -96,6 +98,7 @@ files:
96
98
  - spec/unit/daedal/queries/constant_score_query_spec.rb
97
99
  - spec/unit/daedal/queries/dis_max_query_spec.rb
98
100
  - spec/unit/daedal/queries/filtered_query_spec.rb
101
+ - spec/unit/daedal/queries/function_score_query_spec.rb
99
102
  - spec/unit/daedal/queries/fuzzy_query_spec.rb
100
103
  - spec/unit/daedal/queries/match_all_query_spec.rb
101
104
  - spec/unit/daedal/queries/match_query_spec.rb