Class: Scalastic::PartitionsClient

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/scalastic/partitions_client.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(es_client, config = Config.default.dup) ⇒ PartitionsClient

Returns a new instance of PartitionsClient.

Raises:

  • (ArgumentError)


11
12
13
14
15
16
# File 'lib/scalastic/partitions_client.rb', line 11

def initialize(es_client, config = Config.default.dup)
  raise(ArgumentError, 'ES client is nil') if es_client.nil?
  raise(ArgumentError, 'Config is nil') if config.nil?
  @es_client = es_client
  @config = config
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



9
10
11
# File 'lib/scalastic/partitions_client.rb', line 9

def config
  @config
end

#es_clientObject (readonly)

Returns the value of attribute es_client.



8
9
10
# File 'lib/scalastic/partitions_client.rb', line 8

def es_client
  @es_client
end

Instance Method Details

#[](id) ⇒ Object



39
40
41
# File 'lib/scalastic/partitions_client.rb', line 39

def [](id)
  Partition.new(es_client, config, id)
end

#create(args = {}) ⇒ Object



18
19
20
21
22
23
24
25
# File 'lib/scalastic/partitions_client.rb', line 18

def create(args = {})
  actions = [
    {add: EsActionsGenerator.new_search_alias(config, args)},
    {add: EsActionsGenerator.new_index_alias(config, args)},
  ]
  es_client.indices.update_aliases(body: {actions: actions})
  self[args[:id]]
end

#delete(args = {}) ⇒ Object

Raises:

  • (ArgumentError)


27
28
29
30
31
32
33
34
35
36
37
# File 'lib/scalastic/partitions_client.rb', line 27

def delete(args = {})
  id = args[:id].to_s
  raise(ArgumentError, 'Missing required argument :id') if id.nil? || id.empty?
  pairs = es_client.indices.get_aliases.map{|i, d| d['aliases'].keys.select{|a| config.get_partition_id(a) == id}.map{|a| [i, a]}}.flatten(1)
  unless pairs.any?
    #TODO: log a warning
    return
  end
  actions = pairs.map{|i, a| {remove: {index: i, alias: a}}}
  es_client.indices.update_aliases(body: {actions: actions})
end

#each(&_block) ⇒ Object



43
44
45
# File 'lib/scalastic/partitions_client.rb', line 43

def each(&_block)
  partition_ids.each{|pid| yield Partition.new(es_client, config, pid) if block_given?}
end

#prepare_index(args) ⇒ Object



47
48
49
50
51
52
# File 'lib/scalastic/partitions_client.rb', line 47

def prepare_index(args)
  index = args[:index] || raise(ArgumentError, 'Missing required argument :index')
  mapping = {properties: config.partition_selector_mapping}
  es_client.indices.put_mapping(index: index, type: '_default_', body: {'_default_' => mapping})
  es_client.indices.put_mapping(index: index, type: 'scalastic', body: {'scalastic' => mapping})
end