collectiveidea-awesome_nested_set 1.4.0 → 1.4.1

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/VERSION CHANGED
@@ -1 +1 @@
1
- 1.4.0
1
+ 1.4.1
@@ -1,12 +1,15 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
1
4
  # -*- encoding: utf-8 -*-
2
5
 
3
6
  Gem::Specification.new do |s|
4
7
  s.name = %q{awesome_nested_set}
5
- s.version = "1.4.0"
8
+ s.version = "1.4.1"
6
9
 
7
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
11
  s.authors = ["Brandon Keepers", "Daniel Morrison"]
9
- s.date = %q{2009-09-03}
12
+ s.date = %q{2009-09-06}
10
13
  s.description = %q{An awesome nested set implementation for Active Record}
11
14
  s.email = %q{info@collectiveidea.com}
12
15
  s.extra_rdoc_files = [
@@ -35,10 +38,11 @@ Gem::Specification.new do |s|
35
38
  "test/fixtures/notes.yml",
36
39
  "test/test_helper.rb"
37
40
  ]
41
+ s.has_rdoc = true
38
42
  s.homepage = %q{http://github.com/collectiveidea/awesome_nested_set}
39
43
  s.rdoc_options = ["--main", "README.rdoc", "--inline-source", "--line-numbers"]
40
44
  s.require_paths = ["lib"]
41
- s.rubygems_version = %q{1.3.3}
45
+ s.rubygems_version = %q{1.3.1}
42
46
  s.summary = %q{An awesome nested set implementation for Active Record}
43
47
  s.test_files = [
44
48
  "test/db/database.yml",
@@ -55,7 +59,7 @@ Gem::Specification.new do |s|
55
59
 
56
60
  if s.respond_to? :specification_version then
57
61
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
58
- s.specification_version = 3
62
+ s.specification_version = 2
59
63
 
60
64
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
61
65
  s.add_runtime_dependency(%q<activerecord>, [">= 1.1"])
@@ -187,6 +187,30 @@ module CollectiveIdea #:nodoc:
187
187
  set_left_and_rights.call(root_node)
188
188
  end
189
189
  end
190
+
191
+ # Iterates over tree elements and determines the current level in the tree.
192
+ # Only accepts default ordering, odering by an other column than lft
193
+ # does not work. This method is much more efficent than calling level
194
+ # because it doesn't require any additional database queries.
195
+ #
196
+ # Example:
197
+ # Category.each_with_level(Category.root.self_and_descendants) do |o, level|
198
+ #
199
+ def each_with_level(objects)
200
+ path = [nil]
201
+ objects.each do |o|
202
+ if o.parent_id != path.last
203
+ # we are on a new level, did we decent or ascent?
204
+ if path.include?(o.parent_id)
205
+ # remove wrong wrong tailing paths elements
206
+ path.pop while path.last != o.parent_id
207
+ else
208
+ path << o.parent_id
209
+ end
210
+ end
211
+ yield(o, path.length - 1)
212
+ end
213
+ end
190
214
  end
191
215
 
192
216
  # Mixed into both classes and instances to provide easy access to the column names
@@ -678,4 +678,49 @@ class AwesomeNestedSetTest < TestCaseClass
678
678
  assert Category.valid?
679
679
  end
680
680
 
681
+ def check_structure(entries, structure)
682
+ structure = structure.dup
683
+ Category.each_with_level(entries) do |category, level|
684
+ expected_level, expected_name = structure.shift
685
+ assert_equal expected_name, category.name, "wrong category"
686
+ assert_equal expected_level, level, "wrong level for #{category.name}"
687
+ end
688
+ end
689
+
690
+ def test_each_with_level
691
+ levels = [
692
+ [0, "Top Level"],
693
+ [1, "Child 1"],
694
+ [1, "Child 2"],
695
+ [2, "Child 2.1"],
696
+ [1, "Child 3" ]]
697
+
698
+ check_structure(Category.root.self_and_descendants, levels)
699
+
700
+ # test some deeper structures
701
+ category = Category.find_by_name("Child 1")
702
+ c1 = Category.new(:name => "Child 1.1")
703
+ c2 = Category.new(:name => "Child 1.1.1")
704
+ c3 = Category.new(:name => "Child 1.1.1.1")
705
+ c4 = Category.new(:name => "Child 1.2")
706
+ [c1, c2, c3, c4].each(&:save!)
707
+
708
+ c1.move_to_child_of(category)
709
+ c2.move_to_child_of(c1)
710
+ c3.move_to_child_of(c2)
711
+ c4.move_to_child_of(category)
712
+
713
+ levels = [
714
+ [0, "Top Level"],
715
+ [1, "Child 1"],
716
+ [2, "Child 1.1"],
717
+ [3, "Child 1.1.1"],
718
+ [4, "Child 1.1.1.1"],
719
+ [2, "Child 1.2"],
720
+ [1, "Child 2"],
721
+ [2, "Child 2.1"],
722
+ [1, "Child 3" ]]
723
+
724
+ check_structure(Category.root.self_and_descendants, levels)
725
+ end
681
726
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: collectiveidea-awesome_nested_set
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Keepers
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-09-03 00:00:00 -07:00
13
+ date: 2009-09-06 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -53,7 +53,7 @@ files:
53
53
  - test/fixtures/departments.yml
54
54
  - test/fixtures/notes.yml
55
55
  - test/test_helper.rb
56
- has_rdoc: false
56
+ has_rdoc: true
57
57
  homepage: http://github.com/collectiveidea/awesome_nested_set
58
58
  post_install_message:
59
59
  rdoc_options:
@@ -80,7 +80,7 @@ requirements: []
80
80
  rubyforge_project:
81
81
  rubygems_version: 1.2.0
82
82
  signing_key:
83
- specification_version: 3
83
+ specification_version: 2
84
84
  summary: An awesome nested set implementation for Active Record
85
85
  test_files:
86
86
  - test/db/database.yml