ancestry 3.2.1 → 4.0.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: 2f1ae94346d7ad0aa07830437239dc7f13dda73408c61a118e60f53ef21e6282
4
- data.tar.gz: 1eb3e39a50b257dddc13559d52b03955c8174682f990a723614ca9e2e3dc6945
3
+ metadata.gz: d7d01ac0d4c8faa7ad66a0a8e5454625d723fc9226a7e0eb84b358fd25003148
4
+ data.tar.gz: e27cf882086e2c674972251bf35a52eca003d601dcf5d9ba390c1785f8900033
5
5
  SHA512:
6
- metadata.gz: 87a3c689530416fd20fa4064bb7c610e8e9e3b013324776e5a7c96ad7cb0a8f1a136dfbe71ada9e53b5116ef41602dab7d2d7664e2fc047e8a31f7a6598e2238
7
- data.tar.gz: f420ad732aca06c42116a97db60898db8712163aae660d13b8f0d32b806eaa6e81edac4ba2eb167986456995859cfd52da829abbbdf7d3377177b9f9049b73d5
6
+ metadata.gz: b2b1a7a69fa27d6f40f1c39a700c5926d3fa1b5da4637800b87d1ad274458cb0ca39a497d505f2b6224031914a484349cef8c433b191ba131e1396431fce767d
7
+ data.tar.gz: 9fd95019be895afcc8eeee14be8a7776a90a29ded86d25a3cb82a92097cfa7a141f8a765a062e4ac6f5665e6bf7656d8e9fbde030329b713f286f9d96fa179b7
data/CHANGELOG.md CHANGED
@@ -3,15 +3,22 @@
3
3
  Doing our best at supporting [SemVer](http://semver.org/) with
4
4
  a nice looking [Changelog](http://keepachangelog.com).
5
5
 
6
- ## Version [HEAD] <small>now</small>
6
+ ## Version [HEAD] <sub><sup>now</sub></sup>
7
7
 
8
- * dropped support for rails 4.2 and 5.0
8
+ ## Version [4.0.0] <sub><sup>2021-04-12</sub></sup>
9
9
 
10
- ## Versions [3.2.1] <small>2020-09-23</small>
10
+ * dropped support for rails 4.2 and 5.0 (thx @d-m-u)
11
+ * better documentation counter cache option (thx @pustomytnyk)
12
+ * clean up code (thx @amatsuda @d-m-u)
13
+ * fixed rails 6.1 support (thx @cmr119 @d-staehler @danini-the-panini )
14
+ * phasing out `parent_id?`, `ancestors?` and using `has_parent?` instead
15
+ * fixed postgres order bug on rails 6.2 and higher (thx @smoyt)
16
+
17
+ ## Version [3.2.1] <sub><sup>2020-09-23</sub></sup>
11
18
 
12
19
  * fixed gemspec to include locales and pg (thx @HectorMF)
13
20
 
14
- ## Versions [3.2.0] <small>2020-09-23</small>
21
+ ## Version [3.2.0] <sub><sup>2020-09-23</sub></sup>
15
22
 
16
23
  * introduce i18n
17
24
  * pg sql optimization for ancestry changes (thx @suonlight and @geis)
@@ -20,7 +27,7 @@ a nice looking [Changelog](http://keepachangelog.com).
20
27
  * able to convert to ancestry from a parent_id column with a different name
21
28
  * documentation fixes for better diagrams and grammar (thx @dtamais, @d-m-u, and @CamilleDrapier)
22
29
 
23
- ## Versions [3.1.0] <small>2020-08-03</small>
30
+ ## Version [3.1.0] <sub><sup>2020-08-03</sub></sup>
24
31
 
25
32
  * `:primary_key_format` method lets you change syntax. good for uuids.
26
33
  * changed code from being `ancestry` string to `ancestry_ids` focused. May break monkey patches.
@@ -29,16 +36,16 @@ a nice looking [Changelog](http://keepachangelog.com).
29
36
  * Better documentation for relationships (thnx @dtamai and @d-m-u)
30
37
  * Fix creating children in `after_*` callbacks (thx @jstirk)
31
38
 
32
- ## Version [3.0.7] <small>2018-11-06</small>
39
+ ## Version [3.0.7] <sub><sup>2018-11-06</sub></sup>
33
40
 
34
41
  * Fixed rails 5.1 change detection (thx @jrafanie)
35
42
  * Introduce counter cache (thx @hw676018683)
36
43
 
37
- ## Version [3.0.6] <small>2018-11-06</small>
44
+ ## Version [3.0.6] <sub><sup>2018-11-06</sub></sup>
38
45
 
39
46
  * Fixed rails 4.1 version check (thx @myxoh)
40
47
 
41
- ## Version [3.0.5] <small>2018-11-06</small>
48
+ ## Version [3.0.5] <sub><sup>2018-11-06</sub></sup>
42
49
 
43
50
  ## Changed
44
51
 
@@ -49,14 +56,14 @@ a nice looking [Changelog](http://keepachangelog.com).
49
56
 
50
57
  * Reduced memory footprint of parsing ancestry column (thx @NickLaMuro)
51
58
 
52
- ## Version [3.0.4] <small>2018-10-27</small>
59
+ ## Version [3.0.4] <sub><sup>2018-10-27</sub></sup>
53
60
 
54
61
  ## Fixes
55
62
 
56
63
  * Properly detects non-integer columns (thx @adam101)
57
64
  * Arrange no longer drops nodes due to missing parents (thx @trafium)
58
65
 
59
- ## Version [3.0.3] <small>2018-10-23</small>
66
+ ## Version [3.0.3] <sub><sup>2018-10-23</sub></sup>
60
67
 
61
68
  This branch (3.x) should still be compatible with rails 3 and 4.
62
69
  Rails 5.1 and 5.2 support were introduced in this version, but ongoing support
@@ -72,7 +79,7 @@ has been moved to ancestry 4.0
72
79
  * Dropped builds for ruby 1.9.3, 2.0, 2.1, and 2.2
73
80
  * Dropped builds for Rails 3.x and 4.x (will use Active Record `or` syntax)
74
81
 
75
- ## Version [3.0.2] <small>2018-04-24</small>
82
+ ## Version [3.0.2] <sub><sup>2018-04-24</sub></sup>
76
83
 
77
84
  ## Fixes
78
85
 
@@ -82,7 +89,7 @@ has been moved to ancestry 4.0
82
89
  * added missing `Ancestry::version`
83
90
  * added Rails 5.2 support (thx @jjuliano)
84
91
 
85
- ## Version [3.0.1] <small>2017-07-05</small>
92
+ ## Version [3.0.1] <sub><sup>2017-07-05</sub></sup>
86
93
 
87
94
  ## Fixes
88
95
 
@@ -93,7 +100,7 @@ has been moved to ancestry 4.0
93
100
  * fixed tests on mysql 5.7 and rails 3.2
94
101
  * Dropped 3.1 scope changes
95
102
 
96
- ## Version [3.0.0] <small>2017-05-18</small>
103
+ ## Version [3.0.0] <sub><sup>2017-05-18</sub></sup>
97
104
 
98
105
  ## Changed
99
106
 
@@ -109,7 +116,7 @@ has been moved to ancestry 4.0
109
116
  * Properly touches parents when different class for STI (thx @samtgarson)
110
117
  * Fixed issues with parent_id (only present on master) (thx @domcleal)
111
118
 
112
- ## Version [2.2.2] <small>2016-11-01</small>
119
+ ## Version [2.2.2] <sub><sup>2016-11-01</sub></sup>
113
120
 
114
121
  ### Changed
115
122
 
@@ -117,7 +124,7 @@ has been moved to ancestry 4.0
117
124
  * Fixed bug with explicit order clauses (introduced in 2.2.0)
118
125
  * No longer load schema on `has_ancestry` load (thx @ledermann)
119
126
 
120
- ## Version [2.2.1] <small>2016-10-25</small>
127
+ ## Version [2.2.1] <sub><sup>2016-10-25</sub></sup>
121
128
 
122
129
  Sorry for blip, local master got out of sync with upstream master.
123
130
  Missed 2 commits (which are feature adds)
@@ -126,7 +133,7 @@ Missed 2 commits (which are feature adds)
126
133
  * Use like (vs ilike) for rails 5.0 (performance enhancement)
127
134
  * Use `COALESCE` for sorting on pg, mysql, and sqlite vs `CASE`
128
135
 
129
- ## Version [2.2.0] <small>2016-10-25</small>
136
+ ## Version [2.2.0] <sub><sup>2016-10-25</sub></sup>
130
137
 
131
138
  ### Added
132
139
  * Predicates for scopes: e.g.: `ancestor_of?`, `parent_of?` (thx @neglectedvalue)
@@ -141,7 +148,7 @@ Missed 2 commits (which are feature adds)
141
148
  * Upgrading tests for ruby versions (thx @brocktimus, @fryguy, @yui-knk)
142
149
  * Fix non-default ancestry not getting used properly (thx @javiyu)
143
150
 
144
- ## Version [2.1.0] <small>2014-04-16</small>
151
+ ## Version [2.1.0] <sub><sup>2014-04-16</sub></sup>
145
152
  * Added arrange_serializable (thx @krishandley, @chicagogrrl)
146
153
  * Add the :touch to update ancestors on save (thx @adammck)
147
154
  * Change conditions into arel (thx @mlitwiniuk)
@@ -150,7 +157,7 @@ Missed 2 commits (which are feature adds)
150
157
  * Performance tweak (thx @mjc)
151
158
  * Improvements to organization (thx @xsuchy, @ryakh)
152
159
 
153
- ## Version [2.0.0] <small>2013-05-17</small>
160
+ ## Version [2.0.0] <sub><sup>2013-05-17</sub></sup>
154
161
  * Removed rails 2 compatibility
155
162
  * Added table name to condition constructing methods (thx @aflatter)
156
163
  * Fix depth_cache not being updated when moving up to ancestors (thx @scottatron)
@@ -162,31 +169,31 @@ Missed 2 commits (which are feature adds)
162
169
  * New adopt strategy (thx unknown)
163
170
  * Many more improvements
164
171
 
165
- ## Version [1.3.0] <small>2012-05-04</small>
172
+ ## Version [1.3.0] <sub><sup>2012-05-04</sub></sup>
166
173
  * Ancestry now ignores default scopes when moving or destroying nodes, ensuring tree consistency
167
174
  * Changed ActiveRecord dependency to 2.3.14
168
175
 
169
- ## Version [1.2.5] <small>2012-03-15</small>
176
+ ## Version [1.2.5] <sub><sup>2012-03-15</sub></sup>
170
177
  * Fixed warnings: "parenthesize argument(s) for future version"
171
178
  * Fixed a bug in the restore_ancestry_integrity! method (thx Arthur Holstvoogd)
172
179
 
173
- ## Version [1.2.4] <small>2011-04-22</small>
180
+ ## Version [1.2.4] <sub><sup>2011-04-22</sub></sup>
174
181
  * Prepended table names to column names in queries (thx @raelik)
175
182
  * Better check to see if acts_as_tree can be overloaded (thx @jims)
176
183
  * Performance inprovements (thx @kueda)
177
184
 
178
- ## Version [1.2.3] <small>2010-10-28</small>
185
+ ## Version [1.2.3] <sub><sup>2010-10-28</sub></sup>
179
186
  * Fixed error with determining ActiveRecord version
180
187
  * Added option to specify :primary_key_format (thx @rolftimmermans)
181
188
 
182
- ## Version [1.2.2] <small>2010-10-24</small>
189
+ ## Version [1.2.2] <sub><sup>2010-10-24</sub></sup>
183
190
  * Fixed all deprecation warnings for rails 3.0.X
184
191
  * Added `:report` option to `check_ancestry_integrity!`
185
192
  * Changed ActiveRecord dependency to 2.2.2
186
193
  * Tested and fixed for ruby 1.8.7 and 1.9.2
187
194
  * Changed usage of `update_attributes` to `update_attribute` to allow ancestry column protection
188
195
 
189
- ## Version [1.2.0] <small>2009-11-07</small>
196
+ ## Version [1.2.0] <sub><sup>2009-11-07</sub></sup>
190
197
  * Removed some duplication in has_ancestry
191
198
  * Cleaned up plugin pattern according to http://yehudakatz.com/2009/11/12/better-ruby-idioms/
192
199
  * Moved parts of ancestry into seperate files
@@ -197,23 +204,23 @@ Missed 2 commits (which are feature adds)
197
204
  * Updated ordered_by_ancestry scope to support Microsoft SQL Server
198
205
  * Added empty hash as parameter to exists? calls for older ActiveRecord versions
199
206
 
200
- ## Version [1.1.4] <small>2009-11-07</small>
207
+ ## Version [1.1.4] <sub><sup>2009-11-07</sub></sup>
201
208
  * Thanks to a patch from tom taylor, Ancestry now works with different primary keys
202
209
 
203
- ## Version [1.1.3] <small>2009-11-01</small>
210
+ ## Version [1.1.3] <sub><sup>2009-11-01</sub></sup>
204
211
  * Fixed a pretty bad bug where several operations took far too many queries
205
212
 
206
- ## Version [1.1.2] <small>2009-10-29</small>
213
+ ## Version [1.1.2] <sub><sup>2009-10-29</sub></sup>
207
214
  * Added validation for depth cache column
208
215
  * Added STI support (reported broken)
209
216
 
210
- ## Version [1.1.1] <small>2009-10-28</small>
217
+ ## Version [1.1.1] <sub><sup>2009-10-28</sub></sup>
211
218
  * Fixed some parentheses warnings that where reported
212
219
  * Fixed a reported issue with arrangement
213
220
  * Fixed issues with ancestors and path order on postgres
214
221
  * Added ordered_by_ancestry scope (needed to fix issues)
215
222
 
216
- ## Version [1.1.0] <small>2009-10-22</small>
223
+ ## Version [1.1.0] <sub><sup>2009-10-22</sub></sup>
217
224
  * Depth caching (and cache rebuilding)
218
225
  * Depth method for nodes
219
226
  * Named scopes for selecting by depth
@@ -236,7 +243,7 @@ Missed 2 commits (which are feature adds)
236
243
  * Removed rails specific init
237
244
  * Removed uninstall script
238
245
 
239
- ## Version 1.0.0 <small>2009-10-16</small>
246
+ ## Version 1.0.0 <sub><sup>2009-10-16</sub></sup>
240
247
  * Initial version
241
248
  * Tree building
242
249
  * Tree navigation
@@ -248,8 +255,10 @@ Missed 2 commits (which are feature adds)
248
255
  * Validations
249
256
 
250
257
 
251
- [HEAD]: https://github.com/stefankroes/ancestry/compare/v3.2.0...HEAD
252
- [3.1.0]: https://github.com/stefankroes/ancestry/compare/v3.1.0...v3.2.0
258
+ [HEAD]: https://github.com/stefankroes/ancestry/compare/v4.0.0...HEAD
259
+ [4.0.0]: https://github.com/stefankroes/ancestry/compare/v3.2.1...v4.0.0
260
+ [3.2.1]: https://github.com/stefankroes/ancestry/compare/v3.2.0...v3.2.1
261
+ [3.2.0]: https://github.com/stefankroes/ancestry/compare/v3.1.0...v3.2.0
253
262
  [3.1.0]: https://github.com/stefankroes/ancestry/compare/v3.0.7...v3.1.0
254
263
  [3.0.7]: https://github.com/stefankroes/ancestry/compare/v3.0.6...v3.0.7
255
264
  [3.0.6]: https://github.com/stefankroes/ancestry/compare/v3.0.5...v3.0.6
data/README.md CHANGED
@@ -132,6 +132,9 @@ The has_ancestry method supports the following options:
132
132
  By default, primary keys only match integers ([0-9]+)
133
133
  :touch Instruct Ancestry to touch the ancestors of a node when it changes, to
134
134
  invalidate nested key-based caches. (default: false)
135
+ :counter_cache Boolean whether to create counter cache column accessor.
136
+ Default column name is `children_count`.
137
+ Pass symbol to use different column name (default: false)
135
138
 
136
139
  # (Named) Scopes
137
140
 
@@ -16,7 +16,7 @@ module Ancestry
16
16
  if [:before_depth, :to_depth, :at_depth, :from_depth, :after_depth].include? scope_name
17
17
  scope.send scope_name, depth + relative_depth
18
18
  else
19
- raise Ancestry::AncestryException.new(I18n.t("ancestry.unknown_depth_option", {:scope_name => scope_name}))
19
+ raise Ancestry::AncestryException.new(I18n.t("ancestry.unknown_depth_option", scope_name: scope_name))
20
20
  end
21
21
  end
22
22
  end
@@ -217,31 +217,15 @@ module Ancestry
217
217
  end
218
218
 
219
219
  def unscoped_where
220
- if ActiveRecord::VERSION::MAJOR < 4
221
- self.ancestry_base_class.unscoped do
222
- yield self.ancestry_base_class
223
- end
224
- else
225
- yield self.ancestry_base_class.unscope(:where)
226
- end
220
+ yield self.ancestry_base_class.default_scoped.unscope(:where)
227
221
  end
228
222
 
229
223
  ANCESTRY_UNCAST_TYPES = [:string, :uuid, :text].freeze
230
- if ActiveSupport::VERSION::STRING < "4.2"
231
- def primary_key_is_an_integer?
232
- if defined?(@primary_key_is_an_integer)
233
- @primary_key_is_an_integer
234
- else
235
- @primary_key_is_an_integer = !ANCESTRY_UNCAST_TYPES.include?(columns_hash[primary_key.to_s].type)
236
- end
237
- end
238
- else
239
- def primary_key_is_an_integer?
240
- if defined?(@primary_key_is_an_integer)
241
- @primary_key_is_an_integer
242
- else
243
- @primary_key_is_an_integer = !ANCESTRY_UNCAST_TYPES.include?(type_for_attribute(primary_key).type)
244
- end
224
+ def primary_key_is_an_integer?
225
+ if defined?(@primary_key_is_an_integer)
226
+ @primary_key_is_an_integer
227
+ else
228
+ @primary_key_is_an_integer = !ANCESTRY_UNCAST_TYPES.include?(type_for_attribute(primary_key).type)
245
229
  end
246
230
  end
247
231
  end
@@ -5,7 +5,7 @@ module Ancestry
5
5
  raise Ancestry::AncestryException.new(I18n.t("ancestry.option_must_be_hash")) unless options.is_a? Hash
6
6
  options.each do |key, value|
7
7
  unless [:ancestry_column, :orphan_strategy, :cache_depth, :depth_cache_column, :touch, :counter_cache, :primary_key_format, :update_strategy].include? key
8
- raise Ancestry::AncestryException.new(I18n.t("ancestry.unknown_option", {:key => key.inspect, :value => value.inspect}))
8
+ raise Ancestry::AncestryException.new(I18n.t("ancestry.unknown_option", key: key.inspect, value: value.inspect))
9
9
  end
10
10
  end
11
11
 
@@ -87,12 +87,7 @@ module Ancestry
87
87
 
88
88
  after_touch :touch_ancestors_callback
89
89
  after_destroy :touch_ancestors_callback
90
-
91
- if ActiveRecord::VERSION::STRING >= '5.1.0'
92
- after_save :touch_ancestors_callback, if: :saved_changes?
93
- else
94
- after_save :touch_ancestors_callback, if: :changed?
95
- end
90
+ after_save :touch_ancestors_callback, if: :saved_changes?
96
91
  end
97
92
 
98
93
  def acts_as_tree(*args)
@@ -115,5 +110,5 @@ module Ancestry
115
110
  end
116
111
 
117
112
  ActiveSupport.on_load :active_record do
118
- send :extend, Ancestry::HasAncestry
113
+ extend Ancestry::HasAncestry
119
114
  end
@@ -2,7 +2,7 @@ module Ancestry
2
2
  module InstanceMethods
3
3
  # Validate that the ancestors don't include itself
4
4
  def ancestry_exclude_self
5
- errors.add(:base, I18n.t("ancestry.exclude_self", {:class_name => self.class.name.humanize})) if ancestor_ids.include? self.id
5
+ errors.add(:base, I18n.t("ancestry.exclude_self", class_name: self.class.name.humanize)) if ancestor_ids.include? self.id
6
6
  end
7
7
 
8
8
  # Update descendants with new ancestry (before save)
@@ -39,7 +39,7 @@ module Ancestry
39
39
  when :adopt # make child elements of this node, child of its parent
40
40
  descendants.each do |descendant|
41
41
  descendant.without_ancestry_callbacks do
42
- descendant.update_attribute :ancestor_ids, descendant.ancestor_ids.delete_if { |x| x == self.id }
42
+ descendant.update_attribute :ancestor_ids, (descendant.ancestor_ids.delete_if { |x| x == self.id })
43
43
  end
44
44
  end
45
45
  when :restrict # throw an exception if it has children
@@ -78,12 +78,7 @@ module Ancestry
78
78
  end
79
79
 
80
80
  def update_parent_counter_cache
81
- changed =
82
- if ActiveRecord::VERSION::STRING >= '5.1.0'
83
- saved_change_to_attribute?(self.ancestry_base_class.ancestry_column)
84
- else
85
- ancestry_changed?
86
- end
81
+ changed = saved_change_to_attribute?(self.ancestry_base_class.ancestry_column)
87
82
 
88
83
  return unless changed
89
84
 
@@ -100,20 +95,16 @@ module Ancestry
100
95
 
101
96
  # Ancestors
102
97
 
103
- def ancestors?
98
+ def has_parent?
104
99
  ancestor_ids.present?
105
100
  end
106
- alias :has_parent? :ancestors?
101
+ alias :ancestors? :has_parent?
107
102
 
108
103
  def ancestry_changed?
109
104
  column = self.ancestry_base_class.ancestry_column.to_s
110
- if ActiveRecord::VERSION::STRING >= '5.1.0'
111
105
  # These methods return nil if there are no changes.
112
106
  # This was fixed in a refactoring in rails 6.0: https://github.com/rails/rails/pull/35933
113
107
  !!(will_save_change_to_attribute?(column) || saved_change_to_attribute?(column))
114
- else
115
- changed.include?(column)
116
- end
117
108
  end
118
109
 
119
110
  def sane_ancestor_ids?
@@ -121,7 +112,7 @@ module Ancestry
121
112
  end
122
113
 
123
114
  def ancestors depth_options = {}
124
- return self.ancestry_base_class.none unless ancestors?
115
+ return self.ancestry_base_class.none unless has_parent?
125
116
  self.ancestry_base_class.scope_depth(depth_options, depth).ordered_by_ancestry.ancestors_of(self)
126
117
  end
127
118
 
@@ -162,12 +153,12 @@ module Ancestry
162
153
  end
163
154
 
164
155
  def parent_id
165
- ancestor_ids.last if ancestors?
156
+ ancestor_ids.last if has_parent?
166
157
  end
167
158
  alias :parent_id? :ancestors?
168
159
 
169
160
  def parent
170
- unscoped_find(parent_id) if ancestors?
161
+ unscoped_find(parent_id) if has_parent?
171
162
  end
172
163
 
173
164
  def parent_of?(node)
@@ -177,15 +168,15 @@ module Ancestry
177
168
  # Root
178
169
 
179
170
  def root_id
180
- ancestors? ? ancestor_ids.first : id
171
+ has_parent? ? ancestor_ids.first : id
181
172
  end
182
173
 
183
174
  def root
184
- ancestors? ? unscoped_find(root_id) : self
175
+ has_parent? ? unscoped_find(root_id) : self
185
176
  end
186
177
 
187
178
  def is_root?
188
- !ancestors?
179
+ !has_parent?
189
180
  end
190
181
  alias :root? :is_root?
191
182
 
@@ -1,7 +1,7 @@
1
1
  module Ancestry
2
2
  module MaterializedPath
3
- BEFORE_LAST_SAVE_SUFFIX = ActiveRecord::VERSION::STRING >= '5.1.0' ? '_before_last_save'.freeze : '_was'.freeze
4
- IN_DATABASE_SUFFIX = ActiveRecord::VERSION::STRING >= '5.1.0' ? '_in_database'.freeze : '_was'.freeze
3
+ BEFORE_LAST_SAVE_SUFFIX = '_before_last_save'.freeze
4
+ IN_DATABASE_SUFFIX = '_in_database'.freeze
5
5
  ANCESTRY_DELIMITER='/'.freeze
6
6
 
7
7
  def self.extended(base)
@@ -38,12 +38,7 @@ module Ancestry
38
38
  def indirects_of(object)
39
39
  t = arel_table
40
40
  node = to_node(object)
41
- # rails has case sensitive matching.
42
- if ActiveRecord::VERSION::MAJOR >= 5
43
- where(t[ancestry_column].matches("#{node.child_ancestry}/%", nil, true))
44
- else
45
- where(t[ancestry_column].matches("#{node.child_ancestry}/%"))
46
- end
41
+ where(t[ancestry_column].matches("#{node.child_ancestry}/%", nil, true))
47
42
  end
48
43
 
49
44
  def descendants_of(object)
@@ -54,12 +49,7 @@ module Ancestry
54
49
  def descendant_conditions(object)
55
50
  t = arel_table
56
51
  node = to_node(object)
57
- # rails has case sensitive matching.
58
- if ActiveRecord::VERSION::MAJOR >= 5
59
- t[ancestry_column].matches("#{node.child_ancestry}/%", nil, true).or(t[ancestry_column].eq(node.child_ancestry))
60
- else
61
- t[ancestry_column].matches("#{node.child_ancestry}/%").or(t[ancestry_column].eq(node.child_ancestry))
62
- end
52
+ t[ancestry_column].matches("#{node.child_ancestry}/%", nil, true).or(t[ancestry_column].eq(node.child_ancestry))
63
53
  end
64
54
 
65
55
  def subtree_of(object)
@@ -78,7 +68,7 @@ module Ancestry
78
68
  if %w(mysql mysql2 sqlite sqlite3).include?(connection.adapter_name.downcase)
79
69
  reorder(arel_table[ancestry_column], order)
80
70
  elsif %w(postgresql).include?(connection.adapter_name.downcase) && ActiveRecord::VERSION::STRING >= "6.1"
81
- reorder(Arel::Nodes::Ascending.new(arel_table[ancestry_column]).nulls_first)
71
+ reorder(Arel::Nodes::Ascending.new(arel_table[ancestry_column]).nulls_first, order)
82
72
  else
83
73
  reorder(
84
74
  Arel::Nodes::Ascending.new(Arel::Nodes::NamedFunction.new('COALESCE', [arel_table[ancestry_column], Arel.sql("''")])),
@@ -1,22 +1,22 @@
1
1
  module Ancestry
2
2
  module MaterializedPathPg
3
- # Update descendants with new ancestry (before save)
4
- def update_descendants_with_new_ancestry
5
- # If enabled and node is existing and ancestry was updated and the new ancestry is sane ...
6
- if !ancestry_callbacks_disabled? && !new_record? && ancestry_changed? && sane_ancestry?
7
- ancestry_column = ancestry_base_class.ancestry_column
8
- old_ancestry = path_ids_in_database.join(Ancestry::MaterializedPath::ANCESTRY_DELIMITER)
9
- new_ancestry = path_ids.join(Ancestry::MaterializedPath::ANCESTRY_DELIMITER)
10
- update_clause = [
11
- "#{ancestry_column} = regexp_replace(#{ancestry_column}, '^#{old_ancestry}', '#{new_ancestry}')"
12
- ]
3
+ # Update descendants with new ancestry (before save)
4
+ def update_descendants_with_new_ancestry
5
+ # If enabled and node is existing and ancestry was updated and the new ancestry is sane ...
6
+ if !ancestry_callbacks_disabled? && !new_record? && ancestry_changed? && sane_ancestry?
7
+ ancestry_column = ancestry_base_class.ancestry_column
8
+ old_ancestry = path_ids_in_database.join(Ancestry::MaterializedPath::ANCESTRY_DELIMITER)
9
+ new_ancestry = path_ids.join(Ancestry::MaterializedPath::ANCESTRY_DELIMITER)
10
+ update_clause = [
11
+ "#{ancestry_column} = regexp_replace(#{ancestry_column}, '^#{old_ancestry}', '#{new_ancestry}')"
12
+ ]
13
13
 
14
- if ancestry_base_class.respond_to?(:depth_cache_column) && respond_to?(ancestry_base_class.depth_cache_column)
15
- depth_cache_column = ancestry_base_class.depth_cache_column.to_s
16
- update_clause << "#{depth_cache_column} = length(regexp_replace(regexp_replace(ancestry, '^#{old_ancestry}', '#{new_ancestry}'), '\\d', '', 'g')) + 1"
17
- end
14
+ if ancestry_base_class.respond_to?(:depth_cache_column) && respond_to?(ancestry_base_class.depth_cache_column)
15
+ depth_cache_column = ancestry_base_class.depth_cache_column.to_s
16
+ update_clause << "#{depth_cache_column} = length(regexp_replace(regexp_replace(ancestry, '^#{old_ancestry}', '#{new_ancestry}'), '\\d', '', 'g')) + 1"
17
+ end
18
18
 
19
- unscoped_descendants.update_all update_clause.join(', ')
19
+ unscoped_descendants.update_all update_clause.join(', ')
20
20
  end
21
21
  end
22
22
  end
@@ -1,3 +1,3 @@
1
1
  module Ancestry
2
- VERSION = "3.2.1"
2
+ VERSION = "4.0.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ancestry
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.1
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Kroes
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-09-23 00:00:00.000000000 Z
12
+ date: 2021-04-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: 4.2.0
20
+ version: 5.2.4.5
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: 4.2.0
27
+ version: 5.2.4.5
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: appraisal
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -130,8 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  requirements: []
133
- rubyforge_project:
134
- rubygems_version: 2.7.6.2
133
+ rubygems_version: 3.1.2
135
134
  signing_key:
136
135
  specification_version: 4
137
136
  summary: Organize ActiveRecord model into a tree structure