tire 0.3.8 → 0.3.9

Sign up to get free protection for your applications and to get access to all the features.
data/examples/tire-dsl.rb CHANGED
@@ -477,6 +477,7 @@ end
477
477
  # * [term](http://elasticsearch.org/guide/reference/query-dsl/term-query.html)
478
478
  # * [terms](http://elasticsearch.org/guide/reference/query-dsl/terms-query.html)
479
479
  # * [bool](http://www.elasticsearch.org/guide/reference/query-dsl/bool-query.html)
480
+ # * [custom_score](http://www.elasticsearch.org/guide/reference/query-dsl/custom-score-query.html)
480
481
  # * [all](http://www.elasticsearch.org/guide/reference/query-dsl/match-all-query.html)
481
482
  # * [ids](http://www.elasticsearch.org/guide/reference/query-dsl/ids-query.html)
482
483
 
@@ -13,15 +13,17 @@ module Tire
13
13
  @time = response['took'].to_i
14
14
  @total = response['hits']['total'].to_i
15
15
  @facets = response['facets']
16
- @wrapper = Configuration.wrapper
16
+ @wrapper = options[:wrapper] || Configuration.wrapper
17
17
  end
18
18
 
19
19
  def results
20
20
  @results ||= begin
21
+ hits = @response['hits']['hits']
21
22
  unless @options[:load]
22
- @response['hits']['hits'].map do |h|
23
- if @wrapper == Hash then h
24
- else
23
+ if @wrapper == Hash
24
+ hits
25
+ else
26
+ hits.map do |h|
25
27
  document = {}
26
28
 
27
29
  # Update the document with content and ID
@@ -33,10 +35,10 @@ module Tire
33
35
 
34
36
  # Return an instance of the "wrapper" class
35
37
  @wrapper.new(document)
36
- end
38
+ end
37
39
  end
38
40
  else
39
- return [] if @response['hits']['hits'].empty?
41
+ return [] if hits.empty?
40
42
 
41
43
  type = @response['hits']['hits'].first['_type']
42
44
  raise NoMethodError, "You have tried to eager load the model instances, " +
data/lib/tire/search.rb CHANGED
@@ -13,8 +13,6 @@ module Tire
13
13
 
14
14
  @url = Configuration.url+['/', @indices.join(','), @type, '_search'].compact.join('/').squeeze('/')
15
15
 
16
- # TODO: Do not allow changing the wrapper here or set it back after yield
17
- Configuration.wrapper @options[:wrapper] if @options[:wrapper]
18
16
  block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given?
19
17
  end
20
18
 
@@ -28,6 +28,13 @@ module Tire
28
28
  @value
29
29
  end
30
30
 
31
+ def custom_score(options={}, &block)
32
+ @custom_score ||= Query.new(&block)
33
+ @value[:custom_score] = options
34
+ @value[:custom_score].update({:query => @custom_score.to_hash})
35
+ @value
36
+ end
37
+
31
38
  def boolean(options={}, &block)
32
39
  @boolean ||= BooleanQuery.new(options)
33
40
  block.arity < 1 ? @boolean.instance_eval(&block) : block.call(@boolean) if block_given?
@@ -35,6 +42,13 @@ module Tire
35
42
  @value
36
43
  end
37
44
 
45
+ def filtered(&block)
46
+ @filtered = FilteredQuery.new
47
+ block.arity < 1 ? @filtered.instance_eval(&block) : block.call(@filtered) if block_given?
48
+ @value[:filtered] = @filtered.to_hash
49
+ @value
50
+ end
51
+
38
52
  def all
39
53
  @value = { :match_all => {} }
40
54
  @value
@@ -94,5 +108,32 @@ module Tire
94
108
  end
95
109
  end
96
110
 
