scoped_search 4.1.0 → 4.1.1
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed2cb536ff3e9eb2ae79adb69c0d16deded93503
|
4
|
+
data.tar.gz: d71fcf06f4526cca6f0f74c674b700c63cc53710
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 574ce08bfd3a7e6910c52b814c5c0b977e6de7675a80dc53b971915e2fe4619a9e82453dcdafa547d66ff9a6464737a0b26e935ebd4f2f78121ff0061a5096b2
|
7
|
+
data.tar.gz: 0adcf62f38857c13dd4e49c835b4cfe33821ddf273f5e190ccd557b279ca49512d35700a05549ca9b8eb2c332e73c0ae501daa7fbbccb10da4b5b8720f30429a
|
data/CHANGELOG.rdoc
CHANGED
@@ -8,6 +8,11 @@ Please add an entry to the "Unreleased changes" section in your pull requests.
|
|
8
8
|
|
9
9
|
*Nothing yet*
|
10
10
|
|
11
|
+
=== Version 4.1.1
|
12
|
+
|
13
|
+
- Bugfix related to quoting when building autocomplete queries for date fields (#167)
|
14
|
+
- Bugfix related to using polymorphic relations (#168)
|
15
|
+
|
11
16
|
=== Version 4.1.0
|
12
17
|
|
13
18
|
- Add support for ActiveRecord and ActionView 5.1
|
@@ -262,6 +262,7 @@ module ScopedSearch
|
|
262
262
|
def has_many_through_join(field)
|
263
263
|
many_class = field.definition.klass
|
264
264
|
through = definition.reflection_by_name(many_class, field.relation).options[:through]
|
265
|
+
|
265
266
|
connection = many_class.connection
|
266
267
|
|
267
268
|
# table names
|
@@ -269,9 +270,10 @@ module ScopedSearch
|
|
269
270
|
many_table_name = many_class.table_name
|
270
271
|
middle_table_name = definition.reflection_by_name(many_class, through).klass.table_name
|
271
272
|
|
272
|
-
# primary and foreign keys + optional
|
273
|
+
# primary and foreign keys + optional conditions for the joins
|
273
274
|
pk1, fk1 = field.reflection_keys(definition.reflection_by_name(many_class, through))
|
274
|
-
|
275
|
+
condition_many_to_middle = field.reflection_conditions(definition.reflection_by_name(field.klass, many_table_name))
|
276
|
+
condition_middle_to_end = field.reflection_conditions(definition.reflection_by_name(field.klass, middle_table_name))
|
275
277
|
|
276
278
|
# primary and foreign keys + optional condition for the endpoint to middle join
|
277
279
|
middle_table_association = find_has_many_through_association(field, through) || middle_table_name
|
@@ -281,7 +283,7 @@ module ScopedSearch
|
|
281
283
|
<<-SQL
|
282
284
|
#{connection.quote_table_name(many_table_name)}
|
283
285
|
INNER JOIN #{connection.quote_table_name(middle_table_name)}
|
284
|
-
ON #{connection.quote_table_name(many_table_name)}.#{connection.quote_column_name(pk1)} = #{connection.quote_table_name(middle_table_name)}.#{connection.quote_column_name(fk1)} #{
|
286
|
+
ON #{connection.quote_table_name(many_table_name)}.#{connection.quote_column_name(pk1)} = #{connection.quote_table_name(middle_table_name)}.#{connection.quote_column_name(fk1)} #{condition_many_to_middle} #{condition_middle_to_end}
|
285
287
|
INNER JOIN #{connection.quote_table_name(endpoint_table_name)}
|
286
288
|
ON #{connection.quote_table_name(middle_table_name)}.#{connection.quote_column_name(fk2)} = #{connection.quote_table_name(endpoint_table_name)}.#{connection.quote_column_name(pk2)} #{condition2}
|
287
289
|
SQL
|
@@ -479,11 +479,11 @@ ScopedSearch::RSpec::Database.test_databases.each do |db|
|
|
479
479
|
ActiveRecord::Migration.create_table(:user_groups) { |t| t.integer :user_id; t.integer :group_id }
|
480
480
|
ActiveRecord::Migration.create_table(:conflicts) { |t| t.integer :group_id; t.integer :user_id }
|
481
481
|
ActiveRecord::Migration.create_table(:groups) { |t| t.string :related; t.integer :user_id }
|
482
|
-
ActiveRecord::Migration.create_table(:users) { |t| t.string :foo }
|
482
|
+
ActiveRecord::Migration.create_table(:users) { |t| t.string :foo; t.string :user_type }
|
483
483
|
|
484
484
|
# The related classes
|
485
485
|
class UserGroup < ActiveRecord::Base; belongs_to :user; belongs_to :group; end
|
486
|
-
class Conflict < ActiveRecord::Base; belongs_to :user; belongs_to :group; end
|
486
|
+
class Conflict < ActiveRecord::Base; belongs_to :user, :polymorphic => true; belongs_to :group; end
|
487
487
|
class Group < ActiveRecord::Base
|
488
488
|
has_many :user_groups
|
489
489
|
has_many :users, :through => :conflicts, :source_type => 'User', :source => :user
|
@@ -497,9 +497,9 @@ ScopedSearch::RSpec::Database.test_databases.each do |db|
|
|
497
497
|
scoped_search :relation => :groups, :on => :related
|
498
498
|
end
|
499
499
|
|
500
|
-
@user_1 = User.create!(:foo => 'foo')
|
501
|
-
@user_2 = User.create!(:foo => 'foo too')
|
502
|
-
@user_3 = User.create!(:foo => 'foo three')
|
500
|
+
@user_1 = User.create!(:foo => 'foo', :user_type => 'User')
|
501
|
+
@user_2 = User.create!(:foo => 'foo too', :user_type => 'User')
|
502
|
+
@user_3 = User.create!(:foo => 'foo three', :user_type => 'User')
|
503
503
|
|
504
504
|
@group_1 = Group.create(:related => 'value')
|
505
505
|
@group_2 = Group.create(:related => 'value too!')
|
@@ -524,7 +524,6 @@ ScopedSearch::RSpec::Database.test_databases.each do |db|
|
|
524
524
|
end
|
525
525
|
end
|
526
526
|
|
527
|
-
|
528
527
|
context 'querying a :has_many => :through relation with modules' do
|
529
528
|
|
530
529
|
before do
|
@@ -578,5 +577,63 @@ ScopedSearch::RSpec::Database.test_databases.each do |db|
|
|
578
577
|
Zan::Koo.search_for('related=baz AND related="baz too!"').length.should == 1
|
579
578
|
end
|
580
579
|
end
|
580
|
+
|
581
|
+
context 'querying a :has_many => :through with polymorphism' do
|
582
|
+
before do
|
583
|
+
ActiveRecord::Migration.create_table(:subnets) { |t| t.string :name }
|
584
|
+
ActiveRecord::Migration.create_table(:taxable_taxonomies) { |t| t.integer :taxable_id; t.integer :taxonomy_id; t.string :taxable_type }
|
585
|
+
ActiveRecord::Migration.create_table(:taxonomies) { |t| t.string :type; t.string :name }
|
586
|
+
|
587
|
+
class Subnet < ActiveRecord::Base
|
588
|
+
has_many :taxable_taxonomies, :as => :taxable
|
589
|
+
has_many :locations, -> { where(:type => 'Location') }, :through => :taxable_taxonomies, :source => :taxonomy
|
590
|
+
has_many :organizations, -> { where(:type => 'Organization') }, :through => :taxable_taxonomies, :source => :taxonomy
|
591
|
+
|
592
|
+
scoped_search :relation => :locations, :on => :id, :rename => :location_id
|
593
|
+
scoped_search :relation => :organizations, :on => :id, :rename => :organization_id
|
594
|
+
end
|
595
|
+
|
596
|
+
class TaxableTaxonomy < ActiveRecord::Base
|
597
|
+
belongs_to :taxonomy
|
598
|
+
belongs_to :taxable, :polymorphic => true
|
599
|
+
end
|
600
|
+
|
601
|
+
class Taxonomy < ActiveRecord::Base
|
602
|
+
has_many :taxable_taxonomies
|
603
|
+
has_many :subnets, :through => :taxable_taxonomies, :source => :taxable, :source_type => 'Subnet'
|
604
|
+
end
|
605
|
+
|
606
|
+
class Organization < Taxonomy; end
|
607
|
+
class Location < Taxonomy; end
|
608
|
+
|
609
|
+
@loc_a = Location.create!(:name => 'Location A')
|
610
|
+
@loc_b = Location.create!(:name => 'Location B')
|
611
|
+
@org_a = Organization.create!(:name => 'Organization A')
|
612
|
+
@org_b = Organization.create!(:name => 'Organization B')
|
613
|
+
|
614
|
+
@subnet_a = Subnet.create!(:name => 'Subnet A')
|
615
|
+
@subnet_b = Subnet.create!(:name => 'Subnet B')
|
616
|
+
|
617
|
+
|
618
|
+
TaxableTaxonomy.create!(:taxable_id => @subnet_a.id, :taxonomy_id => @loc_a.id, :taxable_type => 'Subnet')
|
619
|
+
TaxableTaxonomy.create!(:taxable_id => @subnet_b.id, :taxonomy_id => @loc_b.id, :taxable_type => 'Subnet')
|
620
|
+
TaxableTaxonomy.create!(:taxable_id => @subnet_a.id, :taxonomy_id => @org_a.id, :taxable_type => 'Subnet')
|
621
|
+
TaxableTaxonomy.create!(:taxable_id => @subnet_b.id, :taxonomy_id => @loc_b.id, :taxable_type => 'Subnet')
|
622
|
+
end
|
623
|
+
|
624
|
+
after do
|
625
|
+
ActiveRecord::Migration.drop_table :subnets
|
626
|
+
ActiveRecord::Migration.drop_table :taxable_taxonomies
|
627
|
+
ActiveRecord::Migration.drop_table :taxonomies
|
628
|
+
end
|
629
|
+
|
630
|
+
it "should find the records based on location id" do
|
631
|
+
Subnet.search_for("location_id = #{@loc_a.id}").length.should == 1
|
632
|
+
end
|
633
|
+
|
634
|
+
it "should find the records based on organization id" do
|
635
|
+
Subnet.search_for("organization_id = #{@org_a.id}").length.should == 1
|
636
|
+
end
|
637
|
+
end
|
581
638
|
end
|
582
639
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scoped_search
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.1.
|
4
|
+
version: 4.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Amos Benari
|
@@ -10,48 +10,48 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-
|
13
|
+
date: 2017-09-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: 4.2.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
|
-
- -
|
26
|
+
- - '>='
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
version: 4.2.0
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: rspec
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
|
-
- -
|
33
|
+
- - ~>
|
34
34
|
- !ruby/object:Gem::Version
|
35
35
|
version: '3.0'
|
36
36
|
type: :development
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
|
-
- -
|
40
|
+
- - ~>
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: '3.0'
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
44
|
name: rake
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
|
-
- -
|
47
|
+
- - '>='
|
48
48
|
- !ruby/object:Gem::Version
|
49
49
|
version: '0'
|
50
50
|
type: :development
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
53
53
|
requirements:
|
54
|
-
- -
|
54
|
+
- - '>='
|
55
55
|
- !ruby/object:Gem::Version
|
56
56
|
version: '0'
|
57
57
|
description: |2
|
@@ -77,8 +77,8 @@ extra_rdoc_files:
|
|
77
77
|
- CONTRIBUTING.rdoc
|
78
78
|
- LICENSE
|
79
79
|
files:
|
80
|
-
-
|
81
|
-
-
|
80
|
+
- .gitignore
|
81
|
+
- .travis.yml
|
82
82
|
- CHANGELOG.rdoc
|
83
83
|
- CONTRIBUTING.rdoc
|
84
84
|
- Gemfile
|
@@ -137,27 +137,27 @@ licenses:
|
|
137
137
|
metadata: {}
|
138
138
|
post_install_message:
|
139
139
|
rdoc_options:
|
140
|
-
-
|
140
|
+
- --title
|
141
141
|
- scoped_search
|
142
|
-
-
|
142
|
+
- --main
|
143
143
|
- README.rdoc
|
144
|
-
-
|
145
|
-
-
|
144
|
+
- --line-numbers
|
145
|
+
- --inline-source
|
146
146
|
require_paths:
|
147
147
|
- lib
|
148
148
|
required_ruby_version: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
|
-
- -
|
150
|
+
- - '>='
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: 2.0.0
|
153
153
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
154
|
requirements:
|
155
|
-
- -
|
155
|
+
- - '>='
|
156
156
|
- !ruby/object:Gem::Version
|
157
157
|
version: '0'
|
158
158
|
requirements: []
|
159
159
|
rubyforge_project:
|
160
|
-
rubygems_version: 2.
|
160
|
+
rubygems_version: 2.0.14.1
|
161
161
|
signing_key:
|
162
162
|
specification_version: 4
|
163
163
|
summary: Easily search you ActiveRecord models with a simple query language using
|