meilisearch-rails 0.7.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/README.md +40 -2
 - data/lib/meilisearch/rails/configuration.rb +1 -0
 - data/lib/meilisearch/rails/version.rb +5 -1
 - data/lib/meilisearch-rails.rb +26 -7
 - data/meilisearch-rails.gemspec +1 -1
 - metadata +4 -4
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 2957f44b71394e8f2c6c3e3fa8aa3907b85ef4405c2cbb5230080383eebbe034
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 99ebb927e9194b10746355e5ba3ae44853fa4c1ee2e98f6818e910c073f01b8d
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: '08834c370f32354ad47eb1d904212e8535a5b47f89a705ad3aeb42bf7a4768b0dd51f4198b86855f3691c886ccac850f9ef88e6528433a90a9774d6d3bacff0c'
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 22ac7b9564df2fef7f23b5227578713d095492f615e9fa652c0d1fb55167d1d9188fda65e4b683db8d413cb38086e27930d1dd6077975b088fd89dfbd1ac8114
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -30,6 +30,7 @@ 
     | 
|
| 
       30 
30 
     | 
    
         
             
            - [📖 Documentation](#-documentation)
         
     | 
| 
       31 
31 
     | 
    
         
             
            - [🤖 Compatibility with Meilisearch](#-compatibility-with-meilisearch)
         
     | 
| 
       32 
32 
     | 
    
         
             
            - [🚀 Getting Started](#-getting-started)
         
     | 
| 
      
 33 
     | 
    
         
            +
            - [Compatibility](#-compatibility)
         
     | 
| 
       33 
34 
     | 
    
         
             
            - [⚙️ Settings](#️-settings)
         
     | 
| 
       34 
35 
     | 
    
         
             
            - [🔍 Custom search](#-custom-search)
         
     | 
| 
       35 
36 
     | 
    
         
             
            - [🪛 Options](#-options)
         
     | 
| 
         @@ -43,6 +44,7 @@ 
     | 
|
| 
       43 
44 
     | 
    
         
             
                - [Relations](#relations)
         
     | 
| 
       44 
45 
     | 
    
         
             
                - [Sanitize attributes](#sanitize-attributes)
         
     | 
| 
       45 
46 
     | 
    
         
             
                - [UTF-8 encoding](#utf-8-encoding)
         
     | 
| 
      
 47 
     | 
    
         
            +
                - [Eager loading](#eager-loading)
         
     | 
| 
       46 
48 
     | 
    
         
             
              - [Manual operations](#manual-operations)
         
     | 
| 
       47 
49 
     | 
    
         
             
                - [Indexing & deletion](#indexing--deletion)
         
     | 
| 
       48 
50 
     | 
    
         
             
                - [Access the underlying index object](#access-the-underlying-index-object)
         
     | 
| 
         @@ -190,6 +192,10 @@ MeiliSearch::Rails.configuration = { 
     | 
|
| 
       190 
192 
     | 
    
         
             
            }
         
     | 
| 
       191 
193 
     | 
    
         
             
            ```
         
     | 
| 
       192 
194 
     | 
    
         | 
| 
      
 195 
     | 
    
         
            +
            ## Compatibility
         
     | 
| 
      
 196 
     | 
    
         
            +
             
     | 
| 
      
 197 
     | 
    
         
            +
            If your model already has methods that meilisearch-rails defines such as `search` and `index`, they will not be redefined. You can target the meilisearch-rails-defined methods by prefixing with `ms_`, e.g. `Book.ms_search('harry potter')`.
         
     | 
| 
      
 198 
     | 
    
         
            +
             
     | 
| 
       193 
199 
     | 
    
         
             
            ## ⚙️ Settings
         
     | 
| 
       194 
200 
     | 
    
         | 
| 
       195 
201 
     | 
    
         
             
            You can configure the index settings by adding them inside the `meilisearch` block as shown below:
         
     | 
| 
         @@ -312,15 +318,33 @@ end 
     | 
|
| 
       312 
318 
     | 
    
         | 
| 
       313 
319 
     | 
    
         
             
            By default, the primary key is based on your record's id. You can change this behavior by specifying the `primary_key:` option.
         
     | 
| 
       314 
320 
     | 
    
         | 
| 
       315 
     | 
    
         
            -
            Note that the primary key must  
     | 
| 
      
 321 
     | 
    
         
            +
            Note that the primary key must return a **unique value** otherwise your data could be overwritten.
         
     | 
| 
       316 
322 
     | 
    
         | 
| 
       317 
323 
     | 
    
         
             
            ```ruby
         
     | 
| 
       318 
324 
     | 
    
         
             
            class Book < ActiveRecord::Base
         
     | 
| 
       319 
325 
     | 
    
         
             
              include MeiliSearch::Rails
         
     | 
| 
       320 
326 
     | 
    
         | 
| 
       321 
     | 
    
         
            -
              meilisearch primary_key:  
     | 
| 
      
 327 
     | 
    
         
            +
              meilisearch primary_key: :isbn # isbn is a column in your table definition.
         
     | 
| 
      
 328 
     | 
    
         
            +
            end
         
     | 
| 
      
 329 
     | 
    
         
            +
            ```
         
     | 
| 
      
 330 
     | 
    
         
            +
             
     | 
| 
      
 331 
     | 
    
         
            +
            You can also set the `primary_key` as a method, this method will be evaluated in runtime, and its return 
         
     | 
| 
      
 332 
     | 
    
         
            +
            will be used as the reference to the document when Meilisearch needs it.
         
     | 
| 
      
 333 
     | 
    
         
            +
             
     | 
| 
      
 334 
     | 
    
         
            +
            ```rb
         
     | 
| 
      
 335 
     | 
    
         
            +
            class Book < ActiveRecord::Base
         
     | 
| 
      
 336 
     | 
    
         
            +
              include MeiliSearch::Rails
         
     | 
| 
      
 337 
     | 
    
         
            +
             
     | 
| 
      
 338 
     | 
    
         
            +
              meilisearch primary_key: :my_custom_ms_id
         
     | 
| 
      
 339 
     | 
    
         
            +
             
     | 
| 
      
 340 
     | 
    
         
            +
              private
         
     | 
| 
      
 341 
     | 
    
         
            +
             
     | 
| 
      
 342 
     | 
    
         
            +
              def my_custom_ms_id
         
     | 
| 
      
 343 
     | 
    
         
            +
                "isbn_#{primary_key}" # ensure this return is unique, otherwise you'll lose data.
         
     | 
| 
      
 344 
     | 
    
         
            +
              end
         
     | 
| 
       322 
345 
     | 
    
         
             
            end
         
     | 
| 
       323 
346 
     | 
    
         
             
            ```
         
     | 
| 
      
 347 
     | 
    
         
            +
             
     | 
| 
       324 
348 
     | 
    
         
             
            #### Conditional indexing
         
     | 
| 
       325 
349 
     | 
    
         | 
| 
       326 
350 
     | 
    
         
             
            You can control if a record must be indexed by using the `if:` or `unless:` options.<br>
         
     | 
| 
         @@ -600,6 +624,20 @@ class Book < ActiveRecord::Base 
     | 
|
| 
       600 
624 
     | 
    
         
             
            end
         
     | 
| 
       601 
625 
     | 
    
         
             
            ```
         
     | 
| 
       602 
626 
     | 
    
         | 
| 
      
 627 
     | 
    
         
            +
            #### Eager loading
         
     | 
| 
      
 628 
     | 
    
         
            +
             
     | 
| 
      
 629 
     | 
    
         
            +
            You can eager load associations using `meilisearch_import` scope.
         
     | 
| 
      
 630 
     | 
    
         
            +
             
     | 
| 
      
 631 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 632 
     | 
    
         
            +
            class Author < ActiveRecord::Base
         
     | 
| 
      
 633 
     | 
    
         
            +
              include MeiliSearch::Rails
         
     | 
| 
      
 634 
     | 
    
         
            +
             
     | 
| 
      
 635 
     | 
    
         
            +
              has_many :books
         
     | 
| 
      
 636 
     | 
    
         
            +
             
     | 
| 
      
 637 
     | 
    
         
            +
              scope :meilisearch_import, -> { includes(:books) }
         
     | 
| 
      
 638 
     | 
    
         
            +
            end
         
     | 
| 
      
 639 
     | 
    
         
            +
            ```
         
     | 
| 
      
 640 
     | 
    
         
            +
             
     | 
| 
       603 
641 
     | 
    
         
             
            ### Manual operations
         
     | 
| 
       604 
642 
     | 
    
         | 
| 
       605 
643 
     | 
    
         
             
            #### Indexing & deletion
         
     | 
    
        data/lib/meilisearch-rails.rb
    CHANGED
    
    | 
         @@ -233,9 +233,13 @@ module MeiliSearch 
     | 
|
| 
       233 
233 
     | 
    
         
             
                  def initialize(index_uid, raise_on_failure, options)
         
     | 
| 
       234 
234 
     | 
    
         
             
                    client = MeiliSearch::Rails.client
         
     | 
| 
       235 
235 
     | 
    
         
             
                    primary_key = options[:primary_key] || MeiliSearch::Rails::IndexSettings::DEFAULT_PRIMARY_KEY
         
     | 
| 
       236 
     | 
    
         
            -
                    client.create_index(index_uid, { primaryKey: primary_key })
         
     | 
| 
       237 
     | 
    
         
            -
                    @index = client.index(index_uid)
         
     | 
| 
       238 
236 
     | 
    
         
             
                    @raise_on_failure = raise_on_failure.nil? || raise_on_failure
         
     | 
| 
      
 237 
     | 
    
         
            +
             
     | 
| 
      
 238 
     | 
    
         
            +
                    SafeIndex.log_or_throw(nil, @raise_on_failure) do
         
     | 
| 
      
 239 
     | 
    
         
            +
                      client.create_index(index_uid, { primary_key: primary_key })
         
     | 
| 
      
 240 
     | 
    
         
            +
                    end
         
     | 
| 
      
 241 
     | 
    
         
            +
             
     | 
| 
      
 242 
     | 
    
         
            +
                    @index = client.index(index_uid)
         
     | 
| 
       239 
243 
     | 
    
         
             
                  end
         
     | 
| 
       240 
244 
     | 
    
         | 
| 
       241 
245 
     | 
    
         
             
                  ::MeiliSearch::Index.instance_methods(false).each do |m|
         
     | 
| 
         @@ -273,7 +277,7 @@ module MeiliSearch 
     | 
|
| 
       273 
277 
     | 
    
         | 
| 
       274 
278 
     | 
    
         
             
                  def self.log_or_throw(method, raise_on_failure, &block)
         
     | 
| 
       275 
279 
     | 
    
         
             
                    yield
         
     | 
| 
       276 
     | 
    
         
            -
                  rescue ::MeiliSearch::ApiError => e
         
     | 
| 
      
 280 
     | 
    
         
            +
                  rescue ::MeiliSearch::TimeoutError, ::MeiliSearch::ApiError => e
         
     | 
| 
       277 
281 
     | 
    
         
             
                    raise e if raise_on_failure
         
     | 
| 
       278 
282 
     | 
    
         | 
| 
       279 
283 
     | 
    
         
             
                    # log the error
         
     | 
| 
         @@ -609,9 +613,6 @@ module MeiliSearch 
     | 
|
| 
       609 
613 
     | 
    
         
             
                    #  "processingTimeMs"=>0, "query"=>"iphone"}
         
     | 
| 
       610 
614 
     | 
    
         
             
                    json = ms_raw_search(query, params)
         
     | 
| 
       611 
615 
     | 
    
         | 
| 
       612 
     | 
    
         
            -
                    # Returns the ids of the hits: 13
         
     | 
| 
       613 
     | 
    
         
            -
                    hit_ids = json['hits'].map { |hit| hit[ms_pk(meilisearch_options).to_s] }
         
     | 
| 
       614 
     | 
    
         
            -
             
     | 
| 
       615 
616 
     | 
    
         
             
                    # condition_key gets the primary key of the document; looks for "id" on the options
         
     | 
| 
       616 
617 
     | 
    
         
             
                    condition_key = if defined?(::Mongoid::Document) && include?(::Mongoid::Document)
         
     | 
| 
       617 
618 
     | 
    
         
             
                                      ms_primary_key_method.in
         
     | 
| 
         @@ -619,6 +620,23 @@ module MeiliSearch 
     | 
|
| 
       619 
620 
     | 
    
         
             
                                      ms_primary_key_method
         
     | 
| 
       620 
621 
     | 
    
         
             
                                    end
         
     | 
| 
       621 
622 
     | 
    
         | 
| 
      
 623 
     | 
    
         
            +
                    # The condition_key must be a valid column otherwise, the `.where` below will not work
         
     | 
| 
      
 624 
     | 
    
         
            +
                    # Since we provide a way to customize the primary_key value, `ms_pk(meilisearch_options)` may not
         
     | 
| 
      
 625 
     | 
    
         
            +
                    # respond with a valid database column. The blocks below prevent that from happening.
         
     | 
| 
      
 626 
     | 
    
         
            +
                    has_virtual_column_as_pk = if defined?(::Sequel::Model) && self < Sequel::Model
         
     | 
| 
      
 627 
     | 
    
         
            +
                                                 meilisearch_options[:type].columns.map(&:to_s).exclude?(condition_key.to_s)
         
     | 
| 
      
 628 
     | 
    
         
            +
                                               else
         
     | 
| 
      
 629 
     | 
    
         
            +
                                                 meilisearch_options[:type].columns.map(&:name).map(&:to_s).exclude?(condition_key.to_s)
         
     | 
| 
      
 630 
     | 
    
         
            +
                                               end
         
     | 
| 
      
 631 
     | 
    
         
            +
             
     | 
| 
      
 632 
     | 
    
         
            +
                    condition_key = meilisearch_options[:type].primary_key if has_virtual_column_as_pk
         
     | 
| 
      
 633 
     | 
    
         
            +
             
     | 
| 
      
 634 
     | 
    
         
            +
                    hit_ids = if has_virtual_column_as_pk
         
     | 
| 
      
 635 
     | 
    
         
            +
                                json['hits'].map { |hit| hit[condition_key] }
         
     | 
| 
      
 636 
     | 
    
         
            +
                              else
         
     | 
| 
      
 637 
     | 
    
         
            +
                                json['hits'].map { |hit| hit[ms_pk(meilisearch_options).to_s] }
         
     | 
| 
      
 638 
     | 
    
         
            +
                              end
         
     | 
| 
      
 639 
     | 
    
         
            +
             
     | 
| 
       622 
640 
     | 
    
         
             
                    # meilisearch_options[:type] refers to the Model name (e.g. Product)
         
     | 
| 
       623 
641 
     | 
    
         
             
                    # results_by_id creates a hash with the primaryKey of the document (id) as the key and doc itself as the value
         
     | 
| 
       624 
642 
     | 
    
         
             
                    # {"13"=>#<Product id: 13, name: "iphone", href: "apple", tags: nil, type: nil,
         
     | 
| 
         @@ -827,7 +845,8 @@ module MeiliSearch 
     | 
|
| 
       827 
845 
     | 
    
         | 
| 
       828 
846 
     | 
    
         
             
                  def ms_find_in_batches(batch_size, &block)
         
     | 
| 
       829 
847 
     | 
    
         
             
                    if (defined?(::ActiveRecord) && ancestors.include?(::ActiveRecord::Base)) || respond_to?(:find_in_batches)
         
     | 
| 
       830 
     | 
    
         
            -
                       
     | 
| 
      
 848 
     | 
    
         
            +
                      scope = respond_to?(:meilisearch_import) ? meilisearch_import : all
         
     | 
| 
      
 849 
     | 
    
         
            +
                      scope.find_in_batches(batch_size: batch_size, &block)
         
     | 
| 
       831 
850 
     | 
    
         
             
                    elsif defined?(::Sequel::Model) && self < Sequel::Model
         
     | 
| 
       832 
851 
     | 
    
         
             
                      dataset.extension(:pagination).each_page(batch_size, &block)
         
     | 
| 
       833 
852 
     | 
    
         
             
                    else
         
     | 
    
        data/meilisearch-rails.gemspec
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: meilisearch-rails
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.7. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.7.1
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Meili
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2022- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2022-08-01 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: meilisearch
         
     | 
| 
         @@ -16,14 +16,14 @@ dependencies: 
     | 
|
| 
       16 
16 
     | 
    
         
             
                requirements:
         
     | 
| 
       17 
17 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       18 
18 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       19 
     | 
    
         
            -
                    version:  
     | 
| 
      
 19 
     | 
    
         
            +
                    version: 0.19.2
         
     | 
| 
       20 
20 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       21 
21 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       22 
22 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       23 
23 
     | 
    
         
             
                requirements:
         
     | 
| 
       24 
24 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       25 
25 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       26 
     | 
    
         
            -
                    version:  
     | 
| 
      
 26 
     | 
    
         
            +
                    version: 0.19.2
         
     | 
| 
       27 
27 
     | 
    
         
             
            description: Meilisearch integration for Ruby on Rails. See https://github.com/meilisearch/meilisearch
         
     | 
| 
       28 
28 
     | 
    
         
             
            email: bonjour@meilisearch.com
         
     | 
| 
       29 
29 
     | 
    
         
             
            executables: []
         
     |