supernova 0.7.1 → 0.7.2
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/VERSION +1 -1
- data/lib/supernova/collection.rb +20 -1
- data/lib/supernova/criteria.rb +4 -0
- data/lib/supernova/solr_criteria.rb +10 -1
- data/spec/integration/solr_spec.rb +17 -2
- data/spec/supernova/collection_spec.rb +50 -0
- data/spec/supernova/criteria_spec.rb +17 -0
- data/spec/supernova/solr_criteria_spec.rb +22 -8
- data/supernova.gemspec +2 -1
- metadata +43 -42
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0.7. | 
| 1 | 
            +
            0.7.2
         | 
    
        data/lib/supernova/collection.rb
    CHANGED
    
    | @@ -1,5 +1,24 @@ | |
| 1 1 | 
             
            require "will_paginate"
         | 
| 2 2 |  | 
| 3 3 | 
             
            class Supernova::Collection < WillPaginate::Collection
         | 
| 4 | 
            -
              attr_accessor :original_response, :facets
         | 
| 4 | 
            +
              attr_accessor :original_response, :facets, :original_criteria
         | 
| 5 | 
            +
              
         | 
| 6 | 
            +
              def raw_facet_queries
         | 
| 7 | 
            +
                raw_facet_counts["facet_queries"] || {}
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
              
         | 
| 10 | 
            +
              def raw_facet_counts
         | 
| 11 | 
            +
                original_response["facet_counts"] || {}
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
              
         | 
| 14 | 
            +
              def facet_queries
         | 
| 15 | 
            +
                @facet_queries ||= raw_facet_queries.inject({}) do |hash, (raw_query, count)|
         | 
| 16 | 
            +
                  hash[original_facet_queries.invert[raw_query]] = count
         | 
| 17 | 
            +
                  hash
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
              
         | 
| 21 | 
            +
              def original_facet_queries
         | 
| 22 | 
            +
                original_criteria.search_options[:facet_queries] || {}
         | 
| 23 | 
            +
              end
         | 
| 5 24 | 
             
            end
         | 
    
        data/lib/supernova/criteria.rb
    CHANGED
    
    | @@ -95,6 +95,10 @@ class Supernova::Criteria | |
| 95 95 | 
             
              def facet_fields(*fields)
         | 
| 96 96 | 
             
                merge_filters_array :facets, fields
         | 
| 97 97 | 
             
              end
         | 
| 98 | 
            +
              
         | 
| 99 | 
            +
              def facet_queries(hash)
         | 
| 100 | 
            +
                merge_search_options :facet_queries, hash
         | 
| 101 | 
            +
              end
         | 
| 98 102 |  | 
| 99 103 | 
             
              def conditions(filters)
         | 
| 100 104 | 
             
                merge_filters :conditions, filters
         | 
| @@ -28,11 +28,15 @@ class Supernova::SolrCriteria < Supernova::Criteria | |
| 28 28 | 
             
                end
         | 
| 29 29 | 
             
                solr_options[:fq] << "type:#{self.clazz}" if self.clazz
         | 
| 30 30 |  | 
| 31 | 
            +
                solr_options[:facet] = true if include_facets?
         | 
| 31 32 | 
             
                if self.search_options[:facets]
         | 
| 32 | 
            -
                  solr_options[:facet] = true
         | 
| 33 33 | 
             
                  solr_options["facet.field"] = self.search_options[:facets].compact.map { |field| solr_field_from_field(field) }
         | 
| 34 34 | 
             
                end
         | 
| 35 35 |  | 
| 36 | 
            +
                if self.search_options[:facet_queries]
         | 
| 37 | 
            +
                  solr_options["facet.query"] = self.search_options[:facet_queries].values
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
                
         | 
| 36 40 | 
             
                if self.search_options[:pagination] || search_options[:rows] || search_options[:start]
         | 
| 37 41 | 
             
                  solr_options[:rows] = self.search_options[:rows] || per_page
         | 
| 38 42 | 
             
                  solr_options[:start] = search_options[:start] || ((current_page - 1) * solr_options[:rows])
         | 
| @@ -40,6 +44,10 @@ class Supernova::SolrCriteria < Supernova::Criteria | |
| 40 44 | 
             
                solr_options
         | 
| 41 45 | 
             
              end
         | 
| 42 46 |  | 
| 47 | 
            +
              def include_facets?
         | 
| 48 | 
            +
                self.search_options[:facets] || self.search_options[:facet_queries]
         | 
