daedal 0.0.16 → 0.0.17
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 +4 -4
- data/Gemfile.lock +2 -2
- data/README.md +2 -0
- data/lib/daedal.rb +5 -1
- data/lib/daedal/attributes/flag.rb +33 -0
- data/lib/daedal/attributes/type_value.rb +18 -0
- data/lib/daedal/filters/type_filter.rb +14 -0
- data/lib/daedal/queries/simple_query_string_query.rb +43 -0
- data/lib/daedal/version.rb +1 -1
- data/spec/unit/daedal/attributes/flag_spec.rb +23 -0
- data/spec/unit/daedal/filters/type_filter_spec.rb +37 -0
- data/spec/unit/daedal/queries/simple_query_string_spec.rb +168 -0
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27cd710adc4e066c10e7a70e93e7bcc021f39e97
|
4
|
+
data.tar.gz: adc66f8d210e1f33e56cc4d39dd9b9467a68546f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b9509704bf2f5965b25dd09c8f6370bcca897bc62a7ffec635368b363f275261cba9b39ddb99dfedb54b4314cc33d71b44ca5e0fa4375c64c46be91a181ea5e
|
7
|
+
data.tar.gz: 4fb13110837bf95334b67fbc247f36ccff48a627948e40ea9a699632c3a68a4924aff8012a78744948e1d00dac46debf4f8af332bbb7c7f709aa3f30a6ffe646
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
daedal (0.0.
|
4
|
+
daedal (0.0.17)
|
5
5
|
virtus (>= 1.0.0)
|
6
6
|
|
7
7
|
GEM
|
@@ -58,7 +58,7 @@ GEM
|
|
58
58
|
rb-inotify (0.9.2)
|
59
59
|
ffi (>= 0.5.0)
|
60
60
|
rest-client (1.6.7)
|
61
|
-
mime-types (>= 1.
|
61
|
+
mime-types (>= 1.17)
|
62
62
|
rspec (2.14.1)
|
63
63
|
rspec-core (~> 2.14.0)
|
64
64
|
rspec-expectations (~> 2.14.0)
|
data/README.md
CHANGED
@@ -102,6 +102,7 @@ Currently, the following queries have been implemented:
|
|
102
102
|
* [nested query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html)
|
103
103
|
* [prefix query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-prefix-query.html)
|
104
104
|
* [query string query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html)
|
105
|
+
* [simple query string query](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-simple-query-string-query.html)
|
105
106
|
* [range query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-range-query.html)
|
106
107
|
* [term query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-term-query.html)
|
107
108
|
* [terms query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html)
|
@@ -140,6 +141,7 @@ Currently, the following filters have been implemented:
|
|
140
141
|
* [terms filter](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-terms-filter.html)
|
141
142
|
* [nested filter](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-nested-filter.html)
|
142
143
|
* [exists filter](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-exists-filter.html)
|
144
|
+
* [type filter](http://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-type-filter.html)
|
143
145
|
|
144
146
|
### Type checking and attribute coercion
|
145
147
|
|
data/lib/daedal.rb
CHANGED
@@ -20,6 +20,8 @@ require 'daedal/attributes/field'
|
|
20
20
|
require 'daedal/attributes/query_value'
|
21
21
|
require 'daedal/attributes/boost'
|
22
22
|
require 'daedal/attributes/score_function_array'
|
23
|
+
require 'daedal/attributes/type_value'
|
24
|
+
require 'daedal/attributes/flag'
|
23
25
|
|
24
26
|
# filters
|
25
27
|
require 'daedal/filters/exists_filter'
|
@@ -32,6 +34,7 @@ require 'daedal/filters/and_filter'
|
|
32
34
|
require 'daedal/filters/or_filter'
|
33
35
|
require 'daedal/filters/bool_filter'
|
34
36
|
require 'daedal/filters/nested_filter'
|
37
|
+
require 'daedal/filters/type_filter'
|
35
38
|
|
36
39
|
# queries
|
37
40
|
require 'daedal/queries/match_all_query'
|
@@ -49,5 +52,6 @@ require 'daedal/queries/term_query'
|
|
49
52
|
require 'daedal/queries/terms_query'
|
50
53
|
require 'daedal/queries/range_query'
|
51
54
|
require 'daedal/queries/function_score_query'
|
55
|
+
require 'daedal/queries/simple_query_string_query'
|
52
56
|
|
53
|
-
# facets
|
57
|
+
# facets
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Daedal
|
2
|
+
module Attributes
|
3
|
+
"""Custom coercer for the flag attribute"""
|
4
|
+
class Flag < Virtus::Attribute
|
5
|
+
ALLOWED_FLAGS = [
|
6
|
+
:all,
|
7
|
+
:none,
|
8
|
+
:and,
|
9
|
+
:or,
|
10
|
+
:not,
|
11
|
+
:prefix,
|
12
|
+
:phrase,
|
13
|
+
:precedence,
|
14
|
+
:escape,
|
15
|
+
:whitespace,
|
16
|
+
:fuzzy,
|
17
|
+
:near,
|
18
|
+
:slop
|
19
|
+
]
|
20
|
+
|
21
|
+
def coerce(value)
|
22
|
+
unless value.nil?
|
23
|
+
value = value.to_sym
|
24
|
+
unless ALLOWED_FLAGS.include? value
|
25
|
+
raise Virtus::CoercionError.new(value, 'Daedal::Attributes::Flag')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
value
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Daedal
|
2
|
+
module Attributes
|
3
|
+
"""Custom coercer for the value of a type - can be a string or a symbol. If
|
4
|
+
it's none of those, raises a coercion error."""
|
5
|
+
class TypeValue < Virtus::Attribute
|
6
|
+
ALLOWED_QUERY_VALUE_CLASSES = [String, Symbol]
|
7
|
+
def coerce(q)
|
8
|
+
if !required? and q.nil?
|
9
|
+
return q
|
10
|
+
elsif ALLOWED_QUERY_VALUE_CLASSES.include? q.class
|
11
|
+
return q
|
12
|
+
else
|
13
|
+
raise Virtus::CoercionError.new(q, self.class)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Daedal
|
2
|
+
module Queries
|
3
|
+
"""Class for the simple query string query"""
|
4
|
+
class SimpleQueryStringQuery < Query
|
5
|
+
|
6
|
+
# required attributes
|
7
|
+
attribute :query, String
|
8
|
+
|
9
|
+
# non required attributes
|
10
|
+
attribute :default_field, Daedal::Attributes::Field, required: false
|
11
|
+
attribute :fields, Array[Daedal::Attributes::Field], required: false
|
12
|
+
attribute :default_operator, String, required: false
|
13
|
+
attribute :analyzer, Symbol, required: false
|
14
|
+
attribute :lowercase_expanded_terms, Boolean, required: false
|
15
|
+
attribute :minimum_should_match, Integer, required: false
|
16
|
+
attribute :lenient, Boolean, required: false
|
17
|
+
attribute :flags, Array[Daedal::Attributes::Flag], required: false
|
18
|
+
|
19
|
+
def to_hash
|
20
|
+
parameters = present_attributes
|
21
|
+
|
22
|
+
if parameters[:flags]
|
23
|
+
parameters[:flags] = parameters[:flags].map(&:to_s).join('|')
|
24
|
+
end
|
25
|
+
|
26
|
+
{ simple_query_string: parameters }
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def present_attributes
|
32
|
+
attributes.select do |parameter, value|
|
33
|
+
case parameter
|
34
|
+
when :fields, :flags
|
35
|
+
!value.empty?
|
36
|
+
else
|
37
|
+
!value.nil?
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/daedal/version.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Daedal::Attributes::Flag do
|
4
|
+
class Whatever
|
5
|
+
include Virtus.model
|
6
|
+
|
7
|
+
attribute :flag, Daedal::Attributes::Flag
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '#coerce' do
|
11
|
+
it 'coerces a coercible value' do
|
12
|
+
model = Whatever.new(flag: 'prefix')
|
13
|
+
|
14
|
+
expect(model.flag).to eq :prefix
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'raises a coercion error if flag is not allowed' do
|
18
|
+
expect do
|
19
|
+
Whatever.new(flag: 'asdasdasdsa')
|
20
|
+
end.to raise_error Virtus::CoercionError
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Daedal::Filters::TypeFilter do
|
4
|
+
|
5
|
+
subject do
|
6
|
+
Daedal::Filters::TypeFilter
|
7
|
+
end
|
8
|
+
|
9
|
+
let(:type) do
|
10
|
+
:bar
|
11
|
+
end
|
12
|
+
|
13
|
+
let(:hash_filter) do
|
14
|
+
{type: {:value => type}}
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'without a type specified' do
|
18
|
+
it 'will raise an error' do
|
19
|
+
expect {subject.new}.to raise_error(Virtus::CoercionError)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'with a type specified' do
|
24
|
+
let(:filter) do
|
25
|
+
subject.new(type: type)
|
26
|
+
end
|
27
|
+
it 'will populate the type attribute appropriately' do
|
28
|
+
expect(filter.type).to eq type
|
29
|
+
end
|
30
|
+
it 'will have the correct hash representation' do
|
31
|
+
expect(filter.to_hash).to eq hash_filter
|
32
|
+
end
|
33
|
+
it 'will have the correct json representation' do
|
34
|
+
expect(filter.to_json).to eq hash_filter.to_json
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,168 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Daedal::Queries::SimpleQueryStringQuery do
|
4
|
+
|
5
|
+
subject do
|
6
|
+
Daedal::Queries::SimpleQueryStringQuery
|
7
|
+
end
|
8
|
+
|
9
|
+
let(:hash_query) do
|
10
|
+
{simple_query_string: {query: 'foo'}}
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'without a query string' do
|
14
|
+
it 'will raise an error' do
|
15
|
+
expect{subject.new}.to raise_error(Virtus::CoercionError)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'with a query that is not a string given' do
|
20
|
+
let(:query) do
|
21
|
+
subject.new query: :foo
|
22
|
+
end
|
23
|
+
it 'will convert to a string' do
|
24
|
+
expect(query.query).to eq 'foo'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'with a query' do
|
29
|
+
let(:query) do
|
30
|
+
subject.new query: 'foo'
|
31
|
+
end
|
32
|
+
it 'will create a query string with the correct value' do
|
33
|
+
expect(query.query).to eq 'foo'
|
34
|
+
end
|
35
|
+
it 'will have the correct hash and json representation' do
|
36
|
+
expect(query.to_hash).to eq hash_query
|
37
|
+
expect(query.to_json).to eq hash_query.to_json
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'with a default_field' do
|
42
|
+
let(:query) do
|
43
|
+
subject.new query: 'foo', default_field: :bar
|
44
|
+
end
|
45
|
+
before do
|
46
|
+
hash_query[:simple_query_string][:default_field] = :bar
|
47
|
+
end
|
48
|
+
it 'will set the default_field' do
|
49
|
+
expect(query.default_field).to eq :bar
|
50
|
+
end
|
51
|
+
it 'will have the correct hash and json representations' do
|
52
|
+
expect(query.to_hash).to eq hash_query
|
53
|
+
expect(query.to_json).to eq hash_query.to_json
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'with an array of fields' do
|
58
|
+
let(:query) do
|
59
|
+
subject.new query: 'foo', fields: [:bar]
|
60
|
+
end
|
61
|
+
before do
|
62
|
+
hash_query[:simple_query_string][:fields] = [:bar]
|
63
|
+
end
|
64
|
+
it 'will set the fields' do
|
65
|
+
expect(query.fields).to eq [:bar]
|
66
|
+
end
|
67
|
+
it 'will have the correct hash and json representations' do
|
68
|
+
expect(query.to_hash).to eq hash_query
|
69
|
+
expect(query.to_json).to eq hash_query.to_json
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'with a default_operator' do
|
74
|
+
let(:query) do
|
75
|
+
subject.new query: 'foo', default_operator: 'OR'
|
76
|
+
end
|
77
|
+
before do
|
78
|
+
hash_query[:simple_query_string][:default_operator] = 'OR'
|
79
|
+
end
|
80
|
+
it 'will set the default_operator' do
|
81
|
+
expect(query.default_operator).to eq 'OR'
|
82
|
+
end
|
83
|
+
it 'will have the correct hash and json representations' do
|
84
|
+
expect(query.to_hash).to eq hash_query
|
85
|
+
expect(query.to_json).to eq hash_query.to_json
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
context 'with an analyzer' do
|
90
|
+
let(:query) do
|
91
|
+
subject.new query: 'foo', analyzer: :bar
|
92
|
+
end
|
93
|
+
before do
|
94
|
+
hash_query[:simple_query_string][:analyzer] = :bar
|
95
|
+
end
|
96
|
+
it 'will set the analyzer' do
|
97
|
+
expect(query.analyzer).to eq :bar
|
98
|
+
end
|
99
|
+
it 'will have the correct hash and json representations' do
|
100
|
+
expect(query.to_hash).to eq hash_query
|
101
|
+
expect(query.to_json).to eq hash_query.to_json
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
context 'with flags' do
|
106
|
+
let(:query) do
|
107
|
+
subject.new query: 'foo', flags: [:or, :and, :prefix]
|
108
|
+
end
|
109
|
+
before do
|
110
|
+
hash_query[:simple_query_string][:flags] = 'or|and|prefix'
|
111
|
+
end
|
112
|
+
it 'will set the flags' do
|
113
|
+
expect(query.flags).to eq [:or, :and, :prefix]
|
114
|
+
end
|
115
|
+
it 'will have the correct hash and json representations' do
|
116
|
+
expect(query.to_hash).to eq hash_query
|
117
|
+
expect(query.to_json).to eq hash_query.to_json
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
context 'with a lowercase_expanded_terms' do
|
122
|
+
let(:query) do
|
123
|
+
subject.new query: 'foo', lowercase_expanded_terms: true
|
124
|
+
end
|
125
|
+
before do
|
126
|
+
hash_query[:simple_query_string][:lowercase_expanded_terms] = true
|
127
|
+
end
|
128
|
+
it 'will set the lowercase_expanded_terms' do
|
129
|
+
expect(query.lowercase_expanded_terms).to eq true
|
130
|
+
end
|
131
|
+
it 'will have the correct hash and json representations' do
|
132
|
+
expect(query.to_hash).to eq hash_query
|
133
|
+
expect(query.to_json).to eq hash_query.to_json
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
context 'with a minimum_should_match' do
|
138
|
+
let(:query) do
|
139
|
+
subject.new query: 'foo', minimum_should_match: 2
|
140
|
+
end
|
141
|
+
before do
|
142
|
+
hash_query[:simple_query_string][:minimum_should_match] = 2
|
143
|
+
end
|
144
|
+
it 'will set the minimum_should_match' do
|
145
|
+
expect(query.minimum_should_match).to eq 2
|
146
|
+
end
|
147
|
+
it 'will have the correct hash and json representations' do
|
148
|
+
expect(query.to_hash).to eq hash_query
|
149
|
+
expect(query.to_json).to eq hash_query.to_json
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
context 'with a lenient' do
|
154
|
+
let(:query) do
|
155
|
+
subject.new query: 'foo', lenient: true
|
156
|
+
end
|
157
|
+
before do
|
158
|
+
hash_query[:simple_query_string][:lenient] = true
|
159
|
+
end
|
160
|
+
it 'will set the lenient' do
|
161
|
+
expect(query.lenient).to eq true
|
162
|
+
end
|
163
|
+
it 'will have the correct hash and json representations' do
|
164
|
+
expect(query.to_hash).to eq hash_query
|
165
|
+
expect(query.to_json).to eq hash_query.to_json
|
166
|
+
end
|
167
|
+
end
|
168
|
+
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.
|
4
|
+
version: 0.0.17
|
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-
|
11
|
+
date: 2015-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: virtus
|
@@ -46,6 +46,7 @@ files:
|
|
46
46
|
- lib/daedal/attributes/field.rb
|
47
47
|
- lib/daedal/attributes/filter.rb
|
48
48
|
- lib/daedal/attributes/filter_array.rb
|
49
|
+
- lib/daedal/attributes/flag.rb
|
49
50
|
- lib/daedal/attributes/lower_case_string.rb
|
50
51
|
- lib/daedal/attributes/match_type.rb
|
51
52
|
- lib/daedal/attributes/operator.rb
|
@@ -54,6 +55,7 @@ files:
|
|
54
55
|
- lib/daedal/attributes/query_value.rb
|
55
56
|
- lib/daedal/attributes/score_function_array.rb
|
56
57
|
- lib/daedal/attributes/score_mode.rb
|
58
|
+
- lib/daedal/attributes/type_value.rb
|
57
59
|
- lib/daedal/facets/facet.rb
|
58
60
|
- lib/daedal/filters/and_filter.rb
|
59
61
|
- lib/daedal/filters/bool_filter.rb
|
@@ -66,6 +68,7 @@ files:
|
|
66
68
|
- lib/daedal/filters/range_filter.rb
|
67
69
|
- lib/daedal/filters/term_filter.rb
|
68
70
|
- lib/daedal/filters/terms_filter.rb
|
71
|
+
- lib/daedal/filters/type_filter.rb
|
69
72
|
- lib/daedal/queries/bool_query.rb
|
70
73
|
- lib/daedal/queries/constant_score_query.rb
|
71
74
|
- lib/daedal/queries/dis_max_query.rb
|
@@ -80,10 +83,12 @@ files:
|
|
80
83
|
- lib/daedal/queries/query.rb
|
81
84
|
- lib/daedal/queries/query_string_query.rb
|
82
85
|
- lib/daedal/queries/range_query.rb
|
86
|
+
- lib/daedal/queries/simple_query_string_query.rb
|
83
87
|
- lib/daedal/queries/term_query.rb
|
84
88
|
- lib/daedal/queries/terms_query.rb
|
85
89
|
- lib/daedal/version.rb
|
86
90
|
- spec/spec_helper.rb
|
91
|
+
- spec/unit/daedal/attributes/flag_spec.rb
|
87
92
|
- spec/unit/daedal/filters/and_filter_spec.rb
|
88
93
|
- spec/unit/daedal/filters/bool_filter_spec.rb
|
89
94
|
- spec/unit/daedal/filters/exists_filter_spec.rb
|
@@ -94,6 +99,7 @@ files:
|
|
94
99
|
- spec/unit/daedal/filters/range_filter_spec.rb
|
95
100
|
- spec/unit/daedal/filters/term_filter_spec.rb
|
96
101
|
- spec/unit/daedal/filters/terms_filter_spec.rb
|
102
|
+
- spec/unit/daedal/filters/type_filter_spec.rb
|
97
103
|
- spec/unit/daedal/queries/bool_query_spec.rb
|
98
104
|
- spec/unit/daedal/queries/constant_score_query_spec.rb
|
99
105
|
- spec/unit/daedal/queries/dis_max_query_spec.rb
|
@@ -107,6 +113,7 @@ files:
|
|
107
113
|
- spec/unit/daedal/queries/prefix_query_spec.rb
|
108
114
|
- spec/unit/daedal/queries/query_string_spec.rb
|
109
115
|
- spec/unit/daedal/queries/range_query_spec.rb
|
116
|
+
- spec/unit/daedal/queries/simple_query_string_spec.rb
|
110
117
|
- spec/unit/daedal/queries/term_query_spec.rb
|
111
118
|
- spec/unit/daedal/queries/terms_query_spec.rb
|
112
119
|
homepage: https://github.com/cschuch/daedal
|