ransack 3.0.1 → 3.1.0

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
  SHA256:
3
- metadata.gz: 2599d5bd405561f9dd3c9b1b585baef6132a23653ebaf079f65aa7a326b20998
4
- data.tar.gz: '0899eeb3faebe29e31c6ec2ec248d1b106f6fdb5175532fdb55b82abce928d19'
3
+ metadata.gz: 9db4893295fd342185cf668f2b3edbc59f1e649945024147778bdc52978e53fa
4
+ data.tar.gz: 9f57ba51a61d63f1f4023735d8a2ef9384e7840461af65169f4c0214f4b619a8
5
5
  SHA512:
6
- metadata.gz: 0cd85c2c70494e50e4ce67351a3abb7822424372fbe5e3062415b7c3471094883f955cf6c6c57f1f783442b68d18593c0d8a220e4f1f1e68c9e1e48d80b2d9be
7
- data.tar.gz: 24c878aceb15a2a914f4c99743df78af82aef65fda072301678bde8307ed0dfafc5506366929babf19524a221d2a57d191d7d3e4ebb2bf73760f5b4b6928d082
6
+ metadata.gz: 625d61491c96bd319e95d65d0d704f3906b8087e21f8fd2f8f2d1515ac4debdd3e39b678bbea8f0d39d6a5e58d5b46ba66919cb8b4770c8bb7fc4a77421c743e
7
+ data.tar.gz: cec0aa2875df4b9b8d5e8ae222fba9970ec0aaaf66de05ae21110a981828704a294f8f16fb55037ea0db39429611d7ea0e5f5d4ff51dbcd01cd66fca171b4ecf
@@ -11,17 +11,13 @@ jobs:
11
11
  fail-fast: false
12
12
  matrix:
13
13
  rails:
14
- - v7.0.0
15
- - v6.1.4
14
+ - v7.0.2
15
+ - v6.1.5
16
16
  - v6.0.4
17
- - 6-0-stable
18
17
  ruby:
18
+ - 3.1.1
19
19
  - 3.0.2
20
20
  - 2.7.4
21
- - 2.6.7
22
- exclude:
23
- - rails: v7.0.0
24
- ruby: 2.6.7
25
21
  env:
26
22
  DB: sqlite3
27
23
  RAILS: ${{ matrix.rails }}
@@ -42,17 +38,13 @@ jobs:
42
38
  fail-fast: false
43
39
  matrix:
44
40
  rails:
45
- - v7.0.0
46
- - v6.1.4
41
+ - v7.0.2
42
+ - v6.1.5
47
43
  - v6.0.4
48
- - 6-0-stable
49
44
  ruby:
45
+ - 3.1.1
50
46
  - 3.0.2
51
47
  - 2.7.4
52
- - 2.6.7
53
- exclude:
54
- - rails: v7.0.0
55
- ruby: 2.6.7
56
48
  env:
57
49
  DB: mysql
58
50
  RAILS: ${{ matrix.rails }}
@@ -82,17 +74,13 @@ jobs:
82
74
  fail-fast: false
83
75
  matrix:
84
76
  rails:
85
- - v7.0.0
86
- - v6.1.4
77
+ - v7.0.2
78
+ - v6.1.5
87
79
  - v6.0.4
88
- - 6-0-stable
89
80
  ruby:
81
+ - 3.1.1
90
82
  - 3.0.2
91
83
  - 2.7.4
92
- - 2.6.7
93
- exclude:
94
- - rails: v7.0.0
95
- ruby: 2.6.7
96
84
  env:
97
85
  DB: postgres
98
86
  RAILS: ${{ matrix.rails }}
@@ -135,7 +123,7 @@ jobs:
135
123
  - name: Set up Ruby
136
124
  uses: ruby/setup-ruby@v1
137
125
  with:
138
- ruby-version: 3.0.2
126
+ ruby-version: 3.1.1
139
127
  - name: Install dependencies
140
128
  run: bundle install
141
129
  - name: Run bug report templates
