stretchy 0.3.1 → 0.3.2

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: 0a7be2bbcc9690d42a0a9ca01601b4936b52dcf2
4
- data.tar.gz: a53b3d3201f42f90f807324ec96b6d1049a4037c
3
+ metadata.gz: ea071c20b4f06728acea83eb37c8860235929310
4
+ data.tar.gz: 288665ba972b8c684e8a48ef1b7fd5d22761864a
5
5
  SHA512:
6
- metadata.gz: 1171e1dfe7ce1255a911bdd471d6c40aab58b1fa90ba88016d4dff49d0e463effcf9b1194d7e9470d3186e40905ffc7aca941c32a1c45458231aa2376c6993b1
7
- data.tar.gz: 731cd339625a1a8ffbd398066d751a5424831f5f210eed1dd6ecd152cc27e93424042c8ad7da7d851858899c2b4cb05093382e1a41885dca4e3981949daee182
6
+ metadata.gz: b46df2375ccceabc416f34bd71d51f7340d00395b63d2107a030dfc0f5fe951f0b696029ada4101ff3a65ac85210b4c95bbca78452e8d1fc32f944a76dd88f69
7
+ data.tar.gz: 8df428f03c7bb2b559fca8b1f522ef8e125ebadf830bf3ea7d327edae9b52eb4a7f2b6b092af3dbf75a6133694d8d12653792df0e21cf235212ce31b585cacf1
@@ -27,10 +27,12 @@ module Stretchy
27
27
  end
28
28
 
29
29
  def to_search
30
- json = {
31
- origin: @origin,
32
- scale: @scale,
33
- }
30
+ json = {scale: @scale}
31
+ if @origin.is_a?(Stretchy::Types::Base)
32
+ json[:origin] = @origin.to_search
33
+ else
34
+ json[:origin] = @origin
35
+ end
34
36
  json[:offset] = @offset if @offset
35
37
  json[:decay] = @decay if @decay
36
38
 
@@ -2,13 +2,23 @@ module Stretchy
2
2
  module Builders
3
3
  class MatchBuilder
4
4
 
5
- attr_accessor :matches, :antimatches, :shouldmatches, :shouldnotmatches
5
+ attr_accessor :matches, :matchops,
6
+ :antimatches, :antimatchops,
7
+ :shouldmatches, :shouldmatchops,
8
+ :shouldnotmatches, :shouldnotmatchops
6
9
 
7
10
  def initialize
8
- @matches = Hash.new { [] }
9
- @antimatches = Hash.new { [] }
10
- @shouldmatches = Hash.new { [] }
11
- @shouldnotmatches = Hash.new { [] }
11
+ @matches = Hash.new { [] }
12
+ @matchops = Hash.new { 'and' }
13
+
14
+ @antimatches = Hash.new { [] }
15
+ @antimatchops = Hash.new { 'and' }
16
+
17
+ @shouldmatches = Hash.new { [] }
18
+ @shouldmatchops = Hash.new { 'and' }
19
+
20
+ @shouldnotmatches = Hash.new { [] }
21
+ @shouldnotmatchops = Hash.new { 'and' }
12
22
  end
13
23
 
14
24
  def any?
@@ -23,15 +33,14 @@ module Stretchy
23
33
 
24
34
  bool_query
25
35
  else
26
- field, strings = @matches.first
27
- Stretchy::Queries::MatchQuery.new(field: field, string: strings.join(' '))
36
+ to_queries(@matches, @matchops).first
28
37
  end
29
38
  end
30
39
 
31
40
  def bool_query
32
41
  Stretchy::Queries::BoolQuery.new(
33
- must: to_queries(@matches),
34
- must_not: to_queries(@antimatches),
42
+ must: to_queries(@matches, @matchops),
43
+ must_not: to_queries(@antimatches, @antimatchops),
35
44
  should: build_should
36
45
  )
37
46
  end
@@ -39,19 +48,23 @@ module Stretchy
39
48
  def build_should
40
49
  if @shouldnotmatches.any?
41
50
  Stretchy::Queries::BoolQuery.new(
42
- must: to_queries(@shouldmatches),
43
- must_not: to_queries(@shouldnotmatches)
51
+ must: to_queries(@shouldmatches, @shouldmatchops),
52
+ must_not: to_queries(@shouldnotmatches, @shouldnotmatchops)
44
53
  )
45
54
  else
46
- to_queries(@shouldmatches)
55
+ to_queries(@shouldmatches, @shouldmatchops)
47
56
  end
48
57
  end
49
58
 
50
59
  private
51
60
 
52
- def to_queries(matches)
61
+ def to_queries(matches, operators)
53
62
  matches.map do |field, strings|
54
- Stretchy::Queries::MatchQuery.new(field: field, string: strings.join(' '))
63
+ Stretchy::Queries::MatchQuery.new(
64
+ field: field,
65
+ string: strings.join(' '),
66
+ operator: operators[field]
67
+ )
55
68
  end
56
69
  end
57
70
 
@@ -167,7 +167,9 @@ module Stretchy
167
167
  near_fields = Hash(options[:near_fields])
168
168
  exists = Array(options[:exists])
169
169
 