| 49 | 
            +
              end
         | 
| 50 | 
            +
              
         | 
| 43 51 | 
             
              def convert_search_order(order)
         | 
| 44 52 | 
             
                order.split(/\s*,\s*/).map do |chunk|
         | 
| 45 53 | 
             
                  if chunk.match(/(.*?) (asc|desc)/i)
         | 
| @@ -184,6 +192,7 @@ class Supernova::SolrCriteria < Supernova::Criteria | |
| 184 192 | 
             
              def execute
         | 
| 185 193 | 
             
                response = execute_raw
         | 
| 186 194 | 
             
                collection = Supernova::Collection.new(current_page, per_page == 0 ? 1 : per_page, response["response"]["numFound"])
         | 
| 195 | 
            +
                collection.original_criteria = self.clone
         | 
| 187 196 | 
             
                collection.original_response = response
         | 
| 188 197 | 
             
                collection.facets = hashify_facets_from_response(response)
         | 
| 189 198 | 
             
                collection.replace(build_docs(response["response"]["docs"]))
         | 
| @@ -261,7 +261,6 @@ describe "Solr" do | |
| 261 261 |  | 
| 262 262 | 
             
              describe "#facets" do
         | 
| 263 263 | 
             
                it "returns the correct facets hash" do
         | 
| 264 | 
            -
                  # pending "fix me"
         | 
| 265 264 | 
             
                  Supernova::Solr.add(:id => "offers/3", :type => "Offer", :user_id_i => 3, :enabled_b => false, 
         | 
| 266 265 | 
             
                    :text_t => "Hans Müller", :popularity_i => 10, :type => "Offer"
         | 
| 267 266 | 
             
                  )
         | 
| @@ -270,6 +269,20 @@ describe "Solr" do | |
| 270 269 | 
             
                end
         | 
| 271 270 | 
             
              end
         | 
| 272 271 |  | 
| 272 | 
            +
              describe "#facet_queries" do
         | 
| 273 | 
            +
                it "returns the correct result" do
         | 
| 274 | 
            +
                  defaults = {
         | 
| 275 | 
            +
                    
         | 
| 276 | 
            +
                  }
         | 
| 277 | 
            +
                  Supernova::Solr.add(:id => "offers/1", :type => "Offer", :popularity_i => 1)
         | 
| 278 | 
            +
                  Supernova::Solr.add(:id => "offers/2", :type => "Offer", :popularity_i => 10)
         | 
| 279 | 
            +
                  Supernova::Solr.add(:id => "offers/3", :type => "Offer", :popularity_i => 100)
         | 
| 280 | 
            +
                  Supernova::Solr.commit!
         | 
| 281 | 
            +
                  col = new_criteria.facet_queries(:one => "popularity_i:[* TO 1]", :ten => "popularity_i:[* TO 10]", :hundred => "popularity_i:[* TO 100]").execute
         | 
| 282 | 
            +
                  col.facet_queries.should == { :one => 1, :ten => 2, :hundred => 3 }
         | 
| 283 | 
            +
                end
         | 
| 284 | 
            +
              end
         | 
| 285 | 
            +
              
         | 
| 273 286 | 
             
              describe "#execute_raw" do
         | 
| 274 287 | 
             
                it "returns a hash" do
         | 
| 275 288 | 
             
                  new_criteria.execute_raw.should be_kind_of(Hash)
         | 
| @@ -305,7 +318,9 @@ describe "Solr" do | |
| 305 318 |  | 
| 306 319 | 
             
              describe "with mapping" do
         | 
| 307 320 | 
             
                before(:each) do
         | 
| 308 | 
            -
                   | 
| 321 | 
            +
                  name = "Class#{Time.now.to_f.to_s.gsub(".", "")}"
         | 
| 322 | 
            +
                  eval("class #{name} < Supernova::SolrIndexer; end")
         | 
| 323 | 
            +
                  @clazz = name.constantize
         | 
| 309 324 | 
             
                  @clazz.has :location, :type => :string
         | 
| 310 325 | 
             
                  @clazz.has :city, :type => :string
         | 
| 311 326 | 
             
                end
         | 
| @@ -0,0 +1,50 @@ | |
| 1 | 
            +
            require "spec_helper"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe "Supernova::Collection" do
         | 
| 4 | 
            +
              let(:col) { Supernova::Collection.new(1, 10, 100) }
         | 
| 5 | 
            +
              
         | 
| 6 | 
            +
              let(:original_response_with_facets) do
         | 
