picky 1.2.4 → 1.3.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/adapters/rack/base.rb +23 -0
 - data/lib/picky/adapters/rack/live_parameters.rb +33 -0
 - data/lib/picky/adapters/rack/query.rb +59 -0
 - data/lib/picky/adapters/rack.rb +28 -0
 - data/lib/picky/alias_instances.rb +2 -0
 - data/lib/picky/application.rb +9 -8
 - data/lib/picky/cli.rb +25 -3
 - data/lib/picky/frontend_adapters/rack.rb +150 -0
 - data/lib/picky/helpers/measuring.rb +0 -2
 - data/lib/picky/index_api.rb +1 -1
 - data/lib/picky/indexed/categories.rb +51 -14
 - data/lib/picky/indexers/solr.rb +1 -5
 - data/lib/picky/indexing/indexes.rb +6 -0
 - data/lib/picky/interfaces/live_parameters.rb +165 -0
 - data/lib/picky/loader.rb +13 -2
 - data/lib/picky/query/base.rb +15 -18
 - data/lib/picky/query/combination.rb +2 -2
 - data/lib/picky/query/solr.rb +0 -17
 - data/lib/picky/query/token.rb +14 -27
 - data/lib/picky/query/weights.rb +13 -1
 - data/lib/picky/results/base.rb +9 -2
 - data/spec/lib/adapters/rack/base_spec.rb +24 -0
 - data/spec/lib/adapters/rack/live_parameters_spec.rb +21 -0
 - data/spec/lib/adapters/rack/query_spec.rb +33 -0
 - data/spec/lib/application_spec.rb +27 -8
 - data/spec/lib/cli_spec.rb +9 -0
 - data/spec/lib/extensions/symbol_spec.rb +1 -3
 - data/spec/lib/{routing_spec.rb → frontend_adapters/rack_spec.rb} +69 -66
 - data/spec/lib/indexed/categories_spec.rb +24 -0
 - data/spec/lib/interfaces/live_parameters_spec.rb +138 -0
 - data/spec/lib/query/base_spec.rb +10 -14
 - data/spec/lib/query/live_spec.rb +1 -30
 - data/spec/lib/query/token_spec.rb +72 -5
 - data/spec/lib/query/weights_spec.rb +59 -36
 - data/spec/lib/results/base_spec.rb +13 -1
 - metadata +20 -7
 - data/lib/picky/routing.rb +0 -171
 
| 
         @@ -2,10 +2,11 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            #
         
     | 
| 
       3 
3 
     | 
    
         
             
            require 'spec_helper'
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
            describe  
     | 
| 
      
 5 
     | 
    
         
            +
            describe FrontendAdapters::Rack do
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
              before(:each) do
         
     | 
| 
       8 
     | 
    
         
            -
                @ 
     | 
| 
      
 8 
     | 
    
         
            +
                @rack_adapter = FrontendAdapters::Rack.new
         
     | 
| 
      
 9 
     | 
    
         
            +
                @rack_adapter.stub! :exclaim
         
     | 
| 
       9 
10 
     | 
    
         
             
              end
         
     | 
| 
       10 
11 
     | 
    
         | 
| 
       11 
12 
     | 
    
         
             
              def rack_defaults_for url
         
     | 
| 
         @@ -38,64 +39,64 @@ describe Routing do 
     | 
|
| 
       38 
39 
     | 
    
         
             
              context 'empty?' do
         
     | 
| 
       39 
40 
     | 
    
         
             
                context 'no routes' do
         
     | 
| 
       40 
41 
     | 
    
         
             
                  before(:each) do
         
     | 
| 
       41 
     | 
    
         
            -
                    @ 
     | 
| 
      
 42 
     | 
    
         
            +
                    @rack_adapter.reset_routes
         
     | 
| 
       42 
43 
     | 
    
         
             
                  end
         
     | 
| 
       43 
44 
     | 
    
         
             
                  it 'returns the right answer' do
         
     | 
| 
       44 
     | 
    
         
            -
                    @ 
     | 
| 
      
 45 
     | 
    
         
            +
                    @rack_adapter.empty?.should == true
         
     | 
| 
       45 
46 
     | 
    
         
             
                  end
         
     | 
| 
       46 
47 
     | 
    
         
             
                end
         
     | 
| 
       47 
48 
     | 
    
         
             
                context 'with routes' do
         
     | 
| 
       48 
49 
     | 
    
         
             
                  before(:each) do
         
     | 
| 
       49 
     | 
    
         
            -
                    @ 
     | 
| 
      
 50 
     | 
    
         
            +
                    @rack_adapter.route %r{something} => Query::Full.new
         
     | 
| 
       50 
51 
     | 
    
         
             
                  end
         
     | 
| 
       51 
52 
     | 
    
         
             
                  it 'returns the right answer' do
         
     | 
| 
       52 
     | 
    
         
            -
                    @ 
     | 
| 
      
 53 
     | 
    
         
            +
                    @rack_adapter.empty?.should == false
         
     | 
| 
       53 
54 
     | 
    
         
             
                  end
         
     | 
| 
       54 
55 
     | 
    
         
             
                end
         
     | 
| 
       55 
56 
     | 
    
         
             
              end
         
     | 
| 
       56 
57 
     | 
    
         | 
| 
       57 
58 
     | 
    
         
             
              context 'real routes' do
         
     | 
| 
       58 
59 
     | 
    
         
             
                before(:each) do
         
     | 
| 
       59 
     | 
    
         
            -
                  @ 
     | 
| 
      
 60 
     | 
    
         
            +
                  @rack_adapter.reset_routes
         
     | 
| 
       60 
61 
     | 
    
         
             
                  PickyLog.stub! :log
         
     | 
| 
       61 
62 
     | 
    
         
             
                end
         
     | 
| 
       62 
63 
     | 
    
         
             
                it 'should route correctly' do
         
     | 
| 
       63 
64 
     | 
    
         
             
                  env = {}
         
     | 
| 
       64 
65 
     | 
    
         | 
| 
       65 
     | 
    
         
            -
                  @ 
     | 
| 
       66 
     | 
    
         
            -
                  @ 
     | 
| 
      
 66 
     | 
    
         
            +
                  @rack_adapter.routes.freeze
         
     | 
| 
      
 67 
     | 
    
         
            +
                  @rack_adapter.call(env).should == [404, {"Content-Type" => "text/html", "X-Cascade" => "pass"}, ["Not Found"]]
         
     | 
| 
       67 
68 
     | 
    
         
             
                end
         
     | 
| 
       68 
69 
     | 
    
         
             
                it 'should route correctly' do
         
     | 
| 
       69 
70 
     | 
    
         
             
                  env = rack_defaults_for '/'
         
     | 
| 
       70 
71 
     | 
    
         | 
| 
       71 
     | 
    
         
            -
                  @ 
     | 
| 
      
 72 
     | 
    
         
            +
                  @rack_adapter.root 200
         
     | 
| 
       72 
73 
     | 
    
         | 
| 
       73 
     | 
    
         
            -
                  @ 
     | 
| 
       74 
     | 
    
         
            -
                  @ 
     | 
| 
      
 74 
     | 
    
         
            +
                  @rack_adapter.routes.freeze
         
     | 
