esse 0.2.0 → 0.2.3

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