daedal 0.0.14 → 0.0.15

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: 4c4bde7051a2f331ec26642e3ffc6b517bec4ffc
4
- data.tar.gz: 834a366bd9a23949f0db2a878c71450fc83ed09e
3
+ metadata.gz: 11c6ae3d232c10eb5d671406d9fe201d778c77dc
4
+ data.tar.gz: b59495f804fbc653fb9515c1fe6d0f29478d4a55
5
5
  SHA512:
6
- metadata.gz: d7e1c3d7af4517105b94b3182e205f1de57b50c5e9ac9e1cfbbb8dd65463ac37ecef64bb0c092246aa608c63a41e86a110be4da5e4d5987c10cb976bbee63997
7
- data.tar.gz: 5d3c1e527051b559fd0eec04254c8f68ee596cbb3515805630e035153c51c6b2a084bcbaa94b5aff1bfaf36f60790d88674617e0848fed0f29d8737d08952577
6
+ metadata.gz: 1886174417cd61ff5ffa31cd6807bb6eb1211f05f6237951ab39f7c09542edc744391bb70793caed483b92943a73b7b8bf4dd185f6a1d8cd97762f9bbe26a2f1
7
+ data.tar.gz: f2a586eefd70d05cbfcd925427ee691198d8bb2caab383ab66e641325a0ecb8d4378e2eb2200b0a4981b0efef057cac0f940b54c5a7b1f4b348f1348a5ef56f4
data/Gemfile.lock CHANGED
@@ -1,20 +1,21 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- daedal (0.0.14)
4
+ daedal (0.0.15)
5
5
  virtus (>= 1.0.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
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)
10
+ axiom-types (0.0.5)
11
+ descendants_tracker (~> 0.0.1)
12
+ ice_nine (~> 0.9)
13
+ backports (3.3.5)
14
14
  celluloid (0.15.2)
15
15
  timers (~> 1.1.0)
16
16
  coderay (1.1.0)
17
- coercible (1.0.0)
17
+ coercible (0.2.0)
18
+ backports (~> 3.0, >= 3.1.0)
18
19
  descendants_tracker (~> 0.0.1)
19
20
  coveralls (0.7.0)
20
21
  multi_json (~> 1.3)
@@ -22,10 +23,9 @@ GEM
22
23
  simplecov (>= 0.7)
23
24
  term-ansicolor
24
25
  thor
25
- descendants_tracker (0.0.4)
26
- thread_safe (~> 0.3, >= 0.3.1)
26
+ descendants_tracker (0.0.3)
27
27
  diff-lcs (1.2.5)
28
- equalizer (0.0.9)
28
+ equalizer (0.0.8)
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.11.0)
44
+ ice_nine (0.10.0)
45
45
  listen (2.4.0)
46
46
  celluloid (>= 0.15.2)
47
47
  rb-fsevent (>= 0.9.3)
@@ -77,14 +77,13 @@ GEM
77
77
  term-ansicolor (1.2.2)
78
78
  tins (~> 0.8)
79
79
  thor (0.18.1)
80
- thread_safe (0.3.4)
81
80
  timers (1.1.0)
82
81
  tins (0.13.1)
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)
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)
88
87
 
89
88
  PLATFORMS
90
89
  ruby
data/README.md CHANGED
@@ -23,9 +23,6 @@ query DSL into Ruby objects, Daedal addresses the following issues:
23
23
  Daedal also makes it easy to define custom queries tailored to your specific use case - you can see
24
24
  a simple example at the end of the documentation.
25
25
 
