ordered_tree 0.1.8 → 0.1.9

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
- 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: []