picky 1.2.2 → 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -17,6 +17,12 @@ module Cacher
17
17
  def saved?
18
18
  false
19
19
  end
20
+
21
+ # Do not use the partial bundle for getting ids and weights.
22
+ #
23
+ def use_exact_for_partial?
24
+ true
25
+ end
20
26
 
21
27
  end
22
28
 
@@ -4,6 +4,18 @@ module Cacher
4
4
  #
5
5
  class Strategy < Cacher::Strategy
6
6
 
7
+ # Defines whether to use the exact bundle
8
+ # instead of the partial one.
9
+ #
10
+ # Default is @false@.
11
+ #
12
+ # For example:
13
+ # Partial::None.new # Uses the exact index instead of the partial one.
14
+ #
15
+ def use_exact_for_partial?
16
+ false
17
+ end
18
+
7
19
  end
8
20
  end
9
21
  end
@@ -7,8 +7,9 @@ module Indexed
7
7
  #
8
8
  class Category
9
9
 
10
- attr_accessor :exact, :partial
10
+ attr_accessor :exact
11
11
  attr_reader :identifier, :name
12
+ attr_writer :partial
12
13
 
13
14
  #
14
15
  #
@@ -19,6 +20,9 @@ module Indexed
19
20
 
20
21
  @identifier = configuration.identifier
21
22
 
23
+ # TODO Push the defaults out into the index.
24
+ #
25
+ @partial_strategy = options[:partial] || Cacher::Partial::Default
22
26
  similarity = options[:similarity] || Cacher::Similarity::Default
23
27
 
24
28
  @exact = options[:exact_index_bundle] || Bundle.new(:exact, configuration, similarity)
@@ -64,6 +68,12 @@ module Indexed
64
68
  token.partial? ? partial : exact
65
69
  end
66
70
 
71
+ # The partial strategy defines whether to really use the partial index.
72
+ #
73
+ def partial
74
+ @partial_strategy.use_exact_for_partial?? @exact : @partial
75
+ end
76
+
67
77
  #
68
78
  #
69
79
  def combination_for token
data/lib/picky/routing.rb CHANGED
@@ -53,9 +53,18 @@ class Routing # :nodoc:all
53
53
  [mappings, route_options]
54
54
  end
55
55
  def route_one url, query, route_options = {}
56
+ raise TargetQueryNilError.new(url) unless query
56
57
  query.tokenizer = @defaults[:tokenizer] if @defaults[:tokenizer]
57
58
  routes.add_route generate_app(query, route_options), default_options(url, route_options)
58
59
  end
60
+ class TargetQueryNilError < StandardError
61
+ def initialize url
62
+ @url = url
63
+ end
64
+ def to_s
65
+ "Routing for #{@url.inspect} was defined with a nil query object."
66
+ end
67
+ end
59
68
  #
60
69
  #
61
70
  def root status
@@ -8,5 +8,10 @@ describe Cacher::Partial::None do
8
8
  it "returns an empty index" do
9
9
  Cacher::Partial::None.new.generate_from(:unimportant).should == {}
10
10
  end
11
+ describe 'use_exact_for_partial?' do
12
+ it 'returns true' do
13
+ Cacher::Partial::None.new.use_exact_for_partial?.should == true
14
+ end
15
+ end
11
16
 
12
17
  end
@@ -6,6 +6,11 @@ describe Cacher::Partial::Substring do
6
6
  before(:each) do
7
7
  @cacher = Cacher::Partial::Substring.new
8
8
  end
9
+ describe 'use_exact_for_partial?' do
10
+ it 'returns false' do
11
+ Cacher::Partial::Substring.new.use_exact_for_partial?.should == false
12
+ end
13
+ end
9
14
  describe 'from' do
10
15
  it 'should return the right value' do
11
16
  @cacher.from.should == 1
@@ -3,23 +3,40 @@ require 'spec_helper'
3
3
  describe Indexed::Category do
4
4
 
5
5
  before(:each) do
6
- @index = stub :index, :name => :some_index
7
- @partial = stub :partial
8
- @weights = stub :weights
9
- @similarity = stub :similarity
10
- @category = Indexed::Category.new :some_name, @index, :partial => @partial,
11
- :weights => @weights,
12
- :similarity => @similarity,
13
- :qualifiers => [:q, :qualifier]
6
+ @index = stub :index, :name => :some_index
7
+ @partial_strategy = stub :partial, :use_exact_for_partial? => false
8
+ @weights_strategy = stub :weights
9
+ @similarity_strategy = stub :similarity
14
10
 
15
11
  @exact = stub :exact, :dump => nil
16
- @category.stub! :exact => @exact
17
-
18
12
  @partial = stub :partial, :dump => nil
19
- @category.stub! :partial => @partial
13
+
14
+ @category = Indexed::Category.new :some_name, @index, :partial => @partial_strategy,
15
+ :weights => @weights_strategy,
16
+ :similarity => @similarity_strategy,
17
+ :qualifiers => [:q, :qualifier],
18
+ :exact_index_bundle => @exact,
19
+ :partial_index_bundle => @partial
20
+
20
21
  @category.stub! :exclaim
21
22
  end
22
23
 
24
+ describe 'partial' do
25
+ context 'with a partial strategy that uses the exact index' do
26
+ before(:each) do
27
+ @partial_strategy.stub! :use_exact_for_partial? => true
28
+ end
29
+ it 'returns the partial index' do
30
+ @category.partial.should == @exact
31
+ end
32
+ end
33
+ context 'with a partial strategy that uses the partial index (default)' do
34
+ it 'returns the partial index' do
35
+ @category.partial.should == @partial
36
+ end
37
+ end
38
+ end
39
+
23
40
  describe 'generate_qualifiers_from' do
24
41
  context 'with qualifiers' do
25
42
  it 'returns that' do
@@ -178,6 +178,9 @@ describe Routing do
178
178
 
179
179
  @routing.route %r{regexp1} => :query1, %r{regexp2} => :query2, :some => :option
180
180
  end
181
+ it 'does not accept nil queries' do
182
+ lambda { @routing.route %r{some/regexp} => nil }.should raise_error(Routing::TargetQueryNilError, /Routing for \/some\\\/regexp\/ was defined with a nil query object/)
183
+ end
181
184
  end
182
185
 
183
186
  describe 'route_one' do
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 2
8
- - 2
9
- version: 1.2.2
8
+ - 3
9
+ version: 1.2.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Florian Hanke
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-21 00:00:00 +01:00
17
+ date: 2010-12-28 00:00:00 +01:00
18
18
  default_executable: picky
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency