daedal 0.0.15 → 0.0.16

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
  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