elasticsearch-model 0.1.8 → 0.1.9
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/CHANGELOG.md +8 -0
 - data/README.md +1 -1
 - data/elasticsearch-model.gemspec +1 -1
 - data/gemfiles/3.0.gemfile +1 -0
 - data/gemfiles/4.0.gemfile +1 -0
 - data/lib/elasticsearch/model.rb +1 -0
 - data/lib/elasticsearch/model/adapters/active_record.rb +7 -0
 - data/lib/elasticsearch/model/importing.rb +2 -2
 - data/lib/elasticsearch/model/indexing.rb +1 -1
 - data/lib/elasticsearch/model/proxy.rb +9 -0
 - data/lib/elasticsearch/model/response.rb +8 -2
 - data/lib/elasticsearch/model/response/pagination.rb +2 -2
 - data/lib/elasticsearch/model/response/records.rb +3 -0
 - data/lib/elasticsearch/model/response/suggestions.rb +13 -0
 - data/lib/elasticsearch/model/version.rb +1 -1
 - data/test/integration/active_record_associations_test.rb +20 -1
 - data/test/integration/active_record_basic_test.rb +17 -5
 - data/test/unit/adapter_active_record_test.rb +10 -0
 - data/test/unit/indexing_test.rb +8 -0
 - data/test/unit/proxy_test.rb +11 -0
 - data/test/unit/response_pagination_kaminari_test.rb +44 -0
 - data/test/unit/response_test.rb +28 -1
 - metadata +7 -6
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: e6ee0c4e1aa23d578d305367880c00683f8722eb
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: e55f679c7973d5381225ca46514dd3d901a65aa4
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: e1bb3398d41326acb683669d4becd275f2f6bb9c4ef4ac8148d810c056d8e59df3ee0647f0dabaeb681d29cd94eff8fee7498fbc09cd3ec91a9abd2986bce953
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 7c7f7e24165e04f86494f5458944155cfa4c36f1e15acd58ede28d27372172885f74c74d1af16d6786960c0402eb0f58a24f223b58a3f865a61cb4a9f5851878
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -1,3 +1,11 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ## 0.1.9
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            * Added a `suggest` method to wrap the suggestions in response
         
     | 
| 
      
 4 
     | 
    
         
            +
            * Added the `:includes` option to Adapter::ActiveRecord::Records for eagerly loading associated models
         
     | 
| 
      
 5 
     | 
    
         
            +
            * Delegated `max_pages` method properly for Kaminari's `next_page`
         
     | 
| 
      
 6 
     | 
    
         
            +
            * Fixed `#dup` behaviour for Elasticsearch::Model
         
     | 
| 
      
 7 
     | 
    
         
            +
            * Fixed typos in the README and examples
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       1 
9 
     | 
    
         
             
            ## 0.1.8
         
     | 
| 
       2 
10 
     | 
    
         | 
| 
       3 
11 
     | 
    
         
             
            * Added "default per page" methods for pagination with multi model searches
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -229,7 +229,7 @@ response.records.records.class 
     | 
|
| 
       229 
229 
     | 
    
         
             
            # => ActiveRecord::Relation::ActiveRecord_Relation_Article
         
     | 
| 
       230 
230 
     | 
    
         
             
            ```
         
     | 
| 
       231 
231 
     | 
    
         | 
| 
       232 
     | 
    
         
            -
            The ordering of the records by score will be preserved, unless you  
     | 
| 
      
 232 
     | 
    
         
            +
            The ordering of the records by score will be preserved, unless you explicitly specify a different
         
     | 
| 
       233 
233 
     | 
    
         
             
            order in your model query language:
         
     | 
| 
       234 
234 
     | 
    
         | 
| 
       235 
235 
     | 
    
         
             
            ```ruby
         
     | 
    
        data/elasticsearch-model.gemspec
    CHANGED
    
    | 
         @@ -28,7 +28,7 @@ Gem::Specification.new do |s| 
     | 
|
| 
       28 
28 
     | 
    
         
             
              s.add_dependency "hashie"
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
              s.add_development_dependency "bundler", "~> 1.3"
         
     | 
| 
       31 
     | 
    
         
            -
              s.add_development_dependency "rake"
         
     | 
| 
      
 31 
     | 
    
         
            +
              s.add_development_dependency "rake", "< 11.0"
         
     | 
| 
       32 
32 
     | 
    
         | 
| 
       33 
33 
     | 
    
         
             
              s.add_development_dependency "elasticsearch-extensions"
         
     | 
| 
       34 
34 
     | 
    
         | 
    
        data/gemfiles/3.0.gemfile
    CHANGED
    
    
    
        data/gemfiles/4.0.gemfile
    CHANGED
    
    
    
        data/lib/elasticsearch/model.rb
    CHANGED
    
    | 
         @@ -31,6 +31,7 @@ require 'elasticsearch/model/response/result' 
     | 
|
| 
       31 
31 
     | 
    
         
             
            require 'elasticsearch/model/response/results'
         
     | 
| 
       32 
32 
     | 
    
         
             
            require 'elasticsearch/model/response/records'
         
     | 
| 
       33 
