stretchy 0.3.1 → 0.3.2

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