julik-make_like_a_tree 1.0.2 → 1.0.3

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.
data/README.txt CHANGED
@@ -59,7 +59,11 @@ Add a bare init file to your app and there:
59
59
  require 'make_like_tree'
60
60
  Julik::MakeLikeTree.bootstrap!
61
61
 
62
- That way you can keep the plugin in gems. Or just vendorize it, it has a built-in init.rb
62
+ Or just vendorize it, it has a built-in init.rb. You can also use the
63
+ plugin without unpacking it, to do so put the following in the config:
64
+
65
+ config.gem "make_like_a_tree"
66
+ config.after_initialize { Julik::MakeLikeTree.bootstrap! }
63
67
 
64
68
  == LICENSE:
65
69
 
@@ -3,7 +3,7 @@ module Julik
3
3
  class ImpossibleReparent < RuntimeError
4
4
  end
5
5
 
6
- VERSION = '1.0.2'
6
+ VERSION = '1.0.3'
7
7
  def self.included(base) #:nodoc:
8
8
  super
9
9
  base.extend(ClassMethods)
@@ -44,6 +44,7 @@ module Julik
44
44
 
45
45
  after_create :apply_parenting_after_create
46
46
 
47
+
47
48
  # before_update :register_parent_id_before_update, :unless => :new_record?
48
49
  # after_update :replant_after_update
49
50
 
@@ -300,21 +301,34 @@ module Julik
300
301
  end
301
302
  alias_method :children_count, :child_count
302
303
 
303
- # Shortcut to determine if our left and right values allow for possible children
304
+ # Shortcut to determine if our left and right values allow for possible children.
305
+ # Note the difference in wording between might_have and has - if this method returns false,
306
+ # it means you should look no further. If it returns true, you should really examine
307
+ # the children to be sure
304
308
  def might_have_children?
305
309
  (self[right_col_name] - self[left_col_name]) > 1
306
310
  end
307
311
 
308
312
  # Returns a set of itself and all of its nested children
309
- def full_set
313
+ def full_set(extras = {})
310
314
  [self] + all_children
311
315
  end
312
316
  alias_method :all_children_and_self, :full_set
313
317
 
314
318
  # Returns a set of all of its children and nested children
315
- def all_children
319
+ def all_children(extras = {})
316
320
  return [] unless might_have_children? # optimization shortcut
317
- self.class.find(:all, :conditions => conditions_for_all_children, :order => "#{left_col_name} ASC")
321
+ self.class.scoped(scope_hash_for_branch).find(:all, extras)
322
+ end
323
+
324
+ # Returns scoping options suitable for fetching all children
325
+ def scope_hash_for_branch
326
+ {:conditions => conditions_for_all_children, :order => "#{left_col_name} ASC" }
327
+ end
328
+
329
+ # Returns scopint options suitable for fetching direct children
330
+ def scope_hash_for_direct_children
331
+ {:conditions => "#{scope_condition} AND #{parent_column} = #{self.id}", :order => "#{left_col_name} ASC"}
318
332
  end
319
333
 
320
334
  # Get conditions for direct and indirect children of this record
@@ -340,12 +354,9 @@ module Julik
340
354
  end
341
355
 
342
356
  # Returns a set of only this entry's immediate children, also ordered by position
343
- def direct_children
357
+ def direct_children(extras = {})
344
358
  return [] unless might_have_children? # optimize!
345
- self.class.find(:all,
346
- :conditions => "#{scope_condition} AND #{parent_column} = #{self.id}",
347
- :order => 'lft ASC'
348
- )
359
+ self.class.scoped(scope_hash_for_direct_children).find(:all, extras)
349
360
  end
350
361
 
351
362
  # Make this item a root node
@@ -321,6 +321,30 @@ context "A Node used with OrderedTree should" do
321
321
  child.add_child(root).should.equal false
322
322
  end
323
323
 
324
+ specify "support additional find options via scoped finds on all_children" do
325
+ root = emit :name => "foo"
326
+ child = emit :name => "bar", :parent_id => root.id
327
+ another_child = emit :name => "another", :parent_id => root.id
328
+
329
+ reload(root)
330
+
331
+ root.all_children.should.equal [child, another_child]
332
+ root.all_children(:conditions => {:name => "another"}).should.equal [another_child]
333
+ end
334
+
335
+ specify "support additional find options via scoped finds on direct_children" do
336
+ root = emit :name => "foo"
337
+ anoter_root = emit :name => "another"
338
+
339
+ child = emit :name => "bar", :parent_id => root.id
340
+ another_child = emit :name => "another", :parent_id => root.id
341
+
342
+ reload(root)
343
+
344
+ root.direct_children.should.equal [child, another_child]
345
+ root.direct_children(:conditions => {:name => "another"}).should.equal [another_child]
346
+ end
347
+
324
348
  specify "support promote_to_root" do
325
349
  a, b = emit_many(2)
326
350
  c = emit(:name => "Subtree", :parent_id => a.id)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: julik-make_like_a_tree
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julik