33 
     | 
    
         
             
            require 'elasticsearch/model/response/pagination'
         
     | 
| 
      
 34 
     | 
    
         
            +
            require 'elasticsearch/model/response/suggestions'
         
     | 
| 
       34 
35 
     | 
    
         | 
| 
       35 
36 
     | 
    
         
             
            require 'elasticsearch/model/ext/active_record'
         
     | 
| 
       36 
37 
     | 
    
         | 
| 
         @@ -10,10 +10,17 @@ module Elasticsearch 
     | 
|
| 
       10 
10 
     | 
    
         
             
                                     lambda { |klass| !!defined?(::ActiveRecord::Base) && klass.respond_to?(:ancestors) && klass.ancestors.include?(::ActiveRecord::Base) }
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
                    module Records
         
     | 
| 
      
 13 
     | 
    
         
            +
                      attr_writer :options
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                      def options
         
     | 
| 
      
 16 
     | 
    
         
            +
                        @options ||= {}
         
     | 
| 
      
 17 
     | 
    
         
            +
                      end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
       13 
19 
     | 
    
         
             
                      # Returns an `ActiveRecord::Relation` instance
         
     | 
| 
       14 
20 
     | 
    
         
             
                      #
         
     | 
| 
       15 
21 
     | 
    
         
             
                      def records
         
     | 
| 
       16 
22 
     | 
    
         
             
                        sql_records = klass.where(klass.primary_key => ids)
         
     | 
| 
      
 23 
     | 
    
         
            +
                        sql_records = sql_records.includes(self.options[:includes]) if self.options[:includes]
         
     | 
| 
       17 
24 
     | 
    
         | 
| 
       18 
25 
     | 
    
         
             
                        # Re-order records based on the order from Elasticsearch hits
         
     | 
| 
       19 
26 
     | 
    
         
             
                        # by redefining `to_a`, unless the user has called `order()`
         
     | 
| 
         @@ -84,7 +84,7 @@ module Elasticsearch 
     | 
|
| 
       84 
84 
     | 
    
         
             
                    #
         
     | 
| 
       85 
85 
     | 
    
         
             
                    #     class Article
         
     | 
| 
       86 
86 
     | 
    
         
             
                    #       # ...
         
     | 
| 
       87 
     | 
    
         
            -
                    #       def enrich(batch)
         
     | 
| 
      
 87 
     | 
    
         
            +
                    #       def self.enrich(batch)
         
     | 
| 
       88 
88 
     | 
    
         
             
                    #         batch.each do |item|
         
     | 
| 
       89 
89 
     | 
    
         
             
                    #           item.metadata = MyAPI.get_metadata(item.id)
         
     | 
| 
       90 
90 
     | 
    
         
             
                    #         end
         
     | 
| 
         @@ -92,7 +92,7 @@ module Elasticsearch 
     | 
|
| 
       92 
92 
     | 
    
         
             
                    #       end
         
     | 
| 
       93 
93 
     | 
    
         
             
                    #     end
         
     | 
| 
       94 
94 
     | 
    
         
             
                    #
         
     | 
| 
       95 
     | 
    
         
            -
                    #    Article.import preprocess: enrich
         
     | 
| 
      
 95 
     | 
    
         
            +
                    #    Article.import preprocess: :enrich
         
     | 
| 
       96 
96 
     | 
    
         
             
                    #
         
     | 
| 
       97 
97 
     | 
    
         
             
                    # @example Return an array of error elements instead of the number of errors, eg.
         
     | 
| 
       98 
98 
     | 
    
         
             
                    #          to try importing these records again
         
     | 
| 
         @@ -52,7 +52,7 @@ module Elasticsearch 
     | 
|
| 
       52 
52 
     | 
    
         | 
| 
       53 
53 
     | 
    
         
             
                      if block_given?
         
     | 
| 
       54 
54 
     | 
    
         
             
                        @mapping[name][:type] ||= 'object'
         
     | 
| 
       55 
     | 
    
         
            -
                        properties = TYPES_WITH_EMBEDDED_PROPERTIES.include?(@mapping[name][:type]) ? :properties : :fields
         
     | 
| 
      
 55 
     | 
    
         
            +
                        properties = TYPES_WITH_EMBEDDED_PROPERTIES.include?(@mapping[name][:type].to_s) ? :properties : :fields
         
     | 
| 
       56 
56 
     | 
    
         | 
| 
       57 
57 
     | 
    
         
             
                        @mapping[name][properties] ||= {}
         
     | 
| 
       58 
58 
     | 
    
         | 
| 
         @@ -66,6 +66,15 @@ module Elasticsearch 
     | 
|
| 
       66 
66 
     | 
    
         
             
                    end
         
     | 
| 
       67 
67 
     | 
    
         
             
                  end
         
     | 
| 
       68 
68 
     | 
    
         | 
| 
      
 69 
     | 
    
         
            +
                  # @overload dup
         
     | 
| 
      
 70 
     | 
    
         
            +
                  #
         
     | 
| 
      
 71 
     | 
    
         
            +
                  # Returns a copy of this object. Resets the __elasticsearch__ proxy so
         
     | 