| 
      
 75 
     | 
    
         
            +
                  @rack_adapter.call(env).should == [200, {"Content-Type"=>"text/html", "Content-Length"=>"0"}, ['']]
         
     | 
| 
       75 
76 
     | 
    
         
             
                end
         
     | 
| 
       76 
77 
     | 
    
         
             
                it 'should route correctly' do
         
     | 
| 
       77 
78 
     | 
    
         
             
                  env = rack_defaults_for '/blarf'
         
     | 
| 
       78 
79 
     | 
    
         | 
| 
       79 
     | 
    
         
            -
                  @ 
     | 
| 
      
 80 
     | 
    
         
            +
                  @rack_adapter.default 200
         
     | 
| 
       80 
81 
     | 
    
         | 
| 
       81 
     | 
    
         
            -
                  @ 
     | 
| 
       82 
     | 
    
         
            -
                  @ 
     | 
| 
      
 82 
     | 
    
         
            +
                  @rack_adapter.routes.freeze
         
     | 
| 
      
 83 
     | 
    
         
            +
                  @rack_adapter.call(env).should == [200, {"Content-Type"=>"text/html", "Content-Length"=>"0"}, ['']]
         
     | 
| 
       83 
84 
     | 
    
         
             
                end
         
     | 
| 
       84 
85 
     | 
    
         
             
                it 'should route correctly' do
         
     | 
| 
       85 
86 
     | 
    
         
             
                  env = rack_defaults_for '/gurk'
         
     | 
| 
       86 
87 
     | 
    
         | 
| 
       87 
     | 
    
         
            -
                  @ 
     | 
| 
      
 88 
     | 
    
         
            +
                  @rack_adapter.answer %r{/gurk}, lambda { |env| [333, {}, ['this is gurk']] }
         
     | 
| 
       88 
89 
     | 
    
         | 
| 
       89 
     | 
    
         
            -
                  @ 
     | 
| 
       90 
     | 
    
         
            -
                  @ 
     | 
| 
      
 90 
     | 
    
         
            +
                  @rack_adapter.routes.freeze
         
     | 
| 
      
 91 
     | 
    
         
            +
                  @rack_adapter.call(env).should == [333, {}, ['this is gurk']]
         
     | 
| 
       91 
92 
     | 
    
         
             
                end
         
     | 
| 
       92 
93 
     | 
    
         
             
                it 'should route correctly' do
         
     | 
| 
       93 
94 
     | 
    
         
             
                  env = rack_defaults_for '/gurk'
         
     | 
| 
       94 
95 
     | 
    
         | 
| 
       95 
     | 
    
         
            -
                  @ 
     | 
| 
      
 96 
     | 
    
         
            +
                  @rack_adapter.answer '/gurk', lambda { |env| [333, {}, ['this is gurk']] }
         
     | 
| 
       96 
97 
     | 
    
         | 
| 
       97 
     | 
    
         
            -
                  @ 
     | 
| 
       98 
     | 
    
         
            -
                  @ 
     | 
| 
      
 98 
     | 
    
         
            +
                  @rack_adapter.routes.freeze
         
     | 
| 
      
 99 
     | 
    
         
            +
                  @rack_adapter.call(env).should == [333, {}, ['this is gurk']]
         
     | 
| 
       99 
100 
     | 
    
         
             
                end
         
     | 
| 
       100 
101 
     | 
    
         
             
                it 'should route correctly' do
         
     | 
| 
       101 
102 
     | 
    
         
             
                  env = rack_defaults_for '/searches/some_route?query=some_query'
         
     | 
| 
         @@ -104,10 +105,10 @@ describe Routing do 
     | 
|
| 
       104 
105 
     | 
    
         
             
                  full.should_receive(:search_with_text).once.with(anything, 0).and_return(Results::Full.new)
         
     | 
| 
       105 
106 
     | 
    
         
             
                  Query::Full.stub! :new => full
         
     | 
| 
       106 
107 
     | 
    
         | 
| 
       107 
     | 
    
         
            -
                  @ 
     | 
| 
      
 108 
     | 
    
         
            +
                  @rack_adapter.route '/searches/some_route' => Query::Full.new(:some_index, :some_other_index)
         
     | 
| 
       108 
109 
     | 
    
         | 
| 
       109 
     | 
    
         
            -
                  @ 
     | 
| 
       110 
     | 
    
         
            -
                  @ 
     | 
| 
      
 110 
     | 
    
         
            +
                  @rack_adapter.routes.freeze
         
     | 
| 
      
 111 
     | 
    
         
            +
                  @rack_adapter.call(env).should == [200, {"Content-Type"=>"application/json", "Content-Length"=>"52"}, ["{\"allocations\":[],\"offset\":0,\"duration\":0,\"total\":0}"]]
         
     | 
| 
       111 
112 
     | 
    
         
             
                end
         
     | 
| 
       112 
113 
     | 
    
         
             
                it 'should route correctly' do
         
     | 
| 
       113 
114 
     | 
    
         
             
                  env = rack_defaults_for '/searches/some_route?query=some_query&type=some_type'
         
     | 
| 
         @@ -116,10 +117,10 @@ describe Routing do 
     | 
|
| 
       116 
117 
     | 
    
         
             
                  full.should_receive(:search_with_text).once.with(anything, 0).and_return(Results::Full.new)
         
     | 
| 
       117 
118 
     | 
    
         
             
                  Query::Full.stub! :new => full
         
     | 
| 
       118 
119 
     | 
    
         | 
| 
       119 
     | 
    
         
            -
                  @ 
     | 
| 
      
 120 
     | 
    
         
            +
                  @rack_adapter.route '/searches/some_route' => Query::Full.new(:some_index, :some_other_index), :query => { :type => :some_type }
         
     | 
| 
       120 
121 
     | 
    
         | 
| 
       121 
     | 
    
         
            -
                  @ 
     | 
| 
       122 
     | 
    
         
            -
                  @ 
     | 
| 
      
 122 
     | 
    
         
            +
                  @rack_adapter.routes.freeze
         
     | 
| 
      
 123 
     | 
    
         
            +
                  @rack_adapter.call(env).should == [200, {"Content-Type"=>"application/json", "Content-Length"=>"52"}, ["{\"allocations\":[],\"offset\":0,\"duration\":0,\"total\":0}"]]
         
     | 
| 
       123 
124 
     | 
    
         
             
                end
         
     | 
| 
       124 
125 
     | 
    
         
             
                it 'should route correctly' do
         
     | 
| 
       125 
126 
     | 
    
         
             
                  env = rack_defaults_for '/searches/some_wrong_route?query=some_query'
         
     | 
| 
         @@ -128,36 +129,31 @@ describe Routing do 
     | 
|
| 
       128 
129 
     | 
    
         
             
                  full.should_receive(:search_with_text).never
         
     | 
| 
       129 
130 
     | 
    
         
             
                  Query::Full.stub! :new => full
         
     | 
| 
       130 
131 
     | 
    
         | 
| 
       131 
     | 
    
         
            -
                  @ 
     | 
| 
      
 132 
     | 
    
         
            +
                  @rack_adapter.route '/searches/some_route' => Query::Full.new(:some_index, :some_other_index)
         
     | 
| 
       132 
133 
     | 
    
         | 
| 
       133 
     | 
    
         
            -
                  @ 
     | 
| 
       134 
     | 
    
         
            -
                  @ 
     | 
