julik-make_like_a_tree 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
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