| 
      
 72 
     | 
    
         
            +
                  # the duplicate will build its own proxy.
         
     | 
| 
      
 73 
     | 
    
         
            +
                  def initialize_dup(_)
         
     | 
| 
      
 74 
     | 
    
         
            +
                    @__elasticsearch__ = nil
         
     | 
| 
      
 75 
     | 
    
         
            +
                    super
         
     | 
| 
      
 76 
     | 
    
         
            +
                  end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
       69 
78 
     | 
    
         
             
                  # Common module for the proxy classes
         
     | 
| 
       70 
79 
     | 
    
         
             
                  #
         
     | 
| 
       71 
80 
     | 
    
         
             
                  module Base
         
     | 
| 
         @@ -44,8 +44,8 @@ module Elasticsearch 
     | 
|
| 
       44 
44 
     | 
    
         
             
                    #
         
     | 
| 
       45 
45 
     | 
    
         
             
                    # @return [Records]
         
     | 
| 
       46 
46 
     | 
    
         
             
                    #
         
     | 
| 
       47 
     | 
    
         
            -
                    def records
         
     | 
| 
       48 
     | 
    
         
            -
                      @records ||= Records.new(klass, self)
         
     | 
| 
      
 47 
     | 
    
         
            +
                    def records(options = {})
         
     | 
| 
      
 48 
     | 
    
         
            +
                      @records ||= Records.new(klass, self, options)
         
     | 
| 
       49 
49 
     | 
    
         
             
                    end
         
     | 
| 
       50 
50 
     | 
    
         | 
| 
       51 
51 
     | 
    
         
             
                    # Returns the "took" time
         
     | 
| 
         @@ -71,6 +71,12 @@ module Elasticsearch 
     | 
|
| 
       71 
71 
     | 
    
         
             
                    def aggregations
         
     | 
| 
       72 
72 
     | 
    
         
             
                      response['aggregations'] ? Hashie::Mash.new(response['aggregations']) : nil
         
     | 
| 
       73 
73 
     | 
    
         
             
                    end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                    # Returns a Hashie::Mash of the suggestions
         
     | 
| 
      
 76 
     | 
    
         
            +
                    #
         
     | 
| 
      
 77 
     | 
    
         
            +
                    def suggestions
         
     | 
| 
      
 78 
     | 
    
         
            +
                      Suggestions.new(response['suggest'])
         
     | 
| 
      
 79 
     | 
    
         
            +
                    end
         
     | 
| 
       74 
80 
     | 
    
         
             
                  end
         
     | 
| 
       75 
81 
     | 
    
         
             
                end
         
     | 
| 
       76 
82 
     | 
    
         
             
              end
         
     | 
| 
         @@ -20,8 +20,8 @@ module Elasticsearch 
     | 
|
| 
       20 
20 
     | 
    
         
             
                        Elasticsearch::Model::Response::Results.__send__ :include, ::Kaminari::PageScopeMethods
         
     | 
| 
       21 
21 
     | 
    
         
             
                        Elasticsearch::Model::Response::Records.__send__ :include, ::Kaminari::PageScopeMethods
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
                        Elasticsearch::Model::Response::Results.__send__ :delegate, :limit_value, :offset_value, :total_count, to: :response
         
     | 
| 
       24 
     | 
    
         
            -
                        Elasticsearch::Model::Response::Records.__send__ :delegate, :limit_value, :offset_value, :total_count, to: :response
         
     | 
| 
      
 23 
     | 
    
         
            +
                        Elasticsearch::Model::Response::Results.__send__ :delegate, :limit_value, :offset_value, :total_count, :max_pages, to: :response
         
     | 
| 
      
 24 
     | 
    
         
            +
                        Elasticsearch::Model::Response::Records.__send__ :delegate, :limit_value, :offset_value, :total_count, :max_pages, to: :response
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
26 
     | 
    
         
             
                        base.class_eval <<-RUBY, __FILE__, __LINE__ + 1
         
     | 
| 
       27 
27 
     | 
    
         
             
                          # Define the `page` Kaminari method
         
     | 
| 
         @@ -12,6 +12,8 @@ module Elasticsearch 
     | 
|
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
                    delegate :each, :empty?, :size, :slice, :[], :to_a, :to_ary, to: :records
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
      
 15 
     | 
    
         
            +
                    attr_accessor :options
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
       15 
17 
     | 
    
         
             
                    include Base
         
     | 
| 
       16 
18 
     | 
    
         | 
| 
       17 
19 
     | 
    
         
             
                    # @see Base#initialize
         
     | 
| 
         @@ -25,6 +27,7 @@ module Elasticsearch 
     | 
|
| 
       25 
27 
     | 
    
         
             
                      metaclass = class << self; self; end
         
     | 
| 
       26 
28 
     | 
    
         
             
                      metaclass.__send__ :include, adapter.records_mixin
         
     | 
| 
       27 
29 
     | 
    
         | 
| 
      
 30 
     | 
    
         
            +
                      self.options = options
         
     | 
| 
       28 
31 
     | 
    
         
             
                      self
         
     | 
| 
       29 
32 
     | 
    
         
             
                    end
         
     | 
| 
       30 