111
+
112
+ class FilteredQuery
113
+ def initialize(&block)
114
+ @value = {}
115
+ block.arity < 1 ? self.instance_eval(&block) : block.call(self) if block_given?
116
+ end
117
+
118
+ def query(options={}, &block)
119
+ @value[:query] = Query.new(&block).to_hash
120
+ @value
121
+ end
122
+
123
+ def filter(type, *options)
124
+ @value[:filter] ||= []
125
+ @value[:filter] << Filter.new(type, *options).to_hash
126
+ @value
127
+ end
128
+
129
+ def to_hash
130
+ @value
131
+ end
132
+
133
+ def to_json
134
+ to_hash.to_json
135
+ end
136
+ end
137
+
97
138
  end
98
139
  end
data/lib/tire/version.rb CHANGED
@@ -1,13 +1,10 @@
1
1
  module Tire
2
- VERSION = "0.3.8"
2
+ VERSION = "0.3.9"
3
3
 
4
4
  CHANGELOG =<<-END
5
5
  IMPORTANT CHANGES LATELY:
6
6
 
7
- * Fixed a bug: `Results::Item` was referencing Ruby classes incorrectly within Rails
8
- * Fixed `ZeroDivisionError` for empty result sets
9
- * Display correct exception on request failure
10
- * Added support for range queries
11
- * Added support for mapping options
7
+ * Added support for filtered queries [#134]
8
+ * Added support for "custom_score" queries [#133]
12
9
  END
13
10
  end
@@ -0,0 +1,88 @@
1
+ require 'test_helper'
2
+
3
+ module Tire
4
+
5
+ class CustomScoreQueriesIntegrationTest < Test::Unit::TestCase
6
+ include Test::Integration
7
+
8
+ context "Custom score queries" do
9
+
10
+ should "allow to define custom score queries (base score on field value)" do
11
+ s = Tire.search('articles-test') do
12
+ query do
13
+ # Give longer documents higher score
14
+ #
15
+ custom_score :script => "1.0 / doc['words'].value" do
16
+ string "title:T*"
17
+ end
18
+ end
19
+ end
20
+
21
+ assert_equal 2, s.results.size
22
+ assert_equal ['Two', 'Three'], s.results.map(&:title)
23
+
24
+ assert s.results[0]._score > 0
25
+ assert s.results[1]._score > 0
26
+ assert s.results[0]._score > s.results[1]._score
27
+ end
28
+
29
+ should "allow to manipulate the default score (boost recent)" do
30
+ s = Tire.search('articles-test') do
31
+ query do
32
+ # Boost recent documents
33
+ #
34
+ custom_score :script => "_score + ( doc['published_on'].date.getMillis() / time() )" do
35
+ string 'title:F*'
36
+ end
37
+ end
38
+ end
39
+
40
+ assert_equal 2, s.results.size
41
+ assert_equal ['Five', 'Four'], s.results.map(&:title)
42
+
43
+ assert s.results[0]._score > 1
44
+ assert s.results[1]._score > 1
45
+ end
46
+
47
+ should "allow to define arbitrary custom scoring" do
48
+ s = Tire.search('articles-test') do
49
+ query do
50
+ # Replace documents score with the count of characters in their title
51
+ #
52
+ custom_score :script => "doc['title'].value.length()" do
53
+ string "title:T*"
54
+ end
55
+ end
56
+ end
57
+
58
+ assert_equal 2, s.results.size
59
+ assert_equal ['Three', 'Two'], s.results.map(&:title)
60
+
61
+ assert_equal 5.0, s.results[0]._score
62
+ assert_equal 3.0, s.results[1]._score
63
+ end
64
+
65
+ should "allow to pass parameters to the script" do
66
+ s = Tire.search('articles-test') do
67
+ query do
68
+ # Replace documents score with parameterized computation
69
+ #
70
+ custom_score :script => "doc['words'].doubleValue / max(a, b)",
71
+ :params => { :a => 1, :b => 2 } do
72
+ string "title:T*"
73
+ end
74
+ end
75
+ end
76
+
77
+ assert_equal 2, s.results.size
78
+ assert_equal ['Three', 'Two'], s.results.map(&:title)
79
+
80
+ assert_equal 187.5, s.results[0]._score
81
+ assert_equal 125.0, s.results[1]._score
82
+ end
83
+
84
+ end
85
+
86
+ end
87
+
88
+ end
@@ -26,12 +26,8 @@ module Tire
26
26
  q = 'tags:ruby'
27
27
  s = Tire.search('articles-test') do
28
28
  query { string q }
29
- facet 'scoped-tags' do
30
- terms :tags
31
- end
32
- facet 'global-tags', :global => true do
33
- terms :tags
34
- end
29
+ facet('scoped-tags') { terms :tags }
30
+ facet('global-tags', :global => true) { terms :tags }
35
31
  end
36
32
 
37
33
  scoped_facets = s.results.facets['scoped-tags']['terms']
@@ -41,6 +37,28 @@ module Tire
41
37
  assert_equal 5, global_facets.count
42
38
  end
43
39
 
40
+ should "allow to define multiple facets" do
41
+ s = Tire.search('articles-test') do
42
+ facet('tags') { terms :tags }
43
+ facet('date') { date :published_on }
44
+ end
45
+
46
+ assert_equal 2, s.results.facets.size
47
+ end
48
+
49
+ should "allow to restrict facets with filters" do
50
+ s = Tire.search('articles-test') do
51
+ query { string 'tags:ruby' }
52
+ facet('tags', :facet_filter => { :range => { :published_on => { :from => '2011-01-01', :to => '2011-01-01' } } }) do
53
+ terms :tags
54
+ end
55
+ end
56
+
57
+ assert_equal 1, s.results.facets.size
58
+ assert_equal 'ruby', s.results.facets['tags']['terms'].first['term']
59
+ assert_equal 1, s.results.facets['tags']['terms'].first['count'].to_i
60
+ end
61
+
44
62
  context "date histogram" do
45
63
 
46
64
  should "return aggregated values for all results" do
@@ -0,0 +1,47 @@
1
+ require 'test_helper'
2
+
3
+ module Tire
4
+
5
+ class FilteredQueriesIntegrationTest < Test::Unit::TestCase
6
+ include Test::Integration
7
+
8
+ context "Filtered queries" do
9
+
10
+ should "restrict the results" do
11
+ # 2.json > Begins with "T" and is tagged "ruby"
12
+
13
+ s = Tire.search('articles-test') do
14
+ query do
15
+ filtered do
16
+ query { string 'title:T*' }
17
+ filter :terms, :tags => ['ruby']
18
+ end
19
+ end
20
+ end
21
+
22
+ assert_equal 1, s.results.count
23
+ assert_equal 'Two', s.results.first.title
24
+ end
25
+
26
+ should "restrict the results with multiple filters" do
27
+ # 2.json > Is tagged "ruby" and has 250 words
28
+
29
+ s = Tire.search('articles-test') do
30
+ query do
31
+ filtered do
32
+ query { all }
33
+ filter :and, { :terms => { :tags => ['ruby', 'python'] } },
34
+ { :range => { :words => { :from => '250', :to => '250' } } }
35
+ end
36
+ end
37
+ end
38
+
39
+ assert_equal 1, s.results.count
40
+ assert_equal 'Two', s.results.first.title
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+
47
+ end
@@ -22,6 +22,14 @@ module Tire::Search
22
22
  Facet.new('foo', :global => true).terms(:bar).to_json )
23
23
  end
24
24
 
25
+ should "pass options to facets" do
26
+ payload = Facet.new('foo', :facet_filter => { :term => { :account_id => 'foo' } }).terms(:bar).to_hash
27
+
28
+ assert_not_nil payload['foo'][:facet_filter]
29
+ assert_equal( { :term => { :account_id => 'foo' } },
30
+ payload['foo'][:facet_filter] )
31
+ end
32
+
25
33
  should "encode facet options" do
26
34
  assert_equal( { :foo => { :terms => {:field=>'bar',:size=>5,:all_terms=>false} } }.to_json,
27
35
  Facet.new('foo').terms(:bar, :size => 5).to_json )
@@ -58,6 +58,24 @@ module Tire::Search
58
58
  Query.new.string('foo', :fields => ['title.*'], :use_dis_max => true) )