| 7 | 
            +
                {"responseHeader"=>{"status"=>0, "QTime"=>2, "params"=>{"facet"=>"true", "wt"=>"json", "facet.query"=>["popularity_i:[* TO 1]", "popularity_i:[* TO 10]", "popularity_i:[* TO 100]"], "fq"=>"type:Offer", "q"=>"*:*"}}, "response"=>{"numFound"=>3, "start"=>0, "docs"=>[{"id"=>"offers/1", "type"=>"Offer", "popularity_i"=>1}, {"id"=>"offers/2", "type"=>"Offer", "popularity_i"=>10}, {"id"=>"offers/3", "type"=>"Offer", "popularity_i"=>100}]}, "facet_counts"=>{"facet_queries"=>{"popularity_i:[* TO 1]"=>1, "popularity_i:[* TO 10]"=>2, "popularity_i:[* TO 100]"=>3}, "facet_fields"=>{}, "facet_dates"=>{}, "facet_ranges"=>{}}}
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
                
         | 
| 10 | 
            +
              let(:original_response_without_facets) do
         | 
| 11 | 
            +
                {"responseHeader"=>{"status"=>0, "QTime"=>0, "params"=>{"wt"=>"json", "fq"=>"type:Offer", "q"=>"*:*"}}, "response"=>{"numFound"=>3, "start"=>0, "docs"=>[{"id"=>"offers/1", "type"=>"Offer", "popularity_i"=>1}, {"id"=>"offers/2", "type"=>"Offer", "popularity_i"=>10}, {"id"=>"offers/3", "type"=>"Offer", "popularity_i"=>100}]}}
         | 
| 12 | 
            +
                {:one=>1, :ten=>2, :hundred=>3}
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
              
         | 
| 15 | 
            +
              describe "#raw_facet_queries" do
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                
         | 
| 18 | 
            +
                it "returns the correct facet queries when found" do
         | 
| 19 | 
            +
                  col.original_response = original_response_with_facets
         | 
| 20 | 
            +
                  col.raw_facet_queries.should == { "popularity_i:[* TO 1]"=>1, "popularity_i:[* TO 10]"=>2, "popularity_i:[* TO 100]"=>3 }
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
                
         | 
| 23 | 
            +
                it "returns an empty hash when facet_queries is empty" do
         | 
| 24 | 
            +
                  col.original_response = original_response_without_facets
         | 
| 25 | 
            +
                  col.raw_facet_queries.should == {}
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
              
         | 
| 29 | 
            +
              describe "#facet_queries" do
         | 
| 30 | 
            +
                it "returns the correct hash" do
         | 
| 31 | 
            +
                  crit = Supernova::Criteria.facet_queries(:one => "popularity_i:[* TO 1]", :ten => "popularity_i:[* TO 10]", :hundred => "popularity_i:[* TO 100]")
         | 
| 32 | 
            +
                  col.original_criteria = crit
         | 
| 33 | 
            +
                  col.original_response = original_response_with_facets
         | 
| 34 | 
            +
                  col.facet_queries.should == { :one => 1, :ten => 2, :hundred => 3 }
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
              
         | 
| 38 | 
            +
              describe "#original_facet_queries" do
         | 
| 39 | 
            +
                it "returns the correct hash when facet queries activated" do
         | 
| 40 | 
            +
                  queries = { :one => "popularity_i:[* TO 1]", :ten => "popularity_i:[* TO 10]", :hundred => "popularity_i:[* TO 100]" }
         | 
| 41 | 
            +
                  col.original_criteria = Supernova::Criteria.facet_queries(queries)
         | 
| 42 | 
            +
                  col.original_facet_queries.should == queries
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
                
         | 
| 45 | 
            +
                it "returns an empty hash when not defined" do
         | 
| 46 | 
            +
                  col.original_criteria = Supernova::Criteria.new
         | 
| 47 | 
            +
                  col.original_facet_queries.should == {}
         | 
| 48 | 
            +
                end
         | 
| 49 | 
            +
              end
         | 
| 50 | 
            +
            end
         | 
| @@ -437,6 +437,23 @@ describe "Supernova::Criteria" do | |
| 437 437 | 
             
                scope.start(99).search_options[:start].should == 99
         | 
| 438 438 | 
             
              end
         | 
| 439 439 |  | 
| 440 | 
            +
              describe "#facet_queries" do
         | 
| 441 | 
            +
                it "adds the queries to the facet_queries array" do
         | 
