picky 2.7.0 → 3.0.0.pre1
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.
- data/lib/picky/adapters/rack/base.rb +20 -16
- data/lib/picky/adapters/rack/live_parameters.rb +28 -24
- data/lib/picky/adapters/rack/search.rb +67 -0
- data/lib/picky/adapters/rack.rb +27 -23
- data/lib/picky/application.rb +246 -236
- data/lib/picky/backend/base.rb +115 -119
- data/lib/picky/backend/file/basic.rb +102 -98
- data/lib/picky/backend/file/json.rb +27 -23
- data/lib/picky/backend/file/marshal.rb +32 -28
- data/lib/picky/backend/file/text.rb +45 -41
- data/lib/picky/backend/files.rb +19 -15
- data/lib/picky/backend/redis/basic.rb +76 -72
- data/lib/picky/backend/redis/list_hash.rb +40 -36
- data/lib/picky/backend/redis/string_hash.rb +30 -26
- data/lib/picky/backend/redis.rb +32 -28
- data/lib/picky/bundle.rb +82 -57
- data/lib/{bundling.rb → picky/bundling.rb} +0 -0
- data/lib/picky/calculations/location.rb +51 -47
- data/lib/picky/categories.rb +60 -56
- data/lib/picky/categories_indexed.rb +73 -82
- data/lib/picky/categories_indexing.rb +12 -8
- data/lib/picky/category.rb +109 -120
- data/lib/picky/category_indexed.rb +39 -41
- data/lib/picky/category_indexing.rb +123 -125
- data/lib/picky/character_substituters/west_european.rb +32 -26
- data/lib/{constants.rb → picky/constants.rb} +0 -0
- data/lib/picky/cores.rb +96 -92
- data/lib/{deployment.rb → picky/deployment.rb} +0 -0
- data/lib/picky/frontend_adapters/rack.rb +133 -118
- data/lib/picky/generators/aliases.rb +5 -3
- data/lib/picky/generators/base.rb +11 -7
- data/lib/picky/generators/partial/default.rb +7 -3
- data/lib/picky/generators/partial/none.rb +24 -20
- data/lib/picky/generators/partial/strategy.rb +20 -16
- data/lib/picky/generators/partial/substring.rb +94 -90
- data/lib/picky/generators/partial_generator.rb +11 -7
- data/lib/picky/generators/similarity/default.rb +9 -5
- data/lib/picky/generators/similarity/double_metaphone.rb +20 -16
- data/lib/picky/generators/similarity/metaphone.rb +20 -16
- data/lib/picky/generators/similarity/none.rb +23 -19
- data/lib/picky/generators/similarity/phonetic.rb +49 -45
- data/lib/picky/generators/similarity/soundex.rb +20 -16
- data/lib/picky/generators/similarity/strategy.rb +10 -6
- data/lib/picky/generators/similarity_generator.rb +11 -7
- data/lib/picky/generators/strategy.rb +14 -10
- data/lib/picky/generators/weights/default.rb +9 -5
- data/lib/picky/generators/weights/logarithmic.rb +30 -26
- data/lib/picky/generators/weights/strategy.rb +10 -6
- data/lib/picky/generators/weights_generator.rb +11 -7
- data/lib/picky/helpers/measuring.rb +20 -16
- data/lib/picky/indexed/bundle/base.rb +39 -37
- data/lib/picky/indexed/bundle/memory.rb +68 -64
- data/lib/picky/indexed/bundle/redis.rb +73 -69
- data/lib/picky/indexed/wrappers/bundle/calculation.rb +26 -22
- data/lib/picky/indexed/wrappers/bundle/location.rb +30 -26
- data/lib/picky/indexed/wrappers/bundle/wrapper.rb +36 -32
- data/lib/picky/indexed/wrappers/category/location.rb +17 -13
- data/lib/picky/indexed/wrappers/exact_first.rb +46 -42
- data/lib/picky/indexers/base.rb +26 -22
- data/lib/picky/indexers/parallel.rb +62 -58
- data/lib/picky/indexers/serial.rb +41 -37
- data/lib/picky/indexes/index.rb +400 -0
- data/lib/picky/indexes/index_indexed.rb +24 -0
- data/lib/picky/indexes/index_indexing.rb +138 -0
- data/lib/picky/indexes/memory.rb +20 -0
- data/lib/picky/indexes/redis.rb +20 -0
- data/lib/picky/indexes.rb +68 -61
- data/lib/picky/indexes_indexed.rb +16 -12
- data/lib/picky/indexes_indexing.rb +41 -37
- data/lib/picky/indexing/bundle/base.rb +216 -205
- data/lib/picky/indexing/bundle/memory.rb +16 -11
- data/lib/picky/indexing/bundle/redis.rb +14 -12
- data/lib/picky/indexing/wrappers/category/location.rb +17 -13
- data/lib/picky/interfaces/live_parameters.rb +159 -154
- data/lib/picky/loader.rb +267 -304
- data/lib/picky/loggers/search.rb +20 -13
- data/lib/picky/no_source_specified_exception.rb +7 -3
- data/lib/picky/performant.rb +6 -2
- data/lib/picky/query/allocation.rb +71 -67
- data/lib/picky/query/allocations.rb +99 -94
- data/lib/picky/query/combination.rb +70 -66
- data/lib/picky/query/combinations/base.rb +56 -52
- data/lib/picky/query/combinations/memory.rb +36 -32
- data/lib/picky/query/combinations/redis.rb +66 -62
- data/lib/picky/query/indexes.rb +175 -160
- data/lib/picky/query/qualifier_category_mapper.rb +43 -0
- data/lib/picky/query/token.rb +165 -172
- data/lib/picky/query/tokens.rb +86 -82
- data/lib/picky/query/weights.rb +44 -48
- data/lib/picky/query.rb +5 -1
- data/lib/picky/rack/harakiri.rb +51 -47
- data/lib/picky/results.rb +81 -77
- data/lib/picky/search.rb +169 -158
- data/lib/picky/sinatra.rb +34 -0
- data/lib/picky/sources/base.rb +73 -70
- data/lib/picky/sources/couch.rb +61 -57
- data/lib/picky/sources/csv.rb +68 -64
- data/lib/picky/sources/db.rb +139 -135
- data/lib/picky/sources/delicious.rb +52 -48
- data/lib/picky/sources/mongo.rb +68 -63
- data/lib/picky/sources/wrappers/base.rb +20 -16
- data/lib/picky/sources/wrappers/location.rb +37 -33
- data/lib/picky/statistics.rb +46 -43
- data/lib/picky/tasks.rb +3 -0
- data/lib/picky/tokenizers/base.rb +192 -187
- data/lib/picky/tokenizers/index.rb +25 -21
- data/lib/picky/tokenizers/location.rb +33 -29
- data/lib/picky/tokenizers/query.rb +49 -43
- data/lib/picky.rb +21 -13
- data/lib/tasks/application.rake +1 -1
- data/lib/tasks/index.rake +3 -3
- data/lib/tasks/routes.rake +1 -1
- data/lib/tasks/server.rake +1 -1
- data/spec/lib/adapters/rack/base_spec.rb +1 -1
- data/spec/lib/adapters/rack/live_parameters_spec.rb +1 -1
- data/spec/lib/adapters/rack/query_spec.rb +1 -1
- data/spec/lib/application_spec.rb +39 -32
- data/spec/lib/backend/file/basic_spec.rb +2 -2
- data/spec/lib/backend/file/json_spec.rb +2 -2
- data/spec/lib/backend/file/marshal_spec.rb +2 -2
- data/spec/lib/backend/file/text_spec.rb +1 -1
- data/spec/lib/backend/files_spec.rb +14 -24
- data/spec/lib/backend/redis/basic_spec.rb +2 -2
- data/spec/lib/backend/redis/list_hash_spec.rb +3 -3
- data/spec/lib/backend/redis/string_hash_spec.rb +3 -3
- data/spec/lib/backend/redis_spec.rb +20 -13
- data/spec/lib/calculations/location_spec.rb +1 -1
- data/spec/lib/categories_indexed_spec.rb +16 -34
- data/spec/lib/category_indexed_spec.rb +9 -27
- data/spec/lib/category_indexing_spec.rb +2 -3
- data/spec/lib/category_spec.rb +10 -10
- data/spec/lib/character_substituters/west_european_spec.rb +6 -5
- data/spec/lib/cores_spec.rb +17 -17
- data/spec/lib/extensions/symbol_spec.rb +15 -1
- data/spec/lib/frontend_adapters/rack_spec.rb +20 -20
- data/spec/lib/generators/aliases_spec.rb +3 -3
- data/spec/lib/generators/cacher_strategy_spec.rb +1 -1
- data/spec/lib/generators/partial/default_spec.rb +3 -3
- data/spec/lib/generators/partial/none_spec.rb +2 -2
- data/spec/lib/generators/partial/substring_spec.rb +1 -1
- data/spec/lib/generators/partial_generator_spec.rb +3 -3
- data/spec/lib/generators/similarity/double_metaphone_spec.rb +1 -1
- data/spec/lib/generators/similarity/metaphone_spec.rb +1 -1
- data/spec/lib/generators/similarity/none_spec.rb +1 -1
- data/spec/lib/generators/similarity/phonetic_spec.rb +1 -1
- data/spec/lib/generators/similarity/soundex_spec.rb +1 -1
- data/spec/lib/generators/similarity_generator_spec.rb +2 -2
- data/spec/lib/generators/weights/logarithmic_spec.rb +1 -1
- data/spec/lib/generators/weights_generator_spec.rb +1 -1
- data/spec/lib/helpers/measuring_spec.rb +2 -2
- data/spec/lib/indexed/bundle/memory_spec.rb +6 -6
- data/spec/lib/indexed/bundle/redis_spec.rb +4 -4
- data/spec/lib/indexed/wrappers/bundle/calculation_spec.rb +2 -3
- data/spec/lib/indexed/wrappers/bundle/wrapper_spec.rb +2 -2
- data/spec/lib/indexed/wrappers/exact_first_spec.rb +5 -5
- data/spec/lib/indexers/base_spec.rb +1 -1
- data/spec/lib/indexers/parallel_spec.rb +1 -1
- data/spec/lib/indexers/serial_spec.rb +1 -1
- data/spec/lib/{index/base_indexed_spec.rb → indexes/index_indexed_spec.rb} +3 -3
- data/spec/lib/{index/base_indexing_spec.rb → indexes/index_indexing_spec.rb} +19 -2
- data/spec/lib/{index/base_spec.rb → indexes/index_spec.rb} +6 -25
- data/spec/lib/{index → indexes}/redis_spec.rb +1 -1
- data/spec/lib/indexes_class_spec.rb +2 -2
- data/spec/lib/indexes_indexed_spec.rb +1 -1
- data/spec/lib/indexes_indexing_spec.rb +1 -1
- data/spec/lib/indexes_spec.rb +1 -1
- data/spec/lib/indexing/bundle/base_spec.rb +7 -5
- data/spec/lib/indexing/bundle/memory_partial_generation_speed_spec.rb +4 -4
- data/spec/lib/indexing/bundle/memory_spec.rb +15 -15
- data/spec/lib/indexing/bundle/redis_spec.rb +9 -9
- data/spec/lib/interfaces/live_parameters_spec.rb +5 -5
- data/spec/lib/loader_spec.rb +17 -19
- data/spec/lib/loggers/search_spec.rb +2 -2
- data/spec/lib/query/allocation_spec.rb +1 -1
- data/spec/lib/query/allocations_spec.rb +1 -1
- data/spec/lib/query/combination_spec.rb +4 -4
- data/spec/lib/query/combinations/base_spec.rb +1 -1
- data/spec/lib/query/combinations/memory_spec.rb +1 -1
- data/spec/lib/query/combinations/redis_spec.rb +1 -1
- data/spec/lib/query/indexes_spec.rb +7 -2
- data/spec/lib/query/qualifier_category_mapper_spec.rb +34 -0
- data/spec/lib/query/token_spec.rb +32 -53
- data/spec/lib/query/tokens_spec.rb +30 -35
- data/spec/lib/query/weights_spec.rb +16 -16
- data/spec/lib/rack/harakiri_spec.rb +5 -5
- data/spec/lib/results_spec.rb +1 -1
- data/spec/lib/search_spec.rb +24 -22
- data/spec/lib/sinatra_spec.rb +36 -0
- data/spec/lib/sources/base_spec.rb +1 -1
- data/spec/lib/sources/couch_spec.rb +9 -9
- data/spec/lib/sources/csv_spec.rb +7 -7
- data/spec/lib/sources/db_spec.rb +2 -2
- data/spec/lib/sources/delicious_spec.rb +5 -5
- data/spec/lib/sources/mongo_spec.rb +7 -7
- data/spec/lib/sources/wrappers/base_spec.rb +2 -2
- data/spec/lib/sources/wrappers/location_spec.rb +1 -1
- data/spec/lib/statistics_spec.rb +1 -1
- data/spec/lib/tokenizers/base_spec.rb +2 -2
- data/spec/lib/tokenizers/index_spec.rb +1 -1
- data/spec/lib/tokenizers/query_spec.rb +1 -1
- metadata +30 -30
- data/lib/picky/adapters/rack/query.rb +0 -65
- data/lib/picky/index/base.rb +0 -409
- data/lib/picky/index/base_indexed.rb +0 -29
- data/lib/picky/index/base_indexing.rb +0 -127
- data/lib/picky/index/memory.rb +0 -16
- data/lib/picky/index/redis.rb +0 -16
- data/lib/picky/query/qualifiers.rb +0 -76
- data/lib/picky/query/solr.rb +0 -60
- data/lib/picky/signals.rb +0 -8
- data/lib/picky-tasks.rb +0 -6
- data/lib/tasks/spec.rake +0 -11
- data/spec/lib/query/qualifiers_spec.rb +0 -31
|
@@ -1,47 +1,51 @@
|
|
|
1
|
-
module
|
|
1
|
+
module Picky
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
module Tokenizers
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
class Location < Base
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
super options
|
|
7
|
+
attr_reader :calculation
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
def initialize options = {}
|
|
10
|
+
super options
|
|
12
11
|
|
|
13
|
-
|
|
12
|
+
grid = options[:grid]
|
|
13
|
+
precision = options[:precision] || 1
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
@calculation = Calculations::Location.new grid, precision
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
end
|
|
17
|
+
@minimum = 1.0 / 0
|
|
19
18
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
def tokenize text
|
|
19
|
+
@locations = []
|
|
20
|
+
end
|
|
23
21
|
|
|
24
|
-
# Gather min/max.
|
|
25
22
|
#
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
23
|
+
#
|
|
24
|
+
def tokenize text
|
|
25
|
+
|
|
26
|
+
# Gather min/max.
|
|
27
|
+
#
|
|
28
|
+
source.harvest category do |indexed_id, location|
|
|
29
|
+
location = location.to_f
|
|
30
|
+
minimum = location if location < minimum
|
|
31
|
+
locations << [indexed_id, location]
|
|
32
|
+
end
|
|
31
33
|
|
|
32
|
-
|
|
34
|
+
calculation.minimum = minimum
|
|
33
35
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
# Recalculate locations.
|
|
37
|
+
#
|
|
38
|
+
locations.each do |indexed_id, location|
|
|
39
|
+
calculation.recalculated_range(location).each do |new_location|
|
|
40
|
+
yield indexed_id, new_location.to_s
|
|
41
|
+
end
|
|
39
42
|
end
|
|
43
|
+
|
|
44
|
+
# TODO Move to the right place.
|
|
45
|
+
#
|
|
46
|
+
category.indexing_exact[:location_minimum] = minimum
|
|
40
47
|
end
|
|
41
48
|
|
|
42
|
-
# TODO Move to the right place.
|
|
43
|
-
#
|
|
44
|
-
category.indexing_exact[:location_minimum] = minimum
|
|
45
49
|
end
|
|
46
50
|
|
|
47
51
|
end
|
|
@@ -1,53 +1,59 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
#
|
|
3
|
-
module
|
|
4
|
-
|
|
5
|
-
# There are a few class methods that you can use to configure how a query works.
|
|
6
|
-
#
|
|
7
|
-
# removes_characters regexp
|
|
8
|
-
# illegal_after_normalizing regexp
|
|
9
|
-
# stopwords regexp
|
|
10
|
-
# contracts_expressions regexp, to_string
|
|
11
|
-
# splits_text_on regexp
|
|
12
|
-
# normalizes_words [[/regexp1/, 'replacement1'], [/regexp2/, 'replacement2']]
|
|
13
|
-
#
|
|
14
|
-
class Query < Base
|
|
15
|
-
|
|
16
|
-
def self.default= new_default
|
|
17
|
-
@default = new_default
|
|
18
|
-
end
|
|
19
|
-
def self.default
|
|
20
|
-
@default ||= new
|
|
21
|
-
end
|
|
3
|
+
module Picky
|
|
22
4
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def initialize options = {}
|
|
26
|
-
super options
|
|
27
|
-
@maximum_tokens = options[:maximum_tokens] || 5
|
|
28
|
-
end
|
|
5
|
+
module Tokenizers
|
|
29
6
|
|
|
30
|
-
#
|
|
31
|
-
# Reject, limit, and partialize tokens.
|
|
7
|
+
# There are a few class methods that you can use to configure how a query works.
|
|
32
8
|
#
|
|
33
|
-
#
|
|
9
|
+
# removes_characters regexp
|
|
10
|
+
# illegal_after_normalizing regexp
|
|
11
|
+
# stopwords regexp
|
|
12
|
+
# contracts_expressions regexp, to_string
|
|
13
|
+
# splits_text_on regexp
|
|
14
|
+
# normalizes_words [[/regexp1/, 'replacement1'], [/regexp2/, 'replacement2']]
|
|
34
15
|
#
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
16
|
+
class Query < Base
|
|
17
|
+
|
|
18
|
+
attr_reader :qualifiers
|
|
19
|
+
|
|
20
|
+
def self.default= new_default
|
|
21
|
+
@default = new_default
|
|
22
|
+
end
|
|
23
|
+
def self.default
|
|
24
|
+
@default ||= new
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
attr_reader :maximum_tokens
|
|
28
|
+
|
|
29
|
+
def initialize options = {}
|
|
30
|
+
super options
|
|
31
|
+
@maximum_tokens = options[:maximum_tokens] || 5
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Let each token process itself.
|
|
35
|
+
# Reject, limit, and partialize tokens.
|
|
36
|
+
#
|
|
37
|
+
# In querying we work with real tokens (in indexing it's just symbols).
|
|
38
|
+
#
|
|
39
|
+
def process tokens
|
|
40
|
+
tokens.reject # Reject any tokens that don't meet criteria.
|
|
41
|
+
tokens.cap maximum_tokens # Cut off superfluous tokens.
|
|
42
|
+
tokens.partialize_last # Set certain tokens as partial.
|
|
43
|
+
tokens
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Converts words into real tokens.
|
|
47
|
+
#
|
|
48
|
+
def tokens_for words
|
|
49
|
+
Picky::Query::Tokens.processed words, downcase?
|
|
50
|
+
end
|
|
51
|
+
# Returns a tokens object.
|
|
52
|
+
#
|
|
53
|
+
def empty_tokens
|
|
54
|
+
Picky::Query::Tokens.new
|
|
55
|
+
end
|
|
41
56
|
|
|
42
|
-
# Converts words into real tokens.
|
|
43
|
-
#
|
|
44
|
-
def tokens_for words
|
|
45
|
-
::Query::Tokens.processed words, downcase?
|
|
46
|
-
end
|
|
47
|
-
# Returns a tokens object.
|
|
48
|
-
#
|
|
49
|
-
def empty_tokens
|
|
50
|
-
::Query::Tokens.new
|
|
51
57
|
end
|
|
52
58
|
|
|
53
59
|
end
|
data/lib/picky.rb
CHANGED
|
@@ -1,16 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
#
|
|
3
|
-
require File.expand_path '../constants', __FILE__
|
|
1
|
+
module Picky
|
|
4
2
|
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
require File.expand_path '../
|
|
3
|
+
# Require the constants.
|
|
4
|
+
#
|
|
5
|
+
require ::File.expand_path '../picky/constants', __FILE__
|
|
8
6
|
|
|
9
|
-
#
|
|
10
|
-
#
|
|
11
|
-
require File.expand_path '../picky/
|
|
7
|
+
# Library bundling.
|
|
8
|
+
#
|
|
9
|
+
require ::File.expand_path '../picky/bundling', __FILE__
|
|
12
10
|
|
|
13
|
-
#
|
|
14
|
-
#
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
# Loader which handles framework and app loading.
|
|
12
|
+
#
|
|
13
|
+
require ::File.expand_path '../picky/loader', __FILE__
|
|
14
|
+
|
|
15
|
+
# Load the framework
|
|
16
|
+
#
|
|
17
|
+
Loader.load_framework
|
|
18
|
+
puts "Loaded picky with environment '#{PICKY_ENVIRONMENT}' in #{PICKY_ROOT} on Ruby #{RUBY_VERSION}."
|
|
19
|
+
|
|
20
|
+
# Check if delegators need to be installed.
|
|
21
|
+
#
|
|
22
|
+
require ::File.expand_path '../picky/sinatra', __FILE__
|
|
23
|
+
|
|
24
|
+
end
|
data/lib/tasks/application.rake
CHANGED
data/lib/tasks/index.rake
CHANGED
|
@@ -4,7 +4,7 @@ desc "Generate the index (index, category optional)."
|
|
|
4
4
|
task :index, [:index, :category] => :application do |_, options|
|
|
5
5
|
index, category = options.index, options.category
|
|
6
6
|
|
|
7
|
-
specific = Indexes
|
|
7
|
+
specific = Picky::Indexes
|
|
8
8
|
specific = specific[index] if index
|
|
9
9
|
specific = specific[category] if category
|
|
10
10
|
specific.index
|
|
@@ -16,11 +16,11 @@ namespace :index do
|
|
|
16
16
|
#
|
|
17
17
|
# desc "Takes a snapshot, indexes, and caches in random order."
|
|
18
18
|
task :randomly => :application do
|
|
19
|
-
Indexes.index true
|
|
19
|
+
Picky::Indexes.index true
|
|
20
20
|
end
|
|
21
21
|
# desc "Takes a snapshot, indexes, and caches in order given."
|
|
22
22
|
task :ordered => :application do
|
|
23
|
-
Indexes.index false
|
|
23
|
+
Picky::Indexes.index false
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
end
|
data/lib/tasks/routes.rake
CHANGED
data/lib/tasks/server.rake
CHANGED
|
@@ -16,7 +16,7 @@ namespace :server do
|
|
|
16
16
|
task :start => :framework do
|
|
17
17
|
chdir_to_root
|
|
18
18
|
daemonize = PICKY_ENVIRONMENT == 'production' ? '-D' : ''
|
|
19
|
-
command = "export PICKY_ENV=#{PICKY_ENVIRONMENT}; unicorn -c unicorn.
|
|
19
|
+
command = "export PICKY_ENV=#{PICKY_ENVIRONMENT}; unicorn -c unicorn.rb #{daemonize}".strip
|
|
20
20
|
puts "Running \`#{command}\`."
|
|
21
21
|
exec command
|
|
22
22
|
end
|
|
@@ -2,28 +2,32 @@
|
|
|
2
2
|
#
|
|
3
3
|
require 'spec_helper'
|
|
4
4
|
|
|
5
|
-
describe Application do
|
|
5
|
+
describe Picky::Application do
|
|
6
6
|
|
|
7
7
|
describe "integration" do
|
|
8
8
|
it "should run ok" do
|
|
9
9
|
lambda {
|
|
10
|
-
class MinimalTestApplication <
|
|
11
|
-
books =
|
|
10
|
+
class MinimalTestApplication < described_class
|
|
11
|
+
books = Picky::Indexes::Memory.new :books,
|
|
12
|
+
source: Picky::Sources::DB.new(
|
|
13
|
+
'SELECT id, title FROM books',
|
|
14
|
+
:file => 'app/db.yml'
|
|
15
|
+
)
|
|
12
16
|
books.define_category :title
|
|
13
17
|
|
|
14
18
|
rack_adapter.stub! :exclaim # Stopping it from exclaiming.
|
|
15
19
|
|
|
16
|
-
route %r{^/books} => Search.new(books)
|
|
20
|
+
route %r{^/books} => Picky::Search.new(books)
|
|
17
21
|
end
|
|
18
|
-
Tokenizers::Index.default.tokenize 'some text'
|
|
19
|
-
Tokenizers::Query.default.tokenize 'some text'
|
|
22
|
+
Picky::Tokenizers::Index.default.tokenize 'some text'
|
|
23
|
+
Picky::Tokenizers::Query.default.tokenize 'some text'
|
|
20
24
|
}.should_not raise_error
|
|
21
25
|
end
|
|
22
26
|
it "should run ok" do
|
|
23
27
|
lambda {
|
|
24
28
|
# Here we just test if the API can be called ok.
|
|
25
29
|
#
|
|
26
|
-
class TestApplication <
|
|
30
|
+
class TestApplication < described_class
|
|
27
31
|
indexing removes_characters: /[^a-zA-Z0-9\s\/\-\"\&\.]/,
|
|
28
32
|
stopwords: /\b(and|the|of|it|in|for)\b/,
|
|
29
33
|
splits_text_on: /[\s\/\-\"\&\.]/,
|
|
@@ -36,31 +40,34 @@ describe Application do
|
|
|
36
40
|
splits_text_on: /[\s\/\-\,\&]+/,
|
|
37
41
|
normalizes_words: [[/Deoxyribonucleic Acid/i, 'DNA']],
|
|
38
42
|
|
|
39
|
-
substitutes_characters_with: CharacterSubstituters::WestEuropean.new,
|
|
43
|
+
substitutes_characters_with: Picky::CharacterSubstituters::WestEuropean.new,
|
|
40
44
|
maximum_tokens: 5
|
|
41
45
|
|
|
42
|
-
books_index =
|
|
43
|
-
|
|
46
|
+
books_index = Picky::Indexes::Memory.new :books,
|
|
47
|
+
source: Picky::Sources::DB.new(
|
|
48
|
+
'SELECT id, title, author, isbn13 as isbn FROM books',
|
|
49
|
+
:file => 'app/db.yml'
|
|
50
|
+
)
|
|
44
51
|
books_index.define_category :title,
|
|
45
|
-
similarity: Similarity::DoubleMetaphone.new(3) # Up to three similar title word indexed.
|
|
52
|
+
similarity: Picky::Similarity::DoubleMetaphone.new(3) # Up to three similar title word indexed.
|
|
46
53
|
books_index.define_category :author,
|
|
47
|
-
similarity: Similarity::Soundex.new(2)
|
|
54
|
+
similarity: Picky::Similarity::Soundex.new(2)
|
|
48
55
|
books_index.define_category :isbn,
|
|
49
|
-
partial: Partial::None.new # Partially searching on an ISBN makes not much sense.
|
|
56
|
+
partial: Picky::Partial::None.new # Partially searching on an ISBN makes not much sense.
|
|
50
57
|
|
|
51
|
-
geo_index =
|
|
52
|
-
source Sources::CSV.new(:location, :north, :east, file: 'data/ch.csv', col_sep: ',')
|
|
58
|
+
geo_index = Picky::Indexes::Memory.new :geo do
|
|
59
|
+
source Picky::Sources::CSV.new(:location, :north, :east, file: 'data/ch.csv', col_sep: ',')
|
|
53
60
|
indexing removes_characters: /[^a-z]/
|
|
54
61
|
category :location,
|
|
55
|
-
similarity: Similarity::Metaphone.new(4)
|
|
62
|
+
similarity: Picky::Similarity::Metaphone.new(4)
|
|
56
63
|
ranged_category :north1, 1, precision: 3, from: :north
|
|
57
64
|
ranged_category :east1, 1, precision: 3, from: :east
|
|
58
65
|
end
|
|
59
66
|
|
|
60
67
|
rack_adapter.stub! :exclaim # Stopping it from exclaiming.
|
|
61
68
|
|
|
62
|
-
route %r{^/books} => Search.new(books_index)
|
|
63
|
-
route %r{^/buks} => Search.new(books_index) do
|
|
69
|
+
route %r{^/books} => Picky::Search.new(books_index)
|
|
70
|
+
route %r{^/buks} => Picky::Search.new(books_index) do
|
|
64
71
|
searching removes_characters: /[buks]/
|
|
65
72
|
end
|
|
66
73
|
end
|
|
@@ -70,57 +77,57 @@ describe Application do
|
|
|
70
77
|
|
|
71
78
|
describe 'finalize' do
|
|
72
79
|
before(:each) do
|
|
73
|
-
|
|
80
|
+
described_class.stub! :check
|
|
74
81
|
end
|
|
75
82
|
it 'checks if all is ok' do
|
|
76
|
-
|
|
83
|
+
described_class.should_receive(:check).once.with
|
|
77
84
|
|
|
78
|
-
|
|
85
|
+
described_class.finalize
|
|
79
86
|
end
|
|
80
87
|
it 'tells the rack adapter to finalize' do
|
|
81
|
-
|
|
88
|
+
described_class.rack_adapter.should_receive(:finalize).once.with
|
|
82
89
|
|
|
83
|
-
|
|
90
|
+
described_class.finalize
|
|
84
91
|
end
|
|
85
92
|
end
|
|
86
93
|
|
|
87
94
|
describe 'check' do
|
|
88
95
|
it 'does something' do
|
|
89
|
-
|
|
96
|
+
described_class.should_receive(:warn).once.with "\nWARNING: No routes defined for application configuration in Class.\n\n"
|
|
90
97
|
|
|
91
|
-
|
|
98
|
+
described_class.check
|
|
92
99
|
end
|
|
93
100
|
end
|
|
94
101
|
|
|
95
102
|
describe 'delegation' do
|
|
96
103
|
it "should delegate route" do
|
|
97
|
-
|
|
104
|
+
described_class.rack_adapter.should_receive(:route).once.with :path => :query
|
|
98
105
|
|
|
99
|
-
|
|
106
|
+
described_class.route :path => :query
|
|
100
107
|
end
|
|
101
108
|
end
|
|
102
109
|
|
|
103
110
|
describe 'rack_adapter' do
|
|
104
111
|
it 'should be there' do
|
|
105
|
-
lambda {
|
|
112
|
+
lambda { described_class.rack_adapter }.should_not raise_error
|
|
106
113
|
end
|
|
107
114
|
it "should return a new FrontendAdapters::Rack instance" do
|
|
108
|
-
|
|
115
|
+
described_class.rack_adapter.should be_kind_of(Picky::FrontendAdapters::Rack)
|
|
109
116
|
end
|
|
110
117
|
it "should cache the instance" do
|
|
111
|
-
|
|
118
|
+
described_class.rack_adapter.should == described_class.rack_adapter
|
|
112
119
|
end
|
|
113
120
|
end
|
|
114
121
|
|
|
115
122
|
describe 'call' do
|
|
116
123
|
before(:each) do
|
|
117
124
|
@routes = stub :routes
|
|
118
|
-
|
|
125
|
+
described_class.stub! :rack_adapter => @routes
|
|
119
126
|
end
|
|
120
127
|
it 'should delegate' do
|
|
121
128
|
@routes.should_receive(:call).once.with :env
|
|
122
129
|
|
|
123
|
-
|
|
130
|
+
described_class.call :env
|
|
124
131
|
end
|
|
125
132
|
end
|
|
126
133
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe Backend::File::Basic do
|
|
3
|
+
describe Picky::Backend::File::Basic do
|
|
4
4
|
|
|
5
5
|
let(:file) { described_class.new 'some/cache/path/to/file' }
|
|
6
6
|
|
|
@@ -18,7 +18,7 @@ describe Backend::File::Basic do
|
|
|
18
18
|
|
|
19
19
|
describe 'to_s' do
|
|
20
20
|
it 'returns the cache path with the default file extension' do
|
|
21
|
-
file.to_s.should == 'Backend::File::Basic(some/cache/path/to/file.index)'
|
|
21
|
+
file.to_s.should == 'Picky::Backend::File::Basic(some/cache/path/to/file.index)'
|
|
22
22
|
end
|
|
23
23
|
end
|
|
24
24
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe Backend::File::JSON do
|
|
3
|
+
describe Picky::Backend::File::JSON do
|
|
4
4
|
|
|
5
5
|
let(:file) { described_class.new 'some/cache/path/to/file' }
|
|
6
6
|
|
|
@@ -24,7 +24,7 @@ describe Backend::File::JSON do
|
|
|
24
24
|
|
|
25
25
|
describe 'to_s' do
|
|
26
26
|
it 'returns the cache path with the default file extension' do
|
|
27
|
-
file.to_s.should == 'Backend::File::JSON(some/cache/path/to/file.json)'
|
|
27
|
+
file.to_s.should == 'Picky::Backend::File::JSON(some/cache/path/to/file.json)'
|
|
28
28
|
end
|
|
29
29
|
end
|
|
30
30
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe Backend::File::Marshal do
|
|
3
|
+
describe Picky::Backend::File::Marshal do
|
|
4
4
|
|
|
5
5
|
let(:file) { described_class.new 'some/cache/path/to/file' }
|
|
6
6
|
|
|
@@ -24,7 +24,7 @@ describe Backend::File::Marshal do
|
|
|
24
24
|
|
|
25
25
|
describe 'to_s' do
|
|
26
26
|
it 'returns the cache path with the default file extension' do
|
|
27
|
-
file.to_s.should == 'Backend::File::Marshal(some/cache/path/to/file.dump)'
|
|
27
|
+
file.to_s.should == 'Picky::Backend::File::Marshal(some/cache/path/to/file.dump)'
|
|
28
28
|
end
|
|
29
29
|
end
|
|
30
30
|
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe Backend::Files do
|
|
3
|
+
describe Picky::Backend::Files do
|
|
4
4
|
|
|
5
5
|
before(:each) do
|
|
6
|
-
index =
|
|
7
|
-
category = Category.new :some_category, index
|
|
6
|
+
index = Picky::Indexes::Memory.new :some_index, source: []
|
|
7
|
+
category = Picky::Category.new :some_category, index
|
|
8
|
+
bundle = Picky::Indexing::Bundle::Base.new :some_bundle, category, nil, nil, nil
|
|
8
9
|
|
|
9
|
-
@files = described_class.new
|
|
10
|
-
|
|
11
|
-
@prepared = @files.prepared
|
|
10
|
+
@files = described_class.new bundle
|
|
12
11
|
|
|
13
12
|
@index = @files.inverted
|
|
14
13
|
@weights = @files.weights
|
|
@@ -16,14 +15,6 @@ describe Backend::Files do
|
|
|
16
15
|
@configuration = @files.configuration
|
|
17
16
|
end
|
|
18
17
|
|
|
19
|
-
describe "retrieve" do
|
|
20
|
-
it "delegates to the prepared" do
|
|
21
|
-
@prepared.should_receive(:retrieve).once.with
|
|
22
|
-
|
|
23
|
-
@files.retrieve
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
18
|
describe "dump indexes" do
|
|
28
19
|
before(:each) do
|
|
29
20
|
@files.stub! :timed_exclaim
|
|
@@ -66,7 +57,7 @@ describe Backend::Files do
|
|
|
66
57
|
it "uses the right file" do
|
|
67
58
|
Yajl::Parser.stub! :parse
|
|
68
59
|
|
|
69
|
-
File.should_receive(:open).once.with 'spec/test_directory/index/test/some_index/
|
|
60
|
+
File.should_receive(:open).once.with 'spec/test_directory/index/test/some_index/some_category_some_bundle_inverted.json', 'r'
|
|
70
61
|
|
|
71
62
|
@files.load_inverted
|
|
72
63
|
end
|
|
@@ -75,7 +66,7 @@ describe Backend::Files do
|
|
|
75
66
|
it "uses the right file" do
|
|
76
67
|
Yajl::Parser.stub! :parse
|
|
77
68
|
|
|
78
|
-
File.should_receive(:open).once.with 'spec/test_directory/index/test/some_index/
|
|
69
|
+
File.should_receive(:open).once.with 'spec/test_directory/index/test/some_index/some_category_some_bundle_weights.json', 'r'
|
|
79
70
|
|
|
80
71
|
@files.load_weights
|
|
81
72
|
end
|
|
@@ -84,7 +75,7 @@ describe Backend::Files do
|
|
|
84
75
|
it "uses the right file" do
|
|
85
76
|
Marshal.stub! :load
|
|
86
77
|
|
|
87
|
-
File.should_receive(:open).once.with 'spec/test_directory/index/test/some_index/
|
|
78
|
+
File.should_receive(:open).once.with 'spec/test_directory/index/test/some_index/some_category_some_bundle_similarity.dump', 'r:binary'
|
|
88
79
|
|
|
89
80
|
@files.load_similarity
|
|
90
81
|
end
|
|
@@ -93,7 +84,7 @@ describe Backend::Files do
|
|
|
93
84
|
it "uses the right file" do
|
|
94
85
|
Yajl::Parser.stub! :parse
|
|
95
86
|
|
|
96
|
-
File.should_receive(:open).once.with 'spec/test_directory/index/test/some_index/
|
|
87
|
+
File.should_receive(:open).once.with 'spec/test_directory/index/test/some_index/some_category_some_bundle_configuration.json', 'r'
|
|
97
88
|
|
|
98
89
|
@files.load_configuration
|
|
99
90
|
end
|
|
@@ -181,18 +172,17 @@ describe Backend::Files do
|
|
|
181
172
|
|
|
182
173
|
describe 'initialization' do
|
|
183
174
|
it 'should initialize the name correctly' do
|
|
184
|
-
@files.
|
|
175
|
+
@files.bundle.name.should == :some_bundle
|
|
185
176
|
end
|
|
186
177
|
end
|
|
187
178
|
|
|
188
179
|
describe 'to_s' do
|
|
189
180
|
it 'returns the right value' do
|
|
190
|
-
|
|
191
|
-
:
|
|
192
|
-
:prepared_index_path =>
|
|
193
|
-
:index_path => 'index/path'
|
|
181
|
+
bundle = stub :bundle,
|
|
182
|
+
:index_path => 'index/path',
|
|
183
|
+
:prepared_index_path => 'prepared/index/path'
|
|
194
184
|
|
|
195
|
-
described_class.new(
|
|
185
|
+
described_class.new(bundle).to_s.should == "Picky::Backend::Files(Picky::Backend::File::JSON(index/path.json), Picky::Backend::File::JSON(index/path.json), Picky::Backend::File::Marshal(index/path.dump), Picky::Backend::File::JSON(index/path.json))"
|
|
196
186
|
end
|
|
197
187
|
end
|
|
198
188
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe Backend::Redis::Basic do
|
|
3
|
+
describe Picky::Backend::Redis::Basic do
|
|
4
4
|
|
|
5
5
|
let(:redis) { described_class.new "some_namespace" }
|
|
6
6
|
|
|
@@ -66,7 +66,7 @@ describe Backend::Redis::Basic do
|
|
|
66
66
|
|
|
67
67
|
describe 'to_s' do
|
|
68
68
|
it 'returns the cache path with the default file extension' do
|
|
69
|
-
redis.to_s.should == 'Backend::Redis::Basic(some_namespace:*)'
|
|
69
|
+
redis.to_s.should == 'Picky::Backend::Redis::Basic(some_namespace:*)'
|
|
70
70
|
end
|
|
71
71
|
end
|
|
72
72
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe Backend::Redis::ListHash do
|
|
3
|
+
describe Picky::Backend::Redis::ListHash do
|
|
4
4
|
|
|
5
5
|
let(:index) { described_class.new :some_namespace }
|
|
6
6
|
|
|
@@ -8,7 +8,7 @@ describe Backend::Redis::ListHash do
|
|
|
8
8
|
it 'raises an error' do
|
|
9
9
|
expect {
|
|
10
10
|
index.member :some_sym
|
|
11
|
-
}.to raise_error("Can't retrieve single value :some_sym from a Redis ListHash. Use
|
|
11
|
+
}.to raise_error("Can't retrieve single value :some_sym from a Redis ListHash. Use Indexes::Redis::StringHash.")
|
|
12
12
|
end
|
|
13
13
|
end
|
|
14
14
|
|
|
@@ -33,7 +33,7 @@ describe Backend::Redis::ListHash do
|
|
|
33
33
|
|
|
34
34
|
describe 'to_s' do
|
|
35
35
|
it 'returns the cache path with the default file extension' do
|
|
36
|
-
index.to_s.should == 'Backend::Redis::ListHash(some_namespace:*)'
|
|
36
|
+
index.to_s.should == 'Picky::Backend::Redis::ListHash(some_namespace:*)'
|
|
37
37
|
end
|
|
38
38
|
end
|
|
39
39
|
|