ordered_tree 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.8
1
+ 0.1.9
data/lib/ordered_tree.rb CHANGED
@@ -30,29 +30,19 @@ module OrderedTree #:nodoc:
30
30
  belongs_to :parent_node,
31
31
  :class_name => self.name,
32
32
  :foreign_key => ordered_tree_config[:foreign_key],
33
- :primary_key => ordered_tree_config[:primary_key]
33
+ :primary_key => ordered_tree_config[:primary_key],
34
+ :conditions => proc {scope_condition}
34
35
  has_many :child_nodes,
35
36
  :class_name => self.name,
36
37
  :foreign_key => ordered_tree_config[:foreign_key],
37
38
  :primary_key => ordered_tree_config[:primary_key],
39
+ :conditions => proc {scope_condition},
38
40
  :order => ordered_tree_config[:order]
39
41
  scope :roots, lambda { |*args|
40
42
  scope_condition = args[0]
41
43
  where(scope_condition).where(self.ordered_tree_config[:foreign_key].to_sym => 0).order(self.ordered_tree_config[:order])
42
44
  }
43
45
 
44
- # If the scope is something like :person, then turn it into :person_id
45
- if self.ordered_tree_config[:scope].is_a?(Symbol) && self.ordered_tree_config[:scope].to_s !~ /_id$/
46
- self.ordered_tree_config[:scope] = "#{self.ordered_tree_config[:scope]}_id".intern
47
- end
48
-
49
- if self.ordered_tree_config[:scope].is_a?(Symbol) # ie :person_id
50
- define_method "scope_condition" do
51
- hash = {self.class.ordered_tree_config[:scope].to_sym => send(self.class.ordered_tree_config[:scope].to_sym)}
52
- self.class.send(:sanitize_sql_hash_for_conditions, hash)
53
- end
54
- end
55
-
56
46
  include OrderedTree::ClassMethods
57
47
  include OrderedTree::InstanceMethods
58
48
  end #ordered_tree
@@ -13,9 +13,17 @@ module OrderedTree
13
13
 
14
14
  private
15
15
 
16
- # Overwrite this method to define the scope of the list changes
17
16
  def scope_condition
18
- "1=1"
17
+ return @scope_condition if defined?(@scope_condition)
18
+ scope = self.class.ordered_tree_config[:scope]
19
+ # If the scope is something like :person, then turn it into :person_id
20
+ scope = :"#{scope}_id" if scope.is_a?(Symbol) && scope.to_s !~ /_id$/
21
+
22
+ @scope_condition = if scope
23
+ self.class.send(:sanitize_sql_hash_for_conditions, {scope => send(scope)})
24
+ else
25
+ "1=1"
26
+ end
19
27
  end
20
28
  end
21
29
  end
data/ordered_tree.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ordered_tree}
8
- s.version = "0.1.8"
8
+ s.version = "0.1.9"
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"]
@@ -1,3 +1,3 @@
1
1
  class Category < ActiveRecord::Base
2
- ordered_tree :primary_key => :alt_id
2
+ ordered_tree :primary_key => :alt_id, :scope => :person_id
3
3
  end
@@ -8,10 +8,20 @@ describe OrderedTree do
8
8
 
9
9
  describe "when a primary_key is supplied" do
10
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)
11
+ c1 = Category.create(:person_id => 1, :alt_id => 10)
12
+ c2 = Category.create(:person_id => 1, :parent_id => 10)
13
+ d1 = Category.create(:person_id => 2, :alt_id => 10)
14
+ d2 = Category.create(:person_id => 2, :parent_id => 10)
15
+
13
16
  c2.parent.should == c1
14
17
  c1.children.should include(c2)
18
+ d1.children.should_not include(c2)
19
+ c2.root.should == c1
20
+
21
+ d2.parent.should == d1
22
+ d1.children.should include(d2)
23
+ c1.children.should_not include(d2)
24
+ d2.root.should == d1
15
25
  end
16
26
  end
17
27
 
data/spec/spec_helper.rb CHANGED
@@ -41,6 +41,7 @@ def reset_database
41
41
  t.integer :parent_id, :null => false, :default => 0
42
42
  t.integer :position
43
43
  t.integer :alt_id
44
+ t.integer :person_id
44
45
  end
45
46
  end
46
47
 
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: 11
4
+ hash: 9
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 8
10
- version: 0.1.8
9
+ - 9
10
+ version: 0.1.9
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ramon Tayag
@@ -19,8 +19,9 @@ date: 2011-08-07 00:00:00 +08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
+ name: activerecord
22
23
  type: :runtime
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
+ version_requirements: &id001 !ruby/object:Gem::Requirement
24
25
  none: false
25
26
  requirements:
26
27
  - - ">="
@@ -31,12 +32,12 @@ dependencies:
31
32
  - 0
32
33
  - 0
33
34
  version: 3.0.0