33 
     | 
    
         | 
| 
         @@ -133,11 +133,16 @@ module Elasticsearch 
     | 
|
| 
       133 
133 
     | 
    
         
             
                      # Include the search integration
         
     | 
| 
       134 
134 
     | 
    
         
             
                      #
         
     | 
| 
       135 
135 
     | 
    
         
             
                      Post.__send__ :include, Searchable
         
     | 
| 
      
 136 
     | 
    
         
            +
                      Comment.__send__ :include, Elasticsearch::Model
         
     | 
| 
      
 137 
     | 
    
         
            +
                      Comment.__send__ :include, Elasticsearch::Model::Callbacks
         
     | 
| 
       136 
138 
     | 
    
         | 
| 
       137 
     | 
    
         
            -
                      # ----- Reset the  
     | 
| 
      
 139 
     | 
    
         
            +
                      # ----- Reset the indices -----------------------------------------------------------------
         
     | 
| 
       138 
140 
     | 
    
         | 
| 
       139 
141 
     | 
    
         
             
                      Post.delete_all
         
     | 
| 
       140 
142 
     | 
    
         
             
                      Post.__elasticsearch__.create_index! force: true
         
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
      
 144 
     | 
    
         
            +
                      Comment.delete_all
         
     | 
| 
      
 145 
     | 
    
         
            +
                      Comment.__elasticsearch__.create_index! force: true
         
     | 
| 
       141 
146 
     | 
    
         
             
                    end
         
     | 
| 
       142 
147 
     | 
    
         | 
| 
       143 
148 
     | 
    
         
             
                    should "index and find a document" do
         
     | 
| 
         @@ -300,6 +305,20 @@ module Elasticsearch 
     | 
|
| 
       300 
305 
     | 
    
         
             
                      assert_equal 0, Post.search('categories:One').size
         
     | 
| 
       301 
306 
     | 
    
         
             
                      assert_equal 1, Post.search('categories:Updated').size
         
     | 
| 
       302 
307 
     | 
    
         
             
                    end
         
     | 
| 
      
 308 
     | 
    
         
            +
             
     | 
| 
      
 309 
     | 
    
         
            +
                    should "eagerly load associated records" do
         
     | 
| 
      
 310 
     | 
    
         
            +
                      post_1 = Post.create(title: 'One')
         
     | 
| 
      
 311 
     | 
    
         
            +
                      post_2 = Post.create(title: 'Two')
         
     | 
| 
      
 312 
     | 
    
         
            +
                      post_1.comments.create text: 'First comment'
         
     | 
| 
      
 313 
     | 
    
         
            +
                      post_1.comments.create text: 'Second comment'
         
     | 
| 
      
 314 
     | 
    
         
            +
             
     | 
| 
      
 315 
     | 
    
         
            +
                      Comment.__elasticsearch__.refresh_index!
         
     | 
| 
      
 316 
     | 
    
         
            +
             
     | 
| 
      
 317 
     | 
    
         
            +
                      records = Comment.search('first').records(includes: :post)
         
     | 
| 
      
 318 
     | 
    
         
            +
             
     | 
| 
      
 319 
     | 
    
         
            +
                      assert records.first.association(:post).loaded?, "The associated Post should be eagerly loaded"
         
     | 
| 
      
 320 
     | 
    
         
            +
                      assert_equal 'One', records.first.post.title
         
     | 
| 
      
 321 
     | 
    
         
            +
                    end
         
     | 
| 
       303 
322 
     | 
    
         
             
                  end
         
     | 
| 
       304 
323 
     | 
    
         | 
| 
       305 
324 
     | 
    
         
             
                end
         
     | 
| 
         @@ -22,11 +22,18 @@ module Elasticsearch 
     | 
|
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
                        settings index: { number_of_shards: 1, number_of_replicas: 0 } do
         
     | 
| 
       24 
24 
     | 
    
         
             
                          mapping do
         
     | 
| 
       25 
     | 
    
         
            -
                            indexes :title, 
     | 
| 
       26 
     | 
    
         
            -
                            indexes :body, 
     | 
| 
       27 
     | 
    
         
            -
                            indexes :created_at, 
     | 
| 
      
 25 
     | 
    
         
            +
                            indexes :title,         type: 'string', analyzer: 'snowball'
         
     | 
| 
      
 26 
     | 
    
         
            +
                            indexes :body,          type: 'string'
         
     | 
| 
      
 27 
     | 
    
         
            +
                            indexes :created_at,    type: 'date'
         
     | 
| 
       28 
28 
     | 
    
         
             
                          end
         
     | 
| 
       29 
29 
     | 
    
         
             
                        end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                        def as_indexed_json(options = {})
         
     | 
| 
      
 32 
     | 
    
         
            +
                          attributes
         
     | 
| 
      
 33 
     | 
    
         
            +
                            .symbolize_keys
         
     | 
| 
      
 34 
     | 
    
         
            +
                            .slice(:title, :body, :created_at)
         
     | 
| 
      
 35 
     | 
    
         
            +
                            .merge(suggest_title: title)
         
     | 
| 
      
 36 
     | 
    
         
            +
                        end
         
     | 
