Module: Elastics::Tasks::Mappings

Included in:
Elastics::Tasks
Defined in:
lib/elastics/tasks/mappings.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#mappings_path=(value) ⇒ Object (writeonly)

Sets the attribute mappings_path

Parameters:

  • value

    the value to set the attribute mappings_path to.



4
5
6
# File 'lib/elastics/tasks/mappings.rb', line 4

def mappings_path=(value)
  @mappings_path = value
end

Instance Method Details

#fix_mapping(name, mapping) ⇒ Object

Adds missing type name in the top-level and updates properties definition. It allows to write

properties:
  name: string
  project_id: integer

instead of

task:
  properties:
    name:
      type: string
    project_id:
      type: integer


48
49
50
51
52
53
54
55
# File 'lib/elastics/tasks/mappings.rb', line 48

def fix_mapping(name, mapping)
  mapping = {name => mapping} unless mapping.keys == [name]
  properties = mapping[name]['properties']
  properties && properties.each do |field, val|
    properties[field] = {type: val} if val.is_a?(String)
  end
  mapping
end

#index_for_type(type) ⇒ Object



65
66
67
# File 'lib/elastics/tasks/mappings.rb', line 65

def index_for_type(type)
  config[:index] || type
end

#indicesObject



61
62
63
# File 'lib/elastics/tasks/mappings.rb', line 61

def indices
  @indices ||= (super + types.map { |type| index_for_type(type) }).uniq
end

#mappingsObject



24
25
26
27
28
29
30
31
# File 'lib/elastics/tasks/mappings.rb', line 24

def mappings
  @mappings ||= mappings_paths.map { |path| Dir["#{path}/*.yml"] }.
    flatten.sort.
    each_with_object({}) do |file, hash|
      name = File.basename file, '.yml'
      hash[name] = fix_mapping(name, YAML.load_file(file))
    end
end

#mappings_pathsObject



6
7
8
# File 'lib/elastics/tasks/mappings.rb', line 6

def mappings_paths
  @mappings_paths ||= base_paths.map { |x| File.join x, 'mappings' }
end

#put_mappings(options = {}) ⇒ Object

Mappings to put can be filtered with ‘:indices` & `:types` arrays.



11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/elastics/tasks/mappings.rb', line 11

def put_mappings(options = {})
  version = options.fetch :version, :current
  filter = options[:indices].try!(:map, &:to_s)
  each_filtered(types, options[:types]) do |type|
    index = index_for_type(type)
    next if filter && !filter.include?(index)
    versioned_index = versioned_index_name(index, version)
    log "Putting mapping #{index}/#{type} (#{versioned_index}/#{type})"
    client.put_mapping index: versioned_index, type: type,
      body: mappings[type]
  end
end

#typesObject



57
58
59
# File 'lib/elastics/tasks/mappings.rb', line 57

def types
  @types ||= mappings.keys
end