| 
      
 134 
     | 
    
         
            +
                  @rack_adapter.routes.freeze
         
     | 
| 
      
 135 
     | 
    
         
            +
                  @rack_adapter.call(env).should == [404, {"Content-Type"=>"text/html", "X-Cascade"=>"pass"}, ["Not Found"]]
         
     | 
| 
       135 
136 
     | 
    
         
             
                end
         
     | 
| 
       136 
137 
     | 
    
         
             
              end
         
     | 
| 
       137 
138 
     | 
    
         | 
| 
       138 
139 
     | 
    
         
             
              context 'stubbed routes' do
         
     | 
| 
       139 
140 
     | 
    
         
             
                before(:each) do
         
     | 
| 
       140 
141 
     | 
    
         
             
                  @routes = stub :routes
         
     | 
| 
       141 
     | 
    
         
            -
                  @ 
     | 
| 
       142 
     | 
    
         
            -
                end
         
     | 
| 
       143 
     | 
    
         
            -
                describe 'call' do
         
     | 
| 
       144 
     | 
    
         
            -
                  it 'should description' do
         
     | 
| 
       145 
     | 
    
         
            -
                    
         
     | 
| 
       146 
     | 
    
         
            -
                  end
         
     | 
| 
      
 142 
     | 
    
         
            +
                  @rack_adapter.stub! :routes => @routes
         
     | 
| 
       147 
143 
     | 
    
         
             
                end
         
     | 
| 
       148 
144 
     | 
    
         | 
| 
       149 
145 
     | 
    
         
             
                describe 'generate_query_string' do
         
     | 
| 
       150 
146 
     | 
    
         
             
                  it 'should not allow an empty query condition' do
         
     | 
| 
       151 
147 
     | 
    
         
             
                    lambda {
         
     | 
| 
       152 
     | 
    
         
            -
                      @ 
     | 
| 
      
 148 
     | 
    
         
            +
                      @rack_adapter.generate_query_string({}).should == 'this=must_be'
         
     | 
| 
       153 
149 
     | 
    
         
             
                    }.should raise_error "At least one query string condition is needed."
         
     | 
| 
       154 
150 
     | 
    
         
             
                  end
         
     | 
| 
       155 
151 
     | 
    
         
             
                  it 'should handle a single condition' do
         
     | 
| 
       156 
     | 
    
         
            -
                    @ 
     | 
| 
      
 152 
     | 
    
         
            +
                    @rack_adapter.generate_query_string(:this => :must_be).should == 'this=must_be'
         
     | 
| 
       157 
153 
     | 
    
         
             
                  end
         
     | 
| 
       158 
154 
     | 
    
         
             
                  it 'should not allow multiple query strings' do
         
     | 
| 
       159 
155 
     | 
    
         
             
                    lambda {
         
     | 
| 
       160 
     | 
    
         
            -
                      @ 
     | 
| 
      
 156 
     | 
    
         
            +
                      @rack_adapter.generate_query_string(:this => :must_be, :that => :should_be).should == 'this=must_be|that=should_be'
         
     | 
| 
       161 
157 
     | 
    
         
             
                    }.should raise_error "Too many query param conditions (only 1 allowed): {:this=>:must_be, :that=>:should_be}"
         
     | 
| 
       162 
158 
     | 
    
         
             
                  end
         
     | 
| 
       163 
159 
     | 
    
         
             
                  it 'should be sanity checked' do
         
     | 
| 
         @@ -167,62 +163,69 @@ describe Routing do 
     | 
|
| 
       167 
163 
     | 
    
         | 
| 
       168 
164 
     | 
    
         
             
                describe "route" do
         
     | 
| 
       169 
165 
     | 
    
         
             
                  it "should delegate correctly" do
         
     | 
| 
       170 
     | 
    
         
            -
                    @ 
     | 
| 
       171 
     | 
    
         
            -
                    @ 
     | 
| 
      
 166 
     | 
    
         
            +
                    @rack_adapter.should_receive(:route_one).once.with %r{regexp1}, :query1, {}
         
     | 
| 
      
 167 
     | 
    
         
            +
                    @rack_adapter.should_receive(:route_one).once.with %r{regexp2}, :query2, {}
         
     | 
| 
       172 
168 
     | 
    
         | 
| 
       173 
     | 
    
         
            -
                    @ 
     | 
| 
      
 169 
     | 
    
         
            +
                    @rack_adapter.route %r{regexp1} => :query1, %r{regexp2} => :query2
         
     | 
| 
       174 
170 
     | 
    
         
             
                  end
         
     | 
| 
       175 
171 
     | 
    
         
             
                  it "should split options correctly" do
         
     | 
| 
       176 
     | 
    
         
            -
                    @ 
     | 
| 
       177 
     | 
    
         
            -
                    @ 
     | 
| 
      
 172 
     | 
    
         
            +
                    @rack_adapter.should_receive(:route_one).once.with %r{regexp1}, :query1, :some => :option
         
     | 
| 
      
 173 
     | 
    
         
            +
                    @rack_adapter.should_receive(:route_one).once.with %r{regexp2}, :query2, :some => :option
         
     | 
| 
       178 
174 
     | 
    
         | 
| 
       179 
     | 
    
         
            -
                    @ 
     | 
| 
      
 175 
     | 
    
         
            +
                    @rack_adapter.route %r{regexp1} => :query1, %r{regexp2} => :query2, :some => :option
         
     | 
| 
       180 
176 
     | 
    
         
             
                  end
         
     | 
| 
       181 
177 
     | 
    
         
             
                  it 'does not accept nil queries' do
         
     | 
