ancestry 3.2.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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