Class: Elastics::VersionManager

Inherits:
Object
  • Object
show all
Defined in:
lib/elastics/version_manager.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client, options = {}) ⇒ VersionManager

Returns a new instance of VersionManager.



25
26
27
28
29
# 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

Instance Attribute Details

#service_indexObject (readonly)

Returns the value of attribute service_index.



23
24
25
# File 'lib/elastics/version_manager.rb', line 23

def service_index
  @service_index
end

Class Method Details

.default_versionObject



4
5
6
7
# 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) ⇒ Object



9
10
11
12
# File 'lib/elastics/version_manager.rb', line 9

def default_version=(version)
  @default_version = version
  Model.list.each &:reset_elastics_index_name
end

.use_version(version) ⇒ Object



14
15
16
17
18
19
20
# 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

Instance Method Details

#current_version(index) ⇒ Object



58
59
60
# File 'lib/elastics/version_manager.rb', line 58

def current_version(index)
  versions[index][:current]
end

#index_name(index, version = self.class.default_version) ⇒ Object



78
79
80
81
82
83
84
# 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) ⇒ Object



62
63
64
# File 'lib/elastics/version_manager.rb', line 62

def next_version(index)
  current_version(index) + 1
end

#prefixed_index(index) ⇒ Object



74
75
76
# File 'lib/elastics/version_manager.rb', line 74

def prefixed_index(index)
  "#{@index_prefix}#{index}"
end

#resetObject



31
32
33
34
# File 'lib/elastics/version_manager.rb', line 31

def reset
  @versions = nil
  self
end

#set(index, data) ⇒ Object



40
41
42
43
44
# 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) ⇒ Object



36
37
38
# File 'lib/elastics/version_manager.rb', line 36

def update(index, data)
  set index, versions[index].merge(data)
end

#version_number(index, version) ⇒ Object



66
67
68
69
70
71
72
# 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

#versionsObject



46
47
48
49
50
51
52
53
54
55
56
# 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