Class: MeiliSearch::Rails::IndexSettings
- Inherits:
-
Object
- Object
- MeiliSearch::Rails::IndexSettings
- Defined in:
- lib/meilisearch-rails.rb
Constant Summary collapse
- DEFAULT_BATCH_SIZE =
1000- DEFAULT_PRIMARY_KEY =
'id'.freeze
- OPTIONS =
Meilisearch settings
%i[ searchable_attributes filterable_attributes sortable_attributes displayed_attributes distinct_attribute synonyms stop_words ranking_rules attributes_to_highlight attributes_to_crop crop_length pagination faceting typo_tolerance ].freeze
- CAMELIZE_OPTIONS =
%i[pagination faceting typo_tolerance].freeze
Instance Method Summary collapse
- #active_record?(document) ⇒ Boolean
- #add_attribute(*names, &block) ⇒ Object (also: #add_attributes)
- #add_index(index_uid, options = {}, &block) ⇒ Object
- #additional_indexes ⇒ Object
- #attribute(*names, &block) ⇒ Object (also: #attributes)
- #attributes_to_hash(attributes, document) ⇒ Object
- #camelize_keys(hash) ⇒ Object
- #encode_attributes(value) ⇒ Object
- #get_attribute_names(document) ⇒ Object
- #get_attributes(document) ⇒ Object
- #get_default_attributes(document) ⇒ Object
- #get_setting(name) ⇒ Object
-
#initialize(options, &block) ⇒ IndexSettings
constructor
A new instance of IndexSettings.
- #mongoid?(document) ⇒ Boolean
- #sanitize_attributes(value) ⇒ Object
- #sequel?(document) ⇒ Boolean
- #to_settings ⇒ Object
- #use_serializer(serializer) ⇒ Object
Constructor Details
#initialize(options, &block) ⇒ IndexSettings
Returns a new instance of IndexSettings.
82 83 84 85 |
# File 'lib/meilisearch-rails.rb', line 82 def initialize(, &block) @options = instance_exec(&block) if block_given? end |
Instance Method Details
#active_record?(document) ⇒ Boolean
120 121 122 |
# File 'lib/meilisearch-rails.rb', line 120 def active_record?(document) !mongoid?(document) && !sequel?(document) end |
#add_attribute(*names, &block) ⇒ Object Also known as: add_attributes
102 103 104 105 106 107 108 109 |
# File 'lib/meilisearch-rails.rb', line 102 def add_attribute(*names, &block) raise ArgumentError, 'Cannot pass multiple attribute names if block given' if block_given? && (names.length > 1) @additional_attributes ||= {} names.each do |name| @additional_attributes[name.to_s] = block_given? ? proc { |d| d.instance_eval(&block) } : proc { |d| d.send(name) } end end |
#add_index(index_uid, options = {}, &block) ⇒ Object
231 232 233 234 235 236 237 238 239 240 |
# File 'lib/meilisearch-rails.rb', line 231 def add_index(index_uid, = {}, &block) raise ArgumentError, 'No block given' unless block_given? if [:auto_index] || [:auto_remove] raise ArgumentError, 'Options auto_index and auto_remove cannot be set on nested indexes' end @additional_indexes ||= {} [:index_uid] = index_uid @additional_indexes[] = IndexSettings.new(, &block) end |
#additional_indexes ⇒ Object
242 243 244 |
# File 'lib/meilisearch-rails.rb', line 242 def additional_indexes @additional_indexes || {} end |
#attribute(*names, &block) ⇒ Object Also known as: attributes
92 93 94 95 96 97 98 99 |
# File 'lib/meilisearch-rails.rb', line 92 def attribute(*names, &block) raise ArgumentError, 'Cannot pass multiple attribute names if block given' if block_given? && (names.length > 1) @attributes ||= {} names.flatten.each do |name| @attributes[name.to_s] = block_given? ? proc { |d| d.instance_eval(&block) } : proc { |d| d.send(name) } end end |
#attributes_to_hash(attributes, document) ⇒ Object
141 142 143 144 145 146 147 |
# File 'lib/meilisearch-rails.rb', line 141 def attributes_to_hash(attributes, document) if attributes attributes.to_h { |name, value| [name.to_s, value.call(document)] } else {} end end |
#camelize_keys(hash) ⇒ Object
207 208 209 |
# File 'lib/meilisearch-rails.rb', line 207 def camelize_keys(hash) hash.transform_keys { |key| key.to_s.camelize(:lower) } end |
#encode_attributes(value) ⇒ Object
190 191 192 193 194 195 196 197 198 199 200 201 |
# File 'lib/meilisearch-rails.rb', line 190 def encode_attributes(value) case value when String value.force_encoding('utf-8') when Hash value.each { |key, val| value[key] = encode_attributes(val) } when Array value.map { |x| encode_attributes(x) } else value end end |
#get_attribute_names(document) ⇒ Object
137 138 139 |
# File 'lib/meilisearch-rails.rb', line 137 def get_attribute_names(document) get_attributes(document).keys end |
#get_attributes(document) ⇒ Object
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 |
# File 'lib/meilisearch-rails.rb', line 149 def get_attributes(document) # If a serializer is set, we ignore attributes # everything should be done via the serializer if !@serializer.nil? attributes = @serializer.new(document).attributes elsif @attributes.blank? attributes = get_default_attributes(document) # no `attribute ...` have been configured, use the default attributes of the model elsif active_record?(document) # at least 1 `attribute ...` has been configured, therefore use ONLY the one configured document.class.unscoped do attributes = attributes_to_hash(@attributes, document) end else attributes = attributes_to_hash(@attributes, document) end attributes.merge!(attributes_to_hash(@additional_attributes, document)) if @additional_attributes if @options[:sanitize] attributes = sanitize_attributes(attributes) end attributes = encode_attributes(attributes) if @options[:force_utf8_encoding] attributes end |
#get_default_attributes(document) ⇒ Object
124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/meilisearch-rails.rb', line 124 def get_default_attributes(document) if mongoid?(document) # work-around mongoid 2.4's unscoped method, not accepting a block document.attributes elsif sequel?(document) document.to_hash else document.class.unscoped do document.attributes end end end |
#get_setting(name) ⇒ Object
203 204 205 |
# File 'lib/meilisearch-rails.rb', line 203 def get_setting(name) instance_variable_get("@#{name}") end |
#mongoid?(document) ⇒ Boolean
112 113 114 |
# File 'lib/meilisearch-rails.rb', line 112 def mongoid?(document) defined?(::Mongoid::Document) && document.class.include?(::Mongoid::Document) end |
#sanitize_attributes(value) ⇒ Object
177 178 179 180 181 182 183 184 185 186 187 188 |
# File 'lib/meilisearch-rails.rb', line 177 def sanitize_attributes(value) case value when String ActionView::Base.full_sanitizer.sanitize(value) when Hash value.each { |key, val| value[key] = sanitize_attributes(val) } when Array value.map { |item| sanitize_attributes(item) } else value end end |
#sequel?(document) ⇒ Boolean
116 117 118 |
# File 'lib/meilisearch-rails.rb', line 116 def sequel?(document) defined?(::Sequel::Model) && document.class < ::Sequel::Model end |
#to_settings ⇒ Object
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 |
# File 'lib/meilisearch-rails.rb', line 211 def to_settings settings = {} OPTIONS.each do |k| v = get_setting(k) next if v.nil? settings[k] = if CAMELIZE_OPTIONS.include?(k) && v.is_a?(Hash) v = camelize_keys(v) # camelize keys of nested hashes v.each do |key, value| v[key] = camelize_keys(value) if value.is_a?(Hash) end else v end end settings end |
#use_serializer(serializer) ⇒ Object
87 88 89 90 |
# File 'lib/meilisearch-rails.rb', line 87 def use_serializer(serializer) @serializer = serializer # instance_variable_set("@serializer", serializer) end |