59
59
  end
60
60
 
61
+ should "allow to set script for custom score queries" do
62
+ query = Query.new.custom_score(:script => "_score * doc['price'].value") do
63
+ string 'foo'
64
+ end
65
+
66
+ assert_equal "_score * doc['price'].value", query[:custom_score][:script]
67
+ end
68
+
69
+ should "allow to pass parameters for custom score queries" do
70
+ query = Query.new.custom_score(:script => "_score * doc['price'].value / max(a, b)",
71
+ :params => { :a => 1, :b => 2 }) do
72
+ string 'foo'
73
+ end
74
+
75
+ assert_equal 1, query[:custom_score][:params][:a]
76
+ assert_equal 2, query[:custom_score][:params][:b]
77
+ end
78
+
61
79
  should "search for all documents" do
62
80
  assert_equal( { :match_all => { } }, Query.new.all )
63
81
  end
@@ -118,11 +136,11 @@ module Tire::Search
118
136
  end
119
137
 
120
138
  should "allow passing variables from outer scope" do
121
- q1 = 'foo'
122
- q2 = 'bar'
139
+ @q1 = 'foo'
140
+ @q2 = 'bar'
123
141
  query = Query.new.boolean do |boolean|
124
- boolean.must { |query| query.string q1 }
125
- boolean.must { |query| query.string q2 }
142
+ boolean.must { |query| query.string @q1 }
143
+ boolean.must { |query| query.string @q2 }
126
144
  end
