daedal 0.0.13 → 0.0.14

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: 49b9a5ec5d8154e612f0a8e368b4a3ede833288a
4
- data.tar.gz: 8df178f9d7d355ea309c260ac47f5ddb762df2f5
3
+ metadata.gz: 4c4bde7051a2f331ec26642e3ffc6b517bec4ffc
4
+ data.tar.gz: 834a366bd9a23949f0db2a878c71450fc83ed09e
5
5
  SHA512:
6
- metadata.gz: a2393948c2748df8ff9adbf435ce79c910837eddefdef9fa80db35314136005af27e90d90de71be9da3a716cb4b26039c6822929de3a343c0c3a289ef17d13b5
7
- data.tar.gz: 6a1950ca0d71446b5c5238b30c54f4f39e37a54bb362affb21bfe879d49e0708da7f38b0f306d8755212286c6529b06ee7a4c9681e7a6fd6f145d6fc021b2eed
6
+ metadata.gz: d7e1c3d7af4517105b94b3182e205f1de57b50c5e9ac9e1cfbbb8dd65463ac37ecef64bb0c092246aa608c63a41e86a110be4da5e4d5987c10cb976bbee63997
7
+ data.tar.gz: 5d3c1e527051b559fd0eec04254c8f68ee596cbb3515805630e035153c51c6b2a084bcbaa94b5aff1bfaf36f60790d88674617e0848fed0f29d8737d08952577
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- daedal (0.0.12)
4
+ daedal (0.0.14)
5
5
  virtus (>= 1.0.0)
6
6
 
7
7
  GEM
@@ -77,7 +77,7 @@ GEM
77
77
  term-ansicolor (1.2.2)
78
78
  tins (~> 0.8)
79
79
  thor (0.18.1)
80
- thread_safe (0.3.3)
80
+ thread_safe (0.3.4)
81
81
  timers (1.1.0)
82
82
  tins (0.13.1)
83
83
  virtus (1.0.2)
data/README.md CHANGED
@@ -104,13 +104,13 @@ Currently, the following queries have been implemented:
104
104
  * [nested query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-nested-query.html)
105
105
  * [prefix query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-prefix-query.html)
106
106
  * [query string query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html)
107
+ * [range query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-range-query.html)
108
+ * [term query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-term-query.html)
109
+ * [terms query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html)
107
110
 
108
111
  On deck:
109
112
  * [function score query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html)
110
- * [range query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-range-query.html)
111
113
  * [regexp query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html)
112
- * [term query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-term-query.html)
113
- * [terms query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html)
114
114
  * [wildcard query](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html)
115
115
 
116
116
  Queries I'm not planning on implementing at all, since they're deprecated:
@@ -45,5 +45,6 @@ require 'daedal/queries/fuzzy_query'
45
45
  require 'daedal/queries/query_string_query'
46
46
  require 'daedal/queries/term_query'
47
47
  require 'daedal/queries/terms_query'
48
+ require 'daedal/queries/range_query'
48
49
 
49
50
  # facets
@@ -0,0 +1,33 @@
1
+ module Daedal
2
+ module Queries
3
+ "" "Class for range query" ""
4
+ class RangeQuery < Query
5
+
6
+ # required attributes
7
+ attribute :field, Daedal::Attributes::Field
8
+
9
+ # non required attributes, but at least one must be given
10
+ MINIMUM_ATTRIBUTES = [:gte, :gt, :lte, :lt].sort
11
+ MINIMUM_ATTRIBUTES.each { |a| attribute a, Daedal::Attributes::QueryValue, required: false }
12
+
13
+ #non required attributes
14
+ attribute :boost, Daedal::Attributes::Boost, required: false
15
+
16
+ def initialize(options={})
17
+ super options
18
+
19
+ # ensure at least one of the minimum attributes is provided
20
+ raise "Must give at least one of the following: #{MINIMUM_ATTRIBUTES.join(', ')}" unless (attributes.reject { |k,v| v.nil? }.keys & MINIMUM_ATTRIBUTES).length > 0
21
+
22
+ end
23
+
24
+ def to_hash
25
+ inner_result = attributes.select { |k,v| MINIMUM_ATTRIBUTES.include?(k) && !v.nil? }
26
+ inner_result.merge(boost: boost) if boost
27
+
28
+ {range: {field => inner_result} }
29
+
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,3 +1,3 @@
1
1
  module Daedal
2
- VERSION = '0.0.13'
2
+ VERSION = '0.0.14'
3
3
  end