data/CHANGELOG.md CHANGED
@@ -2,6 +2,27 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 3.1.0 - 2022-04-21
6
+
7
+ * Fix predicate name in "Using Predicates" documentation page.
8
+ PR [1313](https://github.com/activerecord-hackery/ransack/pull/1313)
9
+
10
+ * Drop Ruby 2.6 support.
11
+ PR [1311](https://github.com/activerecord-hackery/ransack/pull/1311)
12
+
13
+ * Allow Ransack to be used with Rails 7.1.0.alpha.
14
+ PR [1309](https://github.com/activerecord-hackery/ransack/pull/1309)
15
+
16
+ * Put contributor list last in documentation site.
17
+ PR [1308](https://github.com/activerecord-hackery/ransack/pull/1308)
18
+
19
+ * Add `acts-as-taggable-on` and polymorphic searches to documentation.
20
+ PR [1306](https://github.com/activerecord-hackery/ransack/pull/1306)
21
+ PR [1312](https://github.com/activerecord-hackery/ransack/pull/1312)
22
+
23
+ * Add full link to issue about merging searches to documentation.
24
+ PR [1305](https://github.com/activerecord-hackery/ransack/pull/1305)
25
+
5
26
  ## 3.0.1 - 2022-04-08
6
27
 
7
28
  * Fix `:data` option to `sort_link` being incorrectly appended to the generated
@@ -23,7 +23,7 @@ You can also combine predicates for OR queries:
23
23
  The syntax for `OR` queries on an associated model is not immediately obvious, but makes sense. Assuming a `User` `has_one` `Account` and the `Account` has `attributes` `foo` and `bar`:
24
24
 
25
25
  ```ruby
26
- >> User.ransack(account_foo_or_account_bar: 'val').result.to_sql
26
+ >> User.ransack(account_foo_or_account_bar_cont: 'val').result.to_sql
27
27
  => SELECT "users".* FROM "users" INNER JOIN accounts ON accounts.user_id = users.id WHERE ("accounts.foo LIKE '%val%' OR accounts.bar LIKE '%val%')
28
28
  ```
29
29
 
@@ -0,0 +1,114 @@
1
+ ---
2
+ title: Acts-as-taggable-on
3
+ sidebar_position: 13
4
+ ---
5
+
6
+ ## Using Acts As Taggable On
7
+
8
+ If you have an `ActiveRecord` model and you're using [acts-as-taggable-on](https://github.com/mbleigh/acts-as-taggable-on),
9
+ chances are you might want to search on tagged fields. Follow the instructions to install the gem and then set up your project files.
10
+
11
+ ### Configure the model
12
+
13
+ `app/models/tasks.rb`
14
+
15
+ You can call the tagging field anything you like, it just needs to be plural. No migration is needed as this is stored in the internal ActsAsTaggable tables (`tags` and `taggings`).
16
+
17
+ ```rb
18
+ class Task < ApplicationRecord
19
+ acts_as_taggable_on :projects
20
+ end
21
+ ```
22
+
23
+ ### Controller
24
+
25
+ Add a field to strong params in the controller. Use the singular name with `_list`.
26
+
27
+ `app/controllers/tasks_controller.rb`
28
+
29
+ ```rb
30
+ def strong_params
31
+ params
32
+ .require(:tasks)
33
+ .permit(:task, :example_field, :project_list)
34
+ ```
35
+
36
+ ### Form
37
+
38
+ We need to `send` the tag fieldname to our model, also using the singular naming.
39
+
40
+ ```
41
+ <div class='form-group'>
42
+ <%= f.label :project_list %>
43
+ <%= f.text_field :project_list, value: @task.send(:project_list).to_s %>
44
+ </div>
45
+ ```
46
+
47
+ Now we can collect our data via the form, with tags separated by commas.
48
+
49
+ ## Ransack Search
50
+
51
+ Imagine you have the following two instances of `Task`:
52
+
53
+ ```rb
54
+ { id: 1, name: 'Clean up my room', projects: [ 'Home', 'Personal' ] }
55
+ { id: 2, name: 'Complete math exercises', projects: [ 'Homework', 'Study' ] }
56
+ ```
57
+
58
+ When you're writing a `Ransack` search form, you can choose any of the following options:
59
+
60
+ ```erb
61
+ <%= search_form_for @search do |f| %>
62
+ <%= f.text_field :projects_name_in %> <!-- option a -->
63
+ <%= f.text_field :projects_name_eq %> <!-- option b -->
64
+ <%= f.text_field :projects_name_cont %> <!-- option c -->
65
+ <% end %>
66
+ ```
67
+
68
+ ### Option A - Match keys exactly
69
+
70
+ Option `a` will match keys exactly. This is the solution to choose if you want to distinguish 'Home' from 'Homework': searching for 'Home' will return just the `Task` with id 1. It also allows searching for more than one tag at once (comma separated):
71
+ - `Home, Personal` will return task 1
72
+ - `Home, Homework` will return task 1 and 2
73
+
74
+ ### Option B - match key combinations
75
+
76
+ Option `b` will match all keys exactly. This is the solution if you wanna search for specific combinations of tags:
77
+ - `Home` will return nothing, as there is no Task with just the `Home` tag
78
+ - `Home, Personal` will return task 1
79
+
80
+ ### Option C - match substrings
81
+
82
+ Option `c` is used to match substrings. This is useful when you don't care for the exact tag, but only for part of it:
83
+ - `Home` will return task 1 and 2 (`/Home/` matches both `"Home"` and `"Homework"`)
84
+
85
+ ### Option D - select from a list of tags
86
+
87
+ In Option D we allow the user to select a list of valid tags and then search againt them. We use the plural name here.
88
+
89
+ ```erb
90
+ <div class='form-group'>
91
+ <%= f.label :projects_name, 'Project' %>
92
+ <%= f.select :projects_name_in, ActsAsTaggableOn::Tag.distinct.order(:name).pluck(:name) %>
93
+ </div>
94
+ ```
95
+
96
+ ## Multitenancy
97
+
98
+ ActsAsTaggableOn allows scoping of tags based on another field on the model. Suppose we have a `language` field on the model, as an effective second level key. We would adjust our model to look like this:
99
+
100
+ ```rb
101
+ class Task < ApplicationRecord
102
+ acts_as_taggable_on :projects
103
+ acts_as_taggable_tenant :language
104
+ end
105
+ ```
106
+
107
+ The Ransack search is then filtered using the `for_tenant` method
108
+
109
+ ```
110
+ <div class='form-group'>
111
+ <%= f.label :projects_name, 'Project' %>
112
+ <%= f.select :projects_name_in, ActsAsTaggableOn::Tag.for_tenant('fr').distinct.order(:name).pluck(:name) %>
113
+ </div>
114
+
@@ -38,4 +38,4 @@ WHERE (
38
38
  ORDER BY "people"."id" DESC
39
39
  ```
40
40
 
41
- Admittedly this is not as simple as it should be, but it's workable for now. (Implementing #417 could make this more straightforward.)
41
+ Admittedly this is not as simple as it should be, but it's workable for now. (Implementing [issue 417](https://github.com/activerecord-hackery/ransack/issues/417) could make this more straightforward.)
@@ -0,0 +1,40 @@
1
+ ---
2
+ title: Polymorphic Searches
3
+ sidebar_position: 14
4
+ ---
5
+
6
+ When making searches from polymorphic models it is necessary to specify the type of model you are searching.
7
+
8
+ For example:
9
+
10
+ Given two models
11
+
12
+ ```ruby
13
+ class House < ActiveRecord::Base
14
+ has_one :location, as: :locatable
15
+ end
16
+
17
+ class Location < ActiveRecord::Base
18
+ belongs_to :locatable, polymorphic: true
19
+ end
20
+ ```
21
+
22
+ Normally (without polymorphic relationship) you would be able to search as per below:
23
+
24
+ ```ruby
25
+ Location.ransack(locatable_number_eq: 100).result
26
+ ```
27
+
28
+ However when this is searched you will get the following error
29
+
30
+ ```ruby
31
+ ActiveRecord::EagerLoadPolymorphicError: Can not eagerly load the polymorphic association :locatable
32
+ ```
33
+
34
+ In order to search for locations by house number when the relationship is polymorphic you have to specify the type of records you will be searching and construct your search as below:
35
+
36
+ ```ruby
37
+ Location.ransack(locatable_of_House_type_number_eq: 100).result
38
+ ```
39
+
40
+ note the `_of_House_type_` added to the search key. This allows Ransack to correctly specify the table names in SQL join queries.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  title: Wiki Contributors
3
- sidebar_position: 12
3
+ sidebar_position: 20
4
4
  ---
5
5
 
6
6
  Ransack previously had documentation contained in a GitHub Wiki, and this content has been merged into this documentation website. The following long list of _amazing_ people all made contributions to the Wiki:
@@ -0,0 +1 @@
1
+ require 'polyamorous/activerecord_6.1_ruby_2/join_association'
@@ -0,0 +1 @@
1
+ require 'polyamorous/activerecord_6.1_ruby_2/join_dependency'
@@ -0,0 +1 @@
1
+ require 'polyamorous/activerecord_6.1_ruby_2/reflection'
@@ -1,3 +1,3 @@
1
1
  module Ransack
2
- VERSION = '3.0.1'
2
+ VERSION = '3.1.0'
3
3
  end
data/ransack.gemspec CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
12
12
  s.homepage = "https://github.com/activerecord-hackery/ransack"
13
13
  s.summary = %q{Object-based searching for Active Record.}
14
14
  s.description = %q{Ransack is the successor to the MetaSearch gem. It improves and expands upon MetaSearch's functionality, but does not have a 100%-compatible API.}
15
- s.required_ruby_version = '>= 2.6'
15
+ s.required_ruby_version = '>= 2.7'
16
16
  s.license = 'MIT'
17
17
 
18
18
  s.add_dependency 'activerecord', '>= 6.0.4'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ransack
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ernie Miller
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2022-04-07 00:00:00.000000000 Z
15
+ date: 2022-04-21 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: activerecord
@@ -97,6 +97,7 @@ files:
97
97
  - docs/docs/getting-started/sorting.md
98
98
  - docs/docs/getting-started/using-predicates.md
99
99
  - docs/docs/going-further/_category_.json
100
+ - docs/docs/going-further/acts-as-taggable-on.md
100
101
  - docs/docs/going-further/associations.md
101
102
  - docs/docs/going-further/custom-predicates.md
102
103
  - docs/docs/going-further/documentation.md
@@ -107,6 +108,7 @@ files:
107
108
  - docs/docs/going-further/img/create_release.png
108
109
  - docs/docs/going-further/merging-searches.md
109
110
  - docs/docs/going-further/other-notes.md
111
+ - docs/docs/going-further/polymorphic-search.md
110
112
  - docs/docs/going-further/ransackers.md
111
113
  - docs/docs/going-further/release_process.md
112
114
  - docs/docs/going-further/saving-queries.md
@@ -147,6 +149,9 @@ files:
147
149
  - lib/polyamorous/activerecord_7.0_ruby_2/join_association.rb
148
150
  - lib/polyamorous/activerecord_7.0_ruby_2/join_dependency.rb
149
151
  - lib/polyamorous/activerecord_7.0_ruby_2/reflection.rb
152
+ - lib/polyamorous/activerecord_7.1_ruby_2/join_association.rb
153
+ - lib/polyamorous/activerecord_7.1_ruby_2/join_dependency.rb
154
+ - lib/polyamorous/activerecord_7.1_ruby_2/reflection.rb
150
155
  - lib/polyamorous/join.rb
151
156
  - lib/polyamorous/polyamorous.rb
152
157
  - lib/polyamorous/swapping_reflection_class.rb
@@ -246,14 +251,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
246
251
  requirements:
247
252
  - - ">="
248
253
  - !ruby/object:Gem::Version
249
- version: '2.6'
254
+ version: '2.7'
250
255
  required_rubygems_version: !ruby/object:Gem::Requirement
251
256
  requirements:
252
257
  - - ">="
253
258
  - !ruby/object:Gem::Version
254
259
  version: '0'
255
260
  requirements: []
256
- rubygems_version: 3.3.11
261
+ rubygems_version: 3.3.10
257
262
  signing_key:
258
263
  specification_version: 4
259
264
  summary: Object-based searching for Active Record.