26
- Daedal itself is designed more as a "low level" library, and doesn't necessarily make for terribly elegant code.
27
- If you'd prefer a more Ruby-friendly block DSL, you can take a look at a new project I've been working on, [DaedalSL](https://github.com/RallyPointNetworks/daedal-sl).
28
-
29
26
  Installation
30
27
  ------------
31
28
 
@@ -135,6 +132,7 @@ Currently, the following filters have been implemented:
135
132
  * [and filter](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-and-filter.html)
136
133
  * [bool filter](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-filter.html)
137
134
  * [geo distance filter](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-geo-distance-filter.html)
135
+ * [geo distance range filter](http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/geo-distance.html#geo-distance-range)
138
136
  * [or filter](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-or-filter.html)
139
137
  * [range filter](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-range-filter.html)
140
138
  * [term filter](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-term-filter.html)
@@ -257,4 +255,4 @@ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
257
255
  FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
258
256
  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
259
257
  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
260
- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
258
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/lib/daedal.rb CHANGED
@@ -26,6 +26,7 @@ require 'daedal/filters/term_filter'
26
26
  require 'daedal/filters/terms_filter'
27
27
  require 'daedal/filters/range_filter'
28
28
  require 'daedal/filters/geo_distance_filter'
29
+ require 'daedal/filters/geo_distance_range_filter'
29
30
  require 'daedal/filters/and_filter'
30
31
  require 'daedal/filters/or_filter'
31
32
  require 'daedal/filters/bool_filter'
@@ -0,0 +1,55 @@
1
+ module Daedal
2
+ module Filters
3
+ """Class for the geo filter with range abilities"""
4
+ class GeoDistanceRangeFilter < Filter
5
+ POSSIBLE_COMPARE_OPTIONS = %i(gte gt lte lt)
6
+
7
+ # required attributes
8
+ attribute :field, Daedal::Attributes::Field
9
+ attribute :lat, Float
10
+ attribute :lon, Float
11
+
12
+ # non required attributes
13
+ attribute :unit, Daedal::Attributes::DistanceUnit, default: 'km'
14
+ POSSIBLE_COMPARE_OPTIONS.each do |possible_compare|
15
+ attribute possible_compare, Daedal::Attributes::QueryValue, required: false
16
+ end
17
+
18
+ def initialize(options={})
19
+ super options
20
+ validate_compare_options(options)
21
+ end
22
+
23
+ def to_hash
24
+ {
25
+ geo_distance_range: {
26
+ field => {
27
+ lat: lat,
28
+ lon: lon
29
+ }
30
+ }.merge(compare_options)
31
+ }
32
+ end
33
+
34
+ private
35
+
36
+ def compare_options
37
+ POSSIBLE_COMPARE_OPTIONS.each_with_object({}) do |compare_option, compare_options|
38
+ compare_options[compare_option] = decorate_distance(attributes[compare_option]) if attributes[compare_option]
39
+ end
40
+ end
41
+
42
+ def decorate_distance(distance)
43
+ "#{distance}#{unit}"
44
+ end
45
+
46
+ def validate_compare_options(options)
47
+ if options.values_at(*POSSIBLE_COMPARE_OPTIONS).compact.empty?
48
+ raise 'Must give at least one of gte, gt, lt, or lte'
49
+ end
50
+ raise 'gte & gt are not valid together' if gte && gt
51
+ raise 'gte & gt are not valid together' if lte && lt
52
+ end
53
+ end
54
+ end
55
+ end
@@ -23,11 +23,10 @@ module Daedal
23
23
 
24
24
  def to_hash
25
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} }
26
+ inner_result.merge!(boost: boost) if boost
29
27
 
28
+ {range: {field => inner_result} }
30
29
  end
31
30
  end
32
31
  end
33
- end
32
+ end
@@ -1,3 +1,3 @@
1
1
  module Daedal
2
- VERSION = '0.0.14'
3
- end
2
+ VERSION = '0.0.15'
3
+ end
@@ -0,0 +1,110 @@
1
+ require 'spec_helper'
2
+
3
+ describe Daedal::Filters::GeoDistanceRangeFilter do
4
+
5
+ subject do
6
+ Daedal::Filters::GeoDistanceRangeFilter
7
+ end
8
+
9
+ context 'without a field specified' do
10
+ it 'will raise an error' do
11
+ expect{subject.new(lat: 10, lon: 30, gte: 5)}.to raise_error(Virtus::CoercionError)
12
+ end
13
+ end
14
+
15
+ context 'without a compare options specified' do
16
+ it 'will raise an error' do
17
+ expect{subject.new(field: :location, lat: 10, lon: 30)}.to raise_error
18
+ end
19
+ end
20
+
21
+ context 'without a lat specified' do
22
+ it 'will raise an error' do
23
+ expect{subject.new(field: :location, gte: 5, lon: 30)}.to raise_error(Virtus::CoercionError)
24
+ end
25
+ end
26
+
27
+ context 'without a lon specified' do
28
+ it 'will raise an error' do
29
+ expect{subject.new(field: :location, lat: 10, gte: 5)}.to raise_error(Virtus::CoercionError)
30
+ end
31
+ end
32
+
33
+ context 'with an invalid unit specified' do
34
+ it 'will raise an error' do
35
+ expect{subject.new(field: :test, gte: 5, lat: 10, lon: 30, unit: 'test')}.to raise_error(Virtus::CoercionError)
36
+ end
37
+ end
38
+
39
+ context 'with an invalid lat specified' do
40
+ it 'will raise an error' do
41
+ expect{subject.new(field: :location, gte: 5, lat: 'test', lon: 30)}.to raise_error(Virtus::CoercionError)
42
+ end
43
+ end
44
+
45
+ context 'with an invalid lon specified' do
46
+ it 'will raise an error' do
47
+ expect{subject.new(field: :location, gte: 5, lat: 10, lon: 'test')}.to raise_error(Virtus::CoercionError)
48
+ end
49
+ end
50
+
51
+ context 'with wrong compare options' do
52
+ it 'will raise error with less than or equal to + less than compare' do
53
+ expect{subject.new(field: :test, lat: 10, lon: 30, lte: 5, lt: 5)}.to raise_error
54
+ end
55
+
56
+ it 'will raise error with more than or equal to + more than compare' do
57
+ expect{subject.new(field: :test, lat: 10, lon: 30, gte: 5, gt: 5)}.to raise_error
58
+ end
59
+ end
60
+
61
+ context 'with all attributes' do
62
+ let(:filter) do
63
+ subject.new(field: :location, lat: 10, lon: 30, gte: 1, lte: 2)
64
+ end
65
+
66
+ let(:filter_hash) do
67
+ {
68
+ geo_distance_range: {
69
+ gte: '1km',
70
+ lte: '2km',
71
+ location: {
72
+ lat: 10,
73
+ lon: 30
74
+ }
75
+ }
76
+ }
77
+ end
78
+
79
+ it 'will have correct filter hash' do
80
+ expect(filter.to_hash).to eq filter_hash
81
+ end
82
+
83
+ it 'will use km as the default unit' do
84
+ expect(filter.unit).to eq 'km'
85
+ end
86
+ end
87
+
88
+ context 'with miles as unit' do
89
+ let(:filter) do
90
+ subject.new(field: :location, lat: 10, lon: 30, gte: 1, lte: 2, unit: 'mi')
91
+ end
92
+
93
+ let(:filter_hash) do
94
+ {
95
+ geo_distance_range: {
96
+ gte: '1mi',
97
+ lte: '2mi',
98
+ location: {
99
+ lat: 10,
100
+ lon: 30
101
+ }
102
+ }
103
+ }
104
+ end
105
+
106
+ it 'should be possible to specify miles' do
107
+ expect(filter.to_hash).to eq filter_hash
108
+ end
109
+ end
110
+ end
@@ -64,7 +64,7 @@ describe Daedal::Queries::RangeQuery do
64
64
  context 'with field, boost and one or more minimum attribute' do
