esse 0.2.0 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. checksums.yaml +4 -4
  2. data/lib/esse/cli/event_listener.rb +13 -0
  3. data/lib/esse/cli/generate.rb +53 -14
  4. data/lib/esse/cli/index/base_operation.rb +5 -13
  5. data/lib/esse/cli/index/close.rb +1 -1
  6. data/lib/esse/cli/index/create.rb +1 -1
  7. data/lib/esse/cli/index/delete.rb +1 -1
  8. data/lib/esse/cli/index/import.rb +6 -2
  9. data/lib/esse/cli/index/open.rb +1 -1
  10. data/lib/esse/cli/index/reset.rb +1 -1
  11. data/lib/esse/cli/index/update_aliases.rb +2 -2
  12. data/lib/esse/cli/index/update_mapping.rb +9 -5
  13. data/lib/esse/cli/index/update_settings.rb +1 -1
  14. data/lib/esse/cli/index.rb +11 -4
  15. data/lib/esse/cli/templates/collection.rb.erb +29 -0
  16. data/lib/esse/cli/templates/config.rb.erb +13 -3
  17. data/lib/esse/cli/templates/document.rb.erb +34 -0
  18. data/lib/esse/cli/templates/index.rb.erb +63 -114
  19. data/lib/esse/cli/templates/mappings.json +27 -0
  20. data/lib/esse/cli/templates/settings.json +62 -0
  21. data/lib/esse/cli.rb +5 -0
  22. data/lib/esse/cluster.rb +93 -12
  23. data/lib/esse/cluster_engine.rb +42 -0
  24. data/lib/esse/collection.rb +18 -0
  25. data/lib/esse/config.rb +14 -2
  26. data/lib/esse/core.rb +28 -7
  27. data/lib/esse/deprecations/cluster.rb +27 -0
  28. data/lib/esse/deprecations/deprecate.rb +29 -0
  29. data/lib/esse/deprecations/index.rb +37 -0
  30. data/lib/esse/deprecations/index_backend_delegator.rb +217 -0
  31. data/lib/esse/deprecations/repository.rb +34 -0
  32. data/lib/esse/deprecations/repository_backend_delegator.rb +110 -0
  33. data/lib/esse/deprecations/serializer.rb +14 -0
  34. data/lib/esse/deprecations.rb +7 -0
  35. data/lib/esse/document.rb +91 -0
  36. data/lib/esse/dynamic_template.rb +43 -0
  37. data/lib/esse/errors.rb +60 -2
  38. data/lib/esse/events/event.rb +4 -19
  39. data/lib/esse/events.rb +13 -2
  40. data/lib/esse/hash_document.rb +38 -0
  41. data/lib/esse/import/bulk.rb +106 -0
  42. data/lib/esse/import/request_body.rb +60 -0
  43. data/lib/esse/index/aliases.rb +50 -0
  44. data/lib/esse/index/attributes.rb +107 -0
  45. data/lib/esse/index/base.rb +17 -53
  46. data/lib/esse/index/documents.rb +236 -0
  47. data/lib/esse/index/indices.rb +171 -0
  48. data/lib/esse/index/inheritance.rb +30 -0
  49. data/lib/esse/index/mappings.rb +6 -19
  50. data/lib/esse/index/object_document_mapper.rb +36 -0
  51. data/lib/esse/index/plugins.rb +42 -0
  52. data/lib/esse/index/search.rb +27 -0
  53. data/lib/esse/index/settings.rb +2 -2
  54. data/lib/esse/index/type.rb +51 -11
  55. data/lib/esse/index.rb +14 -9
  56. data/lib/esse/index_mapping.rb +10 -2
  57. data/lib/esse/index_setting.rb +3 -1
  58. data/lib/esse/null_document.rb +35 -0
  59. data/lib/esse/plugins.rb +12 -0
  60. data/lib/esse/primitives/hstring.rb +1 -1
  61. data/lib/esse/{index_type → repository}/actions.rb +1 -1
  62. data/lib/esse/repository/documents.rb +13 -0
  63. data/lib/esse/repository/object_document_mapper.rb +157 -0
  64. data/lib/esse/repository.rb +17 -0
  65. data/lib/esse/search/query.rb +105 -0
  66. data/lib/esse/search/response.rb +46 -0
  67. data/lib/esse/template_loader.rb +1 -1
  68. data/lib/esse/transport/aliases.rb +36 -0
  69. data/lib/esse/transport/documents.rb +199 -0
  70. data/lib/esse/transport/health.rb +30 -0
  71. data/lib/esse/transport/indices.rb +192 -0
  72. data/lib/esse/transport/search.rb +48 -0
  73. data/lib/esse/transport.rb +44 -0
  74. data/lib/esse/version.rb +1 -1
  75. data/lib/esse.rb +20 -5
  76. metadata +55 -50
  77. data/lib/esse/backend/index/aliases.rb +0 -73
  78. data/lib/esse/backend/index/close.rb +0 -54
  79. data/lib/esse/backend/index/create.rb +0 -67
  80. data/lib/esse/backend/index/delete.rb +0 -39
  81. data/lib/esse/backend/index/documents.rb +0 -23
  82. data/lib/esse/backend/index/existance.rb +0 -22
  83. data/lib/esse/backend/index/open.rb +0 -54
  84. data/lib/esse/backend/index/refresh.rb +0 -43
  85. data/lib/esse/backend/index/reset.rb +0 -33
  86. data/lib/esse/backend/index/update.rb +0 -143
  87. data/lib/esse/backend/index.rb +0 -54
  88. data/lib/esse/backend/index_type/documents.rb +0 -214
  89. data/lib/esse/backend/index_type.rb +0 -37
  90. data/lib/esse/cli/templates/type_collection.rb.erb +0 -41
  91. data/lib/esse/cli/templates/type_mappings.json +0 -6
  92. data/lib/esse/cli/templates/type_serializer.rb.erb +0 -23
  93. data/lib/esse/index/backend.rb +0 -14
  94. data/lib/esse/index/naming.rb +0 -64
  95. data/lib/esse/index_type/backend.rb +0 -14
  96. data/lib/esse/index_type/mappings.rb +0 -42
  97. data/lib/esse/index_type.rb +0 -15
  98. 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
@@ -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.update_aliases'
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