ordered_tree 0.1.7 → 0.1.8

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.textile CHANGED
@@ -154,6 +154,14 @@ pre. def scope_condition
154
154
  "site_id = #{site_id} AND user_login = '#{user_login}'"
155
155
  end
156
156
 
157
+ h2. Making parent_id (the foreign key) point to something else
158
+
159
+ If you want @parent_id@ to point to something else instead of the id, then supply @:primary_key => :alternate_id@ to the @ordered_tree@ method. This will only probably be useful in tandem with a scope:
160
+
161
+ <pre>
162
+ ordered_tree :primary_key => :relative_id, :scope => :account
163
+ </pre>
164
+
157
165
  h2. Install
158
166
 
159
167
  gem 'ordered_tree'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.7
1
+ 0.1.8
data/lib/ordered_tree.rb CHANGED
@@ -24,10 +24,18 @@ module OrderedTree #:nodoc:
24
24
  self.ordered_tree_config ||= {}
25
25
  self.ordered_tree_config[:foreign_key] ||= :parent_id
26
26
  self.ordered_tree_config[:order] ||= :position
27
+ self.ordered_tree_config[:primary_key] ||= :id
27
28
  self.ordered_tree_config.update(options) if options.is_a?(Hash)
28
29
 
29
- belongs_to :parent_node, :class_name => self.name, :foreign_key => ordered_tree_config[:foreign_key]
30
- has_many :child_nodes, :class_name => self.name, :foreign_key => ordered_tree_config[:foreign_key], :order => ordered_tree_config[:order]
30
+ belongs_to :parent_node,
31
+ :class_name => self.name,
32
+ :foreign_key => ordered_tree_config[:foreign_key],
33
+ :primary_key => ordered_tree_config[:primary_key]
34
+ has_many :child_nodes,
35
+ :class_name => self.name,
36
+ :foreign_key => ordered_tree_config[:foreign_key],
37
+ :primary_key => ordered_tree_config[:primary_key],
38
+ :order => ordered_tree_config[:order]
31
39
  scope :roots, lambda { |*args|
32
40
  scope_condition = args[0]
33
41
  where(scope_condition).where(self.ordered_tree_config[:foreign_key].to_sym => 0).order(self.ordered_tree_config[:order])
data/ordered_tree.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ordered_tree}
8
- s.version = "0.1.7"
8
+ s.version = "0.1.8"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ramon Tayag"]
12
- s.date = %q{2011-06-15}
12
+ s.date = %q{2011-08-07}
13
13
  s.description = %q{Uses parent_id and position to create an ordered tree.}
14
14
  s.email = %q{ramon@tayag.net}
15
15
  s.extra_rdoc_files = [
@@ -34,6 +34,7 @@ Gem::Specification.new do |s|
34
34
  "lib/ordered_tree/instance_methods/misc.rb",
35
35
  "lib/ordered_tree/instance_methods/tree.rb",
36
36
  "ordered_tree.gemspec",
37
+ "spec/fixtures/category.rb",
37
38
  "spec/fixtures/page.rb",
38
39
  "spec/fixtures/person.rb",
39
40
  "spec/ordered_tree_spec.rb",
@@ -0,0 +1,3 @@
1
+ class Category < ActiveRecord::Base
2
+ ordered_tree :primary_key => :alt_id
3
+ end
@@ -6,6 +6,15 @@ describe OrderedTree do
6
6
  @people = Person.all
7
7
  end
8
8
 
9
+ describe "when a primary_key is supplied" do
10
+ it "should use the parent_id to point to the primary_key instead of :id" do
11
+ c1 = Category.create(:alt_id => 10)
12
+ c2 = Category.create(:parent_id => 10)
13
+ c2.parent.should == c1
14
+ c1.children.should include(c2)
15
+ end
16
+ end
17
+
9
18
  describe "when a scope is supplied" do
10
19
  # This is especially important for working with root items that may belong to different accounts
11
20
  it "should only work within that scope" do
@@ -59,6 +68,15 @@ describe OrderedTree do
59
68
  page_4.parent.should == nil
60
69
  page_5.position.should == 1
61
70
  page_5.parent.should == nil
71
+
72
+ # delete a root item
73
+ page_1.destroy
74
+
75
+ # reload all
76
+ [page_2, page_4, page_5].map(&:reload).each do |page|
77
+ page.position.should == 1
78
+ page.parent.should be_nil
79
+ end
62
80
  end
63
81
  end
64
82
 
data/spec/spec_helper.rb CHANGED
@@ -6,6 +6,7 @@ require 'rspec'
6
6
  require 'ordered_tree'
7
7
  require 'spec/fixtures/person'
8
8
  require 'spec/fixtures/page'
9
+ require 'spec/fixtures/category'
9
10
 
10
11
  #Allow to connect to SQLite
11
12
  ActiveRecord::Base.establish_connection(
@@ -21,7 +22,7 @@ RSpec.configure do |config|
21
22
  end
22
23
 
23
24
  def reset_database
24
- %W(people pages).each do |table_name|
25
+ %W(people pages categories).each do |table_name|
25
26
  ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS '#{table_name}'")
26
27
  end
27
28
  ActiveRecord::Base.connection.create_table(:people) do |t|
@@ -36,6 +37,11 @@ def reset_database
36
37
  t.string :name
37
38
  t.integer :person_id
38
39
  end
40
+ ActiveRecord::Base.connection.create_table(:categories) do |t|
41
+ t.integer :parent_id, :null => false, :default => 0
42
+ t.integer :position
43
+ t.integer :alt_id
44
+ end
39
45
  end
40
46
 
41
47
  def ordered_tree(klass, *opts)
@@ -46,7 +52,7 @@ ensure
46
52
  end
47
53
 
48
54
  # Test Tree
49
- #
55
+ #
50
56
  # We will be working with this tree through out the tests
51
57
  #
52
58
  # people[0]
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ordered_tree
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 11
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 7
10
- version: 0.1.7
9
+ - 8
10
+ version: 0.1.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ramon Tayag
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-06-15 00:00:00 +08:00
18
+ date: 2011-08-07 00:00:00 +08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -179,6 +179,7 @@ files:
179
179
  - lib/ordered_tree/instance_methods/misc.rb
180
180
  - lib/ordered_tree/instance_methods/tree.rb
181
181
  - ordered_tree.gemspec
182
+ - spec/fixtures/category.rb
182
183
  - spec/fixtures/page.rb
183
184
  - spec/fixtures/person.rb
184
185
  - spec/ordered_tree_spec.rb