supernova 0.3.2 → 0.3.3

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 CHANGED
@@ -1 +1 @@
1
- 0.3.2
1
+ 0.3.3
@@ -10,7 +10,7 @@ module Supernova
10
10
  attr_accessor :criteria_class, :defined_named_search_scopes
11
11
 
12
12
  def search_scope
13
- self.criteria_class.new(self)
13
+ self.criteria_class.new(self).named_scope_class(self)
14
14
  end
15
15
 
16
16
  def named_search_scope(name, &block)
@@ -170,13 +170,17 @@ class Supernova::Criteria
170
170
  if args.length == 1 && Array.new.respond_to?(args.first)
171
171
  to_a.send(args.first, &block)
172
172
  elsif self.named_scope_defined?(args.first)
173
- self.merge(self.clazz.send(*args)) # merge named scope and current criteria
173
+ self.merge(self.search_options[:named_scope_class].send(*args)) # merge named scope and current criteria
174
174
  else
175
175
  super
176
176
  end
177
177
  end
178
178
 
179
+ def named_scope_class(clazz)
180
+ merge_search_options :named_scope_class, clazz
181
+ end
182
+
179
183
  def named_scope_defined?(name)
180
- self.clazz && self.clazz.respond_to?(:defined_named_search_scopes) && clazz.defined_named_search_scopes.respond_to?(:include?) && clazz.defined_named_search_scopes.include?(name)
184
+ self.search_options[:named_scope_class] && self.search_options[:named_scope_class].respond_to?(:defined_named_search_scopes) && self.search_options[:named_scope_class].defined_named_search_scopes.respond_to?(:include?) && self.search_options[:named_scope_class].defined_named_search_scopes.include?(name)
181
185
  end
182
186
  end
@@ -34,7 +34,7 @@ class Supernova::SolrIndexer
34
34
  end
35
35
 
36
36
  def search_scope
37
- Supernova::SolrCriteria.new(self.clazz).attribute_mapping(self.field_definitions)
37
+ Supernova::SolrCriteria.new(self.clazz).attribute_mapping(self.field_definitions).named_scope_class(self)
38
38
  end
39
39
  end
40
40
 
@@ -169,7 +169,7 @@ describe "Supernova::Criteria" do
169
169
 
170
170
  it "it calls merge with self and returned scope" do
171
171
  clazz = double("clazz")
172
- scope = Supernova::Criteria.new(clazz)
172
+ scope = Supernova::Criteria.new.named_scope_class(clazz)
173
173
  scope.stub(:named_scope_defined?).and_return true
174
174
  rge_scope = double("rgne_scope")
175
175
  scope_ret = double("ret")
@@ -195,6 +195,10 @@ describe "Supernova::Criteria" do
195
195
  end
196
196
  end
197
197
 
198
+ describe "#with_scopes" do
199
+
200
+ end
201
+
198
202
  describe "#merge" do
199
203
  let(:criteria) { Supernova::Criteria.new.order("popularity asc").with(:a => 1).conditions(:b => 2).search("New Search") }
200
204
  let(:new_crit) { Supernova::Criteria.new.order("popularity desc").with(:c => 8).conditions(:e => 9).search("Search") }
@@ -219,6 +223,24 @@ describe "Supernova::Criteria" do
219
223
  new_crit.merge(criteria).search_options[:search].should == ["New Search"]
220
224
  end
221
225
 
226
+ it "correctly merges the named_scope_class" do
227
+ new_crit.named_scope_class(String)
228
+ new_crit.merge(criteria).search_options[:named_scope_class].should == String
229
+ end
230
+
231
+ it "correctly merges the attribute_mapping" do
232
+ mapping = { :title => { :type => :string } }
233
+ new_crit.attribute_mapping(mapping)
234
+ new_crit.merge(criteria).search_options[:attribute_mapping].should == mapping
235
+ end
236
+
237
+ it "uses the base attributes_mapping when " do
238
+ mapping = { :title => { :type => :string }, :artist_name => { :type => :string } }
239
+ other = Supernova::SolrCriteria.new.with(:artist_name => "name")
240
+ Supernova::SolrCriteria.new.attribute_mapping(mapping).with(:title => "test").merge(other).to_params[:fq].should include("artist_name_s:name")
241
+ Supernova::SolrCriteria.new.attribute_mapping(mapping).with(:title => "test").merge(other).to_params[:fq].should include("title_s:test")
242
+ end
243
+
222
244
  it "calls merge on options" do