@@ -0,0 +1,87 @@
1
+ require 'spec_helper'
2
+
3
+ describe Daedal::Queries::RangeQuery do
4
+
5
+ subject do
6
+ Daedal::Queries::RangeQuery
7
+ end
8
+
9
+ let(:field) { :foo }
10
+ let(:boost) { 1.0 }
11
+
12
+ minimum_attributes = [:lt, :lte, :gt, :gte].sort
13
+ minimum_attributes.each { |a| let(a) { rand(0..100) } }
14
+
15
+ context 'without a field specified' do
16
+ it 'will raise an error' do
17
+ expect { subject.new(lt: 42) }.to raise_error(Virtus::CoercionError)
18
+ end
19
+ end
20
+
21
+ context 'with field specified only (without minimum attribute or boost)' do
22
+ it 'will raise an error' do
23
+ expect { subject.new(field: field) }.to raise_error(RuntimeError)
24
+ end
25
+ end
26
+
27
+ context 'with field and boost specified (without minimum attribute)' do
28
+ it 'will raise an error' do
29
+ expect { subject.new(field: field, boost: boost) }.to raise_error(RuntimeError)
30
+ end
31
+ end
32
+
33
+ context 'with field and one minimum attribute' do
34
+ minimum_attributes.each do |a|
35
+ let(:params) { { field: field, a => self.send(a) } }
36
+ it "will populate the field attribute appropriately" do
37
+ expect(subject.new(params).field).to eq field
38
+ end
39
+ it "will populate the #{a} attribute appropriately" do
40
+ expect(subject.new(params).send(a)).to eq params[a]
41
+ end
42
+ end
43
+ end
44
+
45
+ shared_examples "range query with minimum attributes" do |attrs|
46
+ let(:attr_hash) { attrs.each_with_object({}) { |a, h| h.merge!(a => self.send(a)) } }
47
+ context "with minimum attributes #{attrs.inspect}" do
48
+ context 'with field and one or more minimum attribute' do
49
+ let(:params) { { field: field }.merge(attr_hash) }
50
+ let(:query) { subject.new(params) }
51
+ let(:hash_query) { { range: { field => attr_hash } } }
52
+ it "will not raise an error when only #{attrs.join(', ')} is specified" do
53
+ expect { query }.to_not raise_error
54
+ end
55
+ it "will have the correct hash representation when only #{attrs.join(', ')} is specified" do
56
+ expect(query.to_hash).to eq hash_query
57
+ end
58
+
59
+ it "will have the correct json representation when only #{attrs.join(', ')} is specified" do
60
+ expect(query.to_json).to eq hash_query.to_json
61
+ end
62
+ end
63
+
64
+ context 'with field, boost and one or more minimum attribute' do
65
+ let(:params) { { field: field, boost: boost }.merge(attr_hash) }
66
+ let(:query) { subject.new(params) }
67
+ let(:hash_query) { { range: { field => attr_hash } } }
68
+ it "will not raise an error when only #{attrs.join(', ')} is specified" do
69
+ expect { query }.to_not raise_error
70
+ end
71
+ it "will have the correct hash representation when only #{attrs.join(', ')} is specified" do
72
+ expect(query.to_hash).to eq hash_query
73
+ end
74
+
75
+ it "will have the correct json representation when only #{attrs.join(', ')} is specified" do
76
+ expect(query.to_json).to eq hash_query.to_json
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ (1..minimum_attributes.length).to_a.each do |slice|
83
+ minimum_attributes.combination(slice).each do |attrs|
84
+ it_behaves_like "range query with minimum attributes", attrs
85
+ end
86
+ end
87
+ 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.13
4
+ version: 0.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher Schuch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-02 00:00:00.000000000 Z
11
+ date: 2014-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: virtus
@@ -76,6 +76,7 @@ files:
76
76
  - lib/daedal/queries/prefix_query.rb
77
77
  - lib/daedal/queries/query.rb
78
78
  - lib/daedal/queries/query_string_query.rb
79
+ - lib/daedal/queries/range_query.rb
79
80
  - lib/daedal/queries/term_query.rb
80
81
  - lib/daedal/queries/terms_query.rb
81
82
  - lib/daedal/version.rb
@@ -100,6 +101,7 @@ files:
100
101
  - spec/unit/daedal/queries/nested_query_spec.rb
101
102
  - spec/unit/daedal/queries/prefix_query_spec.rb
102
103
  - spec/unit/daedal/queries/query_string_spec.rb
104
+ - spec/unit/daedal/queries/range_query_spec.rb
103
105
  - spec/unit/daedal/queries/term_query_spec.rb
104
106
  - spec/unit/daedal/queries/terms_query_spec.rb
105
107
  homepage: https://github.com/cschuch/daedal