127
145
 
128
146
  assert_equal( 2, query[:bool][:must].size, query[:bool][:must].inspect )
@@ -132,6 +150,49 @@ module Tire::Search
132
150
 
133
151
  end
134
152
 
153
+
154
+ context "FilteredQuery" do
155
+
156
+ should "not raise an error when no block is given" do
157
+ assert_nothing_raised { Query.new.filtered }
158
+ end
159
+
160
+ should "properly encode filter" do
161
+ query = Query.new.filtered do
162
+ query { term :foo, 'bar' }
163
+ filter :terms, :tags => ['ruby']
164
+ end
165
+
166
+ assert_equal( { :term => { :foo => 'bar' } }, query[:filtered][:query].to_hash )
167
+ assert_equal( { :tags => ['ruby'] }, query[:filtered][:filter].first[:terms] )
168
+ end
169
+
170
+ should "properly encode multiple filters" do
171
+ query = Query.new.filtered do
172
+ query { term :foo, 'bar' }
173
+ filter :terms, :tags => ['ruby']
174
+ filter :terms, :tags => ['python']
175
+ end
176
+
177
+ assert_equal 2, query[:filtered][:filter].size
178
+ assert_equal( { :tags => ['ruby'] }, query[:filtered][:filter].first[:terms] )
179
+ assert_equal( { :tags => ['python'] }, query[:filtered][:filter].last[:terms] )
180
+ end
181
+
182
+ should "allow passing variables from outer scope" do
183
+ @my_query = 'bar'
184
+ @my_filter = { :tags => ['ruby'] }
185
+
186
+ query = Query.new.filtered do |f|
187
+ f.query { |q| q.term :foo, @my_query }
188
+ f.filter :terms, @my_filter
189
+ end
190
+
191
+ assert_equal( { :term => { :foo => 'bar' } }, query[:filtered][:query].to_hash )
192
+ assert_equal( { :tags => ['ruby'] }, query[:filtered][:filter].first[:terms] )
193
+ end
194
+
195
+ end
135
196
  end
136
197
 
137
198
  end
metadata CHANGED
@@ -1,257 +1,196 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: tire
3
- version: !ruby/object:Gem::Version
4
- hash: 3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.9
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 3
9
- - 8
10
- version: 0.3.8
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Karel Minarik
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-10-24 00:00:00 +02:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2011-10-30 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: rake
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70250440988100 !ruby/object:Gem::Requirement
25
17
  none: false
