daedal 0.0.13 → 0.0.14

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