supernova 0.6.5 → 0.6.6
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/Gemfile +1 -0
- data/Gemfile.lock +5 -0
- data/VERSION +1 -1
- data/lib/supernova/solr_indexer.rb +42 -3
- data/spec/integration/solr_spec.rb +17 -0
- data/spec/supernova/solr_indexer_spec.rb +80 -1
- data/supernova.gemspec +6 -3
- metadata +59 -45
    
        data/Gemfile
    CHANGED
    
    
    
        data/Gemfile.lock
    CHANGED
    
    | @@ -29,6 +29,7 @@ GEM | |
| 29 29 | 
             
                json (1.5.3)
         | 
| 30 30 | 
             
                linecache (0.46)
         | 
| 31 31 | 
             
                  rbx-require-relative (> 0.0.4)
         | 
| 32 | 
            +
                mime-types (1.16)
         | 
| 32 33 | 
             
                mysql2 (0.2.11)
         | 
| 33 34 | 
             
                rake (0.9.2)
         | 
| 34 35 | 
             
                rbx-require-relative (0.0.5)
         | 
| @@ -48,6 +49,9 @@ GEM | |
| 48 49 | 
             
                  ruby-debug-base (~> 0.10.4.0)
         | 
| 49 50 | 
             
                ruby-debug-base (0.10.4)
         | 
| 50 51 | 
             
                  linecache (>= 0.3)
         | 
| 52 | 
            +
                typhoeus (0.2.4)
         | 
| 53 | 
            +
                  mime-types
         | 
| 54 | 
            +
                  mime-types
         | 
| 51 55 | 
             
                tzinfo (0.3.29)
         | 
| 52 56 | 
             
                will_paginate (2.3.15)
         | 
| 53 57 |  | 
| @@ -70,4 +74,5 @@ DEPENDENCIES | |
| 70 74 | 
             
              rsolr
         | 
| 71 75 | 
             
              rspec (~> 2.3.0)
         | 
| 72 76 | 
             
              ruby-debug
         | 
| 77 | 
            +
              typhoeus
         | 
| 73 78 | 
             
              will_paginate
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0.6. | 
| 1 | 
            +
            0.6.6
         | 
| @@ -1,9 +1,10 @@ | |
| 1 1 | 
             
            require "json"
         | 
| 2 2 | 
             
            require "fileutils"
         | 
| 3 3 | 
             
            require "time"
         | 
| 4 | 
            +
            require "typhoeus"
         | 
| 4 5 |  | 
| 5 6 | 
             
            class Supernova::SolrIndexer
         | 
| 6 | 
            -
              attr_accessor :options, :db, :ids, :max_rows_to_direct_index, :local_solr
         | 
| 7 | 
            +
              attr_accessor :options, :db, :ids, :max_rows_to_direct_index, :local_solr, :current_json_string
         | 
| 7 8 | 
             
              attr_writer :index_file_path, :debug
         | 
| 8 9 |  | 
| 9 10 | 
             
              MAX_ROWS_TO_DIRECT_INDEX = 100
         | 
| @@ -221,7 +222,7 @@ class Supernova::SolrIndexer | |
| 221 222 | 
             
                end
         | 
| 222 223 | 
             
                if self.max_rows_to_direct_index < rows.count
         | 
| 223 224 | 
             
                  debug "indexed #{rows.length} rows with json in %TIME%" do
         | 
| 224 | 
            -
                     | 
| 225 | 
            +
                    index_with_json(rows)
         | 
| 225 226 | 
             
                  end
         | 
| 226 227 | 
             
                else
         | 
| 227 228 | 
             
                  debug "indexed #{rows.length} rows directly in %TIME%" do
         | 
| @@ -230,6 +231,10 @@ class Supernova::SolrIndexer | |
| 230 231 | 
             
                end
         | 
| 231 232 | 
             
              end
         | 
| 232 233 |  | 
| 234 | 
            +
              def index_with_json(rows)
         | 
| 235 | 
            +
                options && options[:use_json_file] ? index_with_json_file(rows) : index_with_json_string(rows)
         | 
| 236 | 
            +
              end
         | 
| 237 | 
            +
              
         | 
| 233 238 | 
             
              def solr_rows_to_index_for_query(query)
         | 
| 234 239 | 
             
                query_db(query).map do |row|
         | 
| 235 240 | 
             
                  map_for_solr(row)
         | 
| @@ -257,6 +262,36 @@ class Supernova::SolrIndexer | |
| 257 262 | 
             
                finish
         | 
| 258 263 | 
             
              end
         | 
| 259 264 |  | 
| 265 | 
            +
              def append_to_json_string(row)
         | 
| 266 | 
            +
                if self.current_json_string.nil?
         | 
| 267 | 
            +
                  self.current_json_string = "\{\n"
         | 
| 268 | 
            +
                else
         | 
