# Code generated by OpenAPI Generator (https://openapi-generator.tech), manual changes will be lost - read more on https://github.com/algolia/api-clients-automation. DO NOT EDIT. require 'date' require 'time' module Algolia module QuerySuggestions # Configuration of an Algolia index for Query Suggestions. class SourceIndex # Name of the Algolia index to use as source for query suggestions. attr_accessor :index_name # If true, Query Suggestions uses all replicas of the primary index to find popular searches. If false, only the primary index is used. attr_accessor :replicas # [Analytics tags](https://www.algolia.com/doc/api-reference/api-parameters/analyticsTags/) for filtering the popular searches. attr_accessor :analytics_tags # Facets to use as top categories with your suggestions. If provided, Query Suggestions adds the top facet values to each suggestion. attr_accessor :facets # Minimum number of hits required to be included as a suggestion. A search query must at least generate `minHits` hits to be included in the Query Suggestions index. attr_accessor :min_hits # Minimum letters required to be included as a suggestion. A search query must be at least `minLetters` long to be included in the Query Suggestions index. attr_accessor :min_letters attr_accessor :generate # Algolia indices with popular searches to use as query suggestions. Records of these indices must have these attributes: - `query`: search query which will be added as a suggestion - `count`: measure of popularity of that search query For example, you can export popular searches from an external analytics tool, such as Google Analytics or Adobe Analytics, and feed this data into an external Algolia index. You can use this external index to generate query suggestions until your Algolia analytics has collected enough data. attr_accessor :external # Attribute mapping from ruby-style variable name to JSON key. def self.attribute_map { :index_name => :indexName, :replicas => :replicas, :analytics_tags => :analyticsTags, :facets => :facets, :min_hits => :minHits, :min_letters => :minLetters, :generate => :generate, :external => :external } end # Returns all the JSON keys this model knows about def self.acceptable_attributes attribute_map.values end # Attribute type mapping. def self.types_mapping { :index_name => :String, :replicas => :Boolean, :analytics_tags => :'Array', :facets => :'Array', :min_hits => :Integer, :min_letters => :Integer, :generate => :'Array>', :external => :'Array' } end # List of attributes with nullable: true def self.openapi_nullable Set.new([ :analytics_tags, :facets, :external ]) end # Initializes the object # @param [Hash] attributes Model attributes in the form of hash def initialize(attributes = {}) unless attributes.is_a?(Hash) raise ArgumentError, "The input argument (attributes) must be a hash in `Algolia::SourceIndex` initialize method" end # check to see if the attribute exists and convert string to symbol for hash key attributes = attributes.each_with_object({}) do |(k, v), h| unless self.class.attribute_map.key?(k.to_sym) raise ArgumentError, "`#{k}` is not a valid attribute in `Algolia::SourceIndex`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect end h[k.to_sym] = v end if attributes.key?(:index_name) self.index_name = attributes[:index_name] else self.index_name = nil end if attributes.key?(:replicas) self.replicas = attributes[:replicas] end if attributes.key?(:analytics_tags) if (value = attributes[:analytics_tags]).is_a?(Array) self.analytics_tags = value end end if attributes.key?(:facets) if (value = attributes[:facets]).is_a?(Array) self.facets = value end end if attributes.key?(:min_hits) self.min_hits = attributes[:min_hits] end if attributes.key?(:min_letters) self.min_letters = attributes[:min_letters] end if attributes.key?(:generate) if (value = attributes[:generate]).is_a?(Array) self.generate = value end end if attributes.key?(:external) if (value = attributes[:external]).is_a?(Array) self.external = value end end end # Custom attribute writer method with validation # @param [Object] min_hits Value to be assigned def min_hits=(min_hits) if min_hits.nil? raise ArgumentError, 'min_hits cannot be nil' end if min_hits < 0 raise ArgumentError, 'invalid value for "min_hits", must be greater than or equal to 0.' end @min_hits = min_hits end # Custom attribute writer method with validation # @param [Object] min_letters Value to be assigned def min_letters=(min_letters) if min_letters.nil? raise ArgumentError, 'min_letters cannot be nil' end if min_letters < 0 raise ArgumentError, 'invalid value for "min_letters", must be greater than or equal to 0.' end @min_letters = min_letters end # Checks equality by comparing each attribute. # @param [Object] Object to be compared def ==(other) return true if equal?(other) self.class == other.class && index_name == other.index_name && replicas == other.replicas && analytics_tags == other.analytics_tags && facets == other.facets && min_hits == other.min_hits && min_letters == other.min_letters && generate == other.generate && external == other.external end # @see the `==` method # @param [Object] Object to be compared def eql?(other) self == other end # Calculates hash code according to all attributes. # @return [Integer] Hash code def hash [index_name, replicas, analytics_tags, facets, min_hits, min_letters, generate, external].hash end # Builds the object from hash # @param [Hash] attributes Model attributes in the form of hash # @return [Object] Returns the model itself def self.build_from_hash(attributes) return nil unless attributes.is_a?(Hash) attributes = attributes.transform_keys(&:to_sym) transformed_hash = {} types_mapping.each_pair do |key, type| if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil? transformed_hash[key.to_sym] = nil elsif type =~ /\AArray<(.*)>/i # check to ensure the input is an array given that the attribute # is documented as an array but the input is not if attributes[attribute_map[key]].is_a?(Array) transformed_hash[key.to_sym] = attributes[attribute_map[key]].map { |v| _deserialize(::Regexp.last_match(1), v) } end elsif !attributes[attribute_map[key]].nil? transformed_hash[key.to_sym] = _deserialize(type, attributes[attribute_map[key]]) end end new(transformed_hash) end # Deserializes the data based on type # @param string type Data type # @param string value Value to be deserialized # @return [Object] Deserialized data def self._deserialize(type, value) case type.to_sym when :Time Time.parse(value) when :Date Date.parse(value) when :String value.to_s when :Integer value.to_i when :Float value.to_f when :Boolean if value.to_s =~ /\A(true|t|yes|y|1)\z/i true else false end when :Object # generic object (usually a Hash), return directly value when /\AArray<(?.+)>\z/ inner_type = Regexp.last_match[:inner_type] value.map { |v| _deserialize(inner_type, v) } when /\AHash<(?.+?), (?.+)>\z/ k_type = Regexp.last_match[:k_type] v_type = Regexp.last_match[:v_type] {}.tap do |hash| value.each do |k, v| hash[_deserialize(k_type, k)] = _deserialize(v_type, v) end end else # model # models (e.g. Pet) or oneOf klass = Algolia::QuerySuggestions.const_get(type) klass.respond_to?(:openapi_any_of) || klass.respond_to?(:openapi_one_of) ? klass.build(value) : klass.build_from_hash(value) end end # Returns the string representation of the object # @return [String] String presentation of the object def to_s to_hash.to_s end # to_body is an alias to to_hash (backward compatibility) # @return [Hash] Returns the object in the form of hash def to_body to_hash end def to_json(*_args) to_hash.to_json end # Returns the object in the form of hash # @return [Hash] Returns the object in the form of hash def to_hash hash = {} self.class.attribute_map.each_pair do |attr, param| value = send(attr) if value.nil? is_nullable = self.class.openapi_nullable.include?(attr) next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}")) end hash[param] = _to_hash(value) end hash end # Outputs non-array value in the form of hash # For object, use to_hash. Otherwise, just return the value # @param [Object] value Any valid value # @return [Hash] Returns the value in the form of hash def _to_hash(value) if value.is_a?(Array) value.compact.map { |v| _to_hash(v) } elsif value.is_a?(Hash) {}.tap do |hash| value.each { |k, v| hash[k] = _to_hash(v) } end elsif value.respond_to? :to_hash value.to_hash else value end end end end end