picky 4.5.9 → 4.5.10

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.
@@ -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: