closure_tree 6.5.0 → 6.6.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
  SHA1:
3
- metadata.gz: 8612efc584f34d7e880cfe02d66791eba5cdc639
4
- data.tar.gz: feb72d046d18b9c097002ac65af76343f616fcbd
3
+ metadata.gz: c2a4b1786131c2b97479335f02da9e7c07a07f68
4
+ data.tar.gz: a2a1803ef7cb252a5f6f3996b3196606abf4c396
5
5
  SHA512:
6
- metadata.gz: 65e6a3c45fadbfc87546db2e1b8417207f19d12c26f0683bd621fb6e5b6714c66dd95f17e7a4b36895589404479c45b0a2fe6fb40a9811160381a105ff02995a
7
- data.tar.gz: da5d009c2bfd51f56911c0838ed5ca8d0662e53c34630e75bd1b390b530993a25c7ff76d16e2650dea474b655c780204f9f6dcb0c9f96eda8adc3dd68adcc148
6
+ metadata.gz: e088751351930a9ff34d6fbcd0468e6949bff95d4ffccdaaab36cd240163029fccc752234c3ba04ceabb819a8be9a1af39b4e11beecb38003d36da7ed17dd6de
7
+ data.tar.gz: fc9d0ce048a35d852767bbed49b3b3dae1f6bd2efe92c31b37517205a5999fb69b8ae5d7c38984537121ea00702df667a4ed4e35e170c44d307eb9ddfa528136
@@ -4,15 +4,15 @@ language: ruby
4
4
  rvm:
5
5
  - 2.4.0
6
6
  - 2.3.3
7
- - 2.2.6
7
+ - 2.2.7
8
8
  # these haven't been passing for a while:
9
9
  # - jruby-head
10
10
  # - rbx
11
11
 
12
12
  gemfile:
13
- - gemfiles/activerecord_4.2.gemfile
14
- - gemfiles/activerecord_5.0_foreigner.gemfile
13
+ - gemfiles/activerecord_5.1.gemfile
15
14
  - gemfiles/activerecord_5.0.gemfile
15
+ - gemfiles/activerecord_4.2.gemfile
16
16
  - gemfiles/activerecord_edge.gemfile
17
17
 
18
18
  env:
data/Appraisals CHANGED
@@ -1,19 +1,14 @@
1
1
 
2
2
  appraise 'activerecord-4.2' do
3
3
  gem 'activerecord', '~> 4.2.0'
4
-
5
- platforms :ruby, :rbx do
6
- gem 'mysql2', '~> 0.3.20'
7
- end
8
4
  end
9
5
 
10
- appraise 'activerecord-5.0-foreigner' do
6
+ appraise 'activerecord-5.0' do
11
7
  gem 'activerecord', '~> 5.0.0'
12
- gem 'foreigner'
13
8
  end
14
9
 
15
- appraise 'activerecord-5.0' do
16
- gem 'activerecord', '~> 5.0.0'
10
+ appraise 'activerecord-5.1' do
11
+ gem 'activerecord', '~> 5.1.0'
17
12
  end
18
13
 
19
14
  appraise 'activerecord-edge' do
@@ -1,27 +1,45 @@
1
1
  # Changelog
2
2
 
3
- ### 6.5.0
3
+ ### 6.6.0
4
+
5
+ Closure Tree is now tested against Rails 5.1, and just passed 50 contributors and
6
+ 1000 stars on github! 🎉!
7
+
8
+ Note that Closure Tree has moved to a new "Closure Tree" github organization.
9
+ **Future gem releases will be done by other contributors.**
4
10
 
5
- * Merged [PR 258](https://github.com/mceachen/closure_tree/pull/258) which improves hierarchy maintenance with large trees.
6
- Thanks, [Nikolay Bekirov](https://github.com/nbekirov)!
11
+ * ActiveSupport 5.1 deprecation warnings were addressed in [PR
12
+ 262](https://github.com/ClosureTree/closure_tree/pull/262). Thanks, [Charles
13
+ Pence](https://github.com/cpence)!
14
+ * ActiveSupport 5.1 test failures were fixed in
15
+ [PR 280](https://github.com/ClosureTree/closure_tree/pull/280).
16
+ Thanks, [Bobby Uhlenbrock](https://github.com/uhlenbrock)!
17
+ * A database connection was leaked at startup, fixed in [PR
18
+ 263](https://github.com/ClosureTree/closure_tree/pull/263). Thanks, [Andrey
19
+ Novikov](https://github.com/Envek)!
20
+
21
+ ### 6.5.0
7
22
 
23
+ * Merged [PR 258](https://github.com/ClosureTree/closure_tree/pull/258) which
24
+ improves hierarchy maintenance with large trees. Thanks, [Nikolay
25
+ Bekirov](https://github.com/nbekirov)!
8
26
  ### 6.4.0
9
27
 
10
- * Merged [PR 236](https://github.com/mceachen/closure_tree/pull/236) which adds documentation for `has_closure_tree_root`.
28
+ * Merged [PR 236](https://github.com/ClosureTree/closure_tree/pull/236) which adds documentation for `has_closure_tree_root`.
11
29
  * Added ruby 2.4 and dropped Rails 4.1 from the build matrix.
12
30
 
13
31
  ### 6.3.0
14
32
 
15
- * `prepend_child` [handles invalid children properly now](https://github.com/mceachen/closure_tree/issues/249).
33
+ * `prepend_child` [handles invalid children properly now](https://github.com/ClosureTree/closure_tree/issues/249).
16
34
  Thanks [Amit Saxena](https://github.com/amitsaxena)!
17
35
  * Dropped official support for jruby and ruby 2.0 (no code was changed)
18
36
 
19
37
  ### 6.2.0
20
38
 
21
- * Fix for [MySQL lock lengths](https://github.com/mceachen/closure_tree/issues/231).
39
+ * Fix for [MySQL lock lengths](https://github.com/ClosureTree/closure_tree/issues/231).
22
40
  Thanks to [Liam](https://github.com/hut8)!
23
- * [Tom Smyth](https://github.com/hooverlunch) added [eager tree loading](https://github.com/mceachen/closure_tree/pull/232)
24
- * Merged [PR 200](https://github.com/mceachen/closure_tree/pull/200) which may or may not add support to SQLServer 2008 (but this is not a supported RDBMS).
41
+ * [Tom Smyth](https://github.com/hooverlunch) added [eager tree loading](https://github.com/ClosureTree/closure_tree/pull/232)
42
+ * Merged [PR 200](https://github.com/ClosureTree/closure_tree/pull/200) which may or may not add support to SQLServer 2008 (but this is not a supported RDBMS).
25
43
 
26
44
  ### 6.1.0
27
45
 
@@ -45,7 +63,7 @@
45
63
  * Dropped support for versions of Rails 3.2 and 4.0 (which are no longer supported).
46
64
  * Dropped support for Ruby 1.9 and JRuby 1.9 (which are no longer supported).
47
65
  * Added support for `.hash_tree` from `.parent` and `.children`.
48
- Addresses [PR146](https://github.com/mceachen/closure_tree/pull/146).
66
+ Addresses [PR146](https://github.com/ClosureTree/closure_tree/pull/146).
49
67
  Thanks for reporting this and the breaking test, [Mike](https://github.com/mkralla11)!
50
68
 
51
69
  ### 5.2.0
@@ -56,7 +74,7 @@
56
74
  * [Ryan Selk](https://github.com/rselk) made several enhancements to the migration generation (thanks!).
57
75
  * [ruok5](https://github.com/ruok5) updated the README to clarify a heirarchy maintenance usecase. Thanks!
58
76
  * Made migrations error with a helpful message if the target didn't have the `has_closure_tree` or
59
- `acts_as_tree` annotation. This addresses [issue 131](https://github.com/mceachen/closure_tree/issues/131).
77
+ `acts_as_tree` annotation. This addresses [issue 131](https://github.com/ClosureTree/closure_tree/issues/131).
60
78
 
61
79
  ### 5.1.1
62
80
 
@@ -67,7 +85,7 @@
67
85
 
68
86
  * [Abdelkader Boudih](https://github.com/seuros) added a database generator
69
87
  for the hierarchies table. Thanks!
70
- * [Jason Weathered](https://github.com/jasoncodes) fixed [issue #117](https://github.com/mceachen/closure_tree/pull/117)
88
+ * [Jason Weathered](https://github.com/jasoncodes) fixed [issue #117](https://github.com/ClosureTree/closure_tree/pull/117)
71
89
  with the preordered traversal code that assumed the primary key column was called `id`. Thanks!
72
90
 
73
91
  ### 5.0.0
@@ -91,13 +109,13 @@
91
109
 
92
110
  ### 4.6.2
93
111
 
94
- * Pulled in [106](https://github.com/mceachen/closure_tree/pull/106) which fixed a bug introduced
112
+ * Pulled in [106](https://github.com/ClosureTree/closure_tree/pull/106) which fixed a bug introduced
95
113
  in 4.6.0 which broke if the numeric ordering column wasn't named 'sort_order'. Tests have been
96
114
  added. Thanks for the fix, [Fission Xuiptz](https://github.com/fissionxuiptz)!
97
115
 
98
116
  ### 4.6.1
99
117
 
100
- * Address [issue 60](https://github.com/mceachen/closure_tree/issues/60) (use `.empty?` rather
118
+ * Address [issue 60](https://github.com/ClosureTree/closure_tree/issues/60) (use `.empty?` rather
101
119
  than `.nil?`—thanks for the suggestion, [Leonel Galán](https://github.com/leonelgalan),
102
120
  [Doug Mayer](https://github.com/doxavore) and [Samnang Chhun](https://github.com/samnang)!
103
121
 
@@ -124,7 +142,7 @@
124
142
 
125
143
  ### 4.4.0
126
144
 
127
- * Added ```.self_and_descendant_ids``` and ```.self_and_ancestors_ids``` from [PR92](https://github.com/mceachen/closure_tree/pull/92).
145
+ * Added ```.self_and_descendant_ids``` and ```.self_and_ancestors_ids``` from [PR92](https://github.com/ClosureTree/closure_tree/pull/92).
128
146
  Thanks, [Kir Shatrov](https://github.com/kirs)!
129
147
 
130
148
  * Dropped support for Rails 3.0.
@@ -139,7 +157,7 @@
139
157
  ### 4.2.9
140
158
 
141
159
  * Support for Heroku's cray assets:precompile hack for Rails 4.
142
- Addresses [issue 78](https://github.com/mceachen/closure_tree/issues/78).
160
+ Addresses [issue 78](https://github.com/ClosureTree/closure_tree/issues/78).
143
161
  Thanks for the assist, [Alex Bowman](https://github.com/axlekb).
144
162
 
145
163
  ### 4.2.8
@@ -149,7 +167,7 @@
149
167
  ### 4.2.7
150
168
 
151
169
  * ```self_and_ancestors``` and ```ancestry_hierarchy``` are reloaded
152
- when nodes are reparented. Addresses [issue 68](https://github.com/mceachen/closure_tree/issues/68).
170
+ when nodes are reparented. Addresses [issue 68](https://github.com/ClosureTree/closure_tree/issues/68).
153
171
  Thanks for the assist, [Ivan Stana](https://github.com/istana).
154
172
 
155
173
  ### 4.2.6
@@ -169,12 +187,12 @@
169
187
  ### 4.2.4
170
188
 
171
189
  * Support for ```root?```, ```child?```, and proper parent-child associations
172
- when both the parent and the child are not persisted. Addresses [issue 64](https://github.com/mceachen/closure_tree/issues/64).
190
+ when both the parent and the child are not persisted. Addresses [issue 64](https://github.com/ClosureTree/closure_tree/issues/64).
173
191
  Thanks for the help, [Gabriel Mazetto](https://github.com/brodock)!
174
192
 
175
193
  ### 4.2.3
176
194
 
177
- * Fixed ```attr_accessible?``` error introduced in 4.2.2 ([issue 66](https://github.com/mceachen/closure_tree/issues/66)).
195
+ * Fixed ```attr_accessible?``` error introduced in 4.2.2 ([issue 66](https://github.com/ClosureTree/closure_tree/issues/66)).
178
196
  * Switched to use new WithAdvisoryLock::DatabaseAdapterSupport (in v0.0.9) to add Postgis support
179
197
 
180
198
  ### 4.2.2
@@ -204,11 +222,11 @@
204
222
 
205
223
  * Numeric, deterministically ordered siblings will always be [0..#{self_and_siblings.count}]
206
224
  (previously, the sort order might use negative values, which broke the preordering).
207
- Resolves [issue 49](https://github.com/mceachen/closure_tree/issues/49). Thanks for the help,
225
+ Resolves [issue 49](https://github.com/ClosureTree/closure_tree/issues/49). Thanks for the help,
208
226
  [Leonel Galan](https://github.com/leonelgalan), [Juan Hoyos](https://github.com/elhoyos), and
209
227
  [Michael Elfassy](https://github.com/elfassy)!
210
228
 
211
- * The ```order``` option can be a symbol now. Resolves [issue 46](https://github.com/mceachen/closure_tree/issues/46).
229
+ * The ```order``` option can be a symbol now. Resolves [issue 46](https://github.com/ClosureTree/closure_tree/issues/46).
212
230
 
213
231
  ### 4.0.0
214
232
 
@@ -223,22 +241,22 @@
223
241
  ### 3.10.2
224
242
 
225
243
  * Prevent faulty SQL statement when ```#siblings``` is called on an unsaved records.
226
- Resolves [issue 52](https://github.com/mceachen/closure_tree/pull/52). Perfect pull
244
+ Resolves [issue 52](https://github.com/ClosureTree/closure_tree/pull/52). Perfect pull
227
245
  request by [Gary Greyling](https://github.com/garygreyling).
228
246
 
229
247
  * The ```.roots``` class method now correctly respects the ```:order``` option.
230
- Resolves [issue 53](https://github.com/mceachen/closure_tree/issues/53).
248
+ Resolves [issue 53](https://github.com/ClosureTree/closure_tree/issues/53).
231
249
  Thanks for finding this, [Brendon Muir](https://github.com/brendon)!
232
250
 
233
251
  ### 3.10.1
234
252
 
235
253
  * Multipart constant names like "Admin::PageHierarchy" are now supported.
236
- Resolves [issue 47](https://github.com/mceachen/closure_tree/issues/47).
254
+ Resolves [issue 47](https://github.com/ClosureTree/closure_tree/issues/47).
237
255
  Thanks for the perfect pull request, [Simon Menke](https://github.com/fd)!
238
256
 
239
257
  * Committing transactions involving large numbers of hierarchy model classes was very slow due
240
258
  to hash collisions in the hierarchy class. A better hash implementation addressed
241
- [issue 48](https://github.com/mceachen/closure_tree/issues/48).
259
+ [issue 48](https://github.com/ClosureTree/closure_tree/issues/48).
242
260
  Thanks, [Joel Turkel](https://github.com/jturkel)!
243
261
 
244
262
  ### 3.10.0
@@ -267,19 +285,19 @@ All three of these improvements were suggested by Andrew Bromwich. Thanks!
267
285
  ### 3.8.0
268
286
 
269
287
  * Support for preordered descendants. This requires a numeric sort order column.
270
- Resolves [feature request 38](https://github.com/mceachen/closure_tree/issues/38).
288
+ Resolves [feature request 38](https://github.com/ClosureTree/closure_tree/issues/38).
271
289
  * Moved modules from ```acts_as_tree``` into separate files
272
290
 
273
291
  ### 3.7.3
274
292
 
275
293
  Due to MySQL's inability to lock rows properly, I've switched to advisory_locks for
276
294
  all write paths. This will prevent deadlocks, addressing
277
- [issue 41](https://github.com/mceachen/closure_tree/issues/41).
295
+ [issue 41](https://github.com/ClosureTree/closure_tree/issues/41).
278
296
 
279
297
  ### 3.7.2
280
298
 
281
299
  * Support for UUID primary keys. Addresses
282
- [issue 40](https://github.com/mceachen/closure_tree/issues/40). Thanks for the pull request,
300
+ [issue 40](https://github.com/ClosureTree/closure_tree/issues/40). Thanks for the pull request,
283
301
  [Julien](https://github.com/calexicoz)!
284
302
 
285
303
  ### 3.7.1
@@ -290,7 +308,7 @@ all write paths. This will prevent deadlocks, addressing
290
308
  ### 3.7.0
291
309
 
292
310
  **Thread safety!**
293
- * [Advisory locks](https://github.com/mceachen/with_advisory_lock) were
311
+ * [Advisory locks](https://github.com/ClosureTree/with_advisory_lock) were
294
312
  integrated with the class-level ```find_or_create_by_path``` and ```rebuild!```.
295
313
  * Pessimistic locking is used by the instance-level ```find_or_create_by_path```.
296
314
 
@@ -303,7 +321,7 @@ wasting time on the ruby side.
303
321
  ### 3.6.7
304
322
 
305
323
  * Added workaround for ActiveRecord::Observer usage pre-db-creation. Addresses
306
- [issue 32](https://github.com/mceachen/closure_tree/issues/32).
324
+ [issue 32](https://github.com/ClosureTree/closure_tree/issues/32).
307
325
  Thanks, [Don Morrison](https://github.com/elskwid)!
308
326
 
309
327
  ### 3.6.6
@@ -314,28 +332,28 @@ Thanks, [James Miller](https://github.com/bensie)!
314
332
  ### 3.6.5
315
333
 
316
334
  * Use ```quote_table_name``` instead of ```quote_column_name```. Addresses
317
- [issue 29](https://github.com/mceachen/closure_tree/issues/29). Thanks,
335
+ [issue 29](https://github.com/ClosureTree/closure_tree/issues/29). Thanks,
318
336
  [Marcello Barnaba](https://github.com/vjt)!
319
337
 
320
338
  ### 3.6.4
321
339
 
322
340
  * Use ```.pluck``` when available for ```.ids_from```. Addresses
323
- [issue 26](https://github.com/mceachen/closure_tree/issues/26). Thanks,
341
+ [issue 26](https://github.com/ClosureTree/closure_tree/issues/26). Thanks,
324
342
  [Chris Sturgill](https://github.com/sturgill)!
325
343
 
326
344
  ### 3.6.3
327
345
 
328
- * Fixed [issue 24](https://github.com/mceachen/closure_tree/issues/24), which optimized ```#hash_tree```
346
+ * Fixed [issue 24](https://github.com/ClosureTree/closure_tree/issues/24), which optimized ```#hash_tree```
329
347
  for roots. Thanks, [Saverio Trioni](https://github.com/rewritten)!
330
348
 
331
349
  ### 3.6.2
332
350
 
333
- * Fixed [issue 23](https://github.com/mceachen/closure_tree/issues/23), which added support for ```#siblings```
351
+ * Fixed [issue 23](https://github.com/ClosureTree/closure_tree/issues/23), which added support for ```#siblings```
334
352
  when sort_order wasn't specified. Thanks, [Gary Greyling](https://github.com/garygreyling)!
335
353
 
336
354
  ### 3.6.1
337
355
 
338
- * Fixed [issue 20](https://github.com/mceachen/closure_tree/issues/20), which affected
356
+ * Fixed [issue 20](https://github.com/ClosureTree/closure_tree/issues/20), which affected
339
357
  deterministic ordering when siblings where different STI classes. Thanks, [edwinramirez](https://github.com/edwinramirez)!
340
358
 
341
359
  ### 3.6.0
@@ -345,16 +363,16 @@ Added support for:
345
363
  * ActiveRecord::Base.table_name_prefix
346
364
  * ActiveRecord::Base.table_name_suffix
347
365
 
348
- This addresses [issue 21](https://github.com/mceachen/closure_tree/issues/21). Thanks, [Judd Blair](https://github.com/juddblair)!
366
+ This addresses [issue 21](https://github.com/ClosureTree/closure_tree/issues/21). Thanks, [Judd Blair](https://github.com/juddblair)!
349
367
 
350
368
  ### 3.5.2
351
369
 
352
370
  * Added ```find_all_by_generation```
353
- for [feature request 17](https://github.com/mceachen/closure_tree/issues/17).
371
+ for [feature request 17](https://github.com/ClosureTree/closure_tree/issues/17).
354
372
 
355
373
  ### 3.4.2
356
374
 
357
- * Fixed [issue 18](https://github.com/mceachen/closure_tree/issues/18), which affected
375
+ * Fixed [issue 18](https://github.com/ClosureTree/closure_tree/issues/18), which affected
358
376
  append_node/prepend_node ordering when the first node didn't have an explicit order_by value
359
377
 
360
378
  ### 3.4.1
@@ -363,7 +381,7 @@ This addresses [issue 21](https://github.com/mceachen/closure_tree/issues/21). T
363
381
 
364
382
  ### 3.4.0
365
383
 
366
- Fixed [issue 15](https://github.com/mceachen/closure_tree/issues/15):
384
+ Fixed [issue 15](https://github.com/ClosureTree/closure_tree/issues/15):
367
385
  * "parent" is now attr_accessible, which adds support for constructor-provided parents.
368
386
  * updated readme accordingly
369
387
 
@@ -373,7 +391,7 @@ Fixed [issue 15](https://github.com/mceachen/closure_tree/issues/15):
373
391
 
374
392
  ### 3.3.1
375
393
 
376
- * Added support for partially-unsaved hierarchies [issue 13](https://github.com/mceachen/closure_tree/issues/13):
394
+ * Added support for partially-unsaved hierarchies [issue 13](https://github.com/ClosureTree/closure_tree/issues/13):
377
395
  ```
378
396
  a = Tag.new(name: "a")
379
397
  b = Tag.new(name: "b")
@@ -388,7 +406,7 @@ a.save
388
406
  ### 3.2.1
389
407
 
390
408
  * Added ```ancestor_ids```, ```descendant_ids```, and ```sibling_ids```
391
- * Added example spec to solve [issue 9](https://github.com/mceachen/closure_tree/issues/9)
409
+ * Added example spec to solve [issue 9](https://github.com/ClosureTree/closure_tree/issues/9)
392
410
 
393
411
  ### 3.2.0
394
412
 
@@ -400,7 +418,7 @@ a.save
400
418
 
401
419
  ### 3.0.4
402
420
 
403
- * Merged [pull request](https://github.com/mceachen/closure_tree/pull/8) to fix ```.siblings``` and ```.self_and_siblings```
421
+ * Merged [pull request](https://github.com/ClosureTree/closure_tree/pull/8) to fix ```.siblings``` and ```.self_and_siblings```
404
422
  (Thanks, [eljojo](https://github.com/eljojo)!)
405
423
 
406
424
  ### 3.0.3
@@ -415,7 +433,7 @@ a.save
415
433
 
416
434
  ### 3.0.1
417
435
 
418
- * Support 3.2.0's fickle deprecation of InstanceMethods (Thanks, [jheiss](https://github.com/mceachen/closure_tree/pull/5))!
436
+ * Support 3.2.0's fickle deprecation of InstanceMethods (Thanks, [jheiss](https://github.com/ClosureTree/closure_tree/pull/5))!
419
437
 
420
438
  ### 3.0.0
421
439
 
data/README.md CHANGED
@@ -1,15 +1,16 @@
1
1
  # Closure Tree
2
2
 
3
+ __Important: please [vote on the future of ClosureTree](https://github.com/ClosureTree/closure_tree/issues/277)!__
4
+
3
5
  ### Closure_tree lets your ActiveRecord models act as nodes in a [tree data structure](http://en.wikipedia.org/wiki/Tree_%28data_structure%29)
4
6
 
5
7
  Common applications include modeling hierarchical data, like tags, threaded comments, page graphs in CMSes,
6
8
  and tracking user referrals.
7
9
 
8
10
  [![Join the chat at https://gitter.im/closure_tree/Lobby](https://badges.gitter.im/closure_tree/Lobby.svg)](https://gitter.im/closure_tree/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
9
- [![Build Status](https://api.travis-ci.org/mceachen/closure_tree.svg?branch=master)](http://travis-ci.org/mceachen/closure_tree)
11
+ [![Build Status](https://api.travis-ci.org/ClosureTree/closure_tree.svg?branch=master)](http://travis-ci.org/ClosureTree/closure_tree)
10
12
  [![Gem Version](https://badge.fury.io/rb/closure_tree.svg)](https://badge.fury.io/rb/closure_tree)
11
- [![Codacy Badge](https://api.codacy.com/project/badge/Grade/fa5a8ae2193d42adb30b4256732a757d)](https://www.codacy.com/app/matthew-github/closure_tree)
12
- [![Dependency Status](https://gemnasium.com/badges/github.com/mceachen/closure_tree.svg)](https://gemnasium.com/github.com/mceachen/closure_tree)
13
+ [![Dependency Status](https://gemnasium.com/badges/github.com/ClosureTree/closure_tree.svg)](https://gemnasium.com/github.com/ClosureTree/closure_tree)
13
14
 
14
15
  Dramatically more performant than
15
16
  [ancestry](https://github.com/stefankroes/ancestry) and
@@ -26,9 +27,8 @@ closure_tree has some great features:
26
27
  * __Best-in-class mutation performance__:
27
28
  * 2 SQL INSERTs on node creation
28
29
  * 3 SQL INSERT/UPDATEs on node reparenting
29
- * __Support for [concurrency](#concurrency)__ (using [with_advisory_lock](https://github.com/mceachen/with_advisory_lock))
30
- * __Support for ActiveRecord 4.2 and 5.0__
31
- * __Support for Ruby 2.2 and 2.3__
30
+ * __Support for [concurrency](#concurrency)__ (using [with_advisory_lock](https://github.com/ClosureTree/with_advisory_lock))
31
+ * __Tested against ActiveRecord 4.2, 5.0, and 5.1, with Ruby 2.2 and 2.3__
32
32
  * Support for reparenting children (and all their descendants)
33
33
  * Support for [single-table inheritance (STI)](#sti) within the hierarchy
34
34
  * ```find_or_create_by_path``` for [building out heterogeneous hierarchies quickly and conveniently](#find_or_create_by_path)
@@ -254,7 +254,7 @@ b.hash_tree(:limit_depth => 2)
254
254
  Without this option, ```hash_tree``` will load the entire contents of that table into RAM. Your
255
255
  server may not be happy trying to do this.
256
256
 
257
- HT: [ancestry](https://github.com/stefankroes/ancestry#arrangement) and [elhoyos](https://github.com/mceachen/closure_tree/issues/11)
257
+ HT: [ancestry](https://github.com/stefankroes/ancestry#arrangement) and [elhoyos](https://github.com/ClosureTree/closure_tree/issues/11)
258
258
 
259
259
  ### Eager loading
260
260
 
@@ -305,13 +305,13 @@ File.open("example.dot", "w") { |f| f.write(Tag.root.to_dot_digraph) }
305
305
  ```
306
306
  Then, in a shell, ```dot -Tpng example.dot > example.png```, which produces:
307
307
 
308
- ![Example tree](https://raw.github.com/mceachen/closure_tree/master/img/example.png)
308
+ ![Example tree](https://raw.github.com/ClosureTree/closure_tree/master/img/example.png)
309
309
 
310
310
  If you want to customize the label value, override the ```#to_digraph_label``` instance method in your model.
311
311
 
312
312
  Just for kicks, this is the test tree I used for proving that preordered tree traversal was correct:
313
313
 
314
- ![Preordered test tree](https://raw.github.com/mceachen/closure_tree/master/img/preorder.png)
314
+ ![Preordered test tree](https://raw.github.com/ClosureTree/closure_tree/master/img/preorder.png)
315
315
 
316
316
  ### Available options
317
317
 
@@ -484,7 +484,7 @@ Several methods, especially ```#rebuild``` and ```#find_or_create_by_path```, ca
484
484
 
485
485
  Database row-level locks work correctly with PostgreSQL, but MySQL's row-level locking is broken, and
486
486
  erroneously reports deadlocks where there are none. To work around this, and have a consistent implementation
487
- for both MySQL and PostgreSQL, [with_advisory_lock](https://github.com/mceachen/with_advisory_lock)
487
+ for both MySQL and PostgreSQL, [with_advisory_lock](https://github.com/ClosureTree/with_advisory_lock)
488
488
  is used automatically to ensure correctness.
489
489
 
490
490
  If you are already managing concurrency elsewhere in your application, and want to disable the use
@@ -499,6 +499,15 @@ end
499
499
  Note that you *will eventually have data corruption* if you disable advisory locks, write to your
500
500
  database with multiple threads, and don't provide an alternative mutex.
501
501
 
502
+ ## I18n
503
+
504
+ You can customize error messages using [I18n](http://guides.rubyonrails.org/i18n.html):
505
+
506
+ ```yaml
507
+ en-US:
508
+ closure_tree:
509
+ loop_error: Your descendant cannot be your parent!
510
+ ```
502
511
 
503
512
  ## FAQ
504
513
 
@@ -508,7 +517,7 @@ Yup! [Ilya Bodrov](https://github.com/bodrovis) wrote [Nested Comments with Rail
508
517
 
509
518
  ### Does this work well with ```#default_scope```?
510
519
 
511
- **No.** Please see [issue 86](https://github.com/mceachen/closure_tree/issues/86) for details.
520
+ **No.** Please see [issue 86](https://github.com/ClosureTree/closure_tree/issues/86) for details.
512
521
 
513
522
  ### Can I update parentage with `update_attribute`?
514
523
 
@@ -517,7 +526,7 @@ hierarchy table.
517
526
 
518
527
  ### Can I assign a parent to multiple children with ```#update_all```?
519
528
 
520
- **No.** Please see [issue 197](https://github.com/mceachen/closure_tree/issues/197) for details.
529
+ **No.** Please see [issue 197](https://github.com/ClosureTree/closure_tree/issues/197) for details.
521
530
 
522
531
  ### Does this gem support multiple parents?
523
532
 
@@ -576,11 +585,11 @@ bundle install
576
585
 
577
586
  ### Object destroy fails with MySQL v5.7+
578
587
 
579
- A bug was introduced in MySQL's query optimizer. [See the workaround here](https://github.com/mceachen/closure_tree/issues/206).
588
+ A bug was introduced in MySQL's query optimizer. [See the workaround here](https://github.com/ClosureTree/closure_tree/issues/206).
580
589
 
581
590
  ### Hierarchy maintenance errors from MySQL v5.7.9-v5.7.10
582
591
 
583
- Upgrade to MySQL 5.7.12 or later if you see [this issue](https://github.com/mceachen/closure_tree/issues/190):
592
+ Upgrade to MySQL 5.7.12 or later if you see [this issue](https://github.com/ClosureTree/closure_tree/issues/190):
584
593
 
585
594
  Mysql2::Error: You can't specify target table '*_hierarchies' for update in FROM clause
586
595
 
@@ -617,10 +626,10 @@ end
617
626
 
618
627
  ## Testing
619
628
 
620
- Closure tree is [tested under every valid combination](http://travis-ci.org/#!/mceachen/closure_tree) of
629
+ Closure tree is [tested under every valid combination](http://travis-ci.org/#!/ClosureTree/closure_tree) of
621
630
 
622
631
  * Ruby 2.2, 2.3
623
- * ActiveRecord 4.2 and 5.0
632
+ * ActiveRecord 4.2, 5.0, and 5.1
624
633
  * PostgreSQL, MySQL, and SQLite. Concurrency tests are only run with MySQL and PostgreSQL.
625
634
 
626
635
  Assuming you're using [rbenv](https://github.com/sstephenson/rbenv), you can use ```tests.sh``` to
@@ -628,12 +637,12 @@ run the test matrix locally.
628
637
 
629
638
  ## Change log
630
639
 
631
- See the [change log](https://github.com/mceachen/closure_tree/blob/master/CHANGELOG.md).
640
+ See the [change log](https://github.com/ClosureTree/closure_tree/blob/master/CHANGELOG.md).
632
641
 
633
642
  ## Thanks to
634
643
 
635
644
  * The 45+ engineers around the world that have contributed their time and code to this gem
636
- (see the [changelog](https://github.com/mceachen/closure_tree/blob/master/CHANGELOG.md)!)
645
+ (see the [changelog](https://github.com/ClosureTree/closure_tree/blob/master/CHANGELOG.md)!)
637
646
  * https://github.com/collectiveidea/awesome_nested_set
638
647
  * https://github.com/patshaughnessy/class_factory
639
648
  * JetBrains, which provides an [open-source license](http://www.jetbrains.com/ruby/buy/buy.jsp#openSource) to
@@ -2,8 +2,7 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activerecord", "~> 5.0.0"
6
- gem "foreigner"
5
+ gem "activerecord", "~> 5.1.0"
7
6
 
8
7
  platforms :ruby, :rbx do
9
8
  gem "mysql2"
@@ -29,6 +29,8 @@ module ClosureTree
29
29
 
30
30
  include ClosureTree::DeterministicOrdering if _ct.order_option?
31
31
  include ClosureTree::NumericDeterministicOrdering if _ct.order_is_numeric?
32
+
33
+ connection_pool.release_connection
32
34
  rescue StandardError => e
33
35
  raise e unless ClosureTree.configuration.database_less
34
36
  end
@@ -81,6 +81,8 @@ module ClosureTree
81
81
 
82
82
  @closure_tree_roots[assoc_name][assoc_map] = root
83
83
  end
84
+
85
+ connection_pool.release_connection
84
86
  end
85
87
  end
86
88
  end
@@ -35,10 +35,13 @@ module ClosureTree
35
35
  end
36
36
 
37
37
  def _ct_after_save
38
- if changes[_ct.parent_column_name] || @was_new_record
38
+ as_5_1 = ActiveSupport.version >= Gem::Version.new('5.1.0')
39
+ changes_method = as_5_1 ? :saved_changes : :changes
40
+
41
+ if public_send(changes_method)[_ct.parent_column_name] || @was_new_record
39
42
  rebuild!
40
43
  end
41
- if changes[_ct.parent_column_name] && !@was_new_record
44
+ if public_send(changes_method)[_ct.parent_column_name] && !@was_new_record
42
45
  # Resetting the ancestral collections addresses
43
46
  # https://github.com/mceachen/closure_tree/issues/68
44
47
  ancestor_hierarchies.reload
@@ -10,8 +10,13 @@ module ClosureTree
10
10
  end
11
11
 
12
12
  def _ct_reorder_prior_siblings_if_parent_changed
13
- if attribute_changed?(_ct.parent_column_name) && !@was_new_record
14
- was_parent_id = attribute_was(_ct.parent_column_name)
13
+ as_5_1 = ActiveSupport.version >= Gem::Version.new('5.1.0')
14
+ change_method = as_5_1 ? :saved_change_to_attribute? : :attribute_changed?
15
+
16
+ if public_send(change_method, _ct.parent_column_name) && !@was_new_record
17
+ attribute_method = as_5_1 ? :attribute_before_last_save : :attribute_was
18
+
19
+ was_parent_id = public_send(attribute_method, _ct.parent_column_name)
15
20
  _ct.reorder_with_parent_id(was_parent_id)
16
21
  end
17
22
  end
@@ -44,7 +44,8 @@ module ClosureTree
44
44
  FROM #{quoted_table_name}
45
45
  WHERE #{where_eq(parent_column_name, parent_id)} #{min_where}
46
46
  ) AS t
47
- WHERE #{quoted_table_name}.#{quoted_id_column_name} = t.id
47
+ WHERE #{quoted_table_name}.#{quoted_id_column_name} = t.id and
48
+ #{quoted_table_name}.#{quoted_order_column(false)} is distinct from t.seq + #{minimum_sort_order_value.to_i - 1}
48
49
  SQL
49
50
  end
50
51
 
@@ -1,3 +1,3 @@
1
1
  module ClosureTree
2
- VERSION = Gem::Version.new('6.5.0')
2
+ VERSION = Gem::Version.new('6.6.0')
3
3
  end
@@ -5,7 +5,7 @@ ActiveRecord::Schema.define(:version => 0) do
5
5
  create_table "tags" do |t|
6
6
  t.string "name"
7
7
  t.string "title"
8
- t.integer "parent_id"
8
+ t.references "parent"
9
9
  t.integer "sort_order"
10
10
  t.timestamps null: false
11
11
  end
@@ -13,8 +13,8 @@ ActiveRecord::Schema.define(:version => 0) do
13
13
  add_foreign_key(:tags, :tags, :column => 'parent_id')
14
14
 
15
15
  create_table "tag_hierarchies", :id => false do |t|
16
- t.integer "ancestor_id", :null => false
17
- t.integer "descendant_id", :null => false
16
+ t.references "ancestor", :null => false
17
+ t.references "descendant", :null => false
18
18
  t.integer "generations", :null => false
19
19
  end
20
20
 
@@ -61,7 +61,7 @@ ActiveRecord::Schema.define(:version => 0) do
61
61
 
62
62
  create_table "users" do |t|
63
63
  t.string "email"
64
- t.integer "referrer_id"
64
+ t.references "referrer"
65
65
  t.integer "group_id"
66
66
  t.timestamps null: false
67
67
  end
@@ -69,8 +69,8 @@ ActiveRecord::Schema.define(:version => 0) do
69
69
  add_foreign_key(:users, :users, :column => 'referrer_id')
70
70
 
71
71
  create_table "contracts" do |t|
72
- t.integer "user_id", :null => false
73
- t.integer "contract_type_id"
72
+ t.references "user", :null => false
73
+ t.references "contract_type"
74
74
  t.string "title"
75
75
  end
76
76
 
@@ -79,8 +79,8 @@ ActiveRecord::Schema.define(:version => 0) do
79
79
  end
80
80
 
81
81
  create_table "referral_hierarchies", :id => false do |t|
82
- t.integer "ancestor_id", :null => false
83
- t.integer "descendant_id", :null => false
82
+ t.references "ancestor", :null => false
83
+ t.references "descendant", :null => false
84
84
  t.integer "generations", :null => false
85
85
  end
86
86
 
@@ -91,14 +91,14 @@ ActiveRecord::Schema.define(:version => 0) do
91
91
  t.string "name"
92
92
  t.string "type"
93
93
  t.integer "column_whereby_ordering_is_inferred"
94
- t.integer "mother_id"
94
+ t.references "mother"
95
95
  end
96
96
 
97
97
  add_foreign_key(:labels, :labels, :column => 'mother_id')
98
98
 
99
99
  create_table "label_hierarchies", :id => false do |t|
100
- t.integer "ancestor_id", :null => false
101
- t.integer "descendant_id", :null => false
100
+ t.references "ancestor", :null => false
101
+ t.references "descendant", :null => false
102
102
  t.integer "generations", :null => false
103
103
  end
104
104
 
@@ -107,28 +107,28 @@ ActiveRecord::Schema.define(:version => 0) do
107
107
 
108
108
  create_table "cuisine_types" do |t|
109
109
  t.string "name"
110
- t.integer "parent_id"
110
+ t.references "parent"
111
111
  end
112
112
 
113
113
  create_table "cuisine_type_hierarchies", :id => false do |t|
114
- t.integer "ancestor_id", :null => false
115
- t.integer "descendant_id", :null => false
114
+ t.references "ancestor", :null => false
115
+ t.references "descendant", :null => false
116
116
  t.integer "generations", :null => false
117
117
  end
118
118
 
119
119
  create_table "namespace_types" do |t|
120
120
  t.string "name"
121
- t.integer "parent_id"
121
+ t.references "parent"
122
122
  end
123
123
 
124
124
  create_table "namespace_type_hierarchies", :id => false do |t|
125
- t.integer "ancestor_id", :null => false
126
- t.integer "descendant_id", :null => false
125
+ t.references "ancestor", :null => false
126
+ t.references "descendant", :null => false
127
127
  t.integer "generations", :null => false
128
128
  end
129
129
 
130
130
  create_table "metal" do |t|
131
- t.integer "parent_id"
131
+ t.references "parent"
132
132
  t.string "metal_type"
133
133
  t.string "value"
134
134
  t.string "description"
@@ -138,8 +138,8 @@ ActiveRecord::Schema.define(:version => 0) do
138
138
  add_foreign_key(:metal, :metal, :column => 'parent_id')
139
139
 
140
140
  create_table "metal_hierarchies", :id => false do |t|
141
- t.integer "ancestor_id", :null => false
142
- t.integer "descendant_id", :null => false
141
+ t.references "ancestor", :null => false
142
+ t.references "descendant", :null => false
143
143
  t.integer "generations", :null => false
144
144
  end
145
145
 
@@ -148,15 +148,15 @@ ActiveRecord::Schema.define(:version => 0) do
148
148
 
149
149
  create_table 'menu_items' do |t|
150
150
  t.string 'name'
151
- t.integer 'parent_id'
151
+ t.references 'parent'
152
152
  t.timestamps null: false
153
153
  end
154
154
 
155
155
  add_foreign_key(:menu_items, :menu_items, :column => 'parent_id')
156
156
 
157
157
  create_table 'menu_item_hierarchies', :id => false do |t|
158
- t.integer 'ancestor_id', :null => false
159
- t.integer 'descendant_id', :null => false
158
+ t.references 'ancestor', :null => false
159
+ t.references 'descendant', :null => false
160
160
  t.integer 'generations', :null => false
161
161
  end
162
162
 
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Configuration' do
4
+ it 'returns connection to the pool after has_closure_tree setup' do
5
+ class TypeDuplicate < ActiveRecord::Base
6
+ self.table_name = "namespace_type#{table_name_suffix}"
7
+ has_closure_tree
8
+ end
9
+ expect(ActiveRecord::Base.connection_pool.active_connection?).to be_falsey # +false+ in AR 4, +nil+ in AR 5
10
+ end
11
+
12
+ it 'returns connection to the pool after has_closure_tree setup with order' do
13
+ class MetalDuplicate < ActiveRecord::Base
14
+ self.table_name = "#{table_name_prefix}metal#{table_name_suffix}"
15
+ has_closure_tree order: 'sort_order', name_column: 'value'
16
+ end
17
+ expect(ActiveRecord::Base.connection_pool.active_connection?).to be_falsey
18
+ end
19
+
20
+ it 'returns connection to the pool after has_closure_tree_root setup' do
21
+ class GroupDuplicate < ActiveRecord::Base
22
+ self.table_name = "#{table_name_prefix}group#{table_name_suffix}"
23
+ has_closure_tree_root :root_user
24
+ end
25
+ expect(ActiveRecord::Base.connection_pool.active_connection?).to be_falsey
26
+ end
27
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: closure_tree
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.5.0
4
+ version: 6.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew McEachen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-17 00:00:00.000000000 Z
11
+ date: 2017-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -142,7 +142,7 @@ files:
142
142
  - closure_tree.gemspec
143
143
  - gemfiles/activerecord_4.2.gemfile
144
144
  - gemfiles/activerecord_5.0.gemfile
145
- - gemfiles/activerecord_5.0_foreigner.gemfile
145
+ - gemfiles/activerecord_5.1.gemfile
146
146
  - gemfiles/activerecord_edge.gemfile
147
147
  - img/example.png
148
148
  - img/preorder.png
@@ -185,6 +185,7 @@ files:
185
185
  - spec/model_spec.rb
186
186
  - spec/namespace_type_spec.rb
187
187
  - spec/parallel_spec.rb
188
+ - spec/pool_spec.rb
188
189
  - spec/spec_helper.rb
189
190
  - spec/support/database.rb
190
191
  - spec/support/database_cleaner.rb
@@ -218,7 +219,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
218
219
  version: '0'
219
220
  requirements: []
220
221
  rubyforge_project:
221
- rubygems_version: 2.5.1
222
+ rubygems_version: 2.6.8
222
223
  signing_key:
223
224
  specification_version: 4
224
225
  summary: Easily and efficiently make your ActiveRecord model support hierarchies
@@ -238,6 +239,7 @@ test_files:
238
239
  - spec/model_spec.rb
239
240
  - spec/namespace_type_spec.rb
240
241
  - spec/parallel_spec.rb
242
+ - spec/pool_spec.rb
241
243
  - spec/spec_helper.rb
242
244
  - spec/support/database.rb
243
245
  - spec/support/database_cleaner.rb