searchlogic 2.1.9 → 2.1.10

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,7 @@
1
+ == 2.1.10 released 2009-07-28
2
+
3
+ * Ignore polymorphic associations when dynamically creating conditions on associations.
4
+
1
5
  == 2.1.9 released 2009-07-28
2
6
 
3
7
  * Fixed bug when cloning with no scope
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
- :patch: 9
2
+ :patch: 10
3
3
  :major: 2
4
4
  :minor: 1
@@ -49,11 +49,10 @@ module Searchlogic
49
49
  end
50
50
 
51
51
  def association_condition_details(name)
52
- regexes = [/^(#{reflect_on_all_associations.collect(&:name).join("|")})_(\w+)_(#{Conditions::PRIMARY_CONDITIONS.join("|")})$/]
53
- reflect_on_all_associations.each do |assoc|
54
- regexes << /^(#{assoc.name})_(#{assoc.klass.scopes.keys.join("|")})$/
55
- end
56
-
52
+ assocs = non_polymorphic_associations
53
+ return nil if assocs.empty?
54
+ regexes = [association_searchlogic_regex(assocs, Conditions::PRIMARY_CONDITIONS)]
55
+ assocs.each { |assoc| regexes << /^(#{assoc.name})_(#{assoc.klass.scopes.keys.join("|")})$/ }
57
56
 
58
57
  if !local_condition?(name) && regexes.any? { |regex| name.to_s =~ regex }
59
58
  {:association => $1, :column => $2, :condition => $3}
@@ -67,12 +66,19 @@ module Searchlogic
67
66
  end
68
67
 
69
68
  def association_alias_condition_details(name)
70
- associations = reflect_on_all_associations.collect { |assoc| assoc.name }
71
- if !local_condition?(name) && name.to_s =~ /^(#{associations.join("|")})_(\w+)_(#{Conditions::ALIAS_CONDITIONS.join("|")})$/
69
+ if !local_condition?(name) && name.to_s =~ association_searchlogic_regex(non_polymorphic_associations, Conditions::ALIAS_CONDITIONS)
72
70
  {:association => $1, :column => $2, :condition => $3}
73
71
  end
74
72
  end
75
73
 
74
+ def non_polymorphic_associations
75
+ reflect_on_all_associations.reject { |assoc| assoc.options[:polymorphic] }
76
+ end
77
+
78
+ def association_searchlogic_regex(assocs, condition_names)
79
+ /^(#{assocs.collect(&:name).join("|")})_(\w+)_(#{condition_names.join("|")})$/
80
+ end
81
+
76
82
  def create_association_alias_condition(association, column, condition, args)
77
83
  primary_condition = primary_condition(condition)
78
84
  alias_name = "#{association}_#{column}_#{condition}"
data/searchlogic.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{searchlogic}
5
- s.version = "2.1.9"
5
+ s.version = "2.1.10"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Ben Johnson of Binary Logic"]
@@ -13,6 +13,10 @@ describe "Association Conditions" do
13
13
  Company.users_uname("bjohnson").proxy_options.should == User.uname("bjohnson").proxy_options.merge(:joins => :users)
14
14
  end
15
15
 
16
+ it "should ignore polymorphic associations" do
17
+ lambda { Fee.owner_created_at_gt(Time.now) }.should raise_error(NoMethodError)
18
+ end
19
+
16
20
  it "should not allow named scopes on non existent association columns" do
17
21
  lambda { User.users_whatever_like("bjohnson") }.should raise_error(NoMethodError)
18
22
  end
data/spec/spec_helper.rb CHANGED
@@ -27,6 +27,12 @@ ActiveRecord::Schema.define(:version => 1) do
27
27
  t.integer :age
28
28
  end
29
29
 
30
+ create_table :carts do |t|
31
+ t.datetime :created_at
32
+ t.datetime :updated_at
33
+ t.integer :user_id
34
+ end
35
+
30
36
  create_table :orders do |t|
31
37
  t.datetime :created_at
32
38
  t.datetime :updated_at
@@ -36,6 +42,14 @@ ActiveRecord::Schema.define(:version => 1) do
36
42
  t.float :total
37
43
  end
38
44
 
45
+ create_table :fees do |t|
46
+ t.datetime :created_at
47
+ t.datetime :updated_at
48
+ t.string :owner_type
49
+ t.integer :owner_id
50
+ t.float :cost
51
+ end
52
+
39
53
  create_table :line_items do |t|
40
54
  t.datetime :created_at
41
55
  t.datetime :updated_at
@@ -66,6 +80,10 @@ Spec::Runner.configure do |config|
66
80
  has_many :line_items, :dependent => :destroy
67
81
  end
68
82
 
83
+ class Fee < ActiveRecord::Base
84
+ belongs_to :owner, :polymorphic => true
85
+ end
86
+
69
87
  class LineItem < ActiveRecord::Base
70
88
  belongs_to :order
71
89
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: searchlogic
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.9
4
+ version: 2.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Johnson of Binary Logic