| 
       30 
37 
     | 
    
         
             
                      end
         
     | 
| 
       31 
38 
     | 
    
         | 
| 
       32 
39 
     | 
    
         
             
                      Article.delete_all
         
     | 
| 
         @@ -210,10 +217,15 @@ module Elasticsearch 
     | 
|
| 
       210 
217 
     | 
    
         | 
| 
       211 
218 
     | 
    
         
             
                    should "allow dot access to response" do
         
     | 
| 
       212 
219 
     | 
    
         
             
                      response = Article.search query: { match: { title: { query: 'test' } } },
         
     | 
| 
       213 
     | 
    
         
            -
                                                aggregations: { dates: { date_histogram: { field: 'created_at', interval: 'hour' } } }
         
     | 
| 
      
 220 
     | 
    
         
            +
                                                aggregations: { dates: { date_histogram: { field: 'created_at', interval: 'hour' } } },
         
     | 
| 
      
 221 
     | 
    
         
            +
                                                suggest: { text: 'tezt', title: { term: { field: 'title', suggest_mode: 'always' } } }
         
     | 
| 
       214 
222 
     | 
    
         | 
| 
       215 
223 
     | 
    
         
             
                      response.response.respond_to?(:aggregations)
         
     | 
| 
       216 
     | 
    
         
            -
                      assert_equal 2, response. 
     | 
| 
      
 224 
     | 
    
         
            +
                      assert_equal 2, response.aggregations.dates.buckets.first.doc_count
         
     | 
| 
      
 225 
     | 
    
         
            +
             
     | 
| 
      
 226 
     | 
    
         
            +
                      response.response.respond_to?(:suggest)
         
     | 
| 
      
 227 
     | 
    
         
            +
                      assert_equal 1, response.suggestions.title.first.options.size
         
     | 
| 
      
 228 
     | 
    
         
            +
                      assert_equal ['test'], response.suggestions.terms
         
     | 
| 
       217 
229 
     | 
    
         
             
                    end
         
     | 
| 
       218 
230 
     | 
    
         
             
                  end
         
     | 
| 
       219 
231 
     | 
    
         | 
| 
         @@ -51,6 +51,16 @@ class Elasticsearch::Model::AdapterActiveRecordTest < Test::Unit::TestCase 
     | 
|
| 
       51 
51 
     | 
    
         
             
                    instance.load
         
     | 
| 
       52 
52 
     | 
    
         
             
                  end
         
     | 
| 
       53 
53 
     | 
    
         | 
| 
      
 54 
     | 
    
         
            +
                  should "load the records with its submodels when using :includes" do
         
     | 
| 
      
 55 
     | 
    
         
            +
                    klass    = mock('class', primary_key: :some_key, where: @records)
         
     | 
| 
      
 56 
     | 
    
         
            +
                    @records.expects(:includes).with([:submodel]).at_least_once
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                    instance = DummyClassForActiveRecord.new
         
     | 
| 
      
 59 
     | 
    
         
            +
                    instance.expects(:klass).returns(klass).at_least_once
         
     | 
| 
      
 60 
     | 
    
         
            +
                    instance.options[:includes] = [:submodel]
         
     | 
| 
      
 61 
     | 
    
         
            +
                    instance.records
         
     | 
| 
      
 62 
     | 
    
         
            +
                  end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
       54 
64 
     | 
    
         
             
                  should "reorder the records based on hits order" do
         
     | 
| 
       55 
65 
     | 
    
         
             
                    @records.instance_variable_set(:@records, @records)
         
     | 
| 
       56 
66 
     | 
    
         | 
    
        data/test/unit/indexing_test.rb
    CHANGED
    
    | 
         @@ -127,6 +127,10 @@ class Elasticsearch::Model::IndexingTest < Test::Unit::TestCase 
     | 
|
| 
       127 
127 
     | 
    
         
             
                      indexes :bar
         
     | 
| 
       128 
128 
     | 
    
         
             
                    end
         
     | 
| 
       129 
129 
     | 
    
         | 
| 
      
 130 
     | 
    
         
            +
                    mappings.indexes :foo_nested_as_symbol, type: :nested do
         
     | 
| 
      
 131 
     | 
    
         
            +
                      indexes :bar
         
     | 
| 
      
 132 
     | 
    
         
            +
                    end
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
       130 
134 
     | 
    
         
             
                    # Object is the default when `type` is missing and there's a block passed
         
     | 
| 
       131 
135 
     | 
    
         
             
                    #
         
     | 
| 
       132 
136 
     | 
    
         
             
                    assert_equal 'object', mappings.to_hash[:mytype][:properties][:foo][:type]
         
     | 
| 
         @@ -140,6 +144,10 @@ class Elasticsearch::Model::IndexingTest < Test::Unit::TestCase 
     | 
|
| 
       140 
144 
     | 
    
         
             
                    assert_equal 'nested', mappings.to_hash[:mytype][:properties][:foo_nested][:type]
         
     | 
| 
       141 
145 
     | 
    
         
             
                    assert_equal 'string', mappings.to_hash[:mytype][:properties][:foo_nested][:properties][:bar][:type]
         
     | 
| 
       142 