65
65
  let(:params) { { field: field, boost: boost }.merge(attr_hash) }
66
66
  let(:query) { subject.new(params) }
67
- let(:hash_query) { { range: { field => attr_hash } } }
67
+ let(:hash_query) { { range: { field => attr_hash.merge(boost: boost) } } }
68
68
  it "will not raise an error when only #{attrs.join(', ')} is specified" do
69
69
  expect { query }.to_not raise_error
70
70
  end
@@ -84,4 +84,4 @@ describe Daedal::Queries::RangeQuery do
84
84
  it_behaves_like "range query with minimum attributes", attrs
85
85
  end
86
86
  end
87
- end
87
+ end
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: daedal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.14
4
+ version: 0.0.15
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-30 00:00:00.000000000 Z
11
+ date: 2015-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: virtus
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.0.0
27
27
  description: Classes for easier ElasticSearch query creation
@@ -30,9 +30,9 @@ executables: []
30
30
  extensions: []
31
31
  extra_rdoc_files: []
32
32
  files:
33
- - ".gitignore"
34
- - ".rspec"
35
- - ".travis.yml"
33
+ - .gitignore
34
+ - .rspec
35
+ - .travis.yml
36
36
  - Gemfile
37
37
  - Gemfile.lock
38
38
  - Guardfile
@@ -59,6 +59,7 @@ files:
59
59
  - lib/daedal/filters/exists_filter.rb
60
60
  - lib/daedal/filters/filter.rb
61
61
  - lib/daedal/filters/geo_distance_filter.rb
62
+ - lib/daedal/filters/geo_distance_range_filter.rb
62
63
  - lib/daedal/filters/nested_filter.rb
63
64
  - lib/daedal/filters/or_filter.rb
64
65
  - lib/daedal/filters/range_filter.rb
@@ -85,6 +86,7 @@ files:
85
86
  - spec/unit/daedal/filters/bool_filter_spec.rb
86
87
  - spec/unit/daedal/filters/exists_filter_spec.rb
87
88
  - spec/unit/daedal/filters/geo_distance_filter_spec.rb
89
+ - spec/unit/daedal/filters/geo_distance_range_filter_spec.rb
88
90
  - spec/unit/daedal/filters/nested_filter_spec.rb
89
91
  - spec/unit/daedal/filters/or_filter_spec.rb
90
92
  - spec/unit/daedal/filters/range_filter_spec.rb
@@ -114,19 +116,18 @@ require_paths:
114
116
  - lib
115
117
  required_ruby_version: !ruby/object:Gem::Requirement
116
118
  requirements:
117
- - - ">="
119
+ - - '>='
118
120
  - !ruby/object:Gem::Version
119
121
  version: '0'
120
122
  required_rubygems_version: !ruby/object:Gem::Requirement
121
123
  requirements:
122
- - - ">="
124
+ - - '>='
123
125
  - !ruby/object:Gem::Version
124
126
  version: '0'
125
127
  requirements: []
126
128
  rubyforge_project:
127
- rubygems_version: 2.2.2
129
+ rubygems_version: 2.0.6
128
130
  signing_key:
129
131
  specification_version: 4
130
132
  summary: ElasticSearch Query DSL Builders
131
133
  test_files: []
132
- has_rdoc: