picky 1.4.3 → 1.5.0
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/internals/index/redis/basic.rb +8 -3
- data/lib/picky/internals/index/redis/string_hash.rb +3 -2
- data/lib/picky/internals/index/redis.rb +3 -3
- data/lib/picky/sources/wrappers/location.rb +0 -4
- data/spec/lib/indexing/indexes_spec.rb +4 -4
- data/spec/lib/internals/generators/partial/none_spec.rb +3 -0
- data/spec/lib/internals/index/redis/string_hash_spec.rb +29 -0
- data/spec/lib/internals/index/redis_spec.rb +74 -0
- data/spec/lib/query/tokens_spec.rb +21 -0
- data/spec/lib/sources/wrappers/location_spec.rb +4 -4
- metadata +7 -3
@@ -13,15 +13,20 @@ module Internals
|
|
13
13
|
#
|
14
14
|
class Basic
|
15
15
|
|
16
|
-
attr_reader :namespace
|
16
|
+
attr_reader :namespace, :backend
|
17
17
|
|
18
18
|
# An index cache takes a path, without file extension,
|
19
19
|
# which will be provided by the subclasses.
|
20
20
|
#
|
21
21
|
def initialize namespace
|
22
22
|
@namespace = namespace
|
23
|
-
|
24
|
-
|
23
|
+
|
24
|
+
# TODO Turn this inside out such that people can pass in
|
25
|
+
# their own Redis instance.
|
26
|
+
#
|
27
|
+
# TODO Make the :db a real option.
|
28
|
+
#
|
29
|
+
@backend = ::Redis.new :db => 15
|
25
30
|
end
|
26
31
|
|
27
32
|
# Does nothing.
|
@@ -9,8 +9,9 @@ module Internals
|
|
9
9
|
# Writes the hash into Redis.
|
10
10
|
#
|
11
11
|
def dump hash
|
12
|
+
redis = backend
|
12
13
|
hash.each_pair do |key, value|
|
13
|
-
|
14
|
+
redis.hset namespace, key, value
|
14
15
|
end
|
15
16
|
end
|
16
17
|
|
@@ -23,7 +24,7 @@ module Internals
|
|
23
24
|
# Get a single value.
|
24
25
|
#
|
25
26
|
def member sym
|
26
|
-
|
27
|
+
backend.hget namespace, sym
|
27
28
|
end
|
28
29
|
|
29
30
|
end
|
@@ -20,7 +20,7 @@ module Internals
|
|
20
20
|
# Delegate to the right collection.
|
21
21
|
#
|
22
22
|
def ids sym
|
23
|
-
|
23
|
+
index.collection sym
|
24
24
|
end
|
25
25
|
|
26
26
|
# Delegate to the right member value.
|
@@ -28,13 +28,13 @@ module Internals
|
|
28
28
|
# Note: Converts to float.
|
29
29
|
#
|
30
30
|
def weight sym
|
31
|
-
|
31
|
+
weights.member(sym).to_f
|
32
32
|
end
|
33
33
|
|
34
34
|
# Delegate to a member value.
|
35
35
|
#
|
36
36
|
def setting sym
|
37
|
-
|
37
|
+
configuration.member sym
|
38
38
|
end
|
39
39
|
|
40
40
|
end
|
@@ -45,9 +45,9 @@ describe Indexing::Indexes do
|
|
45
45
|
indexes.should_receive(:find).once.with(:index, :category).and_return @index1
|
46
46
|
end
|
47
47
|
it 'indexes' do
|
48
|
-
@index1.should_receive(:
|
48
|
+
@index1.should_receive(:generate_caches).once.with
|
49
49
|
|
50
|
-
indexes.
|
50
|
+
indexes.generate_cache_only :index, :category
|
51
51
|
end
|
52
52
|
end
|
53
53
|
context 'with index not found' do
|
@@ -55,9 +55,9 @@ describe Indexing::Indexes do
|
|
55
55
|
indexes.should_receive(:find).once.with(:index, :category).and_return nil
|
56
56
|
end
|
57
57
|
it 'indexes' do
|
58
|
-
@index1.should_receive(:
|
58
|
+
@index1.should_receive(:generate_caches).never
|
59
59
|
|
60
|
-
indexes.
|
60
|
+
indexes.generate_cache_only :index, :category
|
61
61
|
end
|
62
62
|
end
|
63
63
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Internals::Index::Redis::StringHash do
|
4
|
+
|
5
|
+
let(:index) { described_class.new :some_namespace }
|
6
|
+
|
7
|
+
describe 'collection' do
|
8
|
+
it 'raises' do
|
9
|
+
expect { index.collection :anything }.to raise_error("Can't retrieve a collection from a StringHash. Use Index::Redis::ListHash.")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
describe 'member' do
|
13
|
+
before(:each) do
|
14
|
+
@backend = stub :backend
|
15
|
+
index.stub! :backend => @backend
|
16
|
+
end
|
17
|
+
it 'delegates to the backend' do
|
18
|
+
@backend.should_receive(:hget).once.with :some_namespace, :some_symbol
|
19
|
+
|
20
|
+
index.member :some_symbol
|
21
|
+
end
|
22
|
+
it 'returns whatever it gets from the backend' do
|
23
|
+
@backend.should_receive(:hget).any_number_of_times.and_return :some_result
|
24
|
+
|
25
|
+
index.member(:anything).should == :some_result
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Internals::Index::Redis do
|
4
|
+
|
5
|
+
let(:config) do
|
6
|
+
index = stub :index, :name => :some_index
|
7
|
+
category = stub :category, :name => :some_category
|
8
|
+
Configuration::Index.new index, category
|
9
|
+
end
|
10
|
+
let(:redis) { described_class.new :some_name, config }
|
11
|
+
|
12
|
+
describe 'setting' do
|
13
|
+
it 'delegates to the configuration' do
|
14
|
+
configuration = stub :configuration
|
15
|
+
redis.stub! :configuration => configuration
|
16
|
+
|
17
|
+
configuration.should_receive(:member).once.with :some_sym
|
18
|
+
|
19
|
+
redis.setting :some_sym
|
20
|
+
end
|
21
|
+
it 'returns the value' do
|
22
|
+
configuration = stub :configuration
|
23
|
+
redis.stub! :configuration => configuration
|
24
|
+
|
25
|
+
configuration.should_receive(:member).any_number_of_times.and_return "some config"
|
26
|
+
|
27
|
+
redis.setting(:any).should == "some config"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
describe 'weight' do
|
31
|
+
it 'delegates to the weights' do
|
32
|
+
weights = stub :weights
|
33
|
+
redis.stub! :weights => weights
|
34
|
+
|
35
|
+
weights.should_receive(:member).once.with :some_sym
|
36
|
+
|
37
|
+
redis.weight :some_sym
|
38
|
+
end
|
39
|
+
it 'returns a floated value' do
|
40
|
+
weights = stub :weights
|
41
|
+
redis.stub! :weights => weights
|
42
|
+
|
43
|
+
weights.should_receive(:member).any_number_of_times.and_return "1.0"
|
44
|
+
|
45
|
+
redis.weight(:any).should == 1.0
|
46
|
+
end
|
47
|
+
it 'returns a floated value' do
|
48
|
+
weights = stub :weights
|
49
|
+
redis.stub! :weights => weights
|
50
|
+
|
51
|
+
weights.should_receive(:member).any_number_of_times.and_return 1
|
52
|
+
|
53
|
+
redis.weight(:any).should == 1.0
|
54
|
+
end
|
55
|
+
end
|
56
|
+
describe 'ids' do
|
57
|
+
it 'delegates to the index' do
|
58
|
+
index = stub :index
|
59
|
+
redis.stub! :index => index
|
60
|
+
|
61
|
+
index.should_receive(:collection).once.with :some_sym
|
62
|
+
|
63
|
+
redis.ids :some_sym
|
64
|
+
end
|
65
|
+
it 'returns the value' do
|
66
|
+
index = stub :index
|
67
|
+
redis.stub! :index => index
|
68
|
+
|
69
|
+
index.should_receive(:collection).any_number_of_times.and_return [1,2,3]
|
70
|
+
|
71
|
+
redis.ids(:any).should == [1,2,3]
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -132,6 +132,27 @@ describe Internals::Query::Tokens do
|
|
132
132
|
end
|
133
133
|
end
|
134
134
|
|
135
|
+
describe 'possible_combinations_in' do
|
136
|
+
before(:each) do
|
137
|
+
@token1 = stub :token1
|
138
|
+
@token2 = stub :token2
|
139
|
+
@token3 = stub :token3
|
140
|
+
|
141
|
+
@tokens = described_class.new [@token1, @token2, @token3]
|
142
|
+
end
|
143
|
+
it 'should work correctly' do
|
144
|
+
@token1.should_receive(:possible_combinations_in).once.with(:some_index).and_return [:combination11, :combination12]
|
145
|
+
@token2.should_receive(:possible_combinations_in).once.with(:some_index).and_return [:combination21]
|
146
|
+
@token3.should_receive(:possible_combinations_in).once.with(:some_index).and_return [:combination31, :combination32, :combination33]
|
147
|
+
|
148
|
+
@tokens.possible_combinations_in(:some_index).should == [
|
149
|
+
[:combination11, :combination12],
|
150
|
+
[:combination21],
|
151
|
+
[:combination31, :combination32, :combination33]
|
152
|
+
]
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
135
156
|
describe 'to_s' do
|
136
157
|
before(:each) do
|
137
158
|
@tokens = described_class.new [
|
@@ -9,12 +9,12 @@ describe Sources::Wrappers::Location do
|
|
9
9
|
end
|
10
10
|
context "without grid option" do
|
11
11
|
it "fails" do
|
12
|
-
lambda {
|
12
|
+
lambda { described_class.new(:something) }.should raise_error
|
13
13
|
end
|
14
14
|
end
|
15
15
|
context "with grid option" do
|
16
16
|
before(:each) do
|
17
|
-
@wrapper =
|
17
|
+
@wrapper = described_class.new @category, grid:10
|
18
18
|
end
|
19
19
|
it "uses a default of 1 on the precision" do
|
20
20
|
@wrapper.precision.should == 1
|
@@ -39,7 +39,7 @@ describe Sources::Wrappers::Location do
|
|
39
39
|
end
|
40
40
|
context "with grid and precision option" do
|
41
41
|
before(:each) do
|
42
|
-
@wrapper =
|
42
|
+
@wrapper = described_class.new @category, grid:4, precision:2
|
43
43
|
end
|
44
44
|
it "uses the given precision" do
|
45
45
|
@wrapper.precision.should == 2
|
@@ -60,7 +60,7 @@ describe Sources::Wrappers::Location do
|
|
60
60
|
end
|
61
61
|
context "without backend" do
|
62
62
|
it "fails" do
|
63
|
-
lambda {
|
63
|
+
lambda { described_class.new }.should raise_error(ArgumentError)
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: picky
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.
|
5
|
+
version: 1.5.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Florian Hanke
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-03-
|
13
|
+
date: 2011-03-03 00:00:00 +01:00
|
14
14
|
default_executable: picky
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -24,7 +24,7 @@ dependencies:
|
|
24
24
|
version: "0"
|
25
25
|
type: :development
|
26
26
|
version_requirements: *id001
|
27
|
-
description: Fast Ruby
|
27
|
+
description: Fast Ruby semantic text search engine with comfortable single field interface.
|
28
28
|
email: florian.hanke+picky@gmail.com
|
29
29
|
executables:
|
30
30
|
- picky
|
@@ -195,6 +195,8 @@ files:
|
|
195
195
|
- spec/lib/internals/index/file/marshal_spec.rb
|
196
196
|
- spec/lib/internals/index/file/text_spec.rb
|
197
197
|
- spec/lib/internals/index/files_spec.rb
|
198
|
+
- spec/lib/internals/index/redis/string_hash_spec.rb
|
199
|
+
- spec/lib/internals/index/redis_spec.rb
|
198
200
|
- spec/lib/internals/indexed/bundle/memory_spec.rb
|
199
201
|
- spec/lib/internals/indexed/categories_spec.rb
|
200
202
|
- spec/lib/internals/indexed/category_spec.rb
|
@@ -310,6 +312,8 @@ test_files:
|
|
310
312
|
- spec/lib/internals/index/file/marshal_spec.rb
|
311
313
|
- spec/lib/internals/index/file/text_spec.rb
|
312
314
|
- spec/lib/internals/index/files_spec.rb
|
315
|
+
- spec/lib/internals/index/redis/string_hash_spec.rb
|
316
|
+
- spec/lib/internals/index/redis_spec.rb
|
313
317
|
- spec/lib/internals/indexed/bundle/memory_spec.rb
|
314
318
|
- spec/lib/internals/indexed/categories_spec.rb
|
315
319
|
- spec/lib/internals/indexed/category_spec.rb
|