| 
       182 
     | 
    
         
            -
                    lambda { @ 
     | 
| 
      
 178 
     | 
    
         
            +
                    lambda { @rack_adapter.route %r{some/regexp} => nil }.should raise_error(FrontendAdapters::Rack::RouteTargetNilError, /Routing for \/some\\\/regexp\/ was defined with a nil target object, i.e. \/some\\\/regexp\/ => nil./)
         
     | 
| 
      
 179 
     | 
    
         
            +
                  end
         
     | 
| 
      
 180 
     | 
    
         
            +
                end
         
     | 
| 
      
 181 
     | 
    
         
            +
                
         
     | 
| 
      
 182 
     | 
    
         
            +
                describe 'finalize' do
         
     | 
| 
      
 183 
     | 
    
         
            +
                  before(:each) do
         
     | 
| 
      
 184 
     | 
    
         
            +
                    @rack_adapter.routes.should_receive(:freeze).once.with
         
     | 
| 
      
 185 
     | 
    
         
            +
                    
         
     | 
| 
      
 186 
     | 
    
         
            +
                    @rack_adapter.finalize
         
     | 
| 
       183 
187 
     | 
    
         
             
                  end
         
     | 
| 
       184 
188 
     | 
    
         
             
                end
         
     | 
| 
       185 
189 
     | 
    
         | 
| 
       186 
190 
     | 
    
         
             
                describe 'route_one' do
         
     | 
| 
       187 
191 
     | 
    
         
             
                  before(:each) do
         
     | 
| 
       188 
     | 
    
         
            -
                     
     | 
| 
       189 
     | 
    
         
            -
                    @routing.stub! :generate_app => @some_query_app
         
     | 
| 
      
 192 
     | 
    
         
            +
                    Adapters::Rack.stub! :app_for => :some_query_app
         
     | 
| 
       190 
193 
     | 
    
         
             
                  end
         
     | 
| 
       191 
194 
     | 
    
         
             
                  it 'should add the right route' do
         
     | 
| 
       192 
     | 
    
         
            -
                    @routes.should_receive(:add_route).once.with  
     | 
| 
      
 195 
     | 
    
         
            +
                    @routes.should_receive(:add_route).once.with :some_query_app, { :request_method => "GET", :path_info => /some_url/ }
         
     | 
| 
       193 
196 
     | 
    
         | 
| 
       194 
     | 
    
         
            -
                    @ 
     | 
| 
      
 197 
     | 
    
         
            +
                    @rack_adapter.route_one %r{some_url}, :some_query, {}
         
     | 
| 
       195 
198 
     | 
    
         
             
                  end
         
     | 
| 
       196 
199 
     | 
    
         
             
                  it 'should add the right route' do
         
     | 
| 
       197 
     | 
    
         
            -
                    @routes.should_receive(:add_route).once.with  
     | 
| 
      
 200 
     | 
    
         
            +
                    @routes.should_receive(:add_route).once.with :some_query_app, { :request_method => "GET", :path_info => /some_url/ }
         
     | 
| 
       198 
201 
     | 
    
         | 
| 
       199 
     | 
    
         
            -
                    @ 
     | 
| 
      
 202 
     | 
    
         
            +
                    @rack_adapter.route_one 'some_url', :some_query, {}
         
     | 
| 
       200 
203 
     | 
    
         
             
                  end
         
     | 
| 
       201 
204 
     | 
    
         
             
                  it 'should add the right route' do
         
     | 
| 
       202 
     | 
    
         
            -
                    @routes.should_receive(:add_route).once.with  
     | 
| 
      
 205 
     | 
    
         
            +
                    @routes.should_receive(:add_route).once.with :some_query_app, { :request_method => "GET", :glarf => :blarf, :path_info => /some_url/ }
         
     | 
| 
       203 
206 
     | 
    
         | 
| 
       204 
     | 
    
         
            -
                    @ 
     | 
| 
      
 207 
     | 
    
         
            +
                    @rack_adapter.route_one 'some_url', :some_query, { :glarf => :blarf }
         
     | 
| 
       205 
208 
     | 
    
         
             
                  end
         
     | 
| 
       206 
209 
     | 
    
         
             
                end
         
     | 
| 
       207 
210 
     | 
    
         | 
| 
       208 
211 
     | 
    
         
             
                describe 'default' do
         
     | 
| 
       209 
212 
     | 
    
         
             
                  it 'should call answer' do
         
     | 
| 
       210 
     | 
    
         
            -
                    @ 
     | 
| 
      
 213 
     | 
    
         
            +
                    @rack_adapter.should_receive(:answer).once.with nil, FrontendAdapters::Rack::STATUSES[200]
         
     | 
| 
       211 
214 
     | 
    
         | 
| 
       212 
     | 
    
         
            -
                    @ 
     | 
| 
      
 215 
     | 
    
         
            +
                    @rack_adapter.default 200
         
     | 
| 
       213 
216 
     | 
    
         
             
                  end
         
     | 
| 
       214 
217 
     | 
    
         
             
                end
         
     | 
| 
       215 
218 
     | 
    
         | 
| 
       216 
219 
     | 
    
         
             
                describe 'root' do
         
     | 
| 
       217 
220 
     | 
    
         
             
                  it 'should call answer' do
         
     | 
| 
       218 
     | 
    
         
            -
                    @ 
     | 
| 
      
 221 
     | 
    
         
            +
                    @rack_adapter.should_receive(:answer).once.with %r{^/$}, FrontendAdapters::Rack::STATUSES[200]
         
     | 
| 
       219 
222 
     | 
    
         | 
| 
       220 
     | 
    
         
            -
                    @ 
     | 
| 
      
 223 
     | 
    
         
            +
                    @rack_adapter.root 200
         
     | 
| 
       221 
224 
     | 
    
         
             
                  end
         
     | 
| 
       222 
225 
     | 
    
         
             
                  it 'should call answer' do
         
     | 
| 
       223 
     | 
    
         
            -
                    @ 
     | 
| 
      
 226 
     | 
    
         
            +
                    @rack_adapter.should_receive(:answer).once.with %r{^/$}, FrontendAdapters::Rack::STATUSES[404]
         
     | 
| 
       224 
227 
     | 
    
         | 
| 
       225 
     | 
    
         
            -
                    @ 
     | 
| 
      
 228 
     | 
    
         
            +
                    @rack_adapter.root 404
         
     | 
| 
       226 
229 
     | 
    
         
             
                  end
         
     | 
| 
       227 
230 
     | 
    
         
             
                end
         
     | 
| 
       228 
231 
     | 
    
         | 
| 
         @@ -235,30 +238,30 @@ describe Routing do 
     | 
|
| 
       235 
238 
     | 
    
         
             
                      it 'should use the app with default_options from the url' do
         
     | 
| 
       236 
239 
     | 
    
         
             
                        @routes.should_receive(:add_route).once.with @app, { :request_method => "GET", :path_info => /some_url/ }
         
     | 
| 
       237 
240 
     | 
    
         | 
| 
       238 
     | 
    
         
            -
                        @ 
     | 
| 
      
 241 
     | 
    
         
            +
                        @rack_adapter.answer 'some_url', @app
         
     | 
| 
       239 
242 
     | 
    
         
             
                      end
         
     | 
| 
       240 
243 
     | 
    
         
             
                    end
         
     | 
| 
       241 
244 
     | 
    
         
             
                    context 'without url' do
         
     | 
| 
       242 
245 
     | 
    
         
             
                      it 'should use the app with default_options' do
         
     | 
| 
       243 
246 
     | 
    
         
             
                        @routes.should_receive(:add_route).once.with @app, { :request_method => "GET" }
         
     | 
| 
       244 
247 
     | 
    
         | 
| 
       245 
     | 
    
         
            -
                        @ 
     | 
| 
      
 248 
     | 
    
         
            +
                        @rack_adapter.answer nil, @app
         
     | 
| 
       246 
249 
     | 
    
         
             
                      end
         
     | 
| 
       247 
250 
     | 
    
         
             
                    end
         
     | 
| 
       248 
251 
     | 
    
         
             
                  end
         
     | 
| 
       249 
252 
     | 
    
         
             
                  context 'without app' do
         
     | 
| 
       250 
253 
     | 
    
         
             
                    context 'with url' do
         
     | 
| 
       251 
254 
     | 
    
         
             
                      it 'should use the 404 with default_options from the url' do
         
     | 
| 
       252 
     | 
    
         
            -
                        @routes.should_receive(:add_route).once.with  
     | 
| 
      
 255 
     | 
    
         
            +
                        @routes.should_receive(:add_route).once.with FrontendAdapters::Rack::STATUSES[200], { :request_method => "GET", :path_info => /some_url/ }
         
     | 
| 
       253 
256 
     | 
    
         | 
| 
       254 
     | 
    
         
            -
                        @ 
     | 
| 
      
 257 
     | 
    
         
            +
                        @rack_adapter.answer 'some_url'
         
     | 
| 
       255 
258 
     | 
    
         
             
                      end
         
     | 
| 
       256 
259 
     | 
    
         
             
                    end
         
     | 
| 
       257 
260 
     | 
    
         
             
                    context 'without url' do
         
     | 
| 
       258 
261 
     | 
    
         
             
                      it 'should use the 404 with default_options' do
         
     | 
| 
       259 
     | 
    
         
            -
                        @routes.should_receive(:add_route).once.with  
     | 
| 
      
 262 
     | 
    
         
            +
                        @routes.should_receive(:add_route).once.with FrontendAdapters::Rack::STATUSES[200], { :request_method => "GET" }
         
     | 
| 
       260 
263 
     | 
    
         | 
| 
       261 
     | 
    
         
            -
                        @ 
     | 
| 
      
 264 
     | 
    
         
            +
                        @rack_adapter.answer
         
     | 
| 
       262 
265 
     | 
    
         
             
                      end
         
     | 
| 
       263 
266 
     | 
    
         
             
                    end
         
     | 
| 
       264 
267 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -39,6 +39,30 @@ describe Indexed::Categories do 
     | 
|
| 
       39 
39 
     | 
    
         
             
                end
         
     | 
| 
       40 
40 
     | 
    
         
             
              end
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
      
 42 
     | 
    
         
            +
              describe 'clear' do
         
     | 
| 
      
 43 
     | 
    
         
            +
                before(:each) do
         
     | 
| 
      
 44 
     | 
    
         
            +
                  @categories = Indexed::Categories.new
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
                it 'is clear right at the beginning' do
         
     | 
| 
      
 47 
     | 
    
         
            +
                  @categories.categories.should be_empty
         
     | 
| 
      
 48 
     | 
    
         
            +
                  @categories.category_hash.should be_empty
         
     | 
| 
      
 49 
     | 
    
         
            +
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
                it "isn't clear anymore after adding" do
         
     | 
| 
      
 51 
     | 
    
         
            +
                  @categories << stub(:category, :name => :some_name)
         
     | 
| 
      
 52 
     | 
    
         
            +
                  
         
     | 
| 
      
 53 
     | 
    
         
            +
                  @categories.categories.should_not be_empty
         
     | 
| 
      
 54 
     | 
    
         
            +
                  @categories.category_hash.should_not be_empty
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
                it "is clear again after clearing" do
         
     | 
| 
      
 57 
     | 
    
         
            +
                  @categories << stub(:category, :name => :some_name)
         
     | 
| 
      
 58 
     | 
    
         
            +
                  
         
     | 
| 
      
 59 
     | 
    
         
            +
                  @categories.clear
         
     | 
| 
      
 60 
     | 
    
         
            +
                  
         
     | 
| 
      
 61 
     | 
    
         
            +
                  @categories.categories.should be_empty
         
     | 
| 
      
 62 
     | 
    
         
            +
                  @categories.category_hash.should be_empty      
         
     | 
| 
      
 63 
     | 
    
         
            +
                end
         
     | 
| 
      
 64 
     | 
    
         
            +
              end
         
     | 
| 
      
 65 
     | 
    
         
            +
              
         
     | 
| 
       42 
66 
     | 
    
         
             
              context 'without options' do
         
     | 
| 
       43 
67 
     | 
    
         
             
                before(:each) do
         
     | 
| 
       44 
68 
     | 
    
         
             
                  @index1 = stub :index1, :name => :some_index
         
     | 
| 
         @@ -0,0 +1,138 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
            #
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            describe LiveParameters do
         
     | 
| 
      
 6 
     | 
    
         
            +
              
         
     | 
| 
      
 7 
     | 
    
         
            +
              before(:each) do
         
     | 
| 
      
 8 
     | 
    
         
            +
                @parent = stub :parent
         
     | 
| 
      
 9 
     | 
    
         
            +
                @child  = stub :child
         
     | 
| 
      
 10 
     | 
    
         
            +
                IO.stub! :pipe => [@child, @parent]
         
     | 
| 
      
 11 
     | 
    
         
            +
                @parameters = LiveParameters.new
         
     | 
| 
      
 12 
     | 
    
         
            +
                @parameters.stub! :exclaim
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
              
         
     | 
| 
      
 15 
     | 
    
         
            +
              describe Interfaces::LiveParameters::CouldNotUpdateConfigurationError do
         
     | 
| 
      
 16 
     | 
    
         
            +
                before(:each) do
         
     | 
| 
      
 17 
     | 
    
         
            +
                  @error = Interfaces::LiveParameters::CouldNotUpdateConfigurationError.new :some_key, 'some message'
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
              
         
     | 
| 
      
 21 
     | 
    
         
            +
              describe 'parameters' do
         
     | 
| 
      
 22 
     | 
    
         
            +
                context 'all goes well' do
         
     | 
| 
      
 23 
     | 
    
         
            +
                  it 'does a few things in order' do
         
     | 
| 
      
 24 
     | 
    
         
            +
                    @parameters.should_receive(:close_child).once.with().ordered
         
     | 
| 
      
 25 
     | 
    
         
            +
                    @parameters.should_receive(:try_updating_configuration_with).once.with(:a => :b).ordered
         
     | 
| 
      
 26 
     | 
    
         
            +
                    @parameters.should_receive(:write_parent).once.with(:a => :b).ordered
         
     | 
| 
      
 27 
     | 
    
         
            +
                    @parameters.should_receive(:extract_configuration).once.with().ordered
         
     | 
| 
      
 28 
     | 
    
         
            +
                    
         
     | 
| 
      
 29 
     | 
    
         
            +
                    @parameters.parameters :a => :b
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
                context 'updating failed' do
         
     | 
| 
      
 33 
     | 
    
         
            +
                  before(:each) do
         
     | 
| 
      
 34 
     | 
    
         
            +
                    @parameters.should_receive(:try_updating_configuration_with).and_raise Interfaces::LiveParameters::CouldNotUpdateConfigurationError.new(:a, 'hello')
         
     | 
| 
      
 35 
     | 
    
         
            +
                  end
         
     | 
| 
      
 36 
     | 
    
         
            +
                  it 'kills itself and returns' do
         
     | 
| 
      
 37 
     | 
    
         
            +
                    @parameters.should_receive(:close_child).once.ordered
         
     | 
| 
      
 38 
     | 
    
         
            +
                    @parameters.should_receive(:harakiri).once.ordered
         
     | 
| 
      
 39 
     | 
    
         
            +
                    
         
     | 
| 
      
 40 
     | 
    
         
            +
                    @parameters.parameters( :a => :b ).should == { :a => :ERROR }
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
                end
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
              
         
     | 
| 
      
 45 
     | 
    
         
            +
              describe 'harakiri' do
         
     | 
| 
      
 46 
     | 
    
         
            +
                before(:each) do
         
     | 
| 
      
 47 
     | 
    
         
            +
                  Process.stub! :pid => :some_pid
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
                it 'kills itself' do
         
     | 
| 
      
 50 
     | 
    
         
            +
                  Process.should_receive(:kill).once.with :QUIT, :some_pid
         
     | 
| 
      
 51 
     | 
    
         
            +
                  
         
     | 
| 
      
 52 
     | 
    
         
            +
                  @parameters.harakiri
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
      
 54 
     | 
    
         
            +
              end
         
     | 
| 
      
 55 
     | 
    
         
            +
              
         
     | 
| 
      
 56 
     | 
    
         
            +
              describe 'write_parent' do
         
     | 
| 
      
 57 
     | 
    
         
            +
                before(:each) do
         
     | 
| 
      
 58 
     | 
    
         
            +
                  Process.stub! :pid => :some_pid
         
     | 
| 
      
 59 
     | 
    
         
            +
                end
         
     | 
| 
      
 60 
     | 
    
         
            +
                it 'calls the parent' do
         
     | 
| 
      
 61 
     | 
    
         
            +
                  @parent.should_receive(:write).once.with "[:some_pid, {:a=>:b}];;;"
         
     | 
| 
      
 62 
     | 
    
         
            +
                  
         
     | 
| 
      
 63 
     | 
    
         
            +
                  @parameters.write_parent :a => :b
         
     | 
| 
      
 64 
     | 
    
         
            +
                end
         
     | 
| 
      
 65 
     | 
    
         
            +
              end
         
     | 
| 
      
 66 
     | 
    
         
            +
              
         
     | 
| 
      
 67 
     | 
    
         
            +
              describe 'close_child' do
         
     | 
| 
      
 68 
     | 
    
         
            +
                context 'child is closed' do
         
     | 
| 
      
 69 
     | 
    
         
            +
                  before(:each) do
         
     | 
| 
      
 70 
     | 
    
         
            +
                    @child.stub! :closed? => true
         
     | 
| 
      
 71 
     | 
    
         
            +
                  end
         
     | 
| 
      
 72 
     | 
    
         
            +
                  it 'does not receive close' do
         
     | 
| 
      
 73 
     | 
    
         
            +
                    @child.should_receive(:close).never
         
     | 
| 
      
 74 
     | 
    
         
            +
                    
         
     | 
| 
      
 75 
     | 
    
         
            +
                    @parameters.close_child
         
     | 
| 
      
 76 
     | 
    
         
            +
                  end
         
     | 
| 
      
 77 
     | 
    
         
            +
                end
         
     | 
| 
      
 78 
     | 
    
         
            +
                context 'child not yet closed' do
         
     | 
| 
      
 79 
     | 
    
         
            +
                  before(:each) do
         
     | 
| 
      
 80 
     | 
    
         
            +
                    @child.stub! :closed? => false
         
     | 
| 
      
 81 
     | 
    
         
            +
                  end
         
     | 
| 
      
 82 
     | 
    
         
            +
                  it 'does receives close' do
         
     | 
| 
      
 83 
     | 
    
         
            +
                    @child.should_receive(:close).once.with()
         
     | 
| 
      
 84 
     | 
    
         
            +
                    
         
     | 
| 
      
 85 
     | 
    
         
            +
                    @parameters.close_child
         
     | 
| 
      
 86 
     | 
    
         
            +
                  end
         
     | 
| 
      
 87 
     | 
    
         
            +
                end
         
     | 
| 
      
 88 
     | 
    
         
            +
              end
         
     | 
| 
      
 89 
     | 
    
         
            +
              
         
     | 
| 
      
 90 
     | 
    
         
            +
              describe 'kill_worker' do
         
     | 
| 
      
 91 
     | 
    
         
            +
                context 'all goes well' do
         
     | 
| 
      
 92 
     | 
    
         
            +
                  it 'uses Process.kill' do
         
     | 
| 
      
 93 
     | 
    
         
            +
                    Process.should_receive(:kill).once.with :some_signal, :some_pid
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
                    @parameters.kill_worker :some_signal, :some_pid
         
     | 
| 
      
 96 
     | 
    
         
            +
                  end
         
     | 
| 
      
 97 
     | 
    
         
            +
                end
         
     | 
| 
      
 98 
     | 
    
         
            +
                context 'there is no such process' do
         
     | 
| 
      
 99 
     | 
    
         
            +
                  it 'uses Process.kill' do
         
     | 
| 
      
 100 
     | 
    
         
            +
                    Process.should_receive(:kill).and_raise Errno::ESRCH.new
         
     | 
| 
      
 101 
     | 
    
         
            +
                    
         
     | 
| 
      
 102 
     | 
    
         
            +
                    @parameters.should_receive(:remove_worker).once.with :some_pid
         
     | 
| 
      
 103 
     | 
    
         
            +
                    
         
     | 
| 
      
 104 
     | 
    
         
            +
                    @parameters.kill_worker :some_signal, :some_pid
         
     | 
| 
      
 105 
     | 
    
         
            +
                  end
         
     | 
| 
      
 106 
     | 
    
         
            +
                end
         
     | 
| 
      
 107 
     | 
    
         
            +
              end
         
     | 
| 
      
 108 
     | 
    
         
            +
              
         
     | 
| 
      
 109 
     | 
    
         
            +
              describe 'kill_each_worker_except' do
         
     | 
| 
      
 110 
     | 
    
         
            +
                context 'worker pid in the worker pids' do
         
     | 
| 
      
 111 
     | 
    
         
            +
                  before(:each) do
         
     | 
| 
      
 112 
     | 
    
         
            +
                    @parameters.stub! :worker_pids => [1,2,3,4]
         
     | 
| 
      
 113 
     | 
    
         
            +
                  end
         
     | 
| 
      
 114 
     | 
    
         
            +
                  it 'kills each except the one' do
         
     | 
| 
      
 115 
     | 
    
         
            +
                    @parameters.should_receive(:kill_worker).once.with(:KILL, 1)
         
     | 
| 
      
 116 
     | 
    
         
            +
                    @parameters.should_receive(:kill_worker).once.with(:KILL, 2)
         
     | 
| 
      
 117 
     | 
    
         
            +
                    
         
     | 
| 
      
 118 
     | 
    
         
            +
                    @parameters.should_receive(:kill_worker).once.with(:KILL, 4)
         
     | 
| 
      
 119 
     | 
    
         
            +
                    
         
     | 
| 
      
 120 
     | 
    
         
            +
                    @parameters.kill_each_worker_except 3 
         
     | 
| 
      
 121 
     | 
    
         
            +
                  end
         
     | 
| 
      
 122 
     | 
    
         
            +
                end
         
     | 
| 
      
 123 
     | 
    
         
            +
                context 'worker pid not in the worker pids (unrealistic, but...)' do
         
     | 
| 
      
 124 
     | 
    
         
            +
                  before(:each) do
         
     | 
| 
      
 125 
     | 
    
         
            +
                    @parameters.stub! :worker_pids => [1,2,3,4]
         
     | 
| 
      
 126 
     | 
    
         
            +
                  end
         
     | 
| 
      
 127 
     | 
    
         
            +
                  it 'kills each except the one' do
         
     | 
| 
      
 128 
     | 
    
         
            +
                    @parameters.should_receive(:kill_worker).once.with(:KILL, 1)
         
     | 
| 
      
 129 
     | 
    
         
            +
                    @parameters.should_receive(:kill_worker).once.with(:KILL, 2)
         
     | 
| 
      
 130 
     | 
    
         
            +
                    @parameters.should_receive(:kill_worker).once.with(:KILL, 3)
         
     | 
| 
      
 131 
     | 
    
         
            +
                    @parameters.should_receive(:kill_worker).once.with(:KILL, 4)
         
     | 
| 
      
 132 
     | 
    
         
            +
                    
         
     | 
| 
      
 133 
     | 
    
         
            +
                    @parameters.kill_each_worker_except 5
         
     | 
| 
      
 134 
     | 
    
         
            +
                  end
         
     | 
| 
      
 135 
     | 
    
         
            +
                end
         
     | 
| 
      
 136 
     | 
    
         
            +
              end
         
     | 
| 
      
 137 
     | 
    
         
            +
              
         
     | 
| 
      
 138 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/lib/query/base_spec.rb
    CHANGED
    
    | 
         @@ -123,26 +123,22 @@ describe 'Query::Base' do 
     | 
|
| 
       123 
123 
     | 
    
         
             
                  end
         
     | 
| 
       124 
124 
     | 
    
         
             
                end
         
     | 
| 
       125 
125 
     | 
    
         
             
              end
         
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
     | 
    
         
            -
              describe  
     | 
| 
       128 
     | 
    
         
            -
                 
     | 
| 
      
 126 
     | 
    
         
            +
              
         
     | 
| 
      
 127 
     | 
    
         
            +
              describe 'to_s' do
         
     | 
| 
      
 128 
     | 
    
         
            +
                context 'with weights' do
         
     | 
| 
       129 
129 
     | 
    
         
             
                  before(:each) do
         
     | 
| 
       130 
     | 
    
         
            -
                    @query = Query::Full.new @index
         
     | 
| 
      
 130 
     | 
    
         
            +
                    @query = Query::Full.new @index, weights: :some_weights
         
     | 
| 
       131 
131 
     | 
    
         
             
                  end
         
     | 
| 
       132 
     | 
    
         
            -
                  it  
     | 
| 
       133 
     | 
    
         
            -
                     
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
       135 
     | 
    
         
            -
                    @query.results_from allocations
         
     | 
| 
      
 132 
     | 
    
         
            +
                  it 'works correctly' do
         
     | 
| 
      
 133 
     | 
    
         
            +
                    @query.to_s.should == 'Query::Full, weights: some_weights'
         
     | 
| 
       136 
134 
     | 
    
         
             
                  end
         
     | 
| 
       137 
135 
     | 
    
         
             
                end
         
     | 
| 
       138 
     | 
    
         
            -
                 
     | 
| 
      
 136 
     | 
    
         
            +
                context 'without weights' do
         
     | 
| 
       139 
137 
     | 
    
         
             
                  before(:each) do
         
     | 
| 
       140 
     | 
    
         
            -
                    @query = Query:: 
     | 
| 
      
 138 
     | 
    
         
            +
                    @query = Query::Full.new @index
         
     | 
| 
       141 
139 
     | 
    
         
             
                  end
         
     | 
| 
       142 
     | 
    
         
            -
                  it  
     | 
| 
       143 
     | 
    
         
            -
                     
     | 
| 
       144 
     | 
    
         
            -
             
     | 
| 
       145 
     | 
    
         
            -
                    @query.results_from allocations
         
     | 
| 
      
 140 
     | 
    
         
            +
                  it 'works correctly' do
         
     | 
| 
      
 141 
     | 
    
         
            +
                    @query.to_s.should == 'Query::Full'
         
     | 
| 
       146 
142 
     | 
    
         
             
                  end
         
     | 
| 
       147 
143 
     | 
    
         
             
                end
         
     | 
| 
       148 
144 
     | 
    
         
             
              end
         
     | 
    
        data/spec/lib/query/live_spec.rb
    CHANGED
    
    | 
         @@ -21,40 +21,11 @@ describe Query::Live do 
     | 
|
| 
       21 
21 
     | 
    
         
             
                  @query = Query::Live.new @index
         
     | 
| 
       22 
22 
     | 
    
         
             
                end
         
     | 
| 
       23 
23 
     | 
    
         
             
                it "should get allocations" do
         
     | 
| 
       24 
     | 
    
         
            -
                  @query.should_receive 
     | 
| 
      
 24 
     | 
    
         
            +
                  @query.result_type.should_receive :from
         
     | 
| 
       25 
25 
     | 
    
         
             
                  @query.should_receive(:sorted_allocations).once
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
27 
     | 
    
         
             
                  @query.execute 'some_query', 0
         
     | 
| 
       28 
28 
     | 
    
         
             
                end
         
     | 
| 
       29 
     | 
    
         
            -
                it "should generate a max amount of results from allocations" do
         
     | 
| 
       30 
     | 
    
         
            -
                  allocations = stub :allocations
         
     | 
| 
       31 
     | 
    
         
            -
                  @query.should_receive(:sorted_allocations).and_return allocations
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                  @query.should_receive(:results_from).once.with(0, allocations).and_return stub(:results, :prepare! => true)
         
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                  @query.execute 'some query', 0
         
     | 
| 
       36 
     | 
    
         
            -
                end
         
     | 
| 
       37 
     | 
    
         
            -
              end
         
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
              describe "results_from" do
         
     | 
| 
       40 
     | 
    
         
            -
                describe "with empty ids" do
         
     | 
| 
       41 
     | 
    
         
            -
                  before(:each) do
         
     | 
| 
       42 
     | 
    
         
            -
                    @query = Query::Live.new @index
         
     | 
| 
       43 
     | 
    
         
            -
                    @allocations = stub :allocations, :total => 0, :ids => [], :to_result => :some_results, :process! => nil
         
     | 
| 
       44 
     | 
    
         
            -
                  end
         
     | 
| 
       45 
     | 
    
         
            -
                  it "should generate a result" do
         
     | 
| 
       46 
     | 
    
         
            -
                    @query.results_from(@allocations).should be_kind_of Results::Live
         
     | 
| 
       47 
     | 
    
         
            -
                  end
         
     | 
| 
       48 
     | 
    
         
            -
                  it "should generate a result with 0 result count" do
         
     | 
| 
       49 
     | 
    
         
            -
                    @query.results_from(@allocations).total.should == 0
         
     | 
| 
       50 
     | 
    
         
            -
                  end
         
     | 
| 
       51 
     | 
    
         
            -
                  it "should generate a result with 0 duration" do
         
     | 
| 
       52 
     | 
    
         
            -
                    @query.results_from(@allocations).duration.should == 0
         
     | 
| 
       53 
     | 
    
         
            -
                  end
         
     | 
| 
       54 
     | 
    
         
            -
                  it "should generate a result with the allocations" do
         
     | 
| 
       55 
     | 
    
         
            -
                    @query.results_from(0, @allocations).allocations.should == @allocations
         
     | 
| 
       56 
     | 
    
         
            -
                  end
         
     | 
| 
       57 
     | 
    
         
            -
                end
         
     | 
| 
       58 
29 
     | 
    
         
             
              end
         
     | 
| 
       59 
30 
     | 
    
         | 
| 
       60 
31 
     | 
    
         
             
            end
         
     | 
| 
         @@ -8,6 +8,73 @@ describe Query::Token do 
     | 
|
| 
       8 
8 
     | 
    
         
             
                Query::Qualifiers.instance.prepare
         
     | 
| 
       9 
9 
     | 
    
         
             
              end
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
      
 11 
     | 
    
         
            +
              describe 'next_similar_token' do
         
     | 
| 
      
 12 
     | 
    
         
            +
                before(:each) do
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @bundle   = stub :bundle, :similar => [:array, :of, :similar]
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @category = stub :category, :bundle_for => @bundle
         
     | 
| 
      
 15 
     | 
    
         
            +
                  
         
     | 
| 
      
 16 
     | 
    
         
            +
                  @token = Query::Token.processed 'similar~'
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
                it 'returns the right next tokens' do
         
     | 
| 
      
 19 
     | 
    
         
            +
                  next_token = @token.next_similar_token @category
         
     | 
| 
      
 20 
     | 
    
         
            +
                  next_token.text.should == :array
         
     | 
| 
      
 21 
     | 
    
         
            +
                  next_token = next_token.next_similar_token @category
         
     | 
| 
      
 22 
     | 
    
         
            +
                  next_token.text.should == :of
         
     | 
| 
      
 23 
     | 
    
         
            +
                  next_token = next_token.next_similar_token @category
         
     | 
| 
      
 24 
     | 
    
         
            +
                  next_token.text.should == :similar
         
     | 
| 
      
 25 
     | 
    
         
            +
                  next_token = next_token.next_similar_token @category
         
     | 
| 
      
 26 
     | 
    
         
            +
                  next_token.should == nil
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
              
         
     | 
| 
      
 30 
     | 
    
         
            +
              describe 'next_similar' do
         
     | 
| 
      
 31 
     | 
    
         
            +
                before(:each) do
         
     | 
| 
      
 32 
     | 
    
         
            +
                  @bundle = stub :bundle
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
                context 'similar' do
         
     | 
| 
      
 35 
     | 
    
         
            +
                  context 'with stub' do
         
     | 
| 
      
 36 
     | 
    
         
            +
                    before(:each) do
         
     | 
| 
      
 37 
     | 
    
         
            +
                      @bundle.stub! :similar => [:array, :of, :similar]
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                      @token = Query::Token.processed 'similar~'
         
     | 
| 
      
 40 
     | 
    
         
            +
                    end
         
     | 
| 
      
 41 
     | 
    
         
            +
                    it 'generates all similar' do
         
     | 
| 
      
 42 
     | 
    
         
            +
                      @token.next_similar(@bundle).should == :array
         
     | 
| 
      
 43 
     | 
    
         
            +
                      @token.next_similar(@bundle).should == :of
         
     | 
| 
      
 44 
     | 
    
         
            +
                      @token.next_similar(@bundle).should == :similar
         
     | 
| 
      
 45 
     | 
    
         
            +
                      @token.next_similar(@bundle).should == nil
         
     | 
| 
      
 46 
     | 
    
         
            +
                    end
         
     | 
| 
      
 47 
     | 
    
         
            +
                    it 'should have a certain text' do
         
     | 
| 
      
 48 
     | 
    
         
            +
                      @token.next_similar @bundle
         
     | 
| 
      
 49 
     | 
    
         
            +
                      @token.next_similar @bundle
         
     | 
| 
      
 50 
     | 
    
         
            +
                      @token.next_similar @bundle
         
     | 
| 
      
 51 
     | 
    
         
            +
                      @token.next_similar @bundle
         
     | 
| 
      
 52 
     | 
    
         
            +
                      
         
     | 
| 
      
 53 
     | 
    
         
            +
                      @token.text.should == :similar
         
     | 
| 
      
 54 
     | 
    
         
            +
                    end
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
                end
         
     | 
| 
      
 57 
     | 
    
         
            +
                context 'non-similar' do
         
     | 
| 
      
 58 
     | 
    
         
            +
                  context 'with stub' do
         
     | 
| 
      
 59 
     | 
    
         
            +
                    before(:each) do
         
     | 
| 
      
 60 
     | 
    
         
            +
                      @bundle.stub! :similar => [:array, :of, :similar]
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                      @token = Query::Token.processed 'nonsimilar'
         
     | 
| 
      
 63 
     | 
    
         
            +
                    end
         
     | 
| 
      
 64 
     | 
    
         
            +
                    it 'generates all similar' do
         
     | 
| 
      
 65 
     | 
    
         
            +
                      @token.next_similar(@bundle).should == nil
         
     | 
| 
      
 66 
     | 
    
         
            +
                    end
         
     | 
| 
      
 67 
     | 
    
         
            +
                    # TODO
         
     | 
| 
      
 68 
     | 
    
         
            +
                    #
         
     | 
| 
      
 69 
     | 
    
         
            +
                    # it 'should have a certain text' do
         
     | 
| 
      
 70 
     | 
    
         
            +
                    #   @token.next_similar @bundle
         
     | 
| 
      
 71 
     | 
    
         
            +
                    #   
         
     | 
| 
      
 72 
     | 
    
         
            +
                    #   @token.text.should == :nonsimilar
         
     | 
| 
      
 73 
     | 
    
         
            +
                    # end
         
     | 
| 
      
 74 
     | 
    
         
            +
                  end
         
     | 
| 
      
 75 
     | 
    
         
            +
                end
         
     | 
| 
      
 76 
     | 
    
         
            +
              end
         
     | 
| 
      
 77 
     | 
    
         
            +
              
         
     | 
| 
       11 
78 
     | 
    
         
             
              describe "generate_similarity_for" do
         
     | 
| 
       12 
79 
     | 
    
         
             
                before(:each) do
         
     | 
| 
       13 
80 
     | 
    
         
             
                  @bundle = stub :bundle
         
     | 
| 
         @@ -18,16 +85,16 @@ describe Query::Token do 
     | 
|
| 
       18 
85 
     | 
    
         
             
                  before(:each) do
         
     | 
| 
       19 
86 
     | 
    
         
             
                    @bundle.stub! :similar => [:array, :of, :similar]
         
     | 
| 
       20 
87 
     | 
    
         
             
                  end
         
     | 
| 
       21 
     | 
    
         
            -
                  it "returns an  
     | 
| 
       22 
     | 
    
         
            -
                    @token.generate_similarity_for(@bundle). 
     | 
| 
      
 88 
     | 
    
         
            +
                  it "returns an array of the right size" do
         
     | 
| 
      
 89 
     | 
    
         
            +
                    @token.generate_similarity_for(@bundle).size.should == 3
         
     | 
| 
       23 
90 
     | 
    
         
             
                  end
         
     | 
| 
       24 
91 
     | 
    
         
             
                end
         
     | 
| 
       25 
92 
     | 
    
         
             
                context "without similar" do
         
     | 
| 
       26 
93 
     | 
    
         
             
                  before(:each) do
         
     | 
| 
       27 
     | 
    
         
            -
                    @bundle.stub! :similar =>  
     | 
| 
      
 94 
     | 
    
         
            +
                    @bundle.stub! :similar => []
         
     | 
| 
       28 
95 
     | 
    
         
             
                  end
         
     | 
| 
       29 
     | 
    
         
            -
                  it "returns an  
     | 
| 
       30 
     | 
    
         
            -
                    @token.generate_similarity_for(@bundle). 
     | 
| 
      
 96 
     | 
    
         
            +
                  it "returns an array of the right size" do
         
     | 
| 
      
 97 
     | 
    
         
            +
                    @token.generate_similarity_for(@bundle).size.should == 0
         
     | 
| 
       31 
98 
     | 
    
         
             
                  end
         
     | 
| 
       32 
99 
     | 
    
         
             
                end
         
     | 
| 
       33 
100 
     | 
    
         
             
              end
         
     |