ordered_tree 0.1.7 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +8 -0
- data/VERSION +1 -1
- data/lib/ordered_tree.rb +10 -2
- data/ordered_tree.gemspec +3 -2
- data/spec/fixtures/category.rb +3 -0
- data/spec/ordered_tree_spec.rb +18 -0
- data/spec/spec_helper.rb +8 -2
- metadata +5 -4
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.
|
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,
|
30
|
-
|
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.
|
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-
|
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",
|
data/spec/ordered_tree_spec.rb
CHANGED
@@ -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:
|
4
|
+
hash: 11
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
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-
|
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
|