| 442 | 
            +
                  scope.facet_queries(:first => "1 = 1").facet_queries(:second => "2 = 2").search_options[:facet_queries].should == {
         | 
| 443 | 
            +
                    :first => "1 = 1", :second => "2 = 2"
         | 
| 444 | 
            +
                  }
         | 
| 445 | 
            +
                end
         | 
| 446 | 
            +
                
         | 
| 447 | 
            +
                it "allows merging of two scopes with facet queries" do
         | 
| 448 | 
            +
                  scope.immutable!
         | 
| 449 | 
            +
                  a = scope.facet_queries(:first => "1 = 1")
         | 
| 450 | 
            +
                  b = scope.facet_queries(:second => "2 = 2")
         | 
| 451 | 
            +
                  a.search_options[:facet_queries].should == { :first => "1 = 1" }
         | 
| 452 | 
            +
                  b.search_options[:facet_queries].should == { :second => "2 = 2" }
         | 
| 453 | 
            +
                  a.merge(b).search_options[:facet_queries].should == { :first => "1 = 1", :second => "2 = 2" }
         | 
| 454 | 
            +
                end
         | 
| 455 | 
            +
              end
         | 
| 456 | 
            +
              
         | 
| 440 457 | 
             
              describe "#merge" do
         | 
| 441 458 | 
             
                let(:criteria) { Supernova::Criteria.new.order("popularity asc").with(:a => 1).conditions(:b => 2).search("New Search") }
         | 
| 442 459 | 
             
                let(:new_crit) { Supernova::Criteria.new.order("popularity desc").with(:c => 8).conditions(:e => 9).search("Search") }
         | 
| @@ -152,14 +152,29 @@ describe "Supernova::SolrCriteria" do | |
| 152 152 | 
             
                  criteria.select(:user_id).select(:user_id).select(:enabled).to_params[:fl].should == "user_id,enabled,id"
         | 
| 153 153 | 
             
                end
         | 
| 154 154 |  | 
| 155 | 
            -
                 | 
| 156 | 
            -
                   | 
| 157 | 
            -
             | 
| 155 | 
            +
                describe "with facet fields" do
         | 
| 156 | 
            +
                  it "sets the correct facet options when set" do
         | 
| 157 | 
            +
                    params = criteria.facet_fields(:name).to_params
         | 
| 158 | 
            +
                    params[:facet].should == true
         | 
| 159 | 
            +
                  end
         | 
| 160 | 
            +
                
         | 
| 161 | 
            +
                  it "sets all facet fields" do
         | 
| 162 | 
            +
                    params = criteria.facet_fields(:name).facet_fields(:title).to_params
         | 
| 163 | 
            +
                    params["facet.field"].should == ["name", "title"]
         | 
| 164 | 
            +
                  end
         | 
| 158 165 | 
             
                end
         | 
| 159 166 |  | 
| 160 | 
            -
                 | 
| 161 | 
            -
                  params  | 
| 162 | 
            -
                   | 
| 167 | 
            +
                describe "with facet queries", :wip => true do
         | 
| 168 | 
            +
                  let(:params) { criteria.facet_queries(:a => "a", :b => "b").to_params }
         | 
| 169 | 
            +
                  
         | 
| 170 | 
            +
                  it "sets :facet to true" do
         | 
| 171 | 
            +
                    params[:facet].should == true
         | 
| 172 | 
            +
                  end
         | 
| 173 | 
            +
                  
         | 
| 174 | 
            +
                  it "sets the correct facet query field" do
         | 
| 175 | 
            +
                    criteria.facet_queries(:a => "a", :b => "b")
         | 
| 176 | 
            +
                    params["facet.query"].should == ["a", "b"]
         | 
| 177 | 
            +
                  end
         | 
| 163 178 | 
             
                end
         | 
| 164 179 |  | 
| 165 180 | 
             
                it "uses mapped fields for select" do
         | 
| @@ -219,7 +234,6 @@ describe "Supernova::SolrCriteria" do | |
| 219 234 | 
             
                  it "overwrites pagination with start" do
         | 
| 220 235 | 
             
                    criteria.paginate(:per_page => 9, :page => 1).start(100).rows(11).to_params[:start].should == 100
         | 
| 221 236 | 
             
                  end
         | 
| 222 | 
            -
                  
         | 
| 223 237 | 
             
                end
         | 
| 224 238 |  | 
| 225 239 | 
             
                describe "pagination" do
         | 