223
245
  criteria.stub!(:search_options).and_return({ :x => 2, :y => 9 })
224
246
  new_crit.stub!(:search_options).and_return({ :z => 3, :c => 1 })
@@ -293,7 +315,7 @@ describe "Supernova::Criteria" do
293
315
  attr_accessor :defined_named_search_scopes
294
316
  end
295
317
  clazz.defined_named_search_scopes = nil
296
- Supernova::Criteria.new(clazz).should_not be_named_scope_defined(:rgne)
318
+ Supernova::Criteria.new.named_scope_class(clazz).should_not be_named_scope_defined(:rgne)
297
319
  end
298
320
 
299
321
  it "returns false when clazz is responding to defined_search_scopes but not included" do
@@ -302,7 +324,7 @@ describe "Supernova::Criteria" do
302
324
  attr_accessor :defined_named_search_scopes
303
325
  end
304
326
  clazz.defined_named_search_scopes = [:some_other]
305
- Supernova::Criteria.new(clazz).should_not be_named_scope_defined(:rgne)
327
+ Supernova::Criteria.new.named_scope_class(clazz).should_not be_named_scope_defined(:rgne)
306
328
  end
307
329
 
308
330
  it "returns true when clazz is responding to defined_search_scopes and included" do
@@ -311,7 +333,13 @@ describe "Supernova::Criteria" do
311
333
  attr_accessor :defined_named_search_scopes
312
334
  end
313
335
  clazz.defined_named_search_scopes = [:rgne]
314
- Supernova::Criteria.new(clazz).should be_named_scope_defined(:rgne)
336
+ Supernova::Criteria.new.named_scope_class(clazz).should be_named_scope_defined(:rgne)
337
+ end
338
+ end
339
+
340
+ describe "#named_scope_class" do
341
+ it "sets the named_scope_class search_option" do
342
+ Supernova::Criteria.new.named_scope_class(String).search_options[:named_scope_class].should == String
315
343
  end
316
344
  end
317
345
  end
@@ -433,6 +433,19 @@ describe Supernova::SolrIndexer do
433
433
  end
434
434
  indexer_clazz.with_title.to_params[:fq].should include("title_t:[* TO *]")
435
435
  end
436
+
437
+ it "allows chaining of named scopes" do
438
+ indexer_clazz.named_search_scope :with_title do
439
+ where(:title.ne => nil)
440
+ end
441
+
442
+ indexer_clazz.named_search_scope :with_description do
443
+ where(:description.ne => nil)
444
+ end
445
+ fqs = indexer_clazz.with_description.with_title.to_params[:fq]
446
+ fqs.should include("description_t:[* TO *]")
447
+ fqs.should include("title_t:[* TO *]")
448
+ end
436
449
  end
437
450
 
438
451
  describe "#solr_field_for_field_name_and_mapping" do
@@ -58,7 +58,7 @@ describe Supernova do
58
58
 
59
59
  describe "chaining" do
60
60
  it "calls merge with both scopes" do
61
- scope = Supernova::ThinkingSphinxCriteria.new(clazz)
61
+ scope = Supernova::ThinkingSphinxCriteria.new(clazz).named_scope_class(clazz)
62
62
  scope.should_receive(:merge).with(instance_of(Supernova::ThinkingSphinxCriteria))
63
63
  scope.popular
64
64
  end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{supernova}
8
- s.version = "0.3.2"
8
+ s.version = "0.3.3"
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"]
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: 23
4
+ hash: 21
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 2
10
- version: 0.3.2
9
+ - 3
10
+ version: 0.3.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tobias Schwab