170
- filters << Stretchy::Filters::TermsFilter.new(terms) if terms.any?
170
+ terms.each do |field, values|
171
+ filters << Stretchy::Filters::TermsFilter.new(field, values)
172
+ end
171
173
 
172
174
  filters += exists.map do |field|
173
175
  Stretchy::Filters::ExistsFilter.new(field)
@@ -10,7 +10,8 @@ module Stretchy
10
10
  attr_accessor :match_builder, :where_builder, :boost_builder,
11
11
  :aggregate_builder, :inverse, :type, :index_name
12
12
 
13
- delegate [:response, :results, :ids, :hits, :took, :shards, :total, :max_score] => :query_results
13
+ delegate [:request, :response, :results, :ids, :hits,
14
+ :took, :shards, :total, :max_score] => :query_results
14
15
  delegate [:range, :geo] => :where
15
16
 
16
17
  def initialize(base_or_opts = nil, options = {})
@@ -60,10 +61,12 @@ module Stretchy
60
61
  def match(options = {})
61
62
  MatchClause.new(self, options)
62
63
  end
64
+ alias :fulltext :match
63
65
 
64
66
  def where(options = {})
65
67
  WhereClause.new(self, options)
66
68
  end
69
+ alias :filter :where
67
70
 
68
71
  def boost(options = {})
69
72
  BoostClause.new(self, options)
@@ -106,7 +109,7 @@ module Stretchy
106
109
  end
107
110
 
108
111
  def query_results
109
- @query_results ||= Stretchy::Results::Base.new(to_search.merge(from: @limit, size: @offset), type: @type)
112
+ @query_results ||= Stretchy::Results::Base.new(self)
110
113
  end
111
114
 
112
115
  end
@@ -16,10 +16,12 @@ module Stretchy
16
16
  def match(options = {})
17
17
  BoostMatchClause.new(self, options)
18
18
  end
19
+ alias :fulltext :match
19
20
 
20
21
  def where(options = {})
21
22
  BoostWhereClause.new(self, options)
22
23
  end
24
+ alias :filter :where
23
25
 
24
26
  def near(options = {})
25
27
  if options[:lat] || options[:latitude] ||
@@ -4,6 +4,8 @@ module Stretchy
4
4
  module Clauses
5
5
  class BoostMatchClause < BoostClause
6
6
 
7
+ delegate [:range, :geo] => :where
8
+
7
9
  def initialize(base, opts_or_string = {}, options = {})
8
10
  super(base)
9
11
  if opts_or_string.is_a?(Hash)
@@ -19,6 +21,14 @@ module Stretchy
19
21
  self.class.new(self, opts_or_string, options.merge(inverse: !inverse?))
20
22
  end
21
23
 
24
+ def where(*args)
25
+ WhereClause.new(self, *args)
26
+ end
27
+
28
+ def match(*args)
29
+ MatchClause.new(self, *args)
30
+ end
31
+
22
32
  private
23
33
 
24
34
  def match_function(options = {})
@@ -10,14 +10,22 @@ module Stretchy
10
10
  self
11
11
  end
12
12
 
13
+ def where(*args)
14
+ WhereClause.new(self, *args)
15
+ end
16
+
17
+ def match(*args)
18
+ MatchClause.new(self, *args)
19
+ end
20
+
13
21
  def range(*args)
14
22
  where_function(:range, *args)
15
- self
23
+ Base.new(self)
16
24
  end
17
25
 
18
26
  def geo(*args)
19
27
  where_function(:geo, *args)
20
- self
28
+ Base.new(self)
21
29
  end
22
30
 
23
31
  private
@@ -112,6 +112,7 @@ module Stretchy
112
112
  get_storage(:exists, true) << field
113
113
  when String, Symbol
114
114
  get_storage(:matches)[field] += Array(param)
115
+ get_storage(:matchops)[field] = 'or'
115
116
  when Range
116
117
  get_storage(:ranges)[field] = Stretchy::Types::Range.new(param)
117
118
  else
@@ -5,27 +5,19 @@ module Stretchy
5
5
  class TermsFilter < Base
6
6
 
7
7
  contract field: {type: :field, required: true},
8
- values: {type: Array, required: true}
8
+ terms: {type: [Numeric, Time, String, Symbol], array: true, required: true}
9
9
 
10
- def initialize(field_or_opts = {}, terms = [])
11
- if field_or_opts.is_a?(Hash)
12
- @terms = field_or_opts
13
- else
14
- @terms = { field_or_opts => Array(terms) }
15
- end
16
- validate_terms!
17
- end
18
-
19
- def validate_terms!
20
- exc = Stretchy::Errors::ContractError.new("Terms cannot be blank")
21
- raise exc if @terms.none? || @terms.any? do |field, terms|
22
- terms.none?
23
- end
10
+ def initialize(field, terms)
11
+ @field = field
12
+ @terms = Array(terms)
13
+ validate!
24
14
  end
25
15
 
26
16
  def to_search
27
17
  {
28
- terms: @terms
18
+ terms: {
19
+ @field => @terms
20
+ }
29
21
  }
30
22
  end
31
23
  end
@@ -1,3 +1,3 @@
1
1
  module Stretchy
2
- VERSION = "0.3.1"
2
+ VERSION = "0.3.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stretchy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - agius
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-05-11 00:00:00.000000000 Z
11
+ date: 2015-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: elasticsearch