| @@ -368,7 +382,7 @@ describe "Supernova::SolrCriteria" do | |
| 368 382 | 
             
                end
         | 
| 369 383 |  | 
| 370 384 | 
             
                it "calls replace on collection with returned docs" do
         | 
| 371 | 
            -
                  col =  | 
| 385 | 
            +
                  col = Supernova::Collection.new(1, 1, 10)
         | 
| 372 386 | 
             
                  Supernova::Collection.stub!(:new).and_return col
         | 
| 373 387 | 
             
                  built_docs = double("built docs")
         | 
| 374 388 | 
             
                  criteria.stub!(:build_docs).and_return built_docs
         | 
    
        data/supernova.gemspec
    CHANGED
    
    | @@ -5,7 +5,7 @@ | |
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |s|
         | 
| 7 7 | 
             
              s.name = "supernova"
         | 
| 8 | 
            -
              s.version = "0.7. | 
| 8 | 
            +
              s.version = "0.7.2"
         | 
| 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"]
         | 
| @@ -81,6 +81,7 @@ Gem::Specification.new do |s| | |
| 81 81 | 
             
                "spec/database.sql",
         | 
| 82 82 | 
             
                "spec/integration/solr_spec.rb",
         | 
| 83 83 | 
             
                "spec/spec_helper.rb",
         | 
| 84 | 
            +
                "spec/supernova/collection_spec.rb",
         | 
| 84 85 | 
             
                "spec/supernova/condition_spec.rb",
         | 
| 85 86 | 
             
                "spec/supernova/criteria_spec.rb",
         | 
| 86 87 | 
             
                "spec/supernova/numeric_extensions_spec.rb",
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: supernova
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.7. | 
| 4 | 
            +
              version: 0.7.2
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -13,7 +13,7 @@ date: 2012-02-14 00:00:00.000000000Z | |
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: will_paginate
         | 
| 16 | 
            -
              requirement: & | 
| 16 | 
            +
              requirement: &70321781020900 !ruby/object:Gem::Requirement
         | 
| 17 17 | 
             
                none: false
         | 
| 18 18 | 
             
                requirements:
         | 
| 19 19 | 
             
                - - ! '>='
         | 
| @@ -21,10 +21,10 @@ dependencies: | |
| 21 21 | 
             
                    version: '0'
         | 
| 22 22 | 
             
              type: :runtime
         | 
| 23 23 | 
             
              prerelease: false
         | 
| 24 | 
            -
              version_requirements: * | 
| 24 | 
            +
              version_requirements: *70321781020900
         | 
| 25 25 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 26 26 | 
             
              name: json
         | 
| 27 | 
            -
              requirement: & | 
| 27 | 
            +
              requirement: &70321781018320 !ruby/object:Gem::Requirement
         | 
| 28 28 | 
             
                none: false
         | 
| 29 29 | 
             
                requirements:
         | 
| 30 30 | 
             
                - - ! '>='
         | 
| @@ -32,10 +32,10 @@ dependencies: | |
| 32 32 | 
             
                    version: '0'
         | 
| 33 33 | 
             
              type: :runtime
         | 
| 34 34 | 
             
              prerelease: false
         | 
| 35 | 
            -
              version_requirements: * | 
| 35 | 
            +
              version_requirements: *70321781018320
         | 
| 36 36 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 37 37 | 
             
              name: activesupport
         | 
| 38 | 
            -
              requirement: & | 
| 38 | 
            +
              requirement: &70321781016320 !ruby/object:Gem::Requirement
         | 
| 39 39 | 
             
                none: false
         | 
| 40 40 | 
             
                requirements:
         | 
| 41 41 | 
             
                - - ! '>='
         | 
| @@ -43,10 +43,10 @@ dependencies: | |
| 43 43 | 
             
                    version: '0'
         | 
| 44 44 | 
             
              type: :runtime
         | 
| 45 45 | 
             
              prerelease: false
         | 
| 46 | 
            -
              version_requirements: * | 
| 46 | 
            +
              version_requirements: *70321781016320
         | 
| 47 47 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 48 48 | 
             
              name: typhoeus
         | 
| 49 | 
            -
              requirement: & | 
| 49 | 
            +
              requirement: &70321781013260 !ruby/object:Gem::Requirement
         | 
| 50 50 | 
             
                none: false
         | 
| 51 51 | 
             
                requirements:
         | 
| 52 52 | 
             
                - - =
         | 
| @@ -54,10 +54,10 @@ dependencies: | |
| 54 54 | 
             
                    version: 0.3.3
         | 
| 55 55 | 
             
              type: :runtime
         | 
| 56 56 | 
             
              prerelease: false
         | 
| 57 | 
            -
              version_requirements: * | 
| 57 | 
            +
              version_requirements: *70321781013260
         | 
| 58 58 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 59 59 | 
             
              name: i18n
         | 
| 60 | 
            -
              requirement: & | 
| 60 | 
            +
              requirement: &70321781011320 !ruby/object:Gem::Requirement
         | 
| 61 61 | 
             
                none: false
         | 
| 62 62 | 
             
                requirements:
         | 
| 63 63 | 
             
                - - ! '>='
         | 
| @@ -65,10 +65,10 @@ dependencies: | |
| 65 65 | 
             
                    version: '0'
         | 
| 66 66 | 
             
              type: :development
         | 
| 67 67 | 
             
              prerelease: false
         | 
| 68 | 
            -
              version_requirements: * | 
| 68 | 
            +
              version_requirements: *70321781011320
         | 
| 69 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 70 70 | 
             
              name: activerecord
         | 
| 71 | 
            -
              requirement: & | 
| 71 | 
            +
              requirement: &70321781008720 !ruby/object:Gem::Requirement
         | 
| 72 72 | 
             
                none: false
         | 
| 73 73 | 
             
                requirements:
         | 
| 74 74 | 
             
                - - ~>
         | 
| @@ -76,10 +76,10 @@ dependencies: | |
| 76 76 | 
             
                    version: 3.0.7
         | 
| 77 77 | 
             
              type: :development
         | 
| 78 78 | 
             
              prerelease: false
         | 
| 79 | 
            -
              version_requirements: * | 
| 79 | 
            +
              version_requirements: *70321781008720
         | 
| 80 80 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 81 81 | 
             
              name: ruby-debug19
         | 
| 82 | 
            -
              requirement: & | 
| 82 | 
            +
              requirement: &70321781006600 !ruby/object:Gem::Requirement
         | 
| 83 83 | 
             
                none: false
         | 
| 84 84 | 
             
                requirements:
         | 
| 85 85 | 
             
                - - ! '>='
         | 
| @@ -87,10 +87,10 @@ dependencies: | |
| 87 87 | 
             
                    version: '0'
         | 
| 88 88 | 
             
              type: :development
         | 
| 89 89 | 
             
              prerelease: false
         | 
| 90 | 
            -
              version_requirements: * | 
| 90 | 
            +
              version_requirements: *70321781006600
         | 
| 91 91 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 92 92 | 
             
              name: mysql2
         | 
| 93 | 
            -
              requirement: & | 
| 93 | 
            +
              requirement: &70321781004800 !ruby/object:Gem::Requirement
         | 
| 94 94 | 
             
                none: false
         | 
| 95 95 | 
             
                requirements:
         | 
| 96 96 | 
             
                - - ~>
         | 
| @@ -98,10 +98,10 @@ dependencies: | |
| 98 98 | 
             
                    version: 0.2.18
         | 
| 99 99 | 
             
              type: :development
         | 
| 100 100 | 
             
              prerelease: false
         | 
| 101 | 
            -
              version_requirements: * | 
| 101 | 
            +
              version_requirements: *70321781004800
         | 
| 102 102 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 103 103 | 
             
              name: ZenTest
         | 
| 104 | 
            -
              requirement: & | 
| 104 | 
            +
              requirement: &70321781003700 !ruby/object:Gem::Requirement
         | 
| 105 105 | 
             
                none: false
         | 
| 106 106 | 
             
                requirements:
         | 
| 107 107 | 
             
                - - =
         | 
| @@ -109,10 +109,10 @@ dependencies: | |
| 109 109 | 
             
                    version: 4.5.0
         | 
| 110 110 | 
             
              type: :development
         | 
| 111 111 | 
             
              prerelease: false
         | 
| 112 | 
            -
              version_requirements: * | 
| 112 | 
            +
              version_requirements: *70321781003700
         | 
| 113 113 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 114 114 | 
             
              name: geokit
         | 
| 115 | 
            -
              requirement: & | 
| 115 | 
            +
              requirement: &70321781002640 !ruby/object:Gem::Requirement
         | 
| 116 116 | 
             
                none: false
         | 
| 117 117 | 
             
                requirements:
         | 
| 118 118 | 
             
                - - ! '>='
         | 
| @@ -120,10 +120,10 @@ dependencies: | |
| 120 120 | 
             
                    version: '0'
         | 