146 
     | 
    
         
             
                    assert_nil             mappings.to_hash[:mytype][:properties][:foo_nested][:fields]
         
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
                    assert_equal :nested, mappings.to_hash[:mytype][:properties][:foo_nested_as_symbol][:type]
         
     | 
| 
      
 149 
     | 
    
         
            +
                    assert_not_nil        mappings.to_hash[:mytype][:properties][:foo_nested_as_symbol][:properties]
         
     | 
| 
      
 150 
     | 
    
         
            +
                    assert_nil            mappings.to_hash[:mytype][:properties][:foo_nested_as_symbol][:fields]
         
     | 
| 
       143 
151 
     | 
    
         
             
                  end
         
     | 
| 
       144 
152 
     | 
    
         
             
                end
         
     | 
| 
       145 
153 
     | 
    
         | 
    
        data/test/unit/proxy_test.rb
    CHANGED
    
    | 
         @@ -69,6 +69,17 @@ class Elasticsearch::Model::SearchTest < Test::Unit::TestCase 
     | 
|
| 
       69 
69 
     | 
    
         
             
                  assert_equal 'insta barr', DummyProxyModel.new.__elasticsearch__.bar
         
     | 
| 
       70 
70 
     | 
    
         
             
                end
         
     | 
| 
       71 
71 
     | 
    
         | 
| 
      
 72 
     | 
    
         
            +
                should "reset the proxy target for duplicates" do
         
     | 
| 
      
 73 
     | 
    
         
            +
                  model = DummyProxyModel.new
         
     | 
| 
      
 74 
     | 
    
         
            +
                  model_target = model.__elasticsearch__.target
         
     | 
| 
      
 75 
     | 
    
         
            +
                  duplicate = model.dup
         
     | 
| 
      
 76 
     | 
    
         
            +
                  duplicate_target = duplicate.__elasticsearch__.target
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                  assert_not_equal model, duplicate
         
     | 
| 
      
 79 
     | 
    
         
            +
                  assert_equal model, model_target
         
     | 
| 
      
 80 
     | 
    
         
            +
                  assert_equal duplicate, duplicate_target
         
     | 
| 
      
 81 
     | 
    
         
            +
                end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
       72 
83 
     | 
    
         
             
                should "return the proxy class from instance proxy" do
         
     | 
| 
       73 
84 
     | 
    
         
             
                  assert_equal Elasticsearch::Model::Proxy::ClassMethodsProxy, DummyProxyModel.new.__elasticsearch__.class.class
         
     | 
| 
       74 
85 
     | 
    
         
             
                end
         
     | 
| 
         @@ -194,6 +194,17 @@ class Elasticsearch::Model::ResponsePaginationKaminariTest < Test::Unit::TestCas 
     | 
|
| 
       194 
194 
     | 
    
         | 
| 
       195 
195 
     | 
    
         
             
                    assert_equal 5, @response.page(5).results.current_page
         
     | 
| 
       196 
196 
     | 
    
         
             
                  end
         
     | 
| 
      
 197 
     | 
    
         
            +
             
     | 
| 
      
 198 
     | 
    
         
            +
                  should "return previous page and next page" do
         
     | 
| 
      
 199 
     | 
    
         
            +
                    assert_equal nil, @response.page(1).results.prev_page
         
     | 
| 
      
 200 
     | 
    
         
            +
                    assert_equal 2, @response.page(1).results.next_page
         
     | 
| 
      
 201 
     | 
    
         
            +
             
     | 
| 
      
 202 
     | 
    
         
            +
                    assert_equal 3, @response.page(4).results.prev_page
         
     | 
| 
      
 203 
     | 
    
         
            +
                    assert_equal nil, @response.page(4).results.next_page
         
     | 
| 
      
 204 
     | 
    
         
            +
             
     | 
| 
      
 205 
     | 
    
         
            +
                    assert_equal 2, @response.page(3).results.prev_page
         
     | 
| 
      
 206 
     | 
    
         
            +
                    assert_equal 4, @response.page(3).results.next_page
         
     | 
| 
      
 207 
     | 
    
         
            +
                  end
         
     | 
| 
       197 
208 
     | 
    
         
             
                end
         
     | 
| 
       198 
209 
     | 
    
         | 
| 
       199 
210 
     | 
    
         
             
                context "records" do
         
     | 
| 
         @@ -207,6 +218,17 @@ class Elasticsearch::Model::ResponsePaginationKaminariTest < Test::Unit::TestCas 
     | 
|
| 
       207 
218 
     | 
    
         | 
| 
       208 
219 
     | 
    
         
             
                    assert_equal 5, @response.page(5).records.current_page
         
     | 
| 
       209 
220 
     | 
    
         
             
                  end
         
     | 
| 
      
 221 
     | 
    
         
            +
             
     | 
| 
      
 222 
     | 
    
         
            +
                  should "return previous page and next page" do
         
     | 
| 
      
 223 
     | 
    
         
            +
                    assert_equal nil, @response.page(1).records.prev_page
         
     | 
| 
      
 224 
     | 
    
         
            +
                    assert_equal 2, @response.page(1).records.next_page
         
     | 
| 
      
 225 
     | 
    
         
            +
             
     | 
| 
      
 226 
     | 
    
         
            +
                    assert_equal 3, @response.page(4).records.prev_page
         
     | 
| 
      
 227 
     | 
    
         
            +
                    assert_equal nil, @response.page(4).records.next_page
         
     | 
| 
      
 228 
     | 
    
         
            +
             
     | 
| 
      
 229 
     | 
    
         
            +
                    assert_equal 2, @response.page(3).records.prev_page
         
     | 
| 
      
 230 
     | 
    
         
            +
                    assert_equal 4, @response.page(3).records.next_page
         
     | 
| 
      
 231 
     | 
    
         
            +
                  end
         
     | 
| 
       210 
232 
     | 
    
         
             
                end
         
     | 
| 
       211 
233 
     | 
    
         
             
              end
         
     | 
| 
       212 
234 
     | 
    
         | 
| 
         @@ -371,6 +393,17 @@ class Elasticsearch::Model::ResponsePaginationKaminariTest < Test::Unit::TestCas 
     | 
|
| 
       371 
393 
     | 
    
         | 
| 
       372 
394 
     | 
    
         
             
                    assert_equal 5, @response.page(5).results.current_page
         
     | 
| 
       373 
395 
     | 
    
         
             
                  end
         
     | 
| 
      
 396 
     | 
    
         
            +
             
     | 
| 
      
 397 
     | 
    
         
            +
                  should "return previous page and next page" do
         
     | 
| 
      
 398 
     | 
    
         
            +
                    assert_equal nil, @response.page(1).results.prev_page
         
     | 
| 
      
 399 
     | 
    
         
            +
                    assert_equal 2, @response.page(1).results.next_page
         
     | 
| 
      
 400 
     | 
    
         
            +
             
     | 
| 
      
 401 
     | 
    
         
            +
                    assert_equal 3, @response.page(4).results.prev_page
         
     | 
| 
      
 402 
     | 
    
         
            +
                    assert_equal nil, @response.page(4).results.next_page
         
     | 
| 
      
 403 
     | 
    
         
            +
             
     | 
| 
      
 404 
     | 
    
         
            +
                    assert_equal 2, @response.page(3).results.prev_page
         
     | 
| 
      
 405 
     | 
    
         
            +
                    assert_equal 4, @response.page(3).results.next_page
         
     | 
| 
      
 406 
     | 
    
         
            +
                  end
         
     | 
| 
       374 
407 
     | 
    
         
             
                end
         
     | 
| 
       375 
408 
     | 
    
         | 
| 
       376 
409 
     | 
    
         
             
                context "records" do
         
     | 
| 
         @@ -384,6 +417,17 @@ class Elasticsearch::Model::ResponsePaginationKaminariTest < Test::Unit::TestCas 
     | 
|
| 
       384 
417 
     | 
    
         | 
| 
       385 
418 
     | 
    
         
             
                    assert_equal 5, @response.page(5).records.current_page
         
     | 
| 
       386 
419 
     | 
    
         
             
                  end
         
     | 
| 
      
 420 
     | 
    
         
            +
             
     | 
| 
      
 421 
     | 
    
         
            +
                  should "return previous page and next page" do
         
     | 
| 
      
 422 
     | 
    
         
            +
                    assert_equal nil, @response.page(1).records.prev_page
         
     | 
| 
      
 423 
     | 
    
         
            +
                    assert_equal 2, @response.page(1).records.next_page
         
     | 
| 
      
 424 
     | 
    
         
            +
             
     | 
| 
      
 425 
     | 
    
         
            +
                    assert_equal 3, @response.page(4).records.prev_page
         
     | 
| 
      
 426 
     | 
    
         
            +
                    assert_equal nil, @response.page(4).records.next_page
         
     | 
| 
      
 427 
     | 
    
         
            +
             
     | 
| 
      
 428 
     | 
    
         
            +
                    assert_equal 2, @response.page(3).records.prev_page
         
     | 
| 
      
 429 
     | 
    
         
            +
                    assert_equal 4, @response.page(3).records.next_page
         
     | 
| 
      
 430 
     | 
    
         
            +
                  end
         
     | 
| 
       387 
431 
     | 
    
         
             
                end
         
     | 
| 
       388 
432 
     | 
    
         
             
              end
         
     | 
| 
       389 
433 
     | 
    
         
             
            end
         
     | 
    
        data/test/unit/response_test.rb
    CHANGED
    
    | 
         @@ -8,7 +8,8 @@ class Elasticsearch::Model::ResponseTest < Test::Unit::TestCase 
     | 
|
| 
       8 
8 
     | 
    
         
             
                end
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
                RESPONSE = { 'took' => '5', 'timed_out' => false, '_shards' => {'one' => 'OK'}, 'hits' => { 'hits' => [] },
         
     | 
| 
       11 
     | 
    
         
            -
                             'aggregations' => {'foo' => {'bar' => 10}} 
     | 
| 
      
 11 
     | 
    
         
            +
                             'aggregations' => {'foo' => {'bar' => 10}},
         
     | 
| 
      
 12 
     | 
    
         
            +
                             'suggest' => {'my_suggest' => [ { 'text' => 'foo', 'options' => [ { 'text' => 'Foo', 'score' => 2.0 }, { 'text' => 'Bar', 'score' => 1.0 } ] } ]}}
         
     | 