26
- requirements:
18
+ requirements:
27
19
  - - ~>
28
- - !ruby/object:Gem::Version
29
- hash: 63
30
- segments:
31
- - 0
32
- - 9
33
- - 2
20
+ - !ruby/object:Gem::Version
34
21
  version: 0.9.2
35
22
  type: :runtime
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: rest-client
39
23
  prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *70250440988100
25
+ - !ruby/object:Gem::Dependency
26
+ name: rest-client
27
+ requirement: &70250440987640 !ruby/object:Gem::Requirement
41
28
  none: false
42
- requirements:
29
+ requirements:
43
30
  - - ~>
44
- - !ruby/object:Gem::Version
45
- hash: 15
46
- segments:
47
- - 1
48
- - 6
49
- - 0
31
+ - !ruby/object:Gem::Version
50
32
  version: 1.6.0
51
33
  type: :runtime
52
- version_requirements: *id002
53
- - !ruby/object:Gem::Dependency
54
- name: multi_json
55
34
  prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *70250440987640
36
+ - !ruby/object:Gem::Dependency
37
+ name: multi_json
38
+ requirement: &70250440987180 !ruby/object:Gem::Requirement
57
39
  none: false
58
- requirements:
40
+ requirements:
59
41
  - - ~>
60
- - !ruby/object:Gem::Version
61
- hash: 15
62
- segments:
63
- - 1
64
- - 0
65
- version: "1.0"
42
+ - !ruby/object:Gem::Version
43
+ version: '1.0'
66
44
  type: :runtime
67
- version_requirements: *id003
68
- - !ruby/object:Gem::Dependency
69
- name: activemodel
70
45
  prerelease: false
71
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *70250440987180
47
+ - !ruby/object:Gem::Dependency
48
+ name: activemodel
49
+ requirement: &70250440986720 !ruby/object:Gem::Requirement
72
50
  none: false
73
- requirements:
51
+ requirements:
74
52
  - - ~>
75
- - !ruby/object:Gem::Version
76
- hash: 7
77
- segments:
78
- - 3
79
- - 0
80
- version: "3.0"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
81
55
  type: :runtime
82
- version_requirements: *id004
83
- - !ruby/object:Gem::Dependency
84
- name: bundler
85
56
  prerelease: false
86
- requirement: &id005 !ruby/object:Gem::Requirement
57
+ version_requirements: *70250440986720
58
+ - !ruby/object:Gem::Dependency
59
+ name: bundler
60
+ requirement: &70250440986260 !ruby/object:Gem::Requirement
87
61
  none: false
88
- requirements:
62
+ requirements:
89
63
  - - ~>
90
- - !ruby/object:Gem::Version
91
- hash: 23
92
- segments:
93
- - 1
94
- - 0
95
- - 0
64
+ - !ruby/object:Gem::Version
96
65
  version: 1.0.0
97
66
  type: :development
98
- version_requirements: *id005
99
- - !ruby/object:Gem::Dependency
100
- name: yajl-ruby
101
67
  prerelease: false
102
- requirement: &id006 !ruby/object:Gem::Requirement
68
+ version_requirements: *70250440986260
69
+ - !ruby/object:Gem::Dependency
70
+ name: yajl-ruby
71
+ requirement: &70250436367320 !ruby/object:Gem::Requirement
103
72
  none: false
104
- requirements:
73
+ requirements:
105
74
  - - ~>
106
- - !ruby/object:Gem::Version
107
- hash: 63
108
- segments:
109
- - 0
110
- - 8
111
- - 0
75
+ - !ruby/object:Gem::Version
112
76
  version: 0.8.0
113
77
  type: :development
114
- version_requirements: *id006
115
- - !ruby/object:Gem::Dependency
116
- name: shoulda
117
78
  prerelease: false
