Module: Elastics::Tasks::Mappings
- Included in:
- Elastics::Tasks
- Defined in:
- lib/elastics/tasks/mappings.rb
Instance Attribute Summary collapse
-
#mappings_path ⇒ Object
writeonly
Sets the attribute mappings_path.
Instance Method Summary collapse
-
#fix_mapping(name, mapping) ⇒ Object
Adds missing type name in the top-level and updates properties definition.
- #index_for_type(type) ⇒ Object
- #indices ⇒ Object
- #mappings ⇒ Object
- #mappings_paths ⇒ Object
-
#put_mappings(options = {}) ⇒ Object
Mappings to put can be filtered with ‘:indices` & `:types` arrays.
- #types ⇒ Object
Instance Attribute Details
#mappings_path=(value) ⇒ Object (writeonly)
Sets the attribute mappings_path
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 |
#indices ⇒ Object
61 62 63 |
# File 'lib/elastics/tasks/mappings.rb', line 61 def indices @indices ||= (super + types.map { |type| index_for_type(type) }).uniq end |
#mappings ⇒ Object
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_paths ⇒ Object
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( = {}) version = .fetch :version, :current filter = [:indices].try!(:map, &:to_s) each_filtered(types, [: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 |
#types ⇒ Object
57 58 59 |
# File 'lib/elastics/tasks/mappings.rb', line 57 def types @types ||= mappings.keys end |