picky 4.21.2 → 4.22.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/picky/bundle.rb +10 -9
- data/lib/picky/generators/similarity.rb +4 -4
- data/lib/picky/index_indexing.rb +2 -0
- data/lib/picky/query/allocation.rb +18 -10
- data/lib/picky/query/allocations.rb +4 -4
- data/lib/picky/query/combinations.rb +9 -3
- data/lib/picky/results.rb +19 -13
- data/lib/picky/search.rb +9 -9
- data/spec/functional/arrays_as_ids_spec.rb +2 -2
- data/spec/functional/results_spec.rb +63 -0
- data/spec/functional/similarity_spec.rb +72 -0
- data/spec/functional/terminate_early_spec.rb +18 -10
- data/spec/lib/bundle_indexing_spec.rb +2 -2
- data/spec/lib/generators/similarity/double_metaphone_spec.rb +0 -39
- data/spec/lib/generators/similarity/metaphone_spec.rb +0 -40
- data/spec/lib/generators/similarity/soundex_spec.rb +0 -40
- data/spec/lib/generators/similarity_spec.rb +6 -6
- data/spec/lib/results_spec.rb +9 -19
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 954befab3206369e74bfcdda5281da5f9c638f6a
|
4
|
+
data.tar.gz: 7128af9049b1b9ce1f5d29fbc1b37df8ef9eca58
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa52877a9229a585e86fa4e2dd47dfedd093a53e1f7cc802eb6b309ccc49e0ef9c161c2e3b9b6be0ebdec9866365bf940e589dcd83731bdef4c1593fb6c3bce4
|
7
|
+
data.tar.gz: 6f5095a81599f40c006db8cce7bacfa82b58ac8f7043b64d1287ac673dec5b40bb3dd558213dd478d6ee5980f82f1695227a94bc158fe95c3aaa7d93e7dfc172
|
data/lib/picky/bundle.rb
CHANGED
@@ -128,19 +128,20 @@ module Picky
|
|
128
128
|
|
129
129
|
# Get a list of similar texts.
|
130
130
|
#
|
131
|
-
# Note:
|
131
|
+
# Note: Also checks for itself.
|
132
132
|
#
|
133
133
|
def similar text
|
134
134
|
code = similarity_strategy.encode text
|
135
135
|
return [] unless code
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
136
|
+
@similarity[code] || []
|
137
|
+
# similar_codes = @similarity[code]
|
138
|
+
# if similar_codes.blank?
|
139
|
+
# [] # Return a simple array.
|
140
|
+
# else
|
141
|
+
# similar_codes = similar_codes.dup
|
142
|
+
# similar_codes.delete text # Remove itself.
|
143
|
+
# similar_codes
|
144
|
+
# end
|
144
145
|
end
|
145
146
|
|
146
147
|
# If a key format is set, use it, else forward to the category.
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Picky
|
2
|
-
|
2
|
+
|
3
3
|
module Generators
|
4
4
|
|
5
5
|
module Similarity
|
@@ -12,8 +12,8 @@ module Picky
|
|
12
12
|
thing
|
13
13
|
else
|
14
14
|
raise <<-ERROR
|
15
|
-
|
16
|
-
* for example a Similarity::
|
15
|
+
Similarity options #{identifier_for(index_name, category_name)}should be either
|
16
|
+
* for example a Similarity::Soundex.new(n), Similarity::Metaphone.new(n), Similarity::DoubleMetaphone.new(n) etc.
|
17
17
|
or
|
18
18
|
* an object that responds to #encode(text) => encoded_text and #prioritize(array_of_encoded, encoded)
|
19
19
|
ERROR
|
@@ -23,5 +23,5 @@ ERROR
|
|
23
23
|
end
|
24
24
|
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
end
|
data/lib/picky/index_indexing.rb
CHANGED
@@ -105,6 +105,8 @@ module Picky
|
|
105
105
|
#
|
106
106
|
# Parameter is a method name to use on the key (e.g. :to_i, :to_s, :strip, :split).
|
107
107
|
#
|
108
|
+
# TODO Rename to id_format.
|
109
|
+
#
|
108
110
|
def key_format key_format = nil
|
109
111
|
key_format ? (@key_format = key_format) : @key_format
|
110
112
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Picky
|
2
2
|
|
3
3
|
module Query
|
4
|
-
|
4
|
+
|
5
5
|
# An Allocation contains an ordered list of
|
6
6
|
# tuples (Combinations).
|
7
7
|
# The Combinations are ordered according to the order
|
@@ -25,7 +25,13 @@ module Picky
|
|
25
25
|
@index = index
|
26
26
|
@combinations = combinations
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
|
+
# TODO
|
30
|
+
#
|
31
|
+
def each &block
|
32
|
+
@combinations.each &block
|
33
|
+
end
|
34
|
+
|
29
35
|
#
|
30
36
|
#
|
31
37
|
def backend
|
@@ -48,6 +54,14 @@ module Picky
|
|
48
54
|
end)
|
49
55
|
end
|
50
56
|
|
57
|
+
# Ids return by default [].
|
58
|
+
#
|
59
|
+
# TODO Calculate ids here.
|
60
|
+
#
|
61
|
+
def ids
|
62
|
+
@ids ||= []
|
63
|
+
end
|
64
|
+
|
51
65
|
# Asks the backend for the (intersected) ids.
|
52
66
|
#
|
53
67
|
# Note: Combinations can be empty on eg.
|
@@ -56,18 +70,12 @@ module Picky
|
|
56
70
|
#
|
57
71
|
def calculate_ids amount, offset
|
58
72
|
return [] if @combinations.empty? # Checked here to avoid checking in each backend.
|
59
|
-
|
73
|
+
|
60
74
|
# TODO Redesign such that ids is only created (and cached) if requested.
|
61
75
|
#
|
62
76
|
backend.ids @combinations, amount, offset
|
63
77
|
end
|
64
78
|
|
65
|
-
# Ids return by default [].
|
66
|
-
#
|
67
|
-
def ids
|
68
|
-
@ids ||= []
|
69
|
-
end
|
70
|
-
|
71
79
|
# This starts the searching process.
|
72
80
|
#
|
73
81
|
# Returns the calculated ids (from the offset).
|
@@ -112,7 +120,7 @@ module Picky
|
|
112
120
|
def to_result
|
113
121
|
[@index.result_identifier, self.score, self.count, @combinations.to_result, self.ids] if self.count && self.count > 0
|
114
122
|
end
|
115
|
-
|
123
|
+
|
116
124
|
#
|
117
125
|
#
|
118
126
|
def to_qualifiers
|
@@ -53,7 +53,7 @@ module Picky
|
|
53
53
|
def remove_categories categories = []
|
54
54
|
@allocations.each { |allocation| allocation.remove categories } unless categories.empty?
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
# Removes allocations.
|
58
58
|
#
|
59
59
|
# Only those passed in are removed.
|
@@ -70,7 +70,7 @@ module Picky
|
|
70
70
|
allocation
|
71
71
|
end
|
72
72
|
end
|
73
|
-
|
73
|
+
|
74
74
|
# Keeps allocations.
|
75
75
|
#
|
76
76
|
# Only those passed in are kept.
|
@@ -90,7 +90,7 @@ module Picky
|
|
90
90
|
# Returns the top amount ids.
|
91
91
|
#
|
92
92
|
def ids amount = 20
|
93
|
-
|
93
|
+
inject([]) do |total, allocation|
|
94
94
|
total.size >= amount ? (return total.shift(amount)) : total + allocation.ids
|
95
95
|
end
|
96
96
|
end
|
@@ -128,7 +128,7 @@ module Picky
|
|
128
128
|
end
|
129
129
|
end
|
130
130
|
end
|
131
|
-
|
131
|
+
|
132
132
|
# Same as #process! but removes duplicate ids from results.
|
133
133
|
#
|
134
134
|
# Note that in the result later on an allocation won't be
|
@@ -6,7 +6,7 @@ module Picky
|
|
6
6
|
#
|
7
7
|
# Combinations contain methods for calculating score (including
|
8
8
|
# the boost) and ids for each of its Combination s.
|
9
|
-
#
|
9
|
+
#
|
10
10
|
# They are the core of an Allocation.
|
11
11
|
# An Allocation consists of a number of Combinations.
|
12
12
|
#
|
@@ -23,6 +23,12 @@ module Picky
|
|
23
23
|
@combinations = combinations
|
24
24
|
end
|
25
25
|
|
26
|
+
# TODO
|
27
|
+
#
|
28
|
+
def each &block
|
29
|
+
@combinations.each &block
|
30
|
+
end
|
31
|
+
|
26
32
|
# Sums up the weights of the combinations.
|
27
33
|
#
|
28
34
|
# Note: Optimized sum(&:weight) away – ~3% improvement.
|
@@ -39,7 +45,7 @@ module Picky
|
|
39
45
|
# ids that have an associated identifier that is nil.
|
40
46
|
#
|
41
47
|
def remove categories = []
|
42
|
-
# TODO Do not use the name, but the category.
|
48
|
+
# TODO Do not use the name, but the category.
|
43
49
|
#
|
44
50
|
@combinations.reject! { |combination| categories.include?(combination.category.name) }
|
45
51
|
end
|
@@ -49,7 +55,7 @@ module Picky
|
|
49
55
|
def to_result
|
50
56
|
@combinations.map &:to_result
|
51
57
|
end
|
52
|
-
|
58
|
+
|
53
59
|
def to_qualifiers
|
54
60
|
@combinations.map &:category_name
|
55
61
|
end
|
data/lib/picky/results.rb
CHANGED
@@ -5,31 +5,29 @@ module Picky
|
|
5
5
|
#
|
6
6
|
class Results
|
7
7
|
|
8
|
+
include Enumerable
|
9
|
+
|
8
10
|
# Duration is set externally by the query.
|
9
11
|
#
|
10
12
|
attr_writer :duration
|
11
|
-
attr_reader :
|
12
|
-
:offset,
|
13
|
+
attr_reader :offset,
|
13
14
|
:amount,
|
14
15
|
:query
|
15
16
|
|
16
17
|
# Takes instances of Query::Allocations as param.
|
17
18
|
#
|
18
|
-
def initialize query = nil, amount = 0, offset = 0, allocations = Query::Allocations.new
|
19
|
+
def initialize query = nil, amount = 0, offset = 0, allocations = Query::Allocations.new, extra_allocations = nil, unique = false
|
19
20
|
@amount = amount
|
20
21
|
@query = query
|
21
22
|
@offset = offset
|
22
23
|
@allocations = allocations
|
24
|
+
@extra_allocations = extra_allocations
|
25
|
+
@unique = unique
|
23
26
|
end
|
24
27
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
#
|
29
|
-
def self.from query, amount, offset, allocations, extra_allocations = nil, unique = false
|
30
|
-
results = new query, amount, offset, allocations
|
31
|
-
results.prepare! extra_allocations, unique
|
32
|
-
results
|
28
|
+
def allocations
|
29
|
+
prepare! *(@prepared || [@extra_allocations, @unique])
|
30
|
+
@allocations
|
33
31
|
end
|
34
32
|
|
35
33
|
# This starts the actual processing.
|
@@ -38,9 +36,15 @@ module Picky
|
|
38
36
|
# and no ids are calculated.
|
39
37
|
#
|
40
38
|
def prepare! extra_allocations = nil, unique = false
|
39
|
+
return if @prepared == [extra_allocations, unique] # cached?
|
40
|
+
@prepared = [extra_allocations, unique] # cache!
|
41
41
|
unique ?
|
42
|
-
allocations.process_unique!(amount, offset, extra_allocations) :
|
43
|
-
allocations.process!(amount, offset, extra_allocations)
|
42
|
+
@allocations.process_unique!(amount, offset, extra_allocations) :
|
43
|
+
@allocations.process!(amount, offset, extra_allocations)
|
44
|
+
end
|
45
|
+
|
46
|
+
def each &block
|
47
|
+
allocations.each &block
|
44
48
|
end
|
45
49
|
|
46
50
|
# Forwards to allocations.
|
@@ -49,6 +53,8 @@ module Picky
|
|
49
53
|
# should not be done repeatedly. Just keep
|
50
54
|
# a reference to the result.
|
51
55
|
#
|
56
|
+
# TODO Rewrite such that this triggers calculation, not prepare!
|
57
|
+
#
|
52
58
|
def ids only = amount
|
53
59
|
allocations.ids only
|
54
60
|
end
|
data/lib/picky/search.rb
CHANGED
@@ -138,7 +138,7 @@ module Picky
|
|
138
138
|
def boost boosts
|
139
139
|
@boosts = extract_boosts boosts
|
140
140
|
end
|
141
|
-
|
141
|
+
|
142
142
|
# Ignore given categories and/or combinations of
|
143
143
|
# categories.
|
144
144
|
#
|
@@ -158,7 +158,7 @@ module Picky
|
|
158
158
|
end
|
159
159
|
end
|
160
160
|
end
|
161
|
-
|
161
|
+
|
162
162
|
# Exclusively keep combinations of
|
163
163
|
# categories.
|
164
164
|
#
|
@@ -171,7 +171,7 @@ module Picky
|
|
171
171
|
def only *allocations_and_categories
|
172
172
|
indexes.keep_allocations *allocations_and_categories
|
173
173
|
end
|
174
|
-
|
174
|
+
|
175
175
|
# Ignore the given token if it cannot be matched to a category.
|
176
176
|
# The default behaviour is that if a token does not match to
|
177
177
|
# any category, the query will not return anything (since a
|
@@ -236,12 +236,12 @@ module Picky
|
|
236
236
|
# Note: Internal method, use #search to search.
|
237
237
|
#
|
238
238
|
def execute tokens, ids, offset, original_text = nil, unique = false
|
239
|
-
Results.
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
239
|
+
Results.new original_text,
|
240
|
+
ids,
|
241
|
+
offset,
|
242
|
+
sorted_allocations(tokens, @max_allocations),
|
243
|
+
@extra_allocations,
|
244
|
+
unique
|
245
245
|
end
|
246
246
|
|
247
247
|
# Forwards the tokenizing to the query tokenizer.
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'ostruct'
|
5
|
+
|
6
|
+
describe "Results" do
|
7
|
+
|
8
|
+
let(:index1) { Picky::Index.new :results1 }
|
9
|
+
let(:index2) { Picky::Index.new :results2 }
|
10
|
+
let(:try) { Picky::Search.new index1, index2 }
|
11
|
+
|
12
|
+
# Test the enumerator abilities.
|
13
|
+
#
|
14
|
+
it 'can enumerate through the allocations' do
|
15
|
+
index1.category :text
|
16
|
+
index2.category :text
|
17
|
+
|
18
|
+
thing = OpenStruct.new id: 1, text: "ohai"
|
19
|
+
other = OpenStruct.new id: 2, text: "ohai kthxbye"
|
20
|
+
|
21
|
+
index1.add thing
|
22
|
+
index1.add other
|
23
|
+
index2.add thing
|
24
|
+
|
25
|
+
# each
|
26
|
+
#
|
27
|
+
expected = [
|
28
|
+
[2, 1],
|
29
|
+
[1]
|
30
|
+
]
|
31
|
+
try.search("text:ohai").each do |allocation|
|
32
|
+
expected.shift.should == allocation.ids
|
33
|
+
end
|
34
|
+
|
35
|
+
# map
|
36
|
+
#
|
37
|
+
try.search("text:ohai").map(&:ids).should == [
|
38
|
+
[2, 1],
|
39
|
+
[1]
|
40
|
+
]
|
41
|
+
try.search("text:ohai").map(&:score).should == [0.693, 0.0]
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'can re-prepare with different parameters' do
|
45
|
+
index1.category :text
|
46
|
+
index2.category :text
|
47
|
+
|
48
|
+
thing = OpenStruct.new id: 1, text: "ohai"
|
49
|
+
other = OpenStruct.new id: 2, text: "ohai kthxbye"
|
50
|
+
|
51
|
+
index1.add thing
|
52
|
+
index1.add other
|
53
|
+
index2.add thing
|
54
|
+
|
55
|
+
results = try.search "text:ohai"
|
56
|
+
results.ids.should == [2, 1, 1]
|
57
|
+
|
58
|
+
results.prepare! nil, true
|
59
|
+
results.ids.should == [2, 1]
|
60
|
+
results.ids.object_id.should_not == results.ids.object_id # Not cached.
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe 'similarity' do
|
6
|
+
it 'does Soundex' do
|
7
|
+
index = Picky::Index.new :phonetic do
|
8
|
+
indexing removes_characters: /[^a-z\s]/i
|
9
|
+
category :text, similarity: Picky::Similarity::Soundex.new(1)
|
10
|
+
end
|
11
|
+
|
12
|
+
index.replace_from id: 1, text: "Peter"
|
13
|
+
|
14
|
+
try = Picky::Search.new index
|
15
|
+
|
16
|
+
# No ~, no similarity.
|
17
|
+
#
|
18
|
+
try.search("text:petor").ids.should == []
|
19
|
+
|
20
|
+
# Finds soundex-similar text.
|
21
|
+
#
|
22
|
+
try.search("text:petor~").ids.should == [1]
|
23
|
+
|
24
|
+
# Finds the identity.
|
25
|
+
#
|
26
|
+
try.search("text:peter~").ids.should == [1]
|
27
|
+
end
|
28
|
+
it 'does Metaphone' do
|
29
|
+
index = Picky::Index.new :phonetic do
|
30
|
+
indexing removes_characters: /[^a-z\s]/i
|
31
|
+
category :text, similarity: Picky::Similarity::Metaphone.new(1)
|
32
|
+
end
|
33
|
+
|
34
|
+
index.replace_from id: 1, text: "Peter"
|
35
|
+
|
36
|
+
try = Picky::Search.new index
|
37
|
+
|
38
|
+
# No ~, no similarity.
|
39
|
+
#
|
40
|
+
try.search("text:pdr").ids.should == []
|
41
|
+
|
42
|
+
# Finds soundex-similar text.
|
43
|
+
#
|
44
|
+
try.search("text:pdr~").ids.should == [1]
|
45
|
+
|
46
|
+
# Finds the identity.
|
47
|
+
#
|
48
|
+
try.search("text:peter~").ids.should == [1]
|
49
|
+
end
|
50
|
+
it 'does DoubleMetaphone' do
|
51
|
+
index = Picky::Index.new :phonetic do
|
52
|
+
indexing removes_characters: /[^a-z\s]/i
|
53
|
+
category :text, similarity: Picky::Similarity::DoubleMetaphone.new(1)
|
54
|
+
end
|
55
|
+
|
56
|
+
index.replace_from id: 1, text: "Peter"
|
57
|
+
|
58
|
+
try = Picky::Search.new index
|
59
|
+
|
60
|
+
# No ~, no similarity.
|
61
|
+
#
|
62
|
+
try.search("text:pdr").ids.should == []
|
63
|
+
|
64
|
+
# Finds soundex-similar text.
|
65
|
+
#
|
66
|
+
try.search("text:pdr~").ids.should == [1]
|
67
|
+
|
68
|
+
# Finds the identity.
|
69
|
+
#
|
70
|
+
try.search("text:peter~").ids.should == [1]
|
71
|
+
end
|
72
|
+
end
|
@@ -156,43 +156,51 @@ describe 'Search#terminate_early' do
|
|
156
156
|
fast = performance_of do
|
157
157
|
try_fast.search 'hello'
|
158
158
|
end
|
159
|
-
|
159
|
+
slow.should < 0.00009
|
160
|
+
fast.should < 0.00005
|
161
|
+
(slow/fast).should >= 1.5
|
160
162
|
|
161
163
|
try_slow = Picky::Search.new index
|
162
164
|
slow = performance_of do
|
163
|
-
try_slow.search
|
165
|
+
try_slow.search('hello hello').ids
|
164
166
|
end
|
165
167
|
try_fast = Picky::Search.new index do
|
166
168
|
terminate_early
|
167
169
|
end
|
168
170
|
fast = performance_of do
|
169
|
-
try_fast.search
|
171
|
+
try_fast.search('hello hello').ids
|
170
172
|
end
|
171
|
-
|
173
|
+
slow.should < 0.00015
|
174
|
+
fast.should < 0.00009
|
175
|
+
(slow/fast).should >= 1.5
|
172
176
|
|
173
177
|
try_slow = Picky::Search.new index
|
174
178
|
slow = performance_of do
|
175
|
-
try_slow.search
|
179
|
+
try_slow.search('hello hello hello').ids
|
176
180
|
end
|
177
181
|
try_fast = Picky::Search.new index do
|
178
182
|
terminate_early
|
179
183
|
end
|
180
184
|
fast = performance_of do
|
181
|
-
try_fast.search
|
185
|
+
try_fast.search('hello hello hello').ids
|
182
186
|
end
|
183
|
-
|
187
|
+
slow.should < 0.0005
|
188
|
+
fast.should < 0.00025
|
189
|
+
(slow/fast).should >= 2
|
184
190
|
|
185
191
|
try_slow = Picky::Search.new index
|
186
192
|
slow = performance_of do
|
187
|
-
try_slow.search
|
193
|
+
try_slow.search('hello hello hello hello').ids
|
188
194
|
end
|
189
195
|
try_fast = Picky::Search.new index do
|
190
196
|
terminate_early
|
191
197
|
end
|
192
198
|
fast = performance_of do
|
193
|
-
try_fast.search
|
199
|
+
try_fast.search('hello hello hello hello').ids
|
194
200
|
end
|
195
|
-
|
201
|
+
slow.should < 0.002
|
202
|
+
fast.should < 0.0008
|
203
|
+
(slow/fast).should >= 2.3
|
196
204
|
end
|
197
205
|
|
198
206
|
end
|
@@ -21,8 +21,8 @@ describe Picky::Bundle do
|
|
21
21
|
bundle.add_similarity :dragon
|
22
22
|
bundle.add_similarity :dargon
|
23
23
|
end
|
24
|
-
it 'returns the right similars (
|
25
|
-
bundle.similar(:dragon).should == [:dargon]
|
24
|
+
it 'returns the right similars (including itself)' do
|
25
|
+
bundle.similar(:dragon).should == [:dargon, :dragon]
|
26
26
|
end
|
27
27
|
it 'returns the right similars' do
|
28
28
|
bundle.similar(:trkn).should == [:dargon, :dragon]
|
@@ -19,48 +19,9 @@ describe Picky::Generators::Similarity::DoubleMetaphone do
|
|
19
19
|
@similarity.encode(text).should == expected
|
20
20
|
end
|
21
21
|
end
|
22
|
-
# def self.it_should_generate_from index, expected
|
23
|
-
# it "should generate #{expected.inspect} correctly from #{index.inspect}" do
|
24
|
-
# @similarity.generate_from(index).should == expected
|
25
|
-
# end
|
26
|
-
# end
|
27
22
|
|
28
23
|
it_should_encode :meier, :MR
|
29
24
|
it_should_encode :grossberger, :KRSP
|
30
25
|
it_should_encode :hadelbla, :HTLP
|
31
26
|
|
32
|
-
# it_should_generate_from({}, {})
|
33
|
-
# it_should_generate_from({ :maier => nil, :meier => nil }, :MR => [:maier, :meier]) # should be correctly ordered
|
34
|
-
# it_should_generate_from({ :maier => nil, :meier => nil, :hallaballa => nil }, :MR => [:maier, :meier], :HLPL => [:hallaballa])
|
35
|
-
# it_should_generate_from({ :susan => nil, :susanne => nil, :bruderer => nil }, :SSN => [:susan, :susanne], :PRTR => [:bruderer])
|
36
|
-
|
37
|
-
# describe 'with reduced amount' do
|
38
|
-
# before(:each) do
|
39
|
-
# @similarity = described_class.new(1)
|
40
|
-
# end
|
41
|
-
# it_should_generate_from({ :maier => nil, :meier => nil }, :MR => [:maier])
|
42
|
-
# it_should_generate_from({ :susan => nil, :susanne => nil, :bruderer => nil }, :SSN => [:susan], :PRTR => [:bruderer])
|
43
|
-
# end
|
44
|
-
|
45
|
-
# describe 'hashify' do
|
46
|
-
# it 'should turn an empty list into an empty hash' do
|
47
|
-
# @similarity.send(:hashify, []).should == {}
|
48
|
-
# end
|
49
|
-
# it 'should turn the list into an unordered similarity' do
|
50
|
-
# @similarity.send(:hashify, [:meier, :maier]).should == { :MR => [:meier, :maier] }
|
51
|
-
# end
|
52
|
-
# it 'should turn the list into a encoded hash' do
|
53
|
-
# @similarity.send(:hashify, [:meier, :maier, :peter]).should == { :MR => [:meier, :maier], :PTR => [:peter] }
|
54
|
-
# end
|
55
|
-
# end
|
56
|
-
#
|
57
|
-
# context 'integration' do
|
58
|
-
# it 'should return the right ordered array' do
|
59
|
-
# index = @similarity.generate_from :meier => nil, :maier => nil, :mairai => nil, :mair => nil, :meira => nil
|
60
|
-
# code = @similarity.encoded :maier
|
61
|
-
#
|
62
|
-
# index[code].should == [:mair, :maier, :meier, :meira, :mairai]
|
63
|
-
# end
|
64
|
-
# end
|
65
|
-
|
66
27
|
end
|
@@ -20,48 +20,8 @@ describe Picky::Generators::Similarity::Metaphone do
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
# def self.it_should_generate_from index, expected
|
24
|
-
# it "should generate #{expected.inspect} correctly from #{index.inspect}" do
|
25
|
-
# @similarity.generate_from(index).should == expected
|
26
|
-
# end
|
27
|
-
# end
|
28
|
-
|
29
23
|
it_should_encode :meier, :MR
|
30
24
|
it_should_encode :grossberger, :KRSBRJR
|
31
25
|
it_should_encode :hadelbla, :HTLBL
|
32
26
|
|
33
|
-
# it_should_generate_from({}, {})
|
34
|
-
# it_should_generate_from({ :maier => nil, :meier => nil }, :MR => [:maier, :meier]) # should be correctly ordered
|
35
|
-
# it_should_generate_from({ :maier => nil, :meier => nil, :hallaballa => nil }, :MR => [:maier, :meier], :HLBL => [:hallaballa])
|
36
|
-
# it_should_generate_from({ :susan => nil, :susanne => nil, :bruderer => nil }, :SSN => [:susan, :susanne], :BRTRR => [:bruderer])
|
37
|
-
|
38
|
-
# describe 'with reduced amount' do
|
39
|
-
# before(:each) do
|
40
|
-
# @similarity = described_class.new(1)
|
41
|
-
# end
|
42
|
-
# it_should_generate_from({ :maier => nil, :meier => nil }, :MR => [:maier])
|
43
|
-
# it_should_generate_from({ :susan => nil, :susanne => nil, :bruderer => nil }, :SSN => [:susan], :BRTRR => [:bruderer])
|
44
|
-
# end
|
45
|
-
#
|
46
|
-
# describe 'hashify' do
|
47
|
-
# it 'should turn an empty list into an empty hash' do
|
48
|
-
# @similarity.send(:hashify, []).should == {}
|
49
|
-
# end
|
50
|
-
# it 'should turn the list into an unordered similarity' do
|
51
|
-
# @similarity.send(:hashify, [:meier, :maier]).should == { :MR => [:meier, :maier] }
|
52
|
-
# end
|
53
|
-
# it 'should turn the list into a encoded hash' do
|
54
|
-
# @similarity.send(:hashify, [:meier, :maier, :peter]).should == { :MR => [:meier, :maier], :PTR => [:peter] }
|
55
|
-
# end
|
56
|
-
# end
|
57
|
-
#
|
58
|
-
# context 'integration' do
|
59
|
-
# it 'should return the right ordered array' do
|
60
|
-
# index = @similarity.generate_from :meier => nil, :maier => nil, :mairai => nil, :mair => nil, :meira => nil
|
61
|
-
# code = @similarity.encoded :maier
|
62
|
-
#
|
63
|
-
# index[code].should == [:mair, :maier, :meier, :meira, :mairai]
|
64
|
-
# end
|
65
|
-
# end
|
66
|
-
|
67
27
|
end
|
@@ -20,48 +20,8 @@ describe Picky::Generators::Similarity::Soundex do
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
# def self.it_should_generate_from index, expected
|
24
|
-
# it "should generate #{expected.inspect} correctly from #{index.inspect}" do
|
25
|
-
# @similarity.generate_from(index).should == expected
|
26
|
-
# end
|
27
|
-
# end
|
28
|
-
|
29
23
|
it_should_encode :meier, :M600
|
30
24
|
it_should_encode :grossberger, :G621
|
31
25
|
it_should_encode :hadelbla, :H341
|
32
26
|
|
33
|
-
# it_should_generate_from({}, {})
|
34
|
-
# it_should_generate_from({ :maier => nil, :meier => nil }, :M600 => [:maier, :meier]) # should be correctly ordered
|
35
|
-
# it_should_generate_from({ :maier => nil, :meier => nil, :hallaballa => nil }, :M600 => [:maier, :meier], :H414 => [:hallaballa])
|
36
|
-
# it_should_generate_from({ :susan => nil, :susanne => nil, :bruderer => nil }, :S250 => [:susan, :susanne], :B636 => [:bruderer])
|
37
|
-
|
38
|
-
# describe 'with reduced amount' do
|
39
|
-
# before(:each) do
|
40
|
-
# @similarity = described_class.new(1)
|
41
|
-
# end
|
42
|
-
# it_should_generate_from({ :maier => nil, :meier => nil }, :M600 => [:maier])
|
43
|
-
# it_should_generate_from({ :susan => nil, :susanne => nil, :bruderer => nil }, :S250 => [:susan], :B636 => [:bruderer])
|
44
|
-
# end
|
45
|
-
|
46
|
-
# describe 'hashify' do
|
47
|
-
# it 'should turn an empty list into an empty hash' do
|
48
|
-
# @similarity.send(:hashify, []).should == {}
|
49
|
-
# end
|
50
|
-
# it 'should turn the list into an unordered similarity' do
|
51
|
-
# @similarity.send(:hashify, [:meier, :maier]).should == { :M600 => [:meier, :maier] }
|
52
|
-
# end
|
53
|
-
# it 'should turn the list into a encoded hash' do
|
54
|
-
# @similarity.send(:hashify, [:meier, :maier, :peter]).should == { :M600 => [:meier, :maier], :P360 => [:peter] }
|
55
|
-
# end
|
56
|
-
# end
|
57
|
-
|
58
|
-
# context 'integration' do
|
59
|
-
# it 'should return the right ordered array' do
|
60
|
-
# index = @similarity.generate_from :meier => nil, :maier => nil, :mairai => nil, :mair => nil, :meira => nil
|
61
|
-
# code = @similarity.encoded :maier
|
62
|
-
#
|
63
|
-
# index[code].should == [:mair, :maier, :meier, :meira, :mairai]
|
64
|
-
# end
|
65
|
-
# end
|
66
|
-
|
67
27
|
end
|
@@ -28,8 +28,8 @@ describe Picky::Generators::Similarity do
|
|
28
28
|
expect {
|
29
29
|
similarity.from Object.new
|
30
30
|
}.to raise_error(<<-ERROR)
|
31
|
-
|
32
|
-
* for example a Similarity::
|
31
|
+
Similarity options should be either
|
32
|
+
* for example a Similarity::Soundex.new(n), Similarity::Metaphone.new(n), Similarity::DoubleMetaphone.new(n) etc.
|
33
33
|
or
|
34
34
|
* an object that responds to #encode(text) => encoded_text and #prioritize(array_of_encoded, encoded)
|
35
35
|
ERROR
|
@@ -38,8 +38,8 @@ ERROR
|
|
38
38
|
expect {
|
39
39
|
similarity.from Object.new, 'some_index'
|
40
40
|
}.to raise_error(<<-ERROR)
|
41
|
-
|
42
|
-
* for example a Similarity::
|
41
|
+
Similarity options for some_index should be either
|
42
|
+
* for example a Similarity::Soundex.new(n), Similarity::Metaphone.new(n), Similarity::DoubleMetaphone.new(n) etc.
|
43
43
|
or
|
44
44
|
* an object that responds to #encode(text) => encoded_text and #prioritize(array_of_encoded, encoded)
|
45
45
|
ERROR
|
@@ -48,8 +48,8 @@ ERROR
|
|
48
48
|
expect {
|
49
49
|
similarity.from Object.new, 'some_index', 'some_category'
|
50
50
|
}.to raise_error(<<-ERROR)
|
51
|
-
|
52
|
-
* for example a Similarity::
|
51
|
+
Similarity options for some_index:some_category should be either
|
52
|
+
* for example a Similarity::Soundex.new(n), Similarity::Metaphone.new(n), Similarity::DoubleMetaphone.new(n) etc.
|
53
53
|
or
|
54
54
|
* an object that responds to #encode(text) => encoded_text and #prioritize(array_of_encoded, encoded)
|
55
55
|
ERROR
|
data/spec/lib/results_spec.rb
CHANGED
@@ -2,34 +2,23 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Picky::Results do
|
4
4
|
|
5
|
-
describe "from" do
|
6
|
-
before(:each) do
|
7
|
-
@results = double :results
|
8
|
-
described_class.stub :new => @results
|
9
|
-
|
10
|
-
@results.stub :prepare!
|
11
|
-
end
|
12
|
-
it "should generate a result" do
|
13
|
-
described_class.from("some query", 20, 0, @allocations).should == @results
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
5
|
describe "ids" do
|
18
6
|
before(:each) do
|
19
7
|
@allocations = double :allocations
|
20
|
-
@results = described_class.new :unimportant, :amount, :
|
8
|
+
@results = described_class.new :unimportant, :amount, :offset, @allocations
|
21
9
|
end
|
22
10
|
it "forwards" do
|
11
|
+
@allocations.should_receive(:process!).once.with :amount, :offset, nil
|
23
12
|
@allocations.should_receive(:ids).once.with :anything
|
24
13
|
|
25
14
|
@results.ids :anything
|
26
15
|
end
|
27
16
|
it "forwards and uses amount if nothing given" do
|
17
|
+
@allocations.should_receive(:process!).once.with :amount, :offset, nil
|
28
18
|
@allocations.should_receive(:ids).once.with :amount
|
29
19
|
|
30
20
|
@results.ids
|
31
21
|
end
|
32
|
-
|
33
22
|
end
|
34
23
|
|
35
24
|
describe 'to_s time format' do
|
@@ -54,12 +43,12 @@ describe Picky::Results do
|
|
54
43
|
context 'with results' do
|
55
44
|
before(:each) do
|
56
45
|
@allocations = double :allocations,
|
57
|
-
|
58
|
-
|
46
|
+
:process! => nil,
|
47
|
+
:size => 12
|
59
48
|
|
60
49
|
@results = described_class.new "some_query", 20, 1234, @allocations
|
61
50
|
@results.stub :duration => 0.1234567890,
|
62
|
-
|
51
|
+
:total => 12345678
|
63
52
|
end
|
64
53
|
it 'should output a specific log' do
|
65
54
|
@results.to_s.should == '>|2011-08-16 10:07:33|0.123457|some_query |12345678|1234|12|'
|
@@ -94,7 +83,8 @@ describe Picky::Results do
|
|
94
83
|
|
95
84
|
describe "accessors" do
|
96
85
|
before(:each) do
|
97
|
-
@
|
86
|
+
@allocations = double :allocations, :process! => :allocations
|
87
|
+
@results = described_class.new :query, :amount, :offset, @allocations
|
98
88
|
end
|
99
89
|
it "should have accessors for query" do
|
100
90
|
@results.query.should == :query
|
@@ -106,7 +96,7 @@ describe Picky::Results do
|
|
106
96
|
@results.offset.should == :offset
|
107
97
|
end
|
108
98
|
it "should have accessors for allocations" do
|
109
|
-
@results.allocations.should ==
|
99
|
+
@results.allocations.should == @allocations
|
110
100
|
end
|
111
101
|
it "should have accessors for duration" do
|
112
102
|
@results.duration = :some_duration
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: picky
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.22.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Hanke
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -259,6 +259,8 @@ files:
|
|
259
259
|
- spec/functional/regression_spec.rb
|
260
260
|
- spec/functional/reloading_spec.rb
|
261
261
|
- spec/functional/remap_qualifiers_spec.rb
|
262
|
+
- spec/functional/results_spec.rb
|
263
|
+
- spec/functional/similarity_spec.rb
|
262
264
|
- spec/functional/sorting_spec.rb
|
263
265
|
- spec/functional/speed_spec.rb
|
264
266
|
- spec/functional/static_spec.rb
|
@@ -438,6 +440,8 @@ test_files:
|
|
438
440
|
- spec/functional/regression_spec.rb
|
439
441
|
- spec/functional/reloading_spec.rb
|
440
442
|
- spec/functional/remap_qualifiers_spec.rb
|
443
|
+
- spec/functional/results_spec.rb
|
444
|
+
- spec/functional/similarity_spec.rb
|
441
445
|
- spec/functional/sorting_spec.rb
|
442
446
|
- spec/functional/speed_spec.rb
|
443
447
|
- spec/functional/static_spec.rb
|