118
- requirement: &id007 !ruby/object:Gem::Requirement
79
+ version_requirements: *70250436367320
80
+ - !ruby/object:Gem::Dependency
81
+ name: shoulda
82
+ requirement: &70250436365820 !ruby/object:Gem::Requirement
119
83
  none: false
120
- requirements:
121
- - - ">="
122
- - !ruby/object:Gem::Version
123
- hash: 3
124
- segments:
125
- - 0
126
- version: "0"
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
127
88
  type: :development
128
- version_requirements: *id007
129
- - !ruby/object:Gem::Dependency
130
- name: mocha
131
89
  prerelease: false
132
- requirement: &id008 !ruby/object:Gem::Requirement
90
+ version_requirements: *70250436365820
91
+ - !ruby/object:Gem::Dependency
92
+ name: mocha
93
+ requirement: &70250436364080 !ruby/object:Gem::Requirement
133
94
  none: false
134
- requirements:
135
- - - ">="
136
- - !ruby/object:Gem::Version
137
- hash: 3
138
- segments:
139
- - 0
140
- version: "0"
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
141
99
  type: :development
142
- version_requirements: *id008
143
- - !ruby/object:Gem::Dependency
144
- name: activerecord
145
100
  prerelease: false
146
- requirement: &id009 !ruby/object:Gem::Requirement
101
+ version_requirements: *70250436364080
102
+ - !ruby/object:Gem::Dependency
103
+ name: activerecord
104
+ requirement: &70250436362640 !ruby/object:Gem::Requirement
147
105
  none: false
148
- requirements:
106
+ requirements:
149
107
  - - ~>
150
- - !ruby/object:Gem::Version
151
- hash: 9
152
- segments:
153
- - 3
154
- - 0
155
- - 7
108
+ - !ruby/object:Gem::Version
156
109
  version: 3.0.7
157
110
  type: :development
158
- version_requirements: *id009
159
- - !ruby/object:Gem::Dependency
160
- name: mongoid
161
111
  prerelease: false
162
- requirement: &id010 !ruby/object:Gem::Requirement
112
+ version_requirements: *70250436362640
113
+ - !ruby/object:Gem::Dependency
114
+ name: mongoid
115
+ requirement: &70250436361060 !ruby/object:Gem::Requirement
163
116
  none: false
164
- requirements:
117
+ requirements:
165
118
  - - ~>
166
- - !ruby/object:Gem::Version
167
- hash: 5
168
- segments:
169
- - 2
170
- - 2
171
- - 1
119
+ - !ruby/object:Gem::Version
172
120
  version: 2.2.1
173
121
  type: :development
174
- version_requirements: *id010
175
- - !ruby/object:Gem::Dependency
176
- name: sqlite3
177
122
  prerelease: false
178
- requirement: &id011 !ruby/object:Gem::Requirement
123
+ version_requirements: *70250436361060
124
+ - !ruby/object:Gem::Dependency
125
+ name: sqlite3
126
+ requirement: &70250441020080 !ruby/object:Gem::Requirement
179
127
  none: false
180
- requirements:
181
- - - ">="
182
- - !ruby/object:Gem::Version
183
- hash: 3
184
- segments:
185
- - 0
186
- version: "0"
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
187
132
  type: :development
188
- version_requirements: *id011
189
- - !ruby/object:Gem::Dependency
190
- name: supermodel
191
133
  prerelease: false
192
- requirement: &id012 !ruby/object:Gem::Requirement
134
+ version_requirements: *70250441020080
135
+ - !ruby/object:Gem::Dependency
136
+ name: supermodel
137
+ requirement: &70250441019620 !ruby/object:Gem::Requirement
193
138
  none: false
194
- requirements:
195
- - - ">="
196
- - !ruby/object:Gem::Version
197
- hash: 3
198
- segments:
199
- - 0
200
- version: "0"
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
201
143
  type: :development
202
- version_requirements: *id012
203
- - !ruby/object:Gem::Dependency
204
- name: rdoc
205
144
  prerelease: false