34
- name: activerecord
35
- version_requirements: *id001
36
35
  prerelease: false
36
+ requirement: *id001
37
37
  - !ruby/object:Gem::Dependency
38
+ name: rspec
38
39
  type: :development
39
- requirement: &id002 !ruby/object:Gem::Requirement
40
+ version_requirements: &id002 !ruby/object:Gem::Requirement
40
41
  none: false
41
42
  requirements:
42
43
  - - ~>
@@ -47,12 +48,12 @@ dependencies:
47
48
  - 6
48
49
  - 0
49
50
  version: 2.6.0
50
- name: rspec
51
- version_requirements: *id002
52
51
  prerelease: false
52
+ requirement: *id002
53
53
  - !ruby/object:Gem::Dependency
54
+ name: bundler
54
55
  type: :development
55
- requirement: &id003 !ruby/object:Gem::Requirement
56
+ version_requirements: &id003 !ruby/object:Gem::Requirement
56
57
  none: false
57
58
  requirements:
58
59
  - - ~>
@@ -63,12 +64,12 @@ dependencies:
63
64
  - 0
64
65
  - 0
65
66
  version: 1.0.0
66
- name: bundler
67
- version_requirements: *id003
68
67
  prerelease: false
68
+ requirement: *id003
69
69
  - !ruby/object:Gem::Dependency
70
+ name: jeweler
70
71
  type: :development
71
- requirement: &id004 !ruby/object:Gem::Requirement
72
+ version_requirements: &id004 !ruby/object:Gem::Requirement
72
73
  none: false
73
74
  requirements:
74
75
  - - ~>
@@ -79,12 +80,12 @@ dependencies:
79
80
  - 6
80
81
  - 2
81
82
  version: 1.6.2
82
- name: jeweler
83
- version_requirements: *id004
84
83
  prerelease: false
84
+ requirement: *id004
85
85
  - !ruby/object:Gem::Dependency
86
+ name: rcov
86
87
  type: :development
87
- requirement: &id005 !ruby/object:Gem::Requirement
88
+ version_requirements: &id005 !ruby/object:Gem::Requirement
88
89
  none: false
89
90
  requirements:
90
91
  - - ">="
@@ -93,12 +94,12 @@ dependencies:
93
94
  segments:
94
95
  - 0
95
96
  version: "0"
96
- name: rcov
97
- version_requirements: *id005
98
97
  prerelease: false
98
+ requirement: *id005
99
99
  - !ruby/object:Gem::Dependency
100
+ name: sqlite3
100
101
  type: :development
101
- requirement: &id006 !ruby/object:Gem::Requirement
102
+ version_requirements: &id006 !ruby/object:Gem::Requirement
102
103
  none: false
103
104
  requirements:
104
105
  - - ">="
@@ -107,12 +108,12 @@ dependencies:
107
108
  segments:
108
109
  - 0
109
110
  version: "0"
110
- name: sqlite3
111
- version_requirements: *id006
112
111
  prerelease: false
112
+ requirement: *id006
113
113
  - !ruby/object:Gem::Dependency
114
+ name: guard-rspec
114
115
  type: :development
115
- requirement: &id007 !ruby/object:Gem::Requirement
116
+ version_requirements: &id007 !ruby/object:Gem::Requirement
116
117
  none: false
117
118
  requirements:
118
119
  - - ">="
@@ -121,12 +122,12 @@ dependencies:
121
122
  segments:
122
123
  - 0
123
124
  version: "0"
124
- name: guard-rspec
125
- version_requirements: *id007
126
125
  prerelease: false
126
+ requirement: *id007
127
127
  - !ruby/object:Gem::Dependency
128
+ name: libnotify
128
129
  type: :development
129
- requirement: &id008 !ruby/object:Gem::Requirement
130
+ version_requirements: &id008 !ruby/object:Gem::Requirement
130
131
  none: false
131
132
  requirements:
132
133
  - - ">="
@@ -135,12 +136,12 @@ dependencies:
135
136
  segments:
136
137
  - 0
137
138
  version: "0"
138
- name: libnotify
139
- version_requirements: *id008
140
139
  prerelease: false
140
+ requirement: *id008
141
141
  - !ruby/object:Gem::Dependency
142
+ name: rb-inotify
142
143
  type: :development
143
- requirement: &id009 !ruby/object:Gem::Requirement
144
+ version_requirements: &id009 !ruby/object:Gem::Requirement
144
145
  none: false
145
146
  requirements:
146
147
  - - ">="
@@ -149,9 +150,8 @@ dependencies:
149
150
  segments:
150
151
  - 0
151
152
  version: "0"
152
- name: rb-inotify
153
- version_requirements: *id009
154
153
  prerelease: false
154
+ requirement: *id009
155
155
  description: Uses parent_id and position to create an ordered tree.
156
156
  email: ramon@tayag.net
157
157
  executables: []