supernova 0.6.3 → 0.6.4

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.3
1
+ 0.6.4
@@ -10,26 +10,34 @@ class Supernova::Condition
10
10
  case type
11
11
  when :not, :ne
12
12
  if value.nil?
13
- "#{self.key}:[* TO *]"
13
+ nil_filter
14
14
  else
15
- "!#{self.key}:#{value}"
15
+ "!#{key}:#{value}"
16
16
  end
17
17
  when :gt
18
- "#{self.key}:{#{value} TO *}"
18
+ "#{key}:{#{value} TO *}"
19
19
  when :gte
20
- "#{self.key}:[#{value} TO *]"
20
+ "#{key}:[#{value} TO *]"
21
21
  when :lt
22
- "#{self.key}:{* TO #{value}}"
22
+ "#{key}:{* TO #{value}}"
23
23
  when :lte
24
- "#{self.key}:[* TO #{value}]"
24
+ "#{key}:[* TO #{value}]"
25
25
  when :nin
26
- "!(#{or_key_and_value(key, value)})"
26
+ value.is_a?(Range) ? "#{key}:{* TO #{value.first}} OR #{key}:{#{value.last} TO *}" : "!(#{or_key_and_value(value)})"
27
27
  when :in
28
- or_key_and_value(key, value)
28
+ or_key_and_value(value)
29
29
  end
30
30
  end
31
31
 
32
- def or_key_and_value(key, values)
33
- values.map { |v| "#{key}:#{v}"}.join(" OR ")
32
+ def nil_filter
33
+ "#{key}:[* TO *]"
34
+ end
35
+
36
+ def or_key_and_value(values)
37
+ if values.is_a?(Range)
38
+ "#{key}:[#{values.first} TO #{values.last}]"
39
+ else
40
+ values.map { |v| v.nil? ? "!#{nil_filter}" : "#{key}:#{v}"}.join(" OR ")
41
+ end
34
42
  end
35
43
  end
@@ -16,12 +16,28 @@ describe "Supernova::Condition" do
16
16
  :user_id.ne.solr_filter_for(7).should == "!user_id:7"
17
17
  end
18
18
 
19
+ it "returns the correct filter for in" do
20
+ :user_id.in.solr_filter_for([1, 2, 3]).should == "user_id:1 OR user_id:2 OR user_id:3"
21
+ end
22
+
23
+ it "returns the correct filter for in when ranges are used" do
24
+ :user_id.in.solr_filter_for(Range.new(1, 3)).should == "user_id:[1 TO 3]"
25
+ end
26
+
27
+ it "returns the correct filter for in when nil is in array" do
28
+ :user_id.in.solr_filter_for([1, 2, nil]).should == "user_id:1 OR user_id:2 OR !user_id:[* TO *]"
29
+ end
30
+
19
31
  it "returns the correct filter for nin" do
20
32
  :user_id.nin.solr_filter_for([1, 2, 3]).should == "!(user_id:1 OR user_id:2 OR user_id:3)"
21
33
  end
22
34
 
23
- it "returns the correct filter for nin" do
24
- :user_id.in.solr_filter_for([1, 2, 3]).should == "user_id:1 OR user_id:2 OR user_id:3"
35
+ it "returns the correct filter for nin when ranges are used" do
36
+ :user_id.nin.solr_filter_for(Range.new(1, 3)).should == "user_id:{* TO 1} OR user_id:{3 TO *}"
37
+ end
38
+
39
+ it "returns the correct filter for nin when nil is in array" do
40
+ :user_id.nin.solr_filter_for([1, 2, nil]).should == "!(user_id:1 OR user_id:2 OR !user_id:[* TO *])"
25
41
  end
26
42
 
27
43
  it "returns the correct filter for not nil" do
data/supernova.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{supernova}
8
- s.version = "0.6.3"
8
+ s.version = "0.6.4"
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: 1
4
+ hash: 15
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 6
9
- - 3
10
- version: 0.6.3
9
+ - 4
10
+ version: 0.6.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tobias Schwab