206
- requirement: &id013 !ruby/object:Gem::Requirement
145
+ version_requirements: *70250441019620
146
+ - !ruby/object:Gem::Dependency
147
+ name: rdoc
148
+ requirement: &70250441019180 !ruby/object:Gem::Requirement
207
149
  none: false
208
- requirements:
209
- - - ">="
210
- - !ruby/object:Gem::Version
211
- hash: 3
212
- segments:
213
- - 0
214
- version: "0"
150
+ requirements:
151
+ - - ! '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
215
154
  type: :development
216
- version_requirements: *id013
217
- - !ruby/object:Gem::Dependency
218
- name: rcov
219
155
  prerelease: false
220
- requirement: &id014 !ruby/object:Gem::Requirement
156
+ version_requirements: *70250441019180
157
+ - !ruby/object:Gem::Dependency
158
+ name: rcov
159
+ requirement: &70250441018760 !ruby/object:Gem::Requirement
221
160
  none: false
222
- requirements:
223
- - - ">="
224
- - !ruby/object:Gem::Version
225
- hash: 3
226
- segments:
227
- - 0
228
- version: "0"
161
+ requirements:
162
+ - - ! '>='
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
229
165
  type: :development
230
- version_requirements: *id014
231
- - !ruby/object:Gem::Dependency
232
- name: turn
233
166
  prerelease: false
234
- requirement: &id015 !ruby/object:Gem::Requirement
167
+ version_requirements: *70250441018760
168
+ - !ruby/object:Gem::Dependency
169
+ name: turn
170
+ requirement: &70250441018340 !ruby/object:Gem::Requirement
235
171
  none: false
236
- requirements:
237
- - - ">="
238
- - !ruby/object:Gem::Version
239
- hash: 3
240
- segments:
241
- - 0
242
- version: "0"
172
+ requirements:
173
+ - - ! '>='
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
243
176
  type: :development
244
- version_requirements: *id015
245
- description: " Tire is a Ruby client for the ElasticSearch search engine/database.\n\n It provides Ruby-like API for fluent communication with the ElasticSearch server\n and blends with ActiveModel class for convenient usage in Rails applications.\n\n It allows to delete and create indices, define mapping for them, supports\n the bulk API, and presents an easy-to-use DSL for constructing your queries.\n\n It has full ActiveRecord/ActiveModel compatibility, allowing you to index\n your models (incrementally upon saving, or in bulk), searching and\n paginating the results.\n\n Please check the documentation at <http://karmi.github.com/tire/>.\n"
177
+ prerelease: false
178
+ version_requirements: *70250441018340
179
+ description: ! " Tire is a Ruby client for the ElasticSearch search engine/database.\n\n
180
+ \ It provides Ruby-like API for fluent communication with the ElasticSearch server\n
181
+ \ and blends with ActiveModel class for convenient usage in Rails applications.\n\n
182
+ \ It allows to delete and create indices, define mapping for them, supports\n the
183
+ bulk API, and presents an easy-to-use DSL for constructing your queries.\n\n It
184
+ has full ActiveRecord/ActiveModel compatibility, allowing you to index\n your
185
+ models (incrementally upon saving, or in bulk), searching and\n paginating the
186
+ results.\n\n Please check the documentation at <http://karmi.github.com/tire/>.\n"
246
187
  email: karmi@karmi.cz
247
188
  executables: []
248
-
249
189
  extensions: []
250
-
251
- extra_rdoc_files:
190
+ extra_rdoc_files:
252
191
  - README.markdown
253
192
  - MIT-LICENSE
254
- files:
193
+ files:
255
194
  - .gitignore
256
195
  - .travis.yml
257
196
  - Gemfile
@@ -299,7 +238,9 @@ files:
299
238
  - test/integration/active_model_searchable_test.rb
300
239
  - test/integration/active_record_searchable_test.rb
301
240
  - test/integration/boolean_queries_test.rb
