elasticquerybuilder 0.1.5 → 0.2.0

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
  SHA256:
3
- metadata.gz: b04560361a0f7240549b8803c1b3bc611f18ed6eddbdabd83a4f8e7c72a61438
4
- data.tar.gz: c8cf3274aba46e51720430b4af10ed42d4d8c0d6bbe3218831781b1320c8ab7b
3
+ metadata.gz: ced73c82a31289251a18b233d55a2368fc975e97425d6d7b64ffe177e943dd40
4
+ data.tar.gz: 2c824aca2bf7afa316cd7eb8b3b59144013e8a8faab0ff32bf7a60fa3fa8c7c8
5
5
  SHA512:
6
- metadata.gz: f0cf96c3b0036b32ceb0d9c97a2d8d808f019a4794271faef0f171aca85eb9bd1e416b6e259fb23b4efd5e18cbe8da8d0745f8987a48cee348e2e6dd0823b1b2
7
- data.tar.gz: 0ca2a8eef82e9dda91b3dcfa2955fbf9f295e638f2387f2751d9501fc24139ee7dd1d80c4b07738591e8f510a71a5a190921250caa84e5c118384e7574431898
6
+ metadata.gz: f25d3d51c86afd77c1e9f45fa631c7d5d5973c91437423f2ed8835f8ae555600a9b44a060ef56a1ad5e5b1bfe7d733f87773adfa23bb0abf8ab9b5be9b627397
7
+ data.tar.gz: 791a543fa6b589e539ba584c3abd3fffb9e567b4487d0936c8eed2f755955d10df137c8c738061b5490065bec19da2cfbc4558ecb17e8c64dc54bc5a09ccaa69
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- elasticquerybuilder (0.0.1)
4
+ elasticquerybuilder (0.2.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
Binary file
Binary file
@@ -1,137 +1,42 @@
1
1
  require 'elasticquerybuilder/version'
2
+ require 'elasticquerybuilder/modals'
2
3
 
3
4
  module ElasticQueryBuilder
5
+ # main class that generates elastic criteria
4
6
  class Engine
5
7
  attr_reader :criteria
6
8
  def initialize
7
9
  @criteria = { query: {} }
8
- @keyword = ''
10
+ @modal = ''
9
11
  end
10
12
 
11
13
  # opts = [{field,value,operation},{field,value,operation}]
12
14
  def must
13
- @keyword = 'must'
15
+ @modal = ElasticQueryBuilder::Modals.must
14
16
  self
15
17
  end
16
18
 
19
+ # used for matching strings
17
20
  def term(opts)
18
- term = {}
19
- prev = @keyword.to_sym
20
- if @criteria[:query].include? :bool
21
- @criteria[:query][:bool][prev] = [] unless @criteria[:query][:bool].include? prev
22
- bool_query = true
23
- else
24
- bool_query = false
25
- @criteria[:query] = []
26
- end
27
- opts.each do |option, _value|
28
- val = option[:value]
29
- term[option[:field]] = val
30
- end
31
- if bool_query
32
- @criteria[:query][:bool][prev].push(term: term)
33
- else
34
- if opts.count > 1
35
- @criteria[:query].push(term: term)
36
- else
37
- @criteria[:query] = { term: {} }
38
- @criteria[:query][:term] = term
39
- end
40
- end
41
- self
21
+ setup_query('term', opts)
42
22
  end
43
23
 
44
- def terms(opts)
45
- term = {}
46
- prev = @keyword.to_sym
47
- if @criteria[:query].include? :bool
48
- @criteria[:query][:bool][prev] = [] unless @criteria[:query][:bool].include? prev
49
- bool_query = true
50
- else
51
- bool_query = false
52
- @criteria[:query] = []
53
- end
54
- opts.each do |option, _value|
55
- val = handle_operation('in', option[:value])
56
- term[option[:field]] = val
57
- end
58
- if bool_query
59
- @criteria[:query][:bool][prev].push(terms: term)
60
- else
61
- if opts.count > 1
62
- @criteria[:query].push(terms: term)
63
- else
64
- @criteria[:query] = { terms: {} }
65
- @criteria[:query][:terms] = term
66
- end
67
- end
68
- self
24
+ # used for matching a value within an array
25
+ def terms(opts, default_operator = 'in')
26
+ setup_query('terms', opts, default_operator)
69
27
  end
70
28
 
71
- def wildcard(opts)
72
- wildcard = {}
73
- prev = @keyword.to_sym
74
- if @criteria[:query].include? :bool
75
- @criteria[:query][:bool][prev] = [] unless @criteria[:query][:bool].include? prev
76
- bool_query = true
77
- else
78
- bool_query = false
79
- @criteria[:query] = []
80
- end
81
- opts.each do |option, _value|
82
- val = if !option.include? :operation
83
- option[:value]
84
- else
85
- handle_operation(option[:operation], option[:value])
86
- end
87
- wildcard[option[:field]] = val
88
- end
89
- if bool_query
90
- @criteria[:query][:bool][prev].push(wildcard: wildcard)
91
- else
92
- if opts.count > 1
93
- @criteria[:query].push(wildcard: wildcard)
94
- else
95
- @criteria[:query] = { wildcard: {} }
96
- @criteria[:query][:wildcard] = wildcard
97
- end
98
- end
99
- self
29
+ # used for wildcards. supports whole wildcard, left and right matching
30
+ def wildcard(opts, default_operator = 'wildcard')
31
+ setup_query('wildcard', opts, default_operator)
100
32
  end
101
33
 
102
- def match_on_single_field(opts)
103
- match = {}
104
- prev = @keyword.to_sym
105
- if @criteria[:query].include? :bool
106
- @criteria[:query][:bool][prev] = [] unless @criteria[:query][:bool].include? prev
107
- bool_query = true
108
- else
109
- bool_query = false
110
- @criteria[:query] = []
111
- end
112
- opts.each do |option, _value|
113
- val = if !option.include? :operation
114
- option[:value]
115
- else
116
- handle_operation(option[:operation], option[:value])
117
- end
118
- match[option[:field]] = val
119
- end
120
- if bool_query
121
- @criteria[:query][:bool][prev].push(match: match)
122
- else
123
- if opts.count > 1
124
- @criteria[:query].push(match: match)
125
- else
126
- @criteria[:query] = { match: {} }
127
- @criteria[:query][:match] = match
128
- end
129
- end
130
- self
34
+ def single_match(opts)
35
+ setup_query('match', opts)
131
36
  end
132
37
 
133
38
  def should
134
- @keyword = 'should'
39
+ @modal = ElasticQueryBuilder::Modals.should
135
40
  self
136
41
  end
137
42
 
@@ -140,21 +45,59 @@ module ElasticQueryBuilder
140
45
  self
141
46
  end
142
47
 
143
- # TODO: single wildcard or match not in bool clause
144
- # commit when should and must combination working
145
- # provide to_searchkick method which allows a formatted criteria to be sent through a relevant model
146
- # push version 0.05 to rubygems
147
-
148
48
  private
149
49
 
150
50
  def handle_operation(operation, value)
151
51
  case operation
152
- when 'eq' then ''
52
+ when 'eq' then value
153
53
  when 'in' then value.split(',').map(&:to_i)
154
54
  when 'wildcard-left' then '*' + value
155
55
  when 'wildcard-right' then value + '*'
156
56
  when 'wildcard' then '*' + value + '*'
157
57
  end
158
58
  end
59
+
60
+ def populate_data(opts, default_operator)
61
+ data = {}
62
+ opts.each do |option, _value|
63
+ val = if !option.include? :operation
64
+ handle_operation(default_operator, option[:value])
65
+ else
66
+ handle_operation(option[:operation], option[:value])
67
+ end
68
+ data[option[:field]] = val
69
+ end
70
+ data
71
+ end
72
+
73
+ def setup_query(key, opts, default_operator = 'eq')
74
+ prev = @modal.to_sym
75
+ formulate_query_structure(prev, key, opts, default_operator)
76
+ self
77
+ end
78
+
79
+ def formulate_query_structure(prev, key, opts, default_operator)
80
+ if @criteria[:query].include? :bool
81
+ @criteria[:query][:bool][prev] = [] unless @criteria[:query][:bool].include? prev
82
+ bool_query = true
83
+ else
84
+ bool_query = false
85
+ @criteria[:query] = []
86
+ end
87
+ after_formulate_query_structure(prev, bool_query, key, opts, default_operator)
88
+ end
89
+
90
+ def after_formulate_query_structure(prev, bool_query, key, opts, default_operator)
91
+ data = populate_data(opts, default_operator)
92
+ if bool_query
93
+ @criteria[:query][:bool][prev].push(key.to_sym => data)
94
+ elsif opts.count > 1
95
+ @criteria[:query].push(key.to_sym => data)
96
+ else
97
+ @criteria[:query] = { key.to_sym => {} }
98
+ @criteria[:query][key.to_sym] = data
99
+ end
100
+ bool_query
101
+ end
159
102
  end
160
103
  end
@@ -0,0 +1,14 @@
1
+ require 'elasticquerybuilder/version'
2
+
3
+ module ElasticQueryBuilder
4
+ # main class that generates elastic criteria
5
+ class Modals
6
+ def self.must
7
+ 'must'
8
+ end
9
+
10
+ def self.should
11
+ 'should'
12
+ end
13
+ end
14
+ end
@@ -1,3 +1,3 @@
1
1
  module ElasticQueryBuilder
2
- VERSION = '0.1.5'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elasticquerybuilder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Comms365
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-15 00:00:00.000000000 Z
11
+ date: 2018-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -71,8 +71,11 @@ files:
71
71
  - Rakefile
72
72
  - bin/console
73
73
  - bin/setup
74
+ - elasticquerybuilder-0.0.1.gem
75
+ - elasticquerybuilder-0.1.5.gem
74
76
  - elasticquerybuilder.gemspec
75
77
  - lib/elasticquerybuilder.rb
78
+ - lib/elasticquerybuilder/modals.rb
76
79
  - lib/elasticquerybuilder/version.rb
77
80
  homepage: https://github.com/comms365/elasticquerybuilder/
78
81
  licenses: