lib/elasticsearch-serverless/api.rb (63 lines of code) (raw):

# 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. require 'elasticsearch-serverless/api/response' require 'elasticsearch-serverless/api/utils' # Require everything in /api Dir["#{File.dirname(__FILE__)}/api/**/*.rb"].each { |f| require f } module ElasticsearchServerless module API include ElasticsearchServerless::API::Actions HTTP_GET = 'GET'.freeze HTTP_HEAD = 'HEAD'.freeze HTTP_POST = 'POST'.freeze HTTP_PUT = 'PUT'.freeze HTTP_DELETE = 'DELETE'.freeze # The serializer class # def self.serializer JSON end # Namespace definitions # # Shortcuts for namespaces allows using methods for namespaces: # +client.namespace.action+ # module CommonClient attr_reader :client def initialize(client) @client = client end def perform_request(method, path, params = {}, body = nil, headers = nil, request_opts = {}) client.perform_request(method, path, params, body, headers, request_opts) end end # New namespaces are added dynamically with the Generator API_NAMESPACES = [:async_search, :cat, :cluster, :connector, :enrich, :eql, :graph, :indices, :inference, :ingest, :license, :logstash, :machine_learning, :query_rules, :search_application, :security, :sql, :synonyms, :tasks, :transform].freeze UPPERCASE_APIS = ['sql'].freeze API_NAMESPACES.each do |namespace| name = namespace.to_s module_name = if UPPERCASE_APIS.include?(name) name.upcase else name.split('_').map(&:capitalize).join end class_name = "#{module_name}Client" klass = Class.new(Object) do include CommonClient, Object.const_get("ElasticsearchServerless::API::#{module_name}::Actions") end Object.const_set(class_name, klass) define_method(name) do instance_variable_set("@#{name}", klass.new(self)) end end # TODO: If there are more aliases, make this dynamic and add them to constant alias ml machine_learning end end