goodyear 0.2.1 → 0.2.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0a5948a74ef155fa3c8cad82f8a3612771eb184d
4
- data.tar.gz: 1064c9ccf64af862013d2acc5efe5433d343c7ed
3
+ metadata.gz: 24a3446eba1db314be332ef46c9328fe02904e9a
4
+ data.tar.gz: 2d1c99af47a5ce7bcc849b683c6c13a1e5580b3e
5
5
  SHA512:
6
- metadata.gz: a91119e4b3e28d0959de2322f782e5ef8effae8ffb83a600bc810f0728d84a259bd721017d40a792ba1af01a080cfadecbd58740b606b68d2ebe8455ea01c37f
7
- data.tar.gz: 1fe4916dd0997412b6c7eae11e1a1a14a1bfd8b16ed3cb0c26a947d429dc95bbef654ccc7d22ab7eb7217ebbbe84ca2854bf5608cacd5ed751c324879aebff75
6
+ metadata.gz: 1e0a27c7887ca6637debf48443819388f80f43e347f456d2407db696b8e04c297315a9ac9b2ed89dad5089e94c220c633a67ef50cb6eed65eff280aafcd0a0fb
7
+ data.tar.gz: 0ce8d59b1b3b405859929b00bf5b4fc74b9668849606cbc05277d41188d80d216ec272182d575e67e6d2ddb38b3ce6adb70f370315b40f23f6e6549f78fe9d3e
@@ -3,6 +3,7 @@ require "goodyear/version"
3
3
  require "goodyear/query_methods"
4
4
  require 'goodyear/persistence'
5
5
  require 'goodyear/index'
6
+ require 'goodyear/scan'
6
7
 
7
8
  module Goodyear
8
9
  mattr_accessor :force_cache
@@ -1,7 +1,7 @@
1
1
  module Goodyear
2
2
  module Enumerable
3
3
  def each &block
4
- fetch.results.each do |result|
4
+ results.each do |result|
5
5
  if block_given?
6
6
  block.call result
7
7
  else
@@ -11,7 +11,7 @@ module Goodyear
11
11
  end
12
12
 
13
13
  def collect &block
14
- fetch.results.collect do |result|
14
+ results.collect do |result|
15
15
  if block_given?
16
16
  block.call result
17
17
  else
@@ -13,6 +13,7 @@ module Goodyear
13
13
  include Goodyear::FacetMethods
14
14
  include Goodyear::FilterMethods
15
15
  include Goodyear::QueryCache
16
+ include Goodyear::Enumerable
16
17
 
17
18
  def fetch
18
19
  es = self.perform
@@ -0,0 +1,115 @@
1
+ module Tire
2
+ module Search
3
+
4
+
5
+ # Performs a "scan/scroll" search request, which obtains a `scroll_id`
6
+ # and keeps returning documents matching the passed query (or all documents) in batches.
7
+ #
8
+ # You may want to iterate over the batches being returned:
9
+ #
10
+ # search = Tire::Search::Scan.new('articles')
11
+ # search.each do |results|
12
+ # puts results.map(&:title)
13
+ # end
14
+ #
15
+ # The scan object has a fully Enumerable-compatible interface, so you may
16
+ # call methods like `map` or `each_with_index` on it.
17
+ #
18
+ # To iterate over individual documents, use the `each_document` method:
19
+ #
20
+ # search.each_document do |document|
21
+ # puts document.title
22
+ # end
23
+ #
24
+ # You may limit the result set being returned by a regular Tire DSL query
25
+ # (or a hash, if you prefer), passed as a second argument:
26
+ #
27
+ # search = Tire::Search::Scan.new('articles') do
28
+ # query { term 'author.exact', 'John Smith' }
29
+ # end
30
+ #
31
+ # The feature is also exposed in the Tire top-level DSL:
32
+ #
33
+ # search = Tire.scan 'articles' do
34
+ # query { term 'author.exact', 'John Smith' }
35
+ # end
36
+ #
37
+ # See Elasticsearch documentation for further reference:
38
+ #
39
+ # * http://www.elasticsearch.org/guide/reference/api/search/search-type.html
40
+ # * http://www.elasticsearch.org/guide/reference/api/search/scroll.html
41
+ #
42
+ class Scan
43
+ include Enumerable
44
+
45
+ attr_reader :indices, :options, :search
46
+
47
+ def initialize(indices=nil, options={}, &block)
48
+ @indices = Array(indices)
49
+ @options = options.update(:search_type => 'scan', :scroll => '10m')
50
+ @seen = 0
51
+ @tire_options = options.delete(:tire) || {}
52
+ @search = Search.new(@indices, @options.merge(@tire_options), &block)
53
+ end
54
+
55
+ def url; Configuration.url + "/_search/scroll"; end
56
+ def params; @options.empty? ? '' : '?' + @options.to_param; end
57
+ def results; @results || (__perform; @results); end
58
+ def response; @response || (__perform; @response); end
59
+ def json; @json || (__perform; @json); end
60
+ def total; @total || (__perform; @total); end
61
+ def seen; @seen || (__perform; @seen); end
62
+
63
+ def scroll_id
64
+ @scroll_id ||= @search.perform.json['_scroll_id']
65
+ end
66
+
67
+ def each
68
+ until results.empty?
69
+ yield results.results
70
+ __perform
71
+ end
72
+ end
73
+
74
+ def each_document
75
+ until results.empty?
76
+ results.each { |item| yield item }
77
+ __perform
78
+ end
79
+ end
80
+
81
+ def size
82
+ results.size
83
+ end
84
+
85
+ def __perform
86
+ @response = Configuration.client.get [url, params].join, scroll_id
87
+ @json = MultiJson.decode @response.body
88
+ @results = Results::Collection.new @json, @options
89
+ @total = @json['hits']['total'].to_i
90
+ @seen += @results.size
91
+ @scroll_id = @json['_scroll_id']
92
+ return self
93
+ ensure
94
+ __logged
95
+ end
96
+
97
+ def to_a; results; end; alias :to_ary :to_a
98
+ def to_curl; %Q|curl -X GET '#{url}?pretty' -d '#{@scroll_id}'|; end
99
+
100
+ def __logged(error=nil)
101
+ if Configuration.logger
102
+ Configuration.logger.log_request 'scroll', nil, to_curl
103
+
104
+ took = @json['took'] rescue nil
105
+ code = @response.code rescue nil
106
+ body = "#{@seen}/#{@total} (#{@seen/@total.to_f*100}%)" rescue nil
107
+
108
+ Configuration.logger.log_response code || 'N/A', took || 'N/A', body
109
+ end
110
+ end
111
+
112
+ end
113
+
114
+ end
115
+ end
@@ -1,3 +1,3 @@
1
1
  module Goodyear
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: goodyear
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Spencer Markowski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-27 00:00:00.000000000 Z
11
+ date: 2014-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -64,6 +64,7 @@ files:
64
64
  - lib/goodyear/query_cache.rb
65
65
  - lib/goodyear/query_methods.rb
66
66
  - lib/goodyear/railtie.rb
67
+ - lib/goodyear/scan.rb
67
68
  - lib/goodyear/version.rb
68
69
  homepage: https://github.com/theablefew/goodyear
69
70
  licenses: