Sha256: ea6e2fa4923516cafd2e50c04f6be8d0afebacab283e2d8d32140454d4b42d06

Contents?: true

Size: 1.13 KB

Versions: 1

Compression:

Stored size: 1.13 KB

Contents

# frozen_string_literal: true

module EsExperiment::Actions
  module Create
    def create(name, options = {})
      client.index params(name, options)
    end

    private

    def params(name, options)
      { index: config.index,
        type: options[:type] || '_doc',
        id: options[:id],
        body: doc(name, options),
        version: options[:version],
        version_type: options[:version_type],
        routing: options[:routing],
        refresh: true }.compact
    end

    def doc(name, options)
      doc = documents.get(name)
      update(doc, options[:fields]) unless options[:fields].nil?
      doc
    end

    # rubocop:disable Security/Eval
    def update(doc, fields)
      fields.each do |full_key, value|
        eval <<-RUBY, binding, __FILE__, __LINE__ + 1
          doc#{parse_key(full_key)} = #{parse_value(value)}
        RUBY
      end
    end
    # rubocop:enable Security/Eval

    def parse_key(full_key)
      full_key
        .to_s
        .split('.')
        .map { |key| "['#{key}']" }
        .join
    end

    def parse_value(value)
      return "'#{value}'" if value.is_a? String

      value
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
es_experiment-0.1.0 lib/es_experiment/actions/create.rb