| 121 121 | 
             
              type: :development
         | 
| 122 122 | 
             
              prerelease: false
         | 
| 123 | 
            -
              version_requirements: * | 
| 123 | 
            +
              version_requirements: *70321781002640
         | 
| 124 124 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 125 125 | 
             
              name: guard
         | 
| 126 | 
            -
              requirement: & | 
| 126 | 
            +
              requirement: &70321781001180 !ruby/object:Gem::Requirement
         | 
| 127 127 | 
             
                none: false
         | 
| 128 128 | 
             
                requirements:
         | 
| 129 129 | 
             
                - - ! '>='
         | 
| @@ -131,10 +131,10 @@ dependencies: | |
| 131 131 | 
             
                    version: '0'
         | 
| 132 132 | 
             
              type: :development
         | 
| 133 133 | 
             
              prerelease: false
         | 
| 134 | 
            -
              version_requirements: * | 
| 134 | 
            +
              version_requirements: *70321781001180
         | 
| 135 135 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 136 136 | 
             
              name: rb-fsevent
         | 
| 137 | 
            -
              requirement: & | 
| 137 | 
            +
              requirement: &70321780999760 !ruby/object:Gem::Requirement
         | 
| 138 138 | 
             
                none: false
         | 
| 139 139 | 
             
                requirements:
         | 
| 140 140 | 
             
                - - ! '>='
         | 
| @@ -142,10 +142,10 @@ dependencies: | |
| 142 142 | 
             
                    version: '0'
         | 
| 143 143 | 
             
              type: :development
         | 
| 144 144 | 
             
              prerelease: false
         | 
| 145 | 
            -
              version_requirements: * | 
| 145 | 
            +
              version_requirements: *70321780999760
         | 
| 146 146 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 147 147 | 
             
              name: growl
         | 
| 148 | 
            -
              requirement: & | 
| 148 | 
            +
              requirement: &70321780997780 !ruby/object:Gem::Requirement
         | 
| 149 149 | 
             
                none: false
         | 
| 150 150 | 
             
                requirements:
         | 
| 151 151 | 
             
                - - ! '>='
         | 
| @@ -153,10 +153,10 @@ dependencies: | |
| 153 153 | 
             
                    version: '0'
         | 
| 154 154 | 
             
              type: :development
         | 
| 155 155 | 
             
              prerelease: false
         | 
| 156 | 
            -
              version_requirements: * | 
| 156 | 
            +
              version_requirements: *70321780997780
         | 
| 157 157 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 158 158 | 
             
              name: growl_notify
         | 
| 159 | 
            -
              requirement: & | 
| 159 | 
            +
              requirement: &70321780996620 !ruby/object:Gem::Requirement
         | 
| 160 160 | 
             
                none: false
         | 
| 161 161 | 
             
                requirements:
         | 
| 162 162 | 
             
                - - ! '>='
         | 
| @@ -164,10 +164,10 @@ dependencies: | |
| 164 164 | 
             
                    version: '0'
         | 
| 165 165 | 
             
              type: :development
         | 
| 166 166 | 
             
              prerelease: false
         | 
| 167 | 
            -
              version_requirements: * | 
| 167 | 
            +
              version_requirements: *70321780996620
         | 
| 168 168 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 169 169 | 
             
              name: autotest
         | 
| 170 | 
            -
              requirement: & | 
| 170 | 
            +
              requirement: &70321780995300 !ruby/object:Gem::Requirement
         | 
| 171 171 | 
             
                none: false
         | 
| 172 172 | 
             
                requirements:
         | 
| 173 173 | 
             
                - - ! '>='
         | 
| @@ -175,10 +175,10 @@ dependencies: | |
| 175 175 | 
             
                    version: '0'
         | 
| 176 176 | 
             
              type: :development
         | 
| 177 177 | 
             
              prerelease: false
         | 
| 178 | 
            -
              version_requirements: * | 
| 178 | 
            +
              version_requirements: *70321780995300
         | 
| 179 179 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 180 180 | 
             
              name: autotest-growl
         | 
| 181 | 
            -
              requirement: & | 
| 181 | 
            +
              requirement: &70321780993280 !ruby/object:Gem::Requirement
         | 
| 182 182 | 
             
                none: false
         | 
| 183 183 | 
             
                requirements:
         | 
| 184 184 | 
             
                - - ! '>='
         | 
| @@ -186,10 +186,10 @@ dependencies: | |
| 186 186 | 
             
                    version: '0'
         | 
