picky 4.5.9 → 4.5.10

Sign up to get free protection for your applications and to get access to all the features.
@@ -8,7 +8,7 @@ module Picky
8
8
  #
9
9
  class Tokens
10
10
 
11
- attr_reader :ignore_unassigned
11
+ attr_reader :tokens, :ignore_unassigned
12
12
 
13
13
  # Basically delegates to its internal tokens array.
14
14
  #
@@ -74,10 +74,20 @@ module Picky
74
74
  def originals
75
75
  @tokens.map(&:original)
76
76
  end
77
-
77
+
78
+ #
79
+ #
78
80
  def == other
79
81
  self.tokens == other.tokens
80
82
  end
83
+
84
+ # Non destructive.
85
+ #
86
+ # TODO Make destructive?
87
+ #
88
+ def + other
89
+ self.class.new (@tokens + other.tokens), (self.ignore_unassigned || other.ignore_unassigned)
90
+ end
81
91
 
82
92
  # Just join the token original texts.
83
93
  #
@@ -17,10 +17,24 @@ module Picky
17
17
  def facets category_identifier, options = {}
18
18
  raise "#{__method__} cannot be used on searches with more than 1 index yet. Sorry!" if indexes.size > 1
19
19
  index = indexes.first
20
+
21
+ # Get index-specific facet weights.
22
+ #
20
23
  weights = index.facets category_identifier, options
24
+
25
+ # We're done if there is no filter.
26
+ #
21
27
  return weights unless filter_query = options[:filter]
28
+
29
+ # Pre-tokenize filter for reuse.
30
+ #
31
+ tokenized_filter = tokenized filter_query
32
+
33
+ # Filter out impossible facets.
34
+ #
22
35
  weights.select do |key, weight|
23
- search("#{filter_query} #{category_identifier}:#{key}", 0, 0).total > 0
36
+ tokenized_query = tokenized "#{category_identifier}:#{key}"
37
+ search_with(tokenized_filter + tokenized_query, 0, 0).total > 0
24
38
  end
25
39
  end
26
40
 
@@ -116,6 +116,11 @@ describe 'facets' do
116
116
  end
117
117
 
118
118
  describe 'facets' do
119
+ it 'is fast enough' do
120
+ performance_of {
121
+ 10.times { finder.facets(:age_category, filter: 'surname:meier name:peter') }
122
+ }.should < 0.0025
123
+ end
119
124
  it 'filters them correctly' do
120
125
  # It has one facet.
121
126
  #
@@ -208,6 +208,23 @@ describe Picky::Query::Tokens do
208
208
  @tokens.to_s.should == 'Hello~ I~ Am A* Token~'
209
209
  end
210
210
  end
211
+
212
+ describe '+' do
213
+ before(:each) do
214
+ @tokens = described_class.new [
215
+ Picky::Query::Token.processed('hello~', 'Hello~'),
216
+ Picky::Query::Token.processed('i~', 'I~')
217
+ ]
218
+ @other = described_class.new [
219
+ Picky::Query::Token.processed('am', 'Am'),
220
+ Picky::Query::Token.processed('a*', 'A*'),
221
+ Picky::Query::Token.processed('token~', 'Token~')
222
+ ]
223
+ end
224
+ it 'should work correctly' do
225
+ (@tokens + @other).to_s.should == 'Hello~ I~ Am A* Token~'
226
+ end
227
+ end
211
228
 
212
229
  def self.it_should_delegate name
213
230
  describe name do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: picky
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.5.9
4
+ version: 4.5.10
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-21 00:00:00.000000000 Z
12
+ date: 2012-07-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70136712695580 !ruby/object:Gem::Requirement
16
+ requirement: &70099253389300 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,21 +21,21 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70136712695580
24
+ version_requirements: *70099253389300
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: picky-client
27
- requirement: &70136712694400 !ruby/object:Gem::Requirement
27
+ requirement: &70099253388340 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
31
31
  - !ruby/object:Gem::Version
32
- version: 4.5.9
32
+ version: 4.5.10
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70136712694400
35
+ version_requirements: *70099253388340
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: text
38
- requirement: &70136712708560 !ruby/object:Gem::Requirement
38
+ requirement: &70099253386400 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70136712708560
46
+ version_requirements: *70099253386400
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: multi_json
49
- requirement: &70136712705380 !ruby/object:Gem::Requirement
49
+ requirement: &70099253385580 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70136712705380
57
+ version_requirements: *70099253385580
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: activesupport
60
- requirement: &70136712703480 !ruby/object:Gem::Requirement
60
+ requirement: &70099253400520 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '3.0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70136712703480
68
+ version_requirements: *70099253400520
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: procrastinate
71
- requirement: &70136712720160 !ruby/object:Gem::Requirement
71
+ requirement: &70099253398380 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0.4'
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *70136712720160
79
+ version_requirements: *70099253398380
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rack_fast_escape
82
- requirement: &70136712718840 !ruby/object:Gem::Requirement
82
+ requirement: &70099253396680 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: '0'
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *70136712718840
90
+ version_requirements: *70099253396680
91
91
  description: Fast Ruby semantic text search engine with comfortable single field interface.
92
92
  email: florian.hanke+picky@gmail.com
93
93
  executables: