esse 0.1.1 → 0.2.0
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 +4 -4
- data/lib/esse/backend/index/reset.rb +3 -3
- data/lib/esse/backend/index_type/documents.rb +1 -1
- data/lib/esse/cli/index/import.rb +26 -0
- data/lib/esse/cli/index.rb +8 -0
- data/lib/esse/cli/templates/index.rb.erb +3 -3
- data/lib/esse/cli/templates/type_collection.rb.erb +6 -6
- data/lib/esse/object_document_mapper.rb +18 -4
- data/lib/esse/primitives/hash_utils.rb +11 -0
- data/lib/esse/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a31d2a1c181dccd9c2acd7256d958010e7c636016b1d5a267597f7aec9ed3334
|
4
|
+
data.tar.gz: cdb390a10b0492833a9360d4fd39df0c18df114a44b37554cba1dd39d229f75b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 59ae5dcafd8998c69e5705910b119f5f9d1333899a4320b8f7afa4c5782aa435d820dde222726de111cee00c6d3b4bbed9d6fdd18dac6a6f740cf64138b70d53
|
7
|
+
data.tar.gz: 84b876eaec5b090718e2d265dd5d9456c5dfaeedafdae6e9361ac790de91eab0ba46b9ceabee3c5e8a891c5027ff3ac8443217554219f8dce5f52c853912989c
|
@@ -19,10 +19,10 @@ module Esse
|
|
19
19
|
suffix ||= Esse.timestamp
|
20
20
|
suffix = Esse.timestamp while exist?(suffix: suffix).tap { |exist| existing << suffix if exist }
|
21
21
|
|
22
|
-
create_index!(suffix: suffix,
|
23
|
-
import!(suffix: suffix
|
22
|
+
create_index!(**options, suffix: suffix, alias: false)
|
23
|
+
import!(**options, suffix: suffix)
|
24
24
|
update_aliases!(suffix: suffix)
|
25
|
-
existing.each { |_s| delete_index!(suffix: suffix
|
25
|
+
existing.each { |_s| delete_index!(**options, suffix: suffix) }
|
26
26
|
true
|
27
27
|
end
|
28
28
|
end
|
@@ -11,7 +11,7 @@ module Esse
|
|
11
11
|
# @option [Hash] :context The collection context. This value will be passed as argument to the collection
|
12
12
|
# May be SQL condition or any other filter you have defined on the collection.
|
13
13
|
def import(context: {}, suffix: nil, **options)
|
14
|
-
each_serialized_batch(context || {}) do |batch|
|
14
|
+
each_serialized_batch(**(context || {})) do |batch|
|
15
15
|
bulk(index: batch, suffix: suffix, **options)
|
16
16
|
end
|
17
17
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base_operation'
|
4
|
+
|
5
|
+
module Esse
|
6
|
+
module CLI
|
7
|
+
class Index::Import < Index::BaseOperation
|
8
|
+
def run
|
9
|
+
validate_options!
|
10
|
+
indices.each do |index|
|
11
|
+
index.elasticsearch.import!(**options)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def options
|
18
|
+
@options.slice(*@options.keys - CLI_IGNORE_OPTS)
|
19
|
+
end
|
20
|
+
|
21
|
+
def validate_options!
|
22
|
+
validate_indices_option!
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/esse/cli/index.rb
CHANGED
@@ -77,6 +77,14 @@ module Esse
|
|
77
77
|
require_relative 'index/open'
|
78
78
|
Open.new(indices: index_classes, **options.to_h.transform_keys(&:to_sym)).run
|
79
79
|
end
|
80
|
+
|
81
|
+
desc 'import *INDEX_CLASSES', 'Import documents from the given classes'
|
82
|
+
option :suffix, type: :string, default: nil, aliases: '-s', desc: 'Suffix to append to index name'
|
83
|
+
option :context, type: :hash, default: {}, required: true, desc: 'List of options to pass to the index class'
|
84
|
+
def import(*index_classes)
|
85
|
+
require_relative 'index/import'
|
86
|
+
Import.new(indices: index_classes, **HashUtils.deep_transform_keys(options.to_h, &:to_sym)).run
|
87
|
+
end
|
80
88
|
end
|
81
89
|
end
|
82
90
|
end
|
@@ -22,8 +22,8 @@ class <%= @index_name %> < <%= @base_class %>
|
|
22
22
|
# collection Collections::DocumentCollection
|
23
23
|
#
|
24
24
|
# but you can also use block definition style:
|
25
|
-
# collection do
|
26
|
-
# block.call [{ title: 'foo' }, { title: 'bar' }],
|
25
|
+
# collection do |**context, &block|
|
26
|
+
# block.call [{ title: 'foo' }, { title: 'bar' }], extra: 'info'
|
27
27
|
# end
|
28
28
|
#
|
29
29
|
# Serializer block or class yielder should be called with an array of objects.
|
@@ -78,7 +78,7 @@ class <%= @index_name %> < <%= @base_class %>
|
|
78
78
|
# Useful for eager loading data from database or any other repository. Below is an example of a rails like
|
79
79
|
# application could load using activerecord.
|
80
80
|
#
|
81
|
-
# collection do
|
81
|
+
# collection do |**context, &block|
|
82
82
|
# <%= type.camelize %>.where(context[:conditions]).find_in_batches(batch_size: 5000) do |batch|
|
83
83
|
# block.call batch, context
|
84
84
|
# end
|
@@ -26,15 +26,15 @@ class <%= @index_name %> < <%= @base_class %>
|
|
26
26
|
|
27
27
|
yield(rows, **params)
|
28
28
|
end
|
29
|
+
end
|
29
30
|
|
30
|
-
|
31
|
+
protected
|
31
32
|
|
32
|
-
|
33
|
+
attr_reader :params
|
33
34
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
end
|
35
|
+
# @param offset [Number] Offset to start from
|
36
|
+
def find_all(offset)
|
37
|
+
# @TODO load data from persistent store
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
@@ -86,10 +86,24 @@ module Esse
|
|
86
86
|
# @param args [*Object] Any argument is allowed here. The collection will be called with same arguments.
|
87
87
|
# And the serializer will be initialized with those arguments too.
|
88
88
|
# @yield [Array, *Object] serialized collection and method arguments
|
89
|
-
def each_serialized_batch(
|
90
|
-
each_batch(
|
91
|
-
entries = batch.map { |entry| serialize(entry,
|
92
|
-
block.call(entries,
|
89
|
+
def each_serialized_batch(**kwargs, &block)
|
90
|
+
each_batch(**kwargs) do |*batch, **collection_kwargs|
|
91
|
+
entries = batch.flatten.map { |entry| serialize(entry, **collection_kwargs) }.compact
|
92
|
+
block.call(entries, **kwargs)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
# Wrap collection data into serialized documents
|
97
|
+
#
|
98
|
+
# Example:
|
99
|
+
# GeosIndex.documents(id: 1).first
|
100
|
+
#
|
101
|
+
# @return [Enumerator] All serialized entries
|
102
|
+
def documents(**kwargs)
|
103
|
+
Enumerator.new do |yielder|
|
104
|
+
each_serialized_batch(**kwargs) do |documents, **_collection_kargs|
|
105
|
+
documents.each { |document| yielder.yield(document) }
|
106
|
+
end
|
93
107
|
end
|
94
108
|
end
|
95
109
|
end
|
@@ -6,6 +6,17 @@ module Esse
|
|
6
6
|
module HashUtils
|
7
7
|
module_function
|
8
8
|
|
9
|
+
def deep_transform_keys(hash, &block)
|
10
|
+
hash.each_with_object({}) do |(key, value), result|
|
11
|
+
result[yield(key)] = \
|
12
|
+
if value.is_a?(Hash)
|
13
|
+
deep_transform_keys(value, &block)
|
14
|
+
else
|
15
|
+
value
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
9
20
|
def deep_merge(target, source)
|
10
21
|
target.merge(source) do |key, oldval, newval|
|
11
22
|
if oldval.is_a?(Hash) && newval.is_a?(Hash)
|
data/lib/esse/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: esse
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marcos G. Zimmermann
|
8
8
|
autorequire:
|
9
9
|
bindir: exec
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-03-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: elasticsearch
|
@@ -246,6 +246,7 @@ files:
|
|
246
246
|
- lib/esse/cli/index/close.rb
|
247
247
|
- lib/esse/cli/index/create.rb
|
248
248
|
- lib/esse/cli/index/delete.rb
|
249
|
+
- lib/esse/cli/index/import.rb
|
249
250
|
- lib/esse/cli/index/open.rb
|
250
251
|
- lib/esse/cli/index/reset.rb
|
251
252
|
- lib/esse/cli/index/update_aliases.rb
|