esse 0.2.0 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/esse/cli/event_listener.rb +13 -0
- data/lib/esse/cli/generate.rb +53 -14
- data/lib/esse/cli/index/base_operation.rb +5 -13
- data/lib/esse/cli/index/close.rb +1 -1
- data/lib/esse/cli/index/create.rb +1 -1
- data/lib/esse/cli/index/delete.rb +1 -1
- data/lib/esse/cli/index/import.rb +6 -2
- data/lib/esse/cli/index/open.rb +1 -1
- data/lib/esse/cli/index/reset.rb +1 -1
- data/lib/esse/cli/index/update_aliases.rb +2 -2
- data/lib/esse/cli/index/update_mapping.rb +9 -5
- data/lib/esse/cli/index/update_settings.rb +1 -1
- data/lib/esse/cli/index.rb +11 -4
- data/lib/esse/cli/templates/collection.rb.erb +29 -0
- data/lib/esse/cli/templates/config.rb.erb +13 -3
- data/lib/esse/cli/templates/document.rb.erb +34 -0
- data/lib/esse/cli/templates/index.rb.erb +63 -114
- data/lib/esse/cli/templates/mappings.json +27 -0
- data/lib/esse/cli/templates/settings.json +62 -0
- data/lib/esse/cli.rb +5 -0
- data/lib/esse/cluster.rb +93 -12
- data/lib/esse/cluster_engine.rb +42 -0
- data/lib/esse/collection.rb +18 -0
- data/lib/esse/config.rb +14 -2
- data/lib/esse/core.rb +28 -7
- data/lib/esse/deprecations/cluster.rb +27 -0
- data/lib/esse/deprecations/deprecate.rb +29 -0
- data/lib/esse/deprecations/index.rb +37 -0
- data/lib/esse/deprecations/index_backend_delegator.rb +217 -0
- data/lib/esse/deprecations/repository.rb +34 -0
- data/lib/esse/deprecations/repository_backend_delegator.rb +110 -0
- data/lib/esse/deprecations/serializer.rb +14 -0
- data/lib/esse/deprecations.rb +7 -0
- data/lib/esse/document.rb +91 -0
- data/lib/esse/dynamic_template.rb +43 -0
- data/lib/esse/errors.rb +60 -2
- data/lib/esse/events/event.rb +4 -19
- data/lib/esse/events.rb +13 -2
- data/lib/esse/hash_document.rb +38 -0
- data/lib/esse/import/bulk.rb +106 -0
- data/lib/esse/import/request_body.rb +60 -0
- data/lib/esse/index/aliases.rb +50 -0
- data/lib/esse/index/attributes.rb +107 -0
- data/lib/esse/index/base.rb +17 -53
- data/lib/esse/index/documents.rb +236 -0
- data/lib/esse/index/indices.rb +171 -0
- data/lib/esse/index/inheritance.rb +30 -0
- data/lib/esse/index/mappings.rb +6 -19
- data/lib/esse/index/object_document_mapper.rb +36 -0
- data/lib/esse/index/plugins.rb +42 -0
- data/lib/esse/index/search.rb +27 -0
- data/lib/esse/index/settings.rb +2 -2
- data/lib/esse/index/type.rb +51 -11
- data/lib/esse/index.rb +14 -9
- data/lib/esse/index_mapping.rb +10 -2
- data/lib/esse/index_setting.rb +3 -1
- data/lib/esse/null_document.rb +35 -0
- data/lib/esse/plugins.rb +12 -0
- data/lib/esse/primitives/hstring.rb +1 -1
- data/lib/esse/{index_type → repository}/actions.rb +1 -1
- data/lib/esse/repository/documents.rb +13 -0
- data/lib/esse/repository/object_document_mapper.rb +157 -0
- data/lib/esse/repository.rb +17 -0
- data/lib/esse/search/query.rb +105 -0
- data/lib/esse/search/response.rb +46 -0
- data/lib/esse/template_loader.rb +1 -1
- data/lib/esse/transport/aliases.rb +36 -0
- data/lib/esse/transport/documents.rb +199 -0
- data/lib/esse/transport/health.rb +30 -0
- data/lib/esse/transport/indices.rb +192 -0
- data/lib/esse/transport/search.rb +48 -0
- data/lib/esse/transport.rb +44 -0
- data/lib/esse/version.rb +1 -1
- data/lib/esse.rb +20 -5
- metadata +55 -50
- data/lib/esse/backend/index/aliases.rb +0 -73
- data/lib/esse/backend/index/close.rb +0 -54
- data/lib/esse/backend/index/create.rb +0 -67
- data/lib/esse/backend/index/delete.rb +0 -39
- data/lib/esse/backend/index/documents.rb +0 -23
- data/lib/esse/backend/index/existance.rb +0 -22
- data/lib/esse/backend/index/open.rb +0 -54
- data/lib/esse/backend/index/refresh.rb +0 -43
- data/lib/esse/backend/index/reset.rb +0 -33
- data/lib/esse/backend/index/update.rb +0 -143
- data/lib/esse/backend/index.rb +0 -54
- data/lib/esse/backend/index_type/documents.rb +0 -214
- data/lib/esse/backend/index_type.rb +0 -37
- data/lib/esse/cli/templates/type_collection.rb.erb +0 -41
- data/lib/esse/cli/templates/type_mappings.json +0 -6
- data/lib/esse/cli/templates/type_serializer.rb.erb +0 -23
- data/lib/esse/index/backend.rb +0 -14
- data/lib/esse/index/naming.rb +0 -64
- data/lib/esse/index_type/backend.rb +0 -14
- data/lib/esse/index_type/mappings.rb +0 -42
- data/lib/esse/index_type.rb +0 -15
- data/lib/esse/object_document_mapper.rb +0 -110
@@ -0,0 +1,217 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Esse
|
4
|
+
module Deprecations
|
5
|
+
class IndexBackendDelegator
|
6
|
+
extend Esse::Deprecations::Deprecate
|
7
|
+
|
8
|
+
def initialize(namespace, index)
|
9
|
+
@namespace = namespace
|
10
|
+
@index = index
|
11
|
+
end
|
12
|
+
|
13
|
+
def aliases(**kwargs)
|
14
|
+
warning("#{@index}.#{@namespace}.aliases", "#{@index}.aliases", 2023, 12)
|
15
|
+
@index.aliases(**kwargs)
|
16
|
+
end
|
17
|
+
|
18
|
+
def indices(**kwargs)
|
19
|
+
warning("#{@index}.#{@namespace}.indices", "#{@index}.indices_pointing_to_alias", 2023, 12)
|
20
|
+
@index.indices_pointing_to_alias(**kwargs)
|
21
|
+
end
|
22
|
+
|
23
|
+
def update_aliases!(**kwargs)
|
24
|
+
warning("#{@index}.#{@namespace}.update_aliases!", "#{@index}.update_aliases", 2023, 12)
|
25
|
+
@index.update_aliases(**kwargs)
|
26
|
+
end
|
27
|
+
|
28
|
+
def update_aliases(**kwargs)
|
29
|
+
warning("#{@index}.#{@namespace}.update_aliases", "#{@index}.update_aliases", 2023, 12)
|
30
|
+
|
31
|
+
@index.update_aliases(**kwargs)
|
32
|
+
rescue Esse::Transport::NotFoundError
|
33
|
+
{ 'errors' => true }
|
34
|
+
end
|
35
|
+
|
36
|
+
def create_index(**kwargs)
|
37
|
+
warning("#{@index}.#{@namespace}.create_index", "#{@index}.create_index", 2023, 12)
|
38
|
+
|
39
|
+
@index.create_index(**kwargs)
|
40
|
+
end
|
41
|
+
|
42
|
+
def create_index!(**kwargs)
|
43
|
+
warning("#{@index}.#{@namespace}.create_index!", "#{@index}.create_index", 2023, 12)
|
44
|
+
|
45
|
+
@index.create_index(**kwargs)
|
46
|
+
end
|
47
|
+
|
48
|
+
def close(**kwargs)
|
49
|
+
warning("#{@index}.#{@namespace}.close", "#{@index}.close", 2023, 12)
|
50
|
+
|
51
|
+
@index.close(**kwargs)
|
52
|
+
end
|
53
|
+
|
54
|
+
def close!(**kwargs)
|
55
|
+
warning("#{@index}.#{@namespace}.close!", "#{@index}.close", 2023, 12)
|
56
|
+
|
57
|
+
@index.close(**kwargs)
|
58
|
+
end
|
59
|
+
|
60
|
+
def open(**kwargs)
|
61
|
+
warning("#{@index}.#{@namespace}.open", "#{@index}.open", 2023, 12)
|
62
|
+
|
63
|
+
@index.open(**kwargs)
|
64
|
+
end
|
65
|
+
|
66
|
+
def open!(**kwargs)
|
67
|
+
warning("#{@index}.#{@namespace}.open!", "#{@index}.open", 2023, 12)
|
68
|
+
|
69
|
+
@index.open(**kwargs)
|
70
|
+
end
|
71
|
+
|
72
|
+
def refresh(**kwargs)
|
73
|
+
warning("#{@index}.#{@namespace}.refresh", "#{@index}.refresh", 2023, 12)
|
74
|
+
|
75
|
+
@index.refresh(**kwargs)
|
76
|
+
end
|
77
|
+
|
78
|
+
def refresh!(**kwargs)
|
79
|
+
warning("#{@index}.#{@namespace}.refresh!", "#{@index}.refresh", 2023, 12)
|
80
|
+
|
81
|
+
@index.refresh(**kwargs)
|
82
|
+
end
|
83
|
+
|
84
|
+
def delete_index(**kwargs)
|
85
|
+
warning("#{@index}.#{@namespace}.delete_index", "#{@index}.delete_index", 2023, 12)
|
86
|
+
|
87
|
+
@index.delete_index(**kwargs)
|
88
|
+
end
|
89
|
+
|
90
|
+
def delete_index!(**kwargs)
|
91
|
+
warning("#{@index}.#{@namespace}.delete_index!", "#{@index}.delete_index", 2023, 12)
|
92
|
+
|
93
|
+
@index.delete_index(**kwargs)
|
94
|
+
end
|
95
|
+
|
96
|
+
def index_exist?(**kwargs)
|
97
|
+
warning("#{@index}.#{@namespace}.index_exist?", "#{@index}.index_exist?", 2023, 12)
|
98
|
+
|
99
|
+
@index.index_exist?(**kwargs)
|
100
|
+
end
|
101
|
+
|
102
|
+
def update_mapping!(**kwargs)
|
103
|
+
warning("#{@index}.#{@namespace}.update_mapping!", "#{@index}.update_mapping", 2023, 12)
|
104
|
+
|
105
|
+
@index.update_mapping(**kwargs)
|
106
|
+
end
|
107
|
+
|
108
|
+
def update_mapping(**kwargs)
|
109
|
+
warning("#{@index}.#{@namespace}.update_mapping", "#{@index}.update_mapping", 2023, 12)
|
110
|
+
|
111
|
+
@index.update_mapping(**kwargs)
|
112
|
+
end
|
113
|
+
|
114
|
+
def update_settings!(**kwargs)
|
115
|
+
warning("#{@index}.#{@namespace}.update_settings!", "#{@index}.update_settings", 2023, 12)
|
116
|
+
|
117
|
+
@index.update_settings(**kwargs)
|
118
|
+
end
|
119
|
+
|
120
|
+
def update_settings(**kwargs)
|
121
|
+
warning("#{@index}.#{@namespace}.update_settings", "#{@index}.update_settings", 2023, 12)
|
122
|
+
|
123
|
+
@index.update_settings(**kwargs)
|
124
|
+
end
|
125
|
+
|
126
|
+
def reset_index!(**kwargs)
|
127
|
+
warning("#{@index}.#{@namespace}.reset_index!", "#{@index}.reset_index", 2023, 12)
|
128
|
+
|
129
|
+
@index.reset_index(**kwargs)
|
130
|
+
end
|
131
|
+
|
132
|
+
def import(**kwargs)
|
133
|
+
warning("#{@index}.#{@namespace}.import", "#{@index}.import", 2023, 12)
|
134
|
+
|
135
|
+
@index.import(**kwargs)
|
136
|
+
end
|
137
|
+
|
138
|
+
def import!(**kwargs)
|
139
|
+
warning("#{@index}.#{@namespace}.import!", "#{@index}.import", 2023, 12)
|
140
|
+
|
141
|
+
@index.import(**kwargs)
|
142
|
+
end
|
143
|
+
|
144
|
+
def bulk!(**kwargs)
|
145
|
+
warning("#{@index}.#{@namespace}.bulk!", "#{@index}.bulk", 2023, 12)
|
146
|
+
|
147
|
+
@index.bulk(**kwargs)
|
148
|
+
end
|
149
|
+
|
150
|
+
def bulk(**kwargs)
|
151
|
+
warning("#{@index}.#{@namespace}.bulk", "#{@index}.bulk", 2023, 12)
|
152
|
+
|
153
|
+
@index.bulk(**kwargs)
|
154
|
+
end
|
155
|
+
|
156
|
+
def index!(**kwargs)
|
157
|
+
warning("#{@index}.#{@namespace}.index!", "#{@index}.index", 2023, 12)
|
158
|
+
|
159
|
+
@index.index(**kwargs)
|
160
|
+
end
|
161
|
+
|
162
|
+
def index(**kwargs)
|
163
|
+
warning("#{@index}.#{@namespace}.index", "#{@index}.index", 2023, 12)
|
164
|
+
|
165
|
+
@index.index(**kwargs)
|
166
|
+
end
|
167
|
+
|
168
|
+
def update!(**kwargs)
|
169
|
+
warning("#{@index}.#{@namespace}.update!", "#{@index}.update", 2023, 12)
|
170
|
+
|
171
|
+
@index.update(**kwargs)
|
172
|
+
end
|
173
|
+
|
174
|
+
def update(**kwargs)
|
175
|
+
warning("#{@index}.#{@namespace}.update", "#{@index}.update", 2023, 12)
|
176
|
+
|
177
|
+
@index.update(**kwargs)
|
178
|
+
end
|
179
|
+
|
180
|
+
def delete!(**kwargs)
|
181
|
+
warning("#{@index}.#{@namespace}.delete!", "#{@index}.delete", 2023, 12)
|
182
|
+
|
183
|
+
@index.delete(**kwargs)
|
184
|
+
end
|
185
|
+
|
186
|
+
def delete(**kwargs)
|
187
|
+
warning("#{@index}.#{@namespace}.delete", "#{@index}.delete", 2023, 12)
|
188
|
+
|
189
|
+
@index.delete(**kwargs)
|
190
|
+
end
|
191
|
+
|
192
|
+
def count(**kwargs)
|
193
|
+
warning("#{@index}.#{@namespace}.count", "#{@index}.count", 2023, 12)
|
194
|
+
|
195
|
+
@index.count(**kwargs)
|
196
|
+
end
|
197
|
+
|
198
|
+
def exist?(**kwargs)
|
199
|
+
warning("#{@index}.#{@namespace}.exist?", "#{@index}.exist?", 2023, 12)
|
200
|
+
|
201
|
+
@index.exist?(**kwargs)
|
202
|
+
end
|
203
|
+
|
204
|
+
def find!(**kwargs)
|
205
|
+
warning("#{@index}.#{@namespace}.find!", "#{@index}.get", 2023, 12)
|
206
|
+
|
207
|
+
@index.get(**kwargs)
|
208
|
+
end
|
209
|
+
|
210
|
+
def find(**kwargs)
|
211
|
+
warning("#{@index}.#{@namespace}.find", "#{@index}.get", 2023, 12)
|
212
|
+
|
213
|
+
@index.get(**kwargs)
|
214
|
+
end
|
215
|
+
end
|
216
|
+
end
|
217
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Esse
|
4
|
+
class Repository
|
5
|
+
class << self
|
6
|
+
extend Esse::Deprecations::Deprecate
|
7
|
+
|
8
|
+
def type_name
|
9
|
+
repo_name
|
10
|
+
end
|
11
|
+
deprecate :type_name, :repo_type, 2023, 12
|
12
|
+
|
13
|
+
def mappings(*args, &block)
|
14
|
+
warning("#{self}.mappings", "#{index}.mappings", 2023, 12)
|
15
|
+
|
16
|
+
index.mappings(*args, &block)
|
17
|
+
end
|
18
|
+
|
19
|
+
def serializer(*args, **kwargs, &block)
|
20
|
+
warning("#{self}.serializer", "#{self}.document", 2023, 12)
|
21
|
+
|
22
|
+
document(*args, **kwargs, &block)
|
23
|
+
end
|
24
|
+
|
25
|
+
def elasticsearch
|
26
|
+
Esse::Deprecations::RepositoryBackendDelegator.new(:elasticsearch, self)
|
27
|
+
end
|
28
|
+
|
29
|
+
def backend
|
30
|
+
Esse::Deprecations::RepositoryBackendDelegator.new(:backend, self)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Esse
|
4
|
+
module Deprecations
|
5
|
+
class RepositoryBackendDelegator
|
6
|
+
extend Esse::Deprecations::Deprecate
|
7
|
+
|
8
|
+
def initialize(namespace, repo)
|
9
|
+
@namespace = namespace
|
10
|
+
@repo = repo
|
11
|
+
end
|
12
|
+
|
13
|
+
def import(**kwargs)
|
14
|
+
warning("#{@repo}.#{@namespace}.import", "#{@repo}.import", 2023, 12)
|
15
|
+
|
16
|
+
@repo.import(**kwargs)
|
17
|
+
end
|
18
|
+
|
19
|
+
def import!(**kwargs)
|
20
|
+
warning("#{@repo}.#{@namespace}.import!", "#{@repo}.import", 2023, 12)
|
21
|
+
|
22
|
+
@repo.import(**kwargs)
|
23
|
+
end
|
24
|
+
|
25
|
+
def bulk(**kwargs)
|
26
|
+
warning("#{@repo}.#{@namespace}.bulk", "#{@repo.index}.bulk", 2023, 12)
|
27
|
+
|
28
|
+
@repo.index.bulk(**kwargs)
|
29
|
+
end
|
30
|
+
|
31
|
+
def bulk!(**kwargs)
|
32
|
+
warning("#{@repo}.#{@namespace}.bulk!", "#{@repo.index}.bulk", 2023, 12)
|
33
|
+
|
34
|
+
@repo.index.bulk(**kwargs)
|
35
|
+
end
|
36
|
+
|
37
|
+
def index(**kwargs)
|
38
|
+
warning("#{@repo}.#{@namespace}.index", "#{@repo.index}.index", 2023, 12)
|
39
|
+
|
40
|
+
@repo.index.index(**kwargs)
|
41
|
+
end
|
42
|
+
|
43
|
+
def index!(**kwargs)
|
44
|
+
warning("#{@repo}.#{@namespace}.index!", "#{@repo.index}.index", 2023, 12)
|
45
|
+
|
46
|
+
@repo.index.index(**kwargs)
|
47
|
+
end
|
48
|
+
|
49
|
+
def index_document(*args, **kwargs)
|
50
|
+
warning("#{@repo}.#{@namespace}.index_document", "#{@repo.index}.index", 2023, 12)
|
51
|
+
|
52
|
+
@repo.index.index(*args, **kwargs)
|
53
|
+
end
|
54
|
+
|
55
|
+
def update!(**kwargs)
|
56
|
+
warning("#{@repo}.#{@namespace}.update!", "#{@repo.index}.update", 2023, 12)
|
57
|
+
|
58
|
+
@repo.index.update(**kwargs)
|
59
|
+
end
|
60
|
+
|
61
|
+
def update(**kwargs)
|
62
|
+
warning("#{@repo}.#{@namespace}.update", "#{@repo.index}.update", 2023, 12)
|
63
|
+
|
64
|
+
@repo.index.update(**kwargs)
|
65
|
+
end
|
66
|
+
|
67
|
+
def delete!(**kwargs)
|
68
|
+
warning("#{@repo}.#{@namespace}.delete!", "#{@repo.index}.delete", 2023, 12)
|
69
|
+
|
70
|
+
@repo.index.delete(**kwargs)
|
71
|
+
end
|
72
|
+
|
73
|
+
def delete(**kwargs)
|
74
|
+
warning("#{@repo}.#{@namespace}.delete", "#{@repo.index}.delete", 2023, 12)
|
75
|
+
|
76
|
+
@repo.index.delete(**kwargs)
|
77
|
+
end
|
78
|
+
|
79
|
+
def delete_document(*args, **kwargs)
|
80
|
+
warning("#{@repo}.#{@namespace}.delete_document", "#{@repo.index}.delete", 2023, 12)
|
81
|
+
|
82
|
+
@repo.index.delete(*args, **kwargs)
|
83
|
+
end
|
84
|
+
|
85
|
+
def count(**kwargs)
|
86
|
+
warning("#{@repo}.#{@namespace}.count", "#{@repo.index}.count", 2023, 12)
|
87
|
+
|
88
|
+
@repo.index.count(**kwargs)
|
89
|
+
end
|
90
|
+
|
91
|
+
def exist?(**kwargs)
|
92
|
+
warning("#{@repo}.#{@namespace}.exist?", "#{@repo.index}.exist?", 2023, 12)
|
93
|
+
|
94
|
+
@repo.index.exist?(**kwargs)
|
95
|
+
end
|
96
|
+
|
97
|
+
def find!(**kwargs)
|
98
|
+
warning("#{@repo}.#{@namespace}.find!", "#{@repo.index}.get", 2023, 12)
|
99
|
+
|
100
|
+
@repo.index.get(**kwargs)
|
101
|
+
end
|
102
|
+
|
103
|
+
def find(**kwargs)
|
104
|
+
warning("#{@repo}.#{@namespace}.find", "#{@repo.index}.get", 2023, 12)
|
105
|
+
|
106
|
+
@repo.index.get(**kwargs)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Esse
|
4
|
+
class Serializer < Esse::Document
|
5
|
+
class << self
|
6
|
+
extend Esse::Deprecations::Deprecate
|
7
|
+
|
8
|
+
def inherited(subclass)
|
9
|
+
warning 'Esse::Serializer', 'Esse::Document', 2023, 12
|
10
|
+
super(subclass)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
require_relative 'deprecations/deprecate'
|
2
|
+
require_relative 'deprecations/serializer'
|
3
|
+
require_relative 'deprecations/index_backend_delegator'
|
4
|
+
require_relative 'deprecations/index'
|
5
|
+
require_relative 'deprecations/cluster'
|
6
|
+
require_relative 'deprecations/repository_backend_delegator'
|
7
|
+
require_relative 'deprecations/repository'
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Esse
|
4
|
+
class Document
|
5
|
+
attr_reader :object, :options
|
6
|
+
|
7
|
+
def initialize(object, **options)
|
8
|
+
@object = object
|
9
|
+
@options = options
|
10
|
+
end
|
11
|
+
|
12
|
+
# @return [String, Number] the document ID
|
13
|
+
# @abstract Override this method to return the document ID
|
14
|
+
def id
|
15
|
+
raise NotImplementedError, 'Override this method to return the document ID'
|
16
|
+
end
|
17
|
+
|
18
|
+
# @return [String, nil] the document type
|
19
|
+
# @abstract Override this method to return the document type
|
20
|
+
def type
|
21
|
+
nil
|
22
|
+
end
|
23
|
+
|
24
|
+
# @return [Boolean] whether the document has type
|
25
|
+
def type?
|
26
|
+
!type.nil?
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [String, nil] the document routing
|
30
|
+
# @abstract Override this method to return the document routing
|
31
|
+
def routing
|
32
|
+
nil
|
33
|
+
end
|
34
|
+
|
35
|
+
# @return [Boolean] whether the document has routing
|
36
|
+
def routing?
|
37
|
+
!routing.nil?
|
38
|
+
end
|
39
|
+
|
40
|
+
# @TODO allow import, index, bulk to accept a suffix to tell which index to use
|
41
|
+
# def index_suffix
|
42
|
+
# nil
|
43
|
+
# end
|
44
|
+
|
45
|
+
# @return [Hash] the document meta
|
46
|
+
# @abstract Override this method to return the document meta
|
47
|
+
def meta
|
48
|
+
{}
|
49
|
+
end
|
50
|
+
|
51
|
+
# @return [Hash] the document source
|
52
|
+
# @abstract Override this method to return the document source
|
53
|
+
def source
|
54
|
+
{}
|
55
|
+
end
|
56
|
+
|
57
|
+
# @return [Hash] the document data
|
58
|
+
def to_h
|
59
|
+
source.merge(
|
60
|
+
_id: id,
|
61
|
+
).tap do |hash|
|
62
|
+
hash[:_type] = type if type
|
63
|
+
hash[:_routing] = routing if routing
|
64
|
+
hash.merge!(meta)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def to_bulk(data: true)
|
69
|
+
{ _id: id }.tap do |h|
|
70
|
+
h[:data] = source&.to_h if data
|
71
|
+
h[:_type] = type if type
|
72
|
+
h[:routing] = routing if routing?
|
73
|
+
h.merge!(meta)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def ignore_on_index?
|
78
|
+
id.nil?
|
79
|
+
end
|
80
|
+
|
81
|
+
def ignore_on_delete?
|
82
|
+
id.nil?
|
83
|
+
end
|
84
|
+
|
85
|
+
def ==(other)
|
86
|
+
other.is_a?(self.class) && (
|
87
|
+
id == other.id && type == other.type && routing == other.routing && meta == other.meta && source == other.source
|
88
|
+
)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Esse
|
4
|
+
class DynamicTemplate
|
5
|
+
# @param [Array, Hash] value The list of dynamic_templates for mapping
|
6
|
+
def initialize(value)
|
7
|
+
@hash = normalize(value)
|
8
|
+
end
|
9
|
+
|
10
|
+
def merge!(value)
|
11
|
+
@hash = HashUtils.deep_merge(@hash, normalize(value))
|
12
|
+
end
|
13
|
+
|
14
|
+
def []=(key, value)
|
15
|
+
merge!(key => value)
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_a
|
19
|
+
@hash.map do |name, value|
|
20
|
+
{ name => value }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def any?
|
25
|
+
@hash.any?
|
26
|
+
end
|
27
|
+
|
28
|
+
def dup
|
29
|
+
self.class.new(@hash.dup)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def normalize(value)
|
35
|
+
case value
|
36
|
+
when Array
|
37
|
+
value.map { |v| normalize(v) }.reduce(&:merge)
|
38
|
+
when Hash
|
39
|
+
HashUtils.deep_transform_keys(value, &:to_sym)
|
40
|
+
end || {}
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/esse/errors.rb
CHANGED
@@ -4,6 +4,66 @@ module Esse
|
|
4
4
|
class Error < StandardError
|
5
5
|
end
|
6
6
|
|
7
|
+
# @todo Rename this
|
8
|
+
class Transport
|
9
|
+
class ServerError < ::Esse::Error; end
|
10
|
+
|
11
|
+
# exception to raise when the cluster is readonly
|
12
|
+
class ReadonlyClusterError < ::Esse::Error
|
13
|
+
def initialize
|
14
|
+
super('You cannot perform this operation on a readonly cluster')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
ES_TRANSPORT_ERRORS = {
|
19
|
+
'MultipleChoices' => 'MultipleChoicesError', # 300
|
20
|
+
'MovedPermanently' => 'MovedPermanentlyError', # 301
|
21
|
+
'Found' => 'FoundError', # 302
|
22
|
+
'SeeOther' => 'SeeOtherError', # 303
|
23
|
+
'NotModified' => 'NotModifiedError', # 304
|
24
|
+
'UseProxy' => 'UseProxyError', # 305
|
25
|
+
'TemporaryRedirect' => 'TemporaryRedirectError', # 307
|
26
|
+
'PermanentRedirect' => 'PermanentRedirectError', # 308
|
27
|
+
'BadRequest' => 'BadRequestError', # 400
|
28
|
+
'Unauthorized' => 'UnauthorizedError', # 401
|
29
|
+
'PaymentRequired' => 'PaymentRequiredError', # 402
|
30
|
+
'Forbidden' => 'ForbiddenError', # 403
|
31
|
+
'NotFound' => 'NotFoundError', # 404
|
32
|
+
'MethodNotAllowed' => 'MethodNotAllowedError', # 405
|
33
|
+
'NotAcceptable' => 'NotAcceptableError', # 406
|
34
|
+
'ProxyAuthenticationRequired' => 'ProxyAuthenticationRequiredError', # 407
|
35
|
+
'RequestTimeout' => 'RequestTimeoutError', # 408
|
36
|
+
'Conflict' => 'ConflictError', # 409
|
37
|
+
'Gone' => 'GoneError', # 410
|
38
|
+
'LengthRequired' => 'LengthRequiredError', # 411
|
39
|
+
'PreconditionFailed' => 'PreconditionFailedError', # 412
|
40
|
+
'RequestEntityTooLarge' => 'RequestEntityTooLargeError', # 413
|
41
|
+
'RequestURITooLong' => 'RequestURITooLongError', # 414
|
42
|
+
'UnsupportedMediaType' => 'UnsupportedMediaTypeError', # 415
|
43
|
+
'RequestedRangeNotSatisfiable' => 'RequestedRangeNotSatisfiableError', # 416
|
44
|
+
'ExpectationFailed' => 'ExpectationFailedError', # 417
|
45
|
+
'ImATeapot' => 'ImATeapotError', # 418
|
46
|
+
'TooManyConnectionsFromThisIP' => 'TooManyConnectionsFromThisIPError', # 421
|
47
|
+
'UpgradeRequired' => 'UpgradeRequiredError', # 426
|
48
|
+
'BlockedByWindowsParentalControls' => 'BlockedByWindowsParentalControlsError', # 450
|
49
|
+
'RequestHeaderTooLarge' => 'RequestHeaderTooLargeError', # 494
|
50
|
+
'HTTPToHTTPS' => 'HTTPToHTTPSError', # 497
|
51
|
+
'ClientClosedRequest' => 'ClientClosedRequestError', # 499
|
52
|
+
'InternalServerError' => 'InternalServerError', # 500
|
53
|
+
'NotImplemented' => 'NotImplementedError', # 501
|
54
|
+
'BadGateway' => 'BadGatewayError', # 502
|
55
|
+
'ServiceUnavailable' => 'ServiceUnavailableError', # 503
|
56
|
+
'GatewayTimeout' => 'GatewayTimeoutError', # 504
|
57
|
+
'HTTPVersionNotSupported' => 'HTTPVersionNotSupportedError', # 505
|
58
|
+
'VariantAlsoNegotiates' => 'VariantAlsoNegotiatesError', # 506
|
59
|
+
'NotExtended' => 'NotExtendedError', # 510
|
60
|
+
}
|
61
|
+
|
62
|
+
ERRORS = ES_TRANSPORT_ERRORS.each_with_object({}) do |(transport_name, esse_name), memo|
|
63
|
+
memo[transport_name] = const_set esse_name, Class.new(ServerError)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
7
67
|
module Events
|
8
68
|
class UnregisteredEventError < ::Esse::Error
|
9
69
|
def initialize(object_or_event_id)
|
@@ -42,6 +102,4 @@ module Esse
|
|
42
102
|
class InvalidOption < Error
|
43
103
|
end
|
44
104
|
end
|
45
|
-
|
46
|
-
# Elasticsearch::Transport::Transport::Errors::NotFound
|
47
105
|
end
|
data/lib/esse/events/event.rb
CHANGED
@@ -3,6 +3,10 @@
|
|
3
3
|
module Esse
|
4
4
|
module Events
|
5
5
|
class Event
|
6
|
+
extend Forwardable
|
7
|
+
def_delegators :@payload, :[], :fetch, :to_h, :key?
|
8
|
+
alias_method :to_hash, :to_h
|
9
|
+
|
6
10
|
attr_reader :id
|
7
11
|
|
8
12
|
# Initialize a new event
|
@@ -18,25 +22,6 @@ module Esse
|
|
18
22
|
@payload = payload
|
19
23
|
end
|
20
24
|
|
21
|
-
# Get data from the payload
|
22
|
-
#
|
23
|
-
# @param [String,Symbol] name
|
24
|
-
#
|
25
|
-
# @api public
|
26
|
-
def [](name)
|
27
|
-
@payload.fetch(name)
|
28
|
-
end
|
29
|
-
|
30
|
-
# Coerce an event to a hash
|
31
|
-
#
|
32
|
-
# @return [Hash]
|
33
|
-
#
|
34
|
-
# @api public
|
35
|
-
def to_h
|
36
|
-
@payload
|
37
|
-
end
|
38
|
-
alias_method :to_hash, :to_h
|
39
|
-
|
40
25
|
# Get or set a payload
|
41
26
|
#
|
42
27
|
# @overload
|
data/lib/esse/events.rb
CHANGED
@@ -38,12 +38,23 @@ module Esse
|
|
38
38
|
module Events
|
39
39
|
include Publisher
|
40
40
|
|
41
|
+
register_event 'elasticsearch.bulk'
|
41
42
|
register_event 'elasticsearch.close'
|
42
|
-
register_event 'elasticsearch.open'
|
43
43
|
register_event 'elasticsearch.create_index'
|
44
44
|
register_event 'elasticsearch.delete_index'
|
45
|
+
register_event 'elasticsearch.execute_search_query'
|
46
|
+
register_event 'elasticsearch.index_exist'
|
47
|
+
register_event 'elasticsearch.open'
|
48
|
+
register_event 'elasticsearch.refresh'
|
49
|
+
register_event 'elasticsearch.search'
|
50
|
+
register_event 'elasticsearch.update_aliases'
|
45
51
|
register_event 'elasticsearch.update_mapping'
|
46
52
|
register_event 'elasticsearch.update_settings'
|
47
|
-
register_event 'elasticsearch.
|
53
|
+
register_event 'elasticsearch.index'
|
54
|
+
register_event 'elasticsearch.update'
|
55
|
+
register_event 'elasticsearch.delete'
|
56
|
+
register_event 'elasticsearch.exist'
|
57
|
+
register_event 'elasticsearch.count'
|
58
|
+
register_event 'elasticsearch.get'
|
48
59
|
end
|
49
60
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Esse
|
4
|
+
class HashDocument < Esse::Document
|
5
|
+
META_KEYS = %i[_id _type _routing routing].freeze
|
6
|
+
|
7
|
+
def initialize(object)
|
8
|
+
@object = object
|
9
|
+
@options = {}
|
10
|
+
end
|
11
|
+
|
12
|
+
# @return [String, Number] the document ID
|
13
|
+
def id
|
14
|
+
object['_id'] || object[:_id] || object['id'] || object[:id]
|
15
|
+
end
|
16
|
+
|
17
|
+
# @return [String, nil] the document type
|
18
|
+
def type
|
19
|
+
object['_type'] || object[:_type]
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [String, nil] the document routing
|
23
|
+
def routing
|
24
|
+
object['_routing'] || object[:_routing] || object['routing'] || object[:routing]
|
25
|
+
end
|
26
|
+
|
27
|
+
# @return [Hash] the document meta
|
28
|
+
def meta
|
29
|
+
{}
|
30
|
+
end
|
31
|
+
|
32
|
+
# @return [Hash] the document source
|
33
|
+
# @abstract Override this method to return the document source
|
34
|
+
def source
|
35
|
+
object.reject { |key, _| META_KEYS.include?(key.to_sym) }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|