1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
|
# Licensed to Elasticsearch B.V. under one or more contributor
# license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright
# ownership. Elasticsearch B.V. licenses this file to you under
# the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
module Elasticsearch
module API
# Handles specific exceptional parameters and code snippets that need to be
# included in the generated code. This module is included in SourceGenerator
# so its methods can be used from the ERB template (method.erb). This will
# potentially be refactored into different templates.
module EndpointSpecifics
# Endpoints that need Utils.__rescue_from_not_found
IGNORE_404 = %w[
exists
indices.exists
indices.exists_alias
indices.exists_index_template
indices.exists_template
indices.exists_type
].freeze
# Endpoints that need Utils.__rescue_from_not_found if the ignore
# parameter is included
COMPLEX_IGNORE_404 = %w[
delete
get
indices.flush_synced
indices.delete
indices.delete_index_template
indices.delete_template
security.get_role
security.get_user
snapshot.status
snapshot.get
snapshot.get_repository
snapshot.delete_repository
snapshot.delete
update
watcher.delete_watch
].freeze
# Endpoints that need params[:h] listified
H_PARAMS = %w[aliases allocation count health indices nodes pending_tasks
recovery shards thread_pool].freeze
# Function that adds the listified h param code
def specific_params(namespace)
params = []
if H_PARAMS.include?(@method_name) && namespace == 'cat'
if @method_name == 'nodes'
params << 'params[:h] = Utils.__listify(params[:h], escape: false) if params[:h]'
else
params << 'params[:h] = Utils.__listify(params[:h]) if params[:h]'
end
end
params
end
def needs_ignore_404?(endpoint)
IGNORE_404.include? endpoint
end
def needs_complex_ignore_404?(endpoint)
COMPLEX_IGNORE_404.include? endpoint
end
def module_name_helper(name)
return name.upcase if %w[sql ssl].include? name
name.split('_').map(&:capitalize).join
end
def termvectors_path
<<~SRC
if _index && _type && _id
"\#{Utils.__listify(_index)}/\#{Utils.__listify(_type)}/\#{Utils.__listify(_id)}/\#{endpoint}"
elsif _index && _type
"\#{Utils.__listify(_index)}/\#{Utils.__listify(_type)}/\#{endpoint}"
elsif _index && _id
"\#{Utils.__listify(_index)}/\#{endpoint}/\#{Utils.__listify(_id)}"
else
"\#{Utils.__listify(_index)}/\#{endpoint}"
end
SRC
end
def ping_perform_request
<<~SRC
begin
perform_request(method, path, params, body, headers).status == 200 ? true : false
rescue Exception => e
if e.class.to_s =~ /NotFound|ConnectionFailed/ || e.message =~ /Not\s*Found|404|ConnectionFailed/i
false
else
raise e
end
end
SRC
end
def indices_stats_params_registry
<<~SRC
ParamsRegistry.register(:stats_params, [
#{@spec['params'].keys.map { |k| ":#{k}" }.join(",\n")}
].freeze)
ParamsRegistry.register(:stats_parts, [
#{@parts['metric']['options'].push('metric').map { |k| ":#{k}" }.join(",\n")}
].freeze)
SRC
end
def msearch_body_helper
<<~SRC
case
when body.is_a?(Array) && body.any? { |d| d.has_key? :search }
payload = body.
inject([]) do |sum, item|
meta = item
data = meta.delete(:search)
sum << meta
sum << data
sum
end.
map { |item| Elasticsearch::API.serializer.dump(item) }
payload << "" unless payload.empty?
payload = payload.join("\\n")
when body.is_a?(Array)
payload = body.map { |d| d.is_a?(String) ? d : Elasticsearch::API.serializer.dump(d) }
payload << "" unless payload.empty?
payload = payload.join("\\n")
else
payload = body
end
SRC
end
def msearch_template_body_helper
<<~SRC
case
when body.is_a?(Array)
payload = body.map { |d| d.is_a?(String) ? d : Elasticsearch::API.serializer.dump(d) }
payload << "" unless payload.empty?
payload = payload.join("\n")
else
payload = body
end
SRC
end
def bulk_body_helper
<<~SRC
if body.is_a? Array
payload = Elasticsearch::API::Utils.__bulkify(body)
else
payload = body
end
SRC
end
def find_structure_body_helper
bulk_body_helper
end
def bulk_doc_helper(info)
<<~SRC
# @option arguments [String|Array] :body #{info}. Array of Strings, Header/Data pairs,
# or the conveniency "combined" format can be passed, refer to Elasticsearch::API::Utils.__bulkify documentation.
SRC
end
end
end
end
|