241
+ - test/integration/custom_score_queries_test.rb
302
242
  - test/integration/facets_test.rb
243
+ - test/integration/filtered_queries_test.rb
303
244
  - test/integration/filters_test.rb
304
245
  - test/integration/highlight_test.rb
305
246
  - test/integration/index_mapping_test.rb
@@ -344,61 +285,36 @@ files:
344
285
  - test/unit/search_test.rb
345
286
  - test/unit/tire_test.rb
346
287
  - tire.gemspec
347
- has_rdoc: true
348
288
  homepage: http://github.com/karmi/tire
349
289
  licenses: []
350
-
351
- post_install_message: |
352
- ================================================================================
353
-
354
- Please check the documentation at <http://karmi.github.com/tire/>.
355
-
356
- --------------------------------------------------------------------------------
357
-
358
- IMPORTANT CHANGES LATELY:
359
-
360
- * Fixed a bug: `Results::Item` was referencing Ruby classes incorrectly within Rails
361
- * Fixed `ZeroDivisionError` for empty result sets
362
- * Display correct exception on request failure
363
- * Added support for range queries
364
- * Added support for mapping options
365
-
366
- See the full changelog at <http://github.com/karmi/tire/commits/v0.3.8>.
367
-
368
- --------------------------------------------------------------------------------
369
-
370
- rdoc_options:
290
+ post_install_message: ! "================================================================================\n\n
291
+ \ Please check the documentation at <http://karmi.github.com/tire/>.\n\n--------------------------------------------------------------------------------\n\n
292
+ \ IMPORTANT CHANGES LATELY:\n\n * Added support for filtered queries [#134]\n *
293
+ Added support for \"custom_score\" queries [#133]\n\n See the full changelog at
294
+ <http://github.com/karmi/tire/commits/v0.3.9>.\n\n--------------------------------------------------------------------------------\n"
295
+ rdoc_options:
371
296
  - --charset=UTF-8
372
- require_paths:
297
+ require_paths:
373
298
  - lib
374
- required_ruby_version: !ruby/object:Gem::Requirement
299
+ required_ruby_version: !ruby/object:Gem::Requirement
375
300
  none: false
376
- requirements:
377
- - - ">="
378
- - !ruby/object:Gem::Version
379
- hash: 3
380
- segments:
381
- - 0
382
- version: "0"
383
- required_rubygems_version: !ruby/object:Gem::Requirement
301
+ requirements:
302
+ - - ! '>='
303
+ - !ruby/object:Gem::Version
304
+ version: '0'
305
+ required_rubygems_version: !ruby/object:Gem::Requirement
384
306
  none: false
385
- requirements:
386
- - - ">="
387
- - !ruby/object:Gem::Version
388
- hash: 23
389
- segments:
390
- - 1
391
- - 3
392
- - 6
307
+ requirements:
308
+ - - ! '>='
309
+ - !ruby/object:Gem::Version
393
310
  version: 1.3.6
394
311
  requirements: []
395
-
396
312
  rubyforge_project: tire
397
- rubygems_version: 1.6.2
313
+ rubygems_version: 1.8.10
398
314
  signing_key:
399
315
  specification_version: 3
400
316
  summary: Ruby client for ElasticSearch
401
- test_files:
317
+ test_files:
402
318
  - test/fixtures/articles/1.json
403
319
  - test/fixtures/articles/2.json
404
320
  - test/fixtures/articles/3.json
@@ -407,7 +323,9 @@ test_files:
407
323
  - test/integration/active_model_searchable_test.rb
408
324
  - test/integration/active_record_searchable_test.rb
409
325
  - test/integration/boolean_queries_test.rb
326
+ - test/integration/custom_score_queries_test.rb
410
327
  - test/integration/facets_test.rb
328
+ - test/integration/filtered_queries_test.rb
411
329
  - test/integration/filters_test.rb
412
330
  - test/integration/highlight_test.rb
413
331
  - test/integration/index_mapping_test.rb