algoliasearch 1.4.3 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1726fd4406b2f28c30c00ada864700697de5478c
4
- data.tar.gz: fe9a42f9f9ed7c137006564f03999051a8e6f78e
3
+ metadata.gz: 8320f64639625f110a727ff9020826427ebbc373
4
+ data.tar.gz: 56183ac910b91ecd25588d396b552a4e8d41aa43
5
5
  SHA512:
6
- metadata.gz: e41301b7d77c62eb8afa6e1c2126b0a45a9741a767644fff639203ea2a531805b2a9e68b9d572a2f4c24e194b7f1aed06626eb2fa916c6c0ac3c598525db7eb5
7
- data.tar.gz: 608fc4e94933e30a98b95ec0c5d1ec6f05d49a1ec4feef00acf833d7915a2bb550164cb106a959dcd69798251bc41f08a189e621f7f08506d7e3640cc0e2c018
6
+ metadata.gz: 06b994ce753c37cb70caa6c5ed61a3fa07f4e7fcf4e37427113873d03c444b6e21fa68c8e2f186937ce92256fc18c8ce7e9e856b56933046313e296f08515966
7
+ data.tar.gz: eb9d2669d3c719bb04e70ca8b0ec053d769c1bb66072386ce1dec0c1dcc27b86df99af957f7359cb16782cd6251a200edbae72dbf1aab17f026770f623e0d5db
data/ChangeLog CHANGED
@@ -1,5 +1,8 @@
1
1
  CHANGELOG
2
2
 
3
+ 2015-06-05 1.5.0
4
+ * New cursor-based browse() implementation taking query parameters
5
+
3
6
  2015-05-27 1.4.3
4
7
  * Do not call `WebMock.disable!` in the helper
5
8
 
@@ -139,6 +139,25 @@ module Algolia
139
139
  Algolia.client.get(Protocol.search_uri(name, query, encoded_params), :search)
140
140
  end
141
141
 
142
+ class IndexBrowser
143
+ def initialize(name, params)
144
+ @name = name
145
+ @params = params
146
+ @cursor = params[:cursor] || params['cursor'] || nil
147
+ end
148
+
149
+ def browse(&block)
150
+ loop do
151
+ answer = Algolia.client.get(Protocol.browse_uri(@name, @params.merge({ :cursor => @cursor })), :read)
152
+ answer['hits'].each do |hit|
153
+ yield hit
154
+ end
155
+ @cursor = answer['cursor']
156
+ break if @cursor.nil?
157
+ end
158
+ end
159
+ end
160
+
142
161
  #
143
162
  # Browse all index content
144
163
  #
@@ -146,8 +165,25 @@ module Algolia
146
165
  # Page is zero-based and defaults to 0. Thus, to retrieve the 10th page you need to set page=9
147
166
  # @param hitsPerPage: Pagination parameter used to select the number of hits per page. Defaults to 1000.
148
167
  #
149
- def browse(page = 0, hitsPerPage = 1000)
150
- Algolia.client.get(Protocol.browse_uri(name, {:page => page, :hitsPerPage => hitsPerPage}), :read)
168
+ def browse(page = nil, hitsPerPage = nil, &block)
169
+ if block_given?
170
+ params = {}
171
+ if page.is_a?(Hash)
172
+ params.merge!(page)
173
+ else
174
+ params[:page] = page unless page.nil?
175
+ end
176
+ if hitsPerPage.is_a?(Hash)
177
+ params.merge!(hitsPerPage)
178
+ else
179
+ params[:hitsPerPage] = hitsPerPage unless hitsPerPage.nil?
180
+ end
181
+ IndexBrowser.new(name, params).browse(&block)
182
+ else
183
+ page ||= 0
184
+ hitsPerPage ||= 1000
185
+ Algolia.client.get(Protocol.browse_uri(name, {:page => page, :hitsPerPage => hitsPerPage}), :read)
186
+ end
151
187
  end
152
188
 
153
189
  #
@@ -1,3 +1,3 @@
1
1
  module Algolia
2
- VERSION = "1.4.3"
2
+ VERSION = "1.5.0"
3
3
  end
@@ -738,8 +738,6 @@ describe 'Client' do
738
738
  end
739
739
  end
740
740
 
741
-
742
-
743
741
  it "should send a custom batch" do
744
742
  batch = [
745
743
  {:action => "addObject", :indexName => @index.name, :body => { :objectID => "11", :email => "john@be.org" }},
@@ -749,5 +747,42 @@ describe 'Client' do
749
747
  res = @index.search("@be.org")
750
748
  res["hits"].length.should eq(2)
751
749
  end
752
- end
753
750
 
751
+ def test_browse(expected, *args)
752
+ @index.clear
753
+ @index.add_objects!(1.upto(1500).map { |i| { :objectID => i, :i => i } })
754
+ hits = {}
755
+ @index.browse(*args) do |hit|
756
+ hits[hit['objectID']] = true
757
+ end
758
+ hits.size.should eq(expected)
759
+ end
760
+
761
+ it "should browse the index using cursors" do
762
+ test_browse(1500)
763
+ test_browse(500, 1, 1000)
764
+ test_browse(0, 2, 1000)
765
+ end
766
+
767
+ it "should browse the index using cursors specifying hitsPerPage" do
768
+ test_browse(1500, { :hitsPerPage => 500 })
769
+ end
770
+
771
+ it "should browse the index using cursors specifying params" do
772
+ test_browse(1, { :hitsPerPage => 500, :numericFilters => 'i=42' })
773
+ test_browse(42, { :numericFilters => 'i<=42' })
774
+ end
775
+
776
+ it "should browse the index using cursors from a cursor" do
777
+ @index.clear
778
+ @index.add_objects!(1.upto(1500).map { |i| { :objectID => i, :i => i } })
779
+ answer = @index.browse(0, 1000)
780
+
781
+ hits = {}
782
+ @index.browse(:cursor => answer['cursor']) do |hit|
783
+ hits[hit['objectID']] = true
784
+ end
785
+ hits.size.should eq(500)
786
+ end
787
+
788
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: algoliasearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.3
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Algolia
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-27 00:00:00.000000000 Z
11
+ date: 2015-06-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httpclient