class Elastics::VersionManager

Attributes

service_index[R]

Public Class Methods

default_version() click to toggle source
# File lib/elastics/version_manager.rb, line 4
def default_version
  @default_version = ENV['ELASTICS_MAPPING_VERSION'] unless defined?(@default_version)
  @default_version
end
default_version=(version) click to toggle source
# File lib/elastics/version_manager.rb, line 9
def default_version=(version)
  @default_version = version
  Model.list.each &:reset_elastics_index_name
end
new(client, options = {}) click to toggle source
# File lib/elastics/version_manager.rb, line 25
def initialize(client, options = {})
  @service_index = options[:service_index] || '.elastics'
  @index_prefix = options[:index_prefix]
  @client = client
end
use_version(version) { || ... } click to toggle source
# File lib/elastics/version_manager.rb, line 14
def use_version(version)
  old_version = default_version
  self.default_version = version
  yield
ensure
  self.default_version = old_version
end

Public Instance Methods

current_version(index) click to toggle source
# File lib/elastics/version_manager.rb, line 58
def current_version(index)
  versions[index][:current]
end
index_name(index, version = self.class.default_version) click to toggle source
# File lib/elastics/version_manager.rb, line 78
def index_name(index, version = self.class.default_version)
  if version && version != :alias
    "#{prefixed_index(index)}-v#{version_number index, version}"
  else
    prefixed_index(index)
  end
end
next_version(index) click to toggle source
# File lib/elastics/version_manager.rb, line 62
def next_version(index)
  current_version(index) + 1
end
prefixed_index(index) click to toggle source
# File lib/elastics/version_manager.rb, line 74
def prefixed_index(index)
  "#{@index_prefix}#{index}"
end
reset() click to toggle source
# File lib/elastics/version_manager.rb, line 31
def reset
  @versions = nil
  self
end
set(index, data) click to toggle source
# File lib/elastics/version_manager.rb, line 40
def set(index, data)
  @client.post index: @service_index, type: :mapping_versions,
    id: prefixed_index(index), body: data
  @versions[index] = data.with_indifferent_access
end
update(index, data) click to toggle source
# File lib/elastics/version_manager.rb, line 36
def update(index, data)
  set index, versions[index].merge(data)
end
version_number(index, version) click to toggle source
# File lib/elastics/version_manager.rb, line 66
def version_number(index, version)
  case version.to_s
  when 'current'  then current_version(index)
  when 'next'     then next_version(index)
  else raise NameError, "Invalid version alias: #{version}"
  end
end
versions() click to toggle source
# File lib/elastics/version_manager.rb, line 46
def versions
  @versions ||= Hash.new do |hash, index|
    result = @client.get index: @service_index, type: :mapping_versions,
      id: prefixed_index(index)
    if result
      hash[index] = result['_source'].with_indifferent_access
    else
      set index, current: 0
    end
  end
end