| 269 | 
            +
                  self.current_json_string << ",\n"
         | 
| 270 | 
            +
                end
         | 
| 271 | 
            +
                self.current_json_string << %("add":#{{:doc => row}.to_json})
         | 
| 272 | 
            +
              end
         | 
| 273 | 
            +
              
         | 
| 274 | 
            +
              def finalize_json_string
         | 
| 275 | 
            +
                self.current_json_string << "\n}"
         | 
| 276 | 
            +
              end
         | 
| 277 | 
            +
              
         | 
| 278 | 
            +
              def post_json_string
         | 
| 279 | 
            +
                Typhoeus::Request.post("#{solr_update_url}?commit=true", 
         | 
| 280 | 
            +
                  :body => self.current_json_string, 
         | 
| 281 | 
            +
                  :headers => { "Content-type" => "application/json; charset=utf-8" }
         | 
| 282 | 
            +
                ).tap do |response|
         | 
| 283 | 
            +
                  self.current_json_string = nil
         | 
| 284 | 
            +
                end
         | 
| 285 | 
            +
              end
         | 
| 286 | 
            +
              
         | 
| 287 | 
            +
              def index_with_json_string(rows)
         | 
| 288 | 
            +
                rows.each do |row|
         | 
| 289 | 
            +
                  append_to_json_string(row)
         | 
| 290 | 
            +
                end
         | 
| 291 | 
            +
                finalize_json_string
         | 
| 292 | 
            +
                post_json_string
         | 
| 293 | 
            +
              end
         | 
| 294 | 
            +
              
         | 
| 260 295 | 
             
              def ids_given?
         | 
| 261 296 | 
             
                self.ids.is_a?(Array)
         | 
| 262 297 | 
             
              end
         | 
| @@ -297,10 +332,14 @@ class Supernova::SolrIndexer | |
| 297 332 | 
             
                Supernova::Solr.url.present? ? Supernova::Solr.url.to_s.gsub(/\/$/, "") : nil
         | 
| 298 333 | 
             
              end
         | 
| 299 334 |  | 
| 335 | 
            +
              def solr_update_url
         | 
| 336 | 
            +
                "#{solr_url}/update/json"
         | 
| 337 | 
            +
              end
         | 
| 338 | 
            +
              
         | 
| 300 339 | 
             
              def do_index_file(options = {})
         | 
| 301 340 | 
             
                raise "solr not configured" if solr_url.nil?
         | 
| 302 341 | 
             
                cmd = if self.local_solr
         | 
| 303 | 
            -
                  %(curl -s '#{ | 
| 342 | 
            +
                  %(curl -s '#{solr_update_url}?commit=true\\&stream.file=#{index_file_path}')
         | 
| 304 343 | 
             
                else
         | 
| 305 344 | 
             
                  %(cd #{File.dirname(index_file_path)} && curl -s '#{solr_url}/update/json?commit=true' --data-binary @#{File.basename(index_file_path)} -H 'Content-type:application/json')
         | 
| 306 345 | 
             
                end
         | 
| @@ -31,6 +31,21 @@ describe "Solr" do | |
| 31 31 | 
             
                Offer.search_scope
         | 
| 32 32 | 
             
              end
         | 
| 33 33 |  | 
| 34 | 
            +
              describe "#index_with_json_string" do
         | 
| 35 | 
            +
                it "indexes the correct rows" do
         | 
| 36 | 
            +
                  Supernova::Solr.truncate!
         | 
| 37 | 
            +
                  indexer = Supernova::SolrIndexer.new
         | 
| 38 | 
            +
                  indexer.index_with_json_string([
         | 
| 39 | 
            +
                      { :title_s => "Title1", :id => 1, :type => "Record" }, 
         | 
| 40 | 
            +
                      { :title_s => "Title2", :id => 2, :type => "Record" } 
         | 
| 41 | 
            +
                    ]
         | 
| 42 | 
            +
                  )
         | 
| 43 | 
            +
                  response = Supernova::Solr.connection.get('select', :params => { :q=>'*:*', :start=>0, :rows=>10, :sort => "id asc" })
         | 
| 44 | 
            +
                  response["response"]["docs"].first.should == { "title_s" => "Title1", "id" => "1", "type" => "Record" }
         | 
| 45 | 
            +
                  response["response"]["docs"].at(1).should == { "title_s" => "Title2", "id" => "2", "type" => "Record" }
         | 
| 46 | 
            +
                end
         | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
              
         | 
| 34 49 | 
             
              describe "#indexing" do
         | 
| 35 50 | 
             
                before(:each) do
         | 
| 36 51 | 
             
                  Supernova::Solr.truncate!
         | 
| @@ -64,6 +79,7 @@ describe "Solr" do | |
| 64 79 | 
             
                  offer1 = Offer.create!(:user_id => 1, :popularity => 10)
         | 
| 65 80 | 
             
                  offer2 = Offer.create!(:user_id => 2, :popularity => 20)
         | 
| 66 81 | 
             
                  indexer = OfferIndex.new(:db => ActiveRecord::Base.connection, :max_rows_to_direct_index => 0)
         | 
| 82 | 
            +
                  indexer.options[:use_json_file] = true
         | 
| 67 83 | 
             
                  indexer.index!
         | 
| 68 84 | 
             
                  indexer.instance_variable_get("@index_file_path").should_not be_nil
         | 
| 69 85 | 
             
                  OfferIndex.search_scope.total_entries.should == 2
         | 
| @@ -76,6 +92,7 @@ describe "Solr" do | |
| 76 92 | 
             
                  offer1 = Offer.create!(:user_id => 1, :popularity => 10)
         | 
| 77 93 | 
             
                  offer2 = Offer.create!(:user_id => 2, :popularity => 20)
         | 
| 78 94 | 
             
                  indexer = OfferIndex.new(:db => ActiveRecord::Base.connection, :max_rows_to_direct_index => 0, :local_solr => true)
         | 
| 95 | 
            +
                  indexer.options[:use_json_file] = true
         | 
| 79 96 | 
             
                  indexer.index!
         | 
| 80 97 | 
             
                  indexer.instance_variable_get("@index_file_path").should_not be_nil
         | 
| 81 98 | 
             
                  OfferIndex.search_scope.first.instance_variable_get("@original_search_doc")["indexed_at_dt"].should_not be_nil
         | 
| @@ -33,6 +33,72 @@ describe Supernova::SolrIndexer do | |
| 33 33 | 
             
                Kernel.stub!(:`).and_return true
         | 
| 34 34 | 
             
              end
         | 
| 35 35 |  | 
| 36 | 
            +
              describe "#index_with_json_string" do
         | 
| 37 | 
            +
                let(:row1) { double("row1") }
         | 
| 38 | 
            +
                let(:row2) { double("row2") }
         | 
| 39 | 
            +
                let(:rows) { [row1, row2] }
         | 
| 40 | 
            +
                
         | 
| 41 | 
            +
                before(:each) do
         | 
| 42 | 
            +
                  indexer.current_json_string = "{"
         | 
| 43 | 
            +
                  indexer.stub!(:append_to_json_string)
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
                
         | 
| 46 | 
            +
                it "calls append to string with all rows" do
         | 
| 47 | 
            +
                  indexer.should_receive(:append_to_json_string).with(row1)
         | 
| 48 | 
            +
                  indexer.should_receive(:append_to_json_string).with(row2)
         | 
| 49 | 
            +
                  indexer.index_with_json_string(rows)
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
                
         | 
| 52 | 
            +
                it "calls finalize_json_string" do
         | 
| 53 | 
            +
                  indexer.should_receive(:finalize_json_string)
         | 
| 54 | 
            +
                  indexer.index_with_json_string(rows)
         | 
| 55 | 
            +
                end
         | 
| 56 | 
            +
                
         | 
| 57 | 
            +
                it "calls post_json_string" do
         | 
| 58 | 
            +
                  indexer.should_receive(:post_json_string)
         | 
| 59 | 
            +
                  indexer.index_with_json_string(rows)
         | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
              end
         | 
| 62 | 
            +
              
         | 
| 63 | 
            +
              describe "#post_json_string" do
         | 
| 64 | 
            +
                before(:each) do
         | 
| 65 | 
            +
                  Typhoeus::Request.stub(:post)
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
                
         | 
| 68 | 
            +
                it "posts the json string" do
         | 
| 69 | 
            +
                  indexer.current_json_string = "some string"
         | 
| 70 | 
            +
                  Typhoeus::Request.should_receive(:post).with("http://solr.xx:9333/solr/update/json?commit=true", :body => "some string", :headers => { "Content-type" => "application/json; charset=utf-8" }).and_return(double("rsp", :body => "text"))
         | 
| 71 | 
            +
                  indexer.post_json_string
         | 
| 72 | 
            +
                end
         | 
| 73 | 
            +
                
         | 
| 74 | 
            +
                it "resets the current_json_string" do
         | 
| 75 | 
            +
                  indexer.current_json_string = "some string"
         | 
| 76 | 
            +
                  indexer.post_json_string
         | 
| 77 | 
            +
                  indexer.current_json_string.should be_nil
         | 
| 78 | 
            +
                end
         | 
| 79 | 
            +
              end
         | 
| 80 | 
            +
              
         | 
| 81 | 
            +
              describe "#append_to_json_string" do
         | 
| 82 | 
            +
                it "creates a new string" do
         | 
| 83 | 
            +
                  indexer.append_to_json_string({"a" => 1})
         | 
| 84 | 
            +
                  indexer.current_json_string.should == %({\n"add":{"doc":{"a":1}})
         | 
| 85 | 
            +
                end
         | 
| 86 | 
            +
                
         | 
| 87 | 
            +
                it "appends to the existing string" do
         | 
| 88 | 
            +
                  indexer.append_to_json_string({"a" => 1})
         | 
| 89 | 
            +
                  indexer.append_to_json_string({"b" => 2})
         | 
| 90 | 
            +
                  indexer.current_json_string.should == %({\n"add":{"doc":{"a":1}},\n"add":{"doc":{"b":2}})
         | 
| 91 | 
            +
                end
         | 
| 92 | 
            +
              end
         | 
| 93 | 
            +
              
         | 
| 94 | 
            +
              describe "#finalize_json_string" do
         | 
| 95 | 
            +
                it "adds the last brackets" do
         | 
| 96 | 
            +
                  indexer.append_to_json_string({"a" => 1})
         | 
| 97 | 
            +
                  indexer.finalize_json_string
         | 
| 98 | 
            +
                  indexer.current_json_string.should == %({\n"add":{"doc":{"a":1}}\n})
         | 
| 99 | 
            +
                end
         | 
| 100 | 
            +
              end
         | 
| 101 | 
            +
              
         | 
| 36 102 | 
             
              describe "initialize" do
         | 
| 37 103 | 
             
                it "sets all options" do
         | 
| 38 104 | 
             
                  options = { :database => { :database => "dynasty", :username => "dynasty_user" } }
         | 
| @@ -375,6 +441,19 @@ describe Supernova::SolrIndexer do | |
| 375 441 | 
             
                end
         | 
| 376 442 | 
             
              end
         | 
| 377 443 |  | 
| 444 | 
            +
              describe "#index_with_json" do
         | 
| 445 | 
            +
                it "calls index_with_json_string by default" do
         | 
| 446 | 
            +
                  indexer.should_receive(:index_with_json_string).with([1])
         | 
| 447 | 
            +
                  indexer.index_with_json([1])
         | 
| 448 | 
            +
                end
         | 
| 449 | 
            +
                
         | 
| 450 | 
            +
                it "calls index_with_json_file when asked to" do
         | 
| 451 | 
            +
                  indexer.options[:use_json_file] = true
         | 
| 452 | 
            +
                  indexer.should_receive(:index_with_json_file).with([1])
         | 
| 453 | 
            +
                  indexer.index_with_json([1])
         | 
| 454 | 
            +
                end
         | 
| 455 | 
            +
              end
         | 
| 456 | 
            +
              
         | 
| 378 457 | 
             
              describe "#index_rows" do
         | 
| 379 458 | 
             
                let(:row1) { double("row1") }
         | 
| 380 459 | 
             
                let(:row2) { double("row2") }
         | 
| @@ -404,7 +483,7 @@ describe Supernova::SolrIndexer do | |
| 404 483 |  | 
| 405 484 | 
             
                it "calls map_directly when number of rows < max_rows_to_direct_index" do
         | 
| 406 485 | 
             
                  custom_indexer.should_receive(:max_rows_to_direct_index).and_return 1
         | 
| 407 | 
            -
                  custom_indexer.should_receive(: | 
| 486 | 
            +
                  custom_indexer.should_receive(:index_with_json).with([mapped1, mapped2])
         | 
| 408 487 | 
             
                  custom_indexer.index_rows([row1, row2])
         | 
| 409 488 | 
             
                end
         | 
| 410 489 | 
             
              end
         | 
    
        data/supernova.gemspec
    CHANGED
    
    | @@ -5,11 +5,11 @@ | |
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |s|
         | 
| 7 7 | 
             
              s.name = %q{supernova}
         | 
| 8 | 
            -
              s.version = "0.6. | 
| 8 | 
            +
              s.version = "0.6.6"
         | 
| 9 9 |  | 
| 10 10 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 11 11 | 
             
              s.authors = ["Tobias Schwab"]
         | 
| 12 | 
            -
              s.date = %q{2011- | 
| 12 | 
            +
              s.date = %q{2011-11-04}
         | 
| 13 13 | 
             
              s.default_executable = %q{start_solr}
         | 
| 14 14 | 
             
              s.description = %q{Unified search scopes}
         | 
| 15 15 | 
             
              s.email = %q{tobias.schwab@dynport.de}
         | 
| @@ -95,7 +95,7 @@ Gem::Specification.new do |s| | |
| 95 95 | 
             
              s.homepage = %q{http://github.com/dynport/supernova}
         | 
| 96 96 | 
             
              s.licenses = ["MIT"]
         | 
| 97 97 | 
             
              s.require_paths = ["lib"]
         | 
| 98 | 
            -
              s.rubygems_version = %q{1. | 
| 98 | 
            +
              s.rubygems_version = %q{1.5.2}
         | 
| 99 99 | 
             
              s.summary = %q{Unified search scopes}
         | 
| 100 100 |  | 
| 101 101 | 
             
              if s.respond_to? :specification_version then
         | 
| @@ -106,6 +106,7 @@ Gem::Specification.new do |s| | |
| 106 106 | 
             
                  s.add_runtime_dependency(%q<will_paginate>, [">= 0"])
         | 
| 107 107 | 
             
                  s.add_runtime_dependency(%q<json>, [">= 0"])
         | 
| 108 108 | 
             
                  s.add_runtime_dependency(%q<activesupport>, [">= 0"])
         | 
| 109 | 
            +
                  s.add_runtime_dependency(%q<typhoeus>, [">= 0"])
         | 
| 109 110 | 
             
                  s.add_development_dependency(%q<i18n>, [">= 0"])
         | 
| 110 111 | 
             
                  s.add_development_dependency(%q<activerecord>, ["~> 3.0.7"])
         | 
| 111 112 | 
             
                  s.add_development_dependency(%q<ruby-debug>, [">= 0"])
         | 
| @@ -123,6 +124,7 @@ Gem::Specification.new do |s| | |
| 123 124 | 
             
                  s.add_dependency(%q<will_paginate>, [">= 0"])
         | 
| 124 125 | 
             
                  s.add_dependency(%q<json>, [">= 0"])
         | 
| 125 126 | 
             
                  s.add_dependency(%q<activesupport>, [">= 0"])
         | 
| 127 | 
            +
                  s.add_dependency(%q<typhoeus>, [">= 0"])
         | 
| 126 128 | 
             
                  s.add_dependency(%q<i18n>, [">= 0"])
         | 
| 127 129 | 
             
                  s.add_dependency(%q<activerecord>, ["~> 3.0.7"])
         | 
| 128 130 | 
             
                  s.add_dependency(%q<ruby-debug>, [">= 0"])
         | 
| @@ -141,6 +143,7 @@ Gem::Specification.new do |s| | |
| 141 143 | 
             
                s.add_dependency(%q<will_paginate>, [">= 0"])
         | 
| 142 144 | 
             
                s.add_dependency(%q<json>, [">= 0"])
         | 
| 143 145 | 
             
                s.add_dependency(%q<activesupport>, [">= 0"])
         | 
| 146 | 
            +
                s.add_dependency(%q<typhoeus>, [">= 0"])
         | 
| 144 147 | 
             
                s.add_dependency(%q<i18n>, [">= 0"])
         | 
| 145 148 | 
             
                s.add_dependency(%q<activerecord>, ["~> 3.0.7"])
         | 
| 146 149 | 
             
                s.add_dependency(%q<ruby-debug>, [">= 0"])
         | 
    
        metadata
    CHANGED
    
    | @@ -1,13 +1,13 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: supernova
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              hash:  | 
| 4 | 
            +
              hash: 11
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
              segments: 
         | 
| 7 7 | 
             
              - 0
         | 
| 8 8 | 
             
              - 6
         | 
| 9 | 
            -
              -  | 
| 10 | 
            -
              version: 0.6. | 
| 9 | 
            +
              - 6
         | 
| 10 | 
            +
              version: 0.6.6
         | 
| 11 11 | 
             
            platform: ruby
         | 
| 12 12 | 
             
            authors: 
         | 
| 13 13 | 
             
            - Tobias Schwab
         | 
| @@ -15,12 +15,11 @@ autorequire: | |
| 15 15 | 
             
            bindir: bin
         | 
| 16 16 | 
             
            cert_chain: []
         | 
| 17 17 |  | 
| 18 | 
            -
            date: 2011- | 
| 18 | 
            +
            date: 2011-11-04 00:00:00 +01:00
         | 
| 19 19 | 
             
            default_executable: start_solr
         | 
| 20 20 | 
             
            dependencies: 
         | 
| 21 21 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 22 22 | 
             
              name: rsolr
         | 
| 23 | 
            -
              prerelease: false
         | 
| 24 23 | 
             
              version_requirements: &id001 !ruby/object:Gem::Requirement 
         | 
| 25 24 | 
             
                none: false
         | 
| 26 25 | 
             
                requirements: 
         | 
| @@ -30,11 +29,11 @@ dependencies: | |
| 30 29 | 
             
                    segments: 
         | 
| 31 30 | 
             
                    - 0
         | 
| 32 31 | 
             
                    version: "0"
         | 
| 32 | 
            +
              prerelease: false
         | 
| 33 33 | 
             
              type: :runtime
         | 
| 34 34 | 
             
              requirement: *id001
         | 
| 35 35 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 36 36 | 
             
              name: will_paginate
         | 
| 37 | 
            -
              prerelease: false
         | 
| 38 37 | 
             
              version_requirements: &id002 !ruby/object:Gem::Requirement 
         | 
| 39 38 | 
             
                none: false
         | 
| 40 39 | 
             
                requirements: 
         | 
| @@ -44,11 +43,11 @@ dependencies: | |
| 44 43 | 
             
                    segments: 
         | 
| 45 44 | 
             
                    - 0
         | 
| 46 45 | 
             
                    version: "0"
         | 
| 46 | 
            +
              prerelease: false
         | 
| 47 47 | 
             
              type: :runtime
         | 
| 48 48 | 
             
              requirement: *id002
         | 
| 49 49 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 50 50 | 
             
              name: json
         | 
| 51 | 
            -
              prerelease: false
         | 
| 52 51 | 
             
              version_requirements: &id003 !ruby/object:Gem::Requirement 
         | 
| 53 52 | 
             
                none: false
         | 
| 54 53 | 
             
                requirements: 
         | 
| @@ -58,11 +57,11 @@ dependencies: | |
| 58 57 | 
             
                    segments: 
         | 
| 59 58 | 
             
                    - 0
         | 
| 60 59 | 
             
                    version: "0"
         | 
| 60 | 
            +
              prerelease: false
         | 
| 61 61 | 
             
              type: :runtime
         | 
| 62 62 | 
             
              requirement: *id003
         | 
| 63 63 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 64 64 | 
             
              name: activesupport
         | 
| 65 | 
            -
              prerelease: false
         | 
| 66 65 | 
             
              version_requirements: &id004 !ruby/object:Gem::Requirement 
         | 
| 67 66 | 
             
                none: false
         | 
| 68 67 | 
             
                requirements: 
         | 
| @@ -72,11 +71,11 @@ dependencies: | |
| 72 71 | 
             
                    segments: 
         | 
| 73 72 | 
             
                    - 0
         | 
| 74 73 | 
             
                    version: "0"
         | 
| 74 | 
            +
              prerelease: false
         | 
| 75 75 | 
             
              type: :runtime
         | 
| 76 76 | 
             
              requirement: *id004
         | 
| 77 77 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 78 | 
            -
              name:  | 
| 79 | 
            -
              prerelease: false
         | 
| 78 | 
            +
              name: typhoeus
         | 
| 80 79 | 
             
              version_requirements: &id005 !ruby/object:Gem::Requirement 
         | 
| 81 80 | 
             
                none: false
         | 
| 82 81 | 
             
                requirements: 
         | 
| @@ -86,12 +85,26 @@ dependencies: | |
| 86 85 | 
             
                    segments: 
         | 
| 87 86 | 
             
                    - 0
         | 
| 88 87 | 
             
                    version: "0"
         | 
| 89 | 
            -
               | 
| 88 | 
            +
              prerelease: false
         | 
| 89 | 
            +
              type: :runtime
         | 
| 90 90 | 
             
              requirement: *id005
         | 
| 91 91 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 92 | 
            -
              name:  | 
| 93 | 
            -
              prerelease: false
         | 
| 92 | 
            +
              name: i18n
         | 
| 94 93 | 
             
              version_requirements: &id006 !ruby/object:Gem::Requirement 
         | 
| 94 | 
            +
                none: false
         | 
| 95 | 
            +
                requirements: 
         | 
| 96 | 
            +
                - - ">="
         | 
| 97 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 98 | 
            +
                    hash: 3
         | 
| 99 | 
            +
                    segments: 
         | 
| 100 | 
            +
                    - 0
         | 
| 101 | 
            +
                    version: "0"
         | 
| 102 | 
            +
              prerelease: false
         | 
| 103 | 
            +
              type: :development
         | 
| 104 | 
            +
              requirement: *id006
         | 
| 105 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 106 | 
            +
              name: activerecord
         | 
| 107 | 
            +
              version_requirements: &id007 !ruby/object:Gem::Requirement 
         | 
| 95 108 | 
             
                none: false
         | 
| 96 109 | 
             
                requirements: 
         | 
| 97 110 | 
             
                - - ~>
         | 
| @@ -102,12 +115,12 @@ dependencies: | |
| 102 115 | 
             
                    - 0
         | 
| 103 116 | 
             
                    - 7
         | 
| 104 117 | 
             
                    version: 3.0.7
         | 
| 118 | 
            +
              prerelease: false
         | 
| 105 119 | 
             
              type: :development
         | 
| 106 | 
            -
              requirement: * | 
| 120 | 
            +
              requirement: *id007
         | 
| 107 121 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 108 122 | 
             
              name: ruby-debug
         | 
| 109 | 
            -
               | 
| 110 | 
            -
              version_requirements: &id007 !ruby/object:Gem::Requirement 
         | 
| 123 | 
            +
              version_requirements: &id008 !ruby/object:Gem::Requirement 
         | 
| 111 124 | 
             
                none: false
         | 
| 112 125 | 
             
                requirements: 
         | 
| 113 126 | 
             
                - - ">="
         | 
| @@ -116,12 +129,12 @@ dependencies: | |
| 116 129 | 
             
                    segments: 
         | 
| 117 130 | 
             
                    - 0
         | 
| 118 131 | 
             
                    version: "0"
         | 
| 132 | 
            +
              prerelease: false
         | 
| 119 133 | 
             
              type: :development
         | 
| 120 | 
            -
              requirement: * | 
| 134 | 
            +
              requirement: *id008
         | 
| 121 135 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 122 136 | 
             
              name: mysql2
         | 
| 123 | 
            -
               | 
| 124 | 
            -
              version_requirements: &id008 !ruby/object:Gem::Requirement 
         | 
| 137 | 
            +
              version_requirements: &id009 !ruby/object:Gem::Requirement 
         | 
| 125 138 | 
             
                none: false
         | 
| 126 139 | 
             
                requirements: 
         | 
| 127 140 | 
             
                - - ~>
         | 
| @@ -132,12 +145,12 @@ dependencies: | |
| 132 145 | 
             
                    - 2
         | 
| 133 146 | 
             
                    - 7
         | 
| 134 147 | 
             
                    version: 0.2.7
         | 
| 148 | 
            +
              prerelease: false
         | 
| 135 149 | 
             
              type: :development
         | 
| 136 | 
            -
              requirement: * | 
| 150 | 
            +
              requirement: *id009
         | 
| 137 151 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 138 152 | 
             
              name: ZenTest
         | 
| 139 | 
            -
               | 
| 140 | 
            -
              version_requirements: &id009 !ruby/object:Gem::Requirement 
         | 
| 153 | 
            +
              version_requirements: &id010 !ruby/object:Gem::Requirement 
         | 
| 141 154 | 
             
                none: false
         | 
| 142 155 | 
             
                requirements: 
         | 
| 143 156 | 
             
                - - "="
         | 
| @@ -148,12 +161,12 @@ dependencies: | |
| 148 161 | 
             
                    - 5
         | 
| 149 162 | 
             
                    - 0
         | 
| 150 163 | 
             
                    version: 4.5.0
         | 
| 164 | 
            +
              prerelease: false
         | 
| 151 165 | 
             
              type: :development
         | 
| 152 | 
            -
              requirement: * | 
| 166 | 
            +
              requirement: *id010
         | 
| 153 167 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 154 168 | 
             
              name: geokit
         | 
| 155 | 
            -
               | 
| 156 | 
            -
              version_requirements: &id010 !ruby/object:Gem::Requirement 
         | 
| 169 | 
            +
              version_requirements: &id011 !ruby/object:Gem::Requirement 
         | 
| 157 170 | 
             
                none: false
         | 
| 158 171 | 
             
                requirements: 
         | 
| 159 172 | 
             
                - - ">="
         | 
| @@ -162,12 +175,12 @@ dependencies: | |
| 162 175 | 
             
                    segments: 
         | 
| 163 176 | 
             
                    - 0
         | 
| 164 177 | 
             
                    version: "0"
         | 
| 178 | 
            +
              prerelease: false
         | 
| 165 179 | 
             
              type: :development
         | 
| 166 | 
            -
              requirement: * | 
| 180 | 
            +
              requirement: *id011
         | 
| 167 181 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 168 182 | 
             
              name: autotest
         | 
| 169 | 
            -
               | 
| 170 | 
            -
              version_requirements: &id011 !ruby/object:Gem::Requirement 
         | 
| 183 | 
            +
              version_requirements: &id012 !ruby/object:Gem::Requirement 
         | 
| 171 184 | 
             
                none: false
         | 
| 172 185 | 
             
                requirements: 
         | 
| 173 186 | 
             
                - - ">="
         | 
| @@ -176,12 +189,12 @@ dependencies: | |
| 176 189 | 
             
                    segments: 
         | 
| 177 190 | 
             
                    - 0
         | 
| 178 191 | 
             
                    version: "0"
         | 
| 192 | 
            +
              prerelease: false
         | 
| 179 193 | 
             
              type: :development
         | 
| 180 | 
            -
              requirement: * | 
| 194 | 
            +
              requirement: *id012
         | 
| 181 195 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 182 196 | 
             
              name: autotest-growl
         | 
| 183 | 
            -
               | 
| 184 | 
            -
              version_requirements: &id012 !ruby/object:Gem::Requirement 
         | 
| 197 | 
            +
              version_requirements: &id013 !ruby/object:Gem::Requirement 
         | 
| 185 198 | 
             
                none: false
         | 
| 186 199 | 
             
                requirements: 
         | 
| 187 200 | 
             
                - - ">="
         | 
| @@ -190,12 +203,12 @@ dependencies: | |
| 190 203 | 
             
                    segments: 
         | 
| 191 204 | 
             
                    - 0
         | 
| 192 205 | 
             
                    version: "0"
         | 
| 206 | 
            +
              prerelease: false
         | 
| 193 207 | 
             
              type: :development
         | 
| 194 | 
            -
              requirement: * | 
| 208 | 
            +
              requirement: *id013
         | 
| 195 209 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 196 210 | 
             
              name: rspec
         | 
| 197 | 
            -
               | 
| 198 | 
            -
              version_requirements: &id013 !ruby/object:Gem::Requirement 
         | 
| 211 | 
            +
              version_requirements: &id014 !ruby/object:Gem::Requirement 
         | 
| 199 212 | 
             
                none: false
         | 
| 200 213 | 
             
                requirements: 
         | 
| 201 214 | 
             
                - - ~>
         | 
| @@ -206,12 +219,12 @@ dependencies: | |
| 206 219 | 
             
                    - 3
         | 
| 207 220 | 
             
                    - 0
         | 
| 208 221 | 
             
                    version: 2.3.0
         | 
| 222 | 
            +
              prerelease: false
         | 
| 209 223 | 
             
              type: :development
         | 
| 210 | 
            -
              requirement: * | 
| 224 | 
            +
              requirement: *id014
         | 
| 211 225 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 212 226 | 
             
              name: bundler
         | 
| 213 | 
            -
               | 
| 214 | 
            -
              version_requirements: &id014 !ruby/object:Gem::Requirement 
         | 
| 227 | 
            +
              version_requirements: &id015 !ruby/object:Gem::Requirement 
         | 
| 215 228 | 
             
                none: false
         | 
| 216 229 | 
             
                requirements: 
         | 
| 217 230 | 
             
                - - ~>
         | 
| @@ -222,12 +235,12 @@ dependencies: | |
| 222 235 | 
             
                    - 0
         | 
| 223 236 | 
             
                    - 0
         | 
| 224 237 | 
             
                    version: 1.0.0
         | 
| 238 | 
            +
              prerelease: false
         | 
| 225 239 | 
             
              type: :development
         | 
| 226 | 
            -
              requirement: * | 
| 240 | 
            +
              requirement: *id015
         | 
| 227 241 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 228 242 | 
             
              name: jeweler
         | 
| 229 | 
            -
               | 
| 230 | 
            -
              version_requirements: &id015 !ruby/object:Gem::Requirement 
         | 
| 243 | 
            +
              version_requirements: &id016 !ruby/object:Gem::Requirement 
         | 
| 231 244 | 
             
                none: false
         | 
| 232 245 | 
             
                requirements: 
         | 
| 233 246 | 
             
                - - ~>
         | 
| @@ -238,12 +251,12 @@ dependencies: | |
| 238 251 | 
             
                    - 6
         | 
| 239 252 | 
             
                    - 0
         | 
| 240 253 | 
             
                    version: 1.6.0
         | 
| 254 | 
            +
              prerelease: false
         | 
| 241 255 | 
             
              type: :development
         | 
| 242 | 
            -
              requirement: * | 
| 256 | 
            +
              requirement: *id016
         | 
| 243 257 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 244 258 | 
             
              name: rcov
         | 
| 245 | 
            -
               | 
| 246 | 
            -
              version_requirements: &id016 !ruby/object:Gem::Requirement 
         | 
| 259 | 
            +
              version_requirements: &id017 !ruby/object:Gem::Requirement 
         | 
| 247 260 | 
             
                none: false
         | 
| 248 261 | 
             
                requirements: 
         | 
| 249 262 | 
             
                - - ">="
         | 
| @@ -252,8 +265,9 @@ dependencies: | |
| 252 265 | 
             
                    segments: 
         | 
| 253 266 | 
             
                    - 0
         | 
| 254 267 | 
             
                    version: "0"
         | 
| 268 | 
            +
              prerelease: false
         | 
| 255 269 | 
             
              type: :development
         | 
| 256 | 
            -
              requirement: * | 
| 270 | 
            +
              requirement: *id017
         | 
| 257 271 | 
             
            description: Unified search scopes
         | 
| 258 272 | 
             
            email: tobias.schwab@dynport.de
         | 
| 259 273 | 
             
            executables: 
         | 
| @@ -366,7 +380,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 366 380 | 
             
            requirements: []
         | 
| 367 381 |  | 
| 368 382 | 
             
            rubyforge_project: 
         | 
| 369 | 
            -
            rubygems_version: 1. | 
| 383 | 
            +
            rubygems_version: 1.5.2
         | 
| 370 384 | 
             
            signing_key: 
         | 
| 371 385 | 
             
            specification_version: 3
         | 
| 372 386 | 
             
            summary: Unified search scopes
         |