| 
       12 
13 
     | 
    
         | 
| 
       13 
14 
     | 
    
         
             
                setup do
         
     | 
| 
       14 
15 
     | 
    
         
             
                  @search  = Elasticsearch::Model::Searching::SearchRequest.new OriginClass, '*'
         
     | 
| 
         @@ -73,5 +74,31 @@ class Elasticsearch::Model::ResponseTest < Test::Unit::TestCase 
     | 
|
| 
       73 
74 
     | 
    
         
             
                  assert_kind_of Hashie::Mash, response.aggregations.foo
         
     | 
| 
       74 
75 
     | 
    
         
             
                  assert_equal 10, response.aggregations.foo.bar
         
     | 
| 
       75 
76 
     | 
    
         
             
                end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                should "access the suggest" do
         
     | 
| 
      
 79 
     | 
    
         
            +
                  @search.expects(:execute!).returns(RESPONSE)
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                  response = Elasticsearch::Model::Response::Response.new OriginClass, @search
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                  assert_respond_to response, :suggestions
         
     | 
| 
      
 84 
     | 
    
         
            +
                  assert_kind_of Hashie::Mash, response.suggestions
         
     | 
| 
      
 85 
     | 
    
         
            +
                  assert_equal 'Foo', response.suggestions.my_suggest.first.options.first.text
         
     | 
| 
      
 86 
     | 
    
         
            +
                end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                should "return array of terms from the suggestions" do
         
     | 
| 
      
 89 
     | 
    
         
            +
                  @search.expects(:execute!).returns(RESPONSE)
         
     | 
| 
      
 90 
     | 
    
         
            +
                  response = Elasticsearch::Model::Response::Response.new OriginClass, @search
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                  assert_not_empty response.suggestions
         
     | 
| 
      
 93 
     | 
    
         
            +
                  assert_equal [ 'Foo', 'Bar' ], response.suggestions.terms
         
     | 
| 
      
 94 
     | 
    
         
            +
                end
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                should "return empty array as suggest terms when there are no suggestions" do
         
     | 
| 
      
 97 
     | 
    
         
            +
                  @search.expects(:execute!).returns({})
         
     | 
| 
      
 98 
     | 
    
         
            +
                  response = Elasticsearch::Model::Response::Response.new OriginClass, @search
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                  assert_empty response.suggestions
         
     | 
| 
      
 101 
     | 
    
         
            +
                  assert_equal [], response.suggestions.terms
         
     | 
| 
      
 102 
     | 
    
         
            +
                end
         
     | 
| 
       76 
103 
     | 
    
         
             
              end
         
     | 
| 
       77 
104 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: elasticsearch-model
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.9
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Karel Minarik
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2016-05-05 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: elasticsearch
         
     | 
| 
         @@ -70,16 +70,16 @@ dependencies: 
     | 
|
| 
       70 
70 
     | 
    
         
             
              name: rake
         
     | 
| 
       71 
71 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       72 
72 
     | 
    
         
             
                requirements:
         
     | 
| 
       73 
     | 
    
         
            -
                - - " 
     | 
| 
      
 73 
     | 
    
         
            +
                - - "<"
         
     | 
| 
       74 
74 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       75 
     | 
    
         
            -
                    version: '0'
         
     | 
| 
      
 75 
     | 
    
         
            +
                    version: '11.0'
         
     | 
| 
       76 
76 
     | 
    
         
             
              type: :development
         
     | 
| 
       77 
77 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       78 
78 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       79 
79 
     | 
    
         
             
                requirements:
         
     | 
| 
       80 
     | 
    
         
            -
                - - " 
     | 
| 
      
 80 
     | 
    
         
            +
                - - "<"
         
     | 
| 
       81 
81 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       82 
     | 
    
         
            -
                    version: '0'
         
     | 
| 
      
 82 
     | 
    
         
            +
                    version: '11.0'
         
     | 
| 
       83 
83 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       84 
84 
     | 
    
         
             
              name: elasticsearch-extensions
         
     | 
| 
       85 
85 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -364,6 +364,7 @@ files: 
     | 
|
| 
       364 
364 
     | 
    
         
             
            - lib/elasticsearch/model/response/records.rb
         
     | 
| 
       365 
365 
     | 
    
         
             
            - lib/elasticsearch/model/response/result.rb
         
     | 
| 
       366 
366 
     | 
    
         
             
            - lib/elasticsearch/model/response/results.rb
         
     | 
| 
      
 367 
     | 
    
         
            +
            - lib/elasticsearch/model/response/suggestions.rb
         
     | 
| 
       367 
368 
     | 
    
         
             
            - lib/elasticsearch/model/searching.rb
         
     | 
| 
       368 
369 
     | 
    
         
             
            - lib/elasticsearch/model/serializing.rb
         
     | 
| 
       369 
370 
     | 
    
         
             
            - lib/elasticsearch/model/version.rb
         
     |