| 187 187 | 
             
              type: :development
         | 
| 188 188 | 
             
              prerelease: false
         | 
| 189 | 
            -
              version_requirements: * | 
| 189 | 
            +
              version_requirements: *70321780993280
         | 
| 190 190 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 191 191 | 
             
              name: rspec
         | 
| 192 | 
            -
              requirement: & | 
| 192 | 
            +
              requirement: &70321780989420 !ruby/object:Gem::Requirement
         | 
| 193 193 | 
             
                none: false
         | 
| 194 194 | 
             
                requirements:
         | 
| 195 195 | 
             
                - - ~>
         | 
| @@ -197,10 +197,10 @@ dependencies: | |
| 197 197 | 
             
                    version: 2.8.0
         | 
| 198 198 | 
             
              type: :development
         | 
| 199 199 | 
             
              prerelease: false
         | 
| 200 | 
            -
              version_requirements: * | 
| 200 | 
            +
              version_requirements: *70321780989420
         | 
| 201 201 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 202 202 | 
             
              name: bundler
         | 
| 203 | 
            -
              requirement: & | 
| 203 | 
            +
              requirement: &70321780987880 !ruby/object:Gem::Requirement
         | 
| 204 204 | 
             
                none: false
         | 
| 205 205 | 
             
                requirements:
         | 
| 206 206 | 
             
                - - ~>
         | 
| @@ -208,10 +208,10 @@ dependencies: | |
| 208 208 | 
             
                    version: 1.0.0
         | 
| 209 209 | 
             
              type: :development
         | 
| 210 210 | 
             
              prerelease: false
         | 
| 211 | 
            -
              version_requirements: * | 
| 211 | 
            +
              version_requirements: *70321780987880
         | 
| 212 212 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 213 213 | 
             
              name: jeweler
         | 
| 214 | 
            -
              requirement: & | 
| 214 | 
            +
              requirement: &70321780986040 !ruby/object:Gem::Requirement
         | 
| 215 215 | 
             
                none: false
         | 
| 216 216 | 
             
                requirements:
         | 
| 217 217 | 
             
                - - ~>
         | 
| @@ -219,10 +219,10 @@ dependencies: | |
| 219 219 | 
             
                    version: 1.6.0
         | 
| 220 220 | 
             
              type: :development
         | 
| 221 221 | 
             
              prerelease: false
         | 
| 222 | 
            -
              version_requirements: * | 
| 222 | 
            +
              version_requirements: *70321780986040
         | 
| 223 223 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 224 224 | 
             
              name: rcov
         | 
| 225 | 
            -
              requirement: & | 
| 225 | 
            +
              requirement: &70321780983540 !ruby/object:Gem::Requirement
         | 
| 226 226 | 
             
                none: false
         | 
| 227 227 | 
             
                requirements:
         | 
| 228 228 | 
             
                - - ! '>='
         | 
| @@ -230,7 +230,7 @@ dependencies: | |
| 230 230 | 
             
                    version: '0'
         | 
| 231 231 | 
             
              type: :development
         | 
| 232 232 | 
             
              prerelease: false
         | 
| 233 | 
            -
              version_requirements: * | 
| 233 | 
            +
              version_requirements: *70321780983540
         | 
| 234 234 | 
             
            description: Unified search scopes
         | 
| 235 235 | 
             
            email: tobias.schwab@dynport.de
         | 
| 236 236 | 
             
            executables:
         | 
| @@ -303,6 +303,7 @@ files: | |
| 303 303 | 
             
            - spec/database.sql
         | 
| 304 304 | 
             
            - spec/integration/solr_spec.rb
         | 
| 305 305 | 
             
            - spec/spec_helper.rb
         | 
| 306 | 
            +
            - spec/supernova/collection_spec.rb
         | 
| 306 307 | 
             
            - spec/supernova/condition_spec.rb
         | 
| 307 308 | 
             
            - spec/supernova/criteria_spec.rb
         | 
| 308 309 | 
             
            - spec/supernova/numeric_extensions_spec.rb
         | 
| @@ -327,7 +328,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 327 328 | 
             
                  version: '0'
         | 
| 328 329 | 
             
                  segments:
         | 
| 329 330 | 
             
                  - 0
         | 
| 330 | 
            -
                  hash:  | 
| 331 | 
            +
                  hash: 1961663635880777214
         | 
| 331 332 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 332 333 | 
             
              none: false
         | 
| 333 334 | 
             
              requirements:
         |