mongoid_acts_as_tree 0.1.1 → 0.1.2

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/Rakefile CHANGED
@@ -11,6 +11,7 @@ begin
11
11
  gem.homepage = "http://github.com/saks/mongoid_acts_as_tree"
12
12
  gem.authors = ["Jakob Vidmar, Aliaksandr Rahalevich"]
13
13
  gem.add_dependency("mongoid", "<= 2.0.0")
14
+ gem.add_dependency("bson", ">= 0.20.1")
14
15
 
15
16
  gem.add_development_dependency "shoulda", ">=2.10.2"
16
17
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -1,171 +1,171 @@
1
1
  require "mongoid"
2
2
 
3
3
  module Mongoid
4
- module Acts
5
- module Tree
6
- def self.included(model)
7
- model.class_eval do
8
- extend InitializerMethods
9
- end
10
- end
11
-
12
- module InitializerMethods
13
- def acts_as_tree(options = {})
14
- options = {
15
- :parent_id_field => "parent_id",
16
- :path_field => "path",
17
- :depth_field => "depth"
18
- }.merge(options)
19
-
20
- write_inheritable_attribute :acts_as_tree_options, options
21
- class_inheritable_reader :acts_as_tree_options
22
-
23
- include InstanceMethods
24
- include Fields
25
- extend Fields
26
- extend ClassMethods
27
-
28
- field parent_id_field, :type => Mongo::ObjectID
29
- field path_field, :type => Array, :default => [], :index => true
30
- field depth_field, :type => Integer, :default => 0
31
-
32
- after_save :move_children
33
- validate :will_save_tree
34
- before_destroy :destroy_descendants
35
- end
36
- end
37
-
38
- module ClassMethods
39
- def roots
40
- self.where(parent_id_field => nil).order_by tree_order
41
- end
42
- end
43
-
44
- module InstanceMethods
45
- def [](field_name)
46
- self.send field_name
47
- end
48
-
49
- def []=(field_name, value)
50
- self.send "#{field_name}=", value
51
- end
52
-
53
- def ==(other)
54
- return true if other.equal?(self)
55
- return true if other.instance_of?(self.class) and other._id == self._id
56
- false
57
- end
58
-
59
- def will_save_tree
60
- if @_cyclic
61
- errors.add(:base, "Can't be children of a descendant")
62
- end
63
- end
64
-
65
- def fix_position
66
- if parent.nil?
67
- self[parent_id_field] = nil
68
- self[path_field] = []
69
- self[depth_field] = 0
70
- else
71
- self[parent_id_field] = parent._id
72
- self[path_field] = parent[path_field] + [parent._id]
73
- self[depth_field] = parent[depth_field] + 1
74
- self.save
75
- end
76
- end
77
-
78
- def parent
79
- @_parent or (self[parent_id_field].nil? ? nil : self.class.find(self[parent_id_field]))
80
- end
81
-
82
- def root?
83
- self[parent_id_field].nil?
84
- end
85
-
86
- def root
87
- self[path_field].first.nil? ? self : self.class.find(self[path_field].first)
88
- end
89
-
90
- def ancestors
91
- return [] if root?
92
- self.class.find(self[path_field])
93
- end
94
-
95
- def self_and_ancestors
96
- ancestors << self
97
- end
98
-
99
- def siblings
100
- self.class.where(:_id.ne => self._id, parent_id_field => self[parent_id_field]).order_by tree_order
101
- end
102
-
103
- def self_and_siblings
104
- self.class.where(parent_id_field => self[parent_id_field]).order_by tree_order
105
- end
106
-
107
- def children
108
- Children.new self
109
- end
110
-
111
- def children=(new_children_list)
112
- self.children.clear
113
- new_children_list.each do | child |
114
- self.children << child
115
- end
116
- end
4
+ module Acts
5
+ module Tree
6
+ def self.included(model)
7
+ model.class_eval do
8
+ extend InitializerMethods
9
+ end
10
+ end
11
+
12
+ module InitializerMethods
13
+ def acts_as_tree(options = {})
14
+ options = {
15
+ :parent_id_field => "parent_id",
16
+ :path_field => "path",
17
+ :depth_field => "depth"
18
+ }.merge(options)
19
+
20
+ write_inheritable_attribute :acts_as_tree_options, options
21
+ class_inheritable_reader :acts_as_tree_options
22
+
23
+ include InstanceMethods
24
+ include Fields
25
+ extend Fields
26
+ extend ClassMethods
27
+
28
+ field parent_id_field, :type => BSON::ObjectID
29
+ field path_field, :type => Array, :default => [], :index => true
30
+ field depth_field, :type => Integer, :default => 0
31
+
32
+ after_save :move_children
33
+ validate :will_save_tree
34
+ before_destroy :destroy_descendants
35
+ end
36
+ end
37
+
38
+ module ClassMethods
39
+ def roots
40
+ self.where(parent_id_field => nil).order_by tree_order
41
+ end
42
+ end
43
+
44
+ module InstanceMethods
45
+ def [](field_name)
46
+ self.send field_name
47
+ end
48
+
49
+ def []=(field_name, value)
50
+ self.send "#{field_name}=", value
51
+ end
52
+
53
+ def ==(other)
54
+ return true if other.equal?(self)
55
+ return true if other.instance_of?(self.class) and other._id == self._id
56
+ false
57
+ end
58
+
59
+ def will_save_tree
60
+ if @_cyclic
61
+ errors.add(:base, "Can't be children of a descendant")
62
+ end
63
+ end
64
+
65
+ def fix_position
66
+ if parent.nil?
67
+ self[parent_id_field] = nil
68
+ self[path_field] = []
69
+ self[depth_field] = 0
70
+ else
71
+ self[parent_id_field] = parent._id
72
+ self[path_field] = parent[path_field] + [parent._id]
73
+ self[depth_field] = parent[depth_field] + 1
74
+ self.save
75
+ end
76
+ end
77
+
78
+ def parent
79
+ @_parent or (self[parent_id_field].nil? ? nil : self.class.find(self[parent_id_field]))
80
+ end
81
+
82
+ def root?
83
+ self[parent_id_field].nil?
84
+ end
85
+
86
+ def root
87
+ self[path_field].first.nil? ? self : self.class.find(self[path_field].first)
88
+ end
89
+
90
+ def ancestors
91
+ return [] if root?
92
+ self.class.find(self[path_field])
93
+ end
94
+
95
+ def self_and_ancestors
96
+ ancestors << self
97
+ end
98
+
99
+ def siblings
100
+ self.class.where(:_id.ne => self._id, parent_id_field => self[parent_id_field]).order_by tree_order
101
+ end
102
+
103
+ def self_and_siblings
104
+ self.class.where(parent_id_field => self[parent_id_field]).order_by tree_order
105
+ end
106
+
107
+ def children
108
+ Children.new self
109
+ end
110
+
111
+ def children=(new_children_list)
112
+ self.children.clear
113
+ new_children_list.each do | child |
114
+ self.children << child
115
+ end
116
+ end
117
117
 
118
118
  alias replace children=
119
119
 
120
- def descendants
121
- return [] if new_record?
122
- self.class.where(path_field => self._id).order_by tree_order
123
- end
120
+ def descendants
121
+ return [] if new_record?
122
+ self.class.where(path_field => self._id).order_by tree_order
123
+ end
124
124
 
125
- def self_and_descendants
126
- [self] + self.descendants
127
- end
125
+ def self_and_descendants
126
+ [self] + self.descendants
127
+ end
128
128
 
129
- def is_ancestor_of?(other)
130
- other[path_field].include?(self._id)
131
- end
129
+ def is_ancestor_of?(other)
130
+ other[path_field].include?(self._id)
131
+ end
132
132
 
133
- def is_or_is_ancestor_of?(other)
134
- (other == self) or is_ancestor_of?(other)
135
- end
133
+ def is_or_is_ancestor_of?(other)
134
+ (other == self) or is_ancestor_of?(other)
135
+ end
136
136
 
137
- def is_descendant_of?(other)
138
- self[path_field].include?(other._id)
139
- end
137
+ def is_descendant_of?(other)
138
+ self[path_field].include?(other._id)
139
+ end
140
140
 
141
- def is_or_is_descendant_of?(other)
142
- (other == self) or is_descendant_of?(other)
143
- end
141
+ def is_or_is_descendant_of?(other)
142
+ (other == self) or is_descendant_of?(other)
143
+ end
144
144
 
145
- def is_sibling_of?(other)
146
- (other != self) and (other[parent_id_field] == self[parent_id_field])
147
- end
145
+ def is_sibling_of?(other)
146
+ (other != self) and (other[parent_id_field] == self[parent_id_field])
147
+ end
148
148
 
149
- def is_or_is_sibling_of?(other)
150
- (other == self) or is_sibling_of?(other)
151
- end
149
+ def is_or_is_sibling_of?(other)
150
+ (other == self) or is_sibling_of?(other)
151
+ end
152
152
 
153
- def move_children
153
+ def move_children
154
154
 
155
- if @_will_move
156
- @_will_move = false
157
- self.children.each do | child |
158
- child.fix_position
159
- child.save
160
- end
161
- @_will_move = true
162
- end
163
- end
155
+ if @_will_move
156
+ @_will_move = false
157
+ self.children.each do | child |
158
+ child.fix_position
159
+ child.save
160
+ end
161
+ @_will_move = true
162
+ end
163
+ end
164
164
 
165
- def destroy_descendants
166
- self.descendants.each &:destroy
167
- end
168
- end
165
+ def destroy_descendants
166
+ self.descendants.each &:destroy
167
+ end
168
+ end
169
169
 
170
170
  #proxy class
171
171
  class Children < Array
@@ -181,11 +181,11 @@ module Mongoid
181
181
  if object.descendants.include? @parent
182
182
  object.instance_variable_set :@_cyclic, true
183
183
  else
184
- object[object.parent_id_field] = @parent._id
185
- object[object.path_field] = @parent[@parent.path_field] + [@parent._id]
186
- object[object.depth_field] = @parent[@parent.depth_field] + 1
184
+ object[object.parent_id_field] = @parent._id
185
+ object[object.path_field] = @parent[@parent.path_field] + [@parent._id]
186
+ object[object.depth_field] = @parent[@parent.depth_field] + 1
187
187
  object.instance_variable_set :@_will_move, true
188
- object.save
188
+ object.save
189
189
  end
190
190
 
191
191
  super(object)
@@ -225,24 +225,24 @@ module Mongoid
225
225
 
226
226
  end
227
227
 
228
- module Fields
229
- def parent_id_field
230
- acts_as_tree_options[:parent_id_field]
231
- end
232
-
233
- def path_field
234
- acts_as_tree_options[:path_field]
235
- end
236
-
237
- def depth_field
238
- acts_as_tree_options[:depth_field]
239
- end
240
-
241
- def tree_order
242
- acts_as_tree_options[:order] or []
243
- end
244
- end
245
- end
246
- end
228
+ module Fields
229
+ def parent_id_field
230
+ acts_as_tree_options[:parent_id_field]
231
+ end
232
+
233
+ def path_field
234
+ acts_as_tree_options[:path_field]
235
+ end
236
+
237
+ def depth_field
238
+ acts_as_tree_options[:depth_field]
239
+ end
240
+
241
+ def tree_order
242
+ acts_as_tree_options[:order] or []
243
+ end
244
+ end
245
+ end
246
+ end
247
247
  end
248
248
 
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mongoid_acts_as_tree}
8
- s.version = "0.1.1"
8
+ s.version = "0.1.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jakob Vidmar, Aliaksandr Rahalevich"]
12
- s.date = %q{2010-04-05}
12
+ s.date = %q{2010-05-04}
13
13
  s.description = %q{Port of the old, venerable ActsAsTree with a bit of a twist}
14
14
  s.email = %q{saksmlz@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -35,7 +35,7 @@ Gem::Specification.new do |s|
35
35
  s.homepage = %q{http://github.com/saks/mongoid_acts_as_tree}
36
36
  s.rdoc_options = ["--charset=UTF-8"]
37
37
  s.require_paths = ["lib"]
38
- s.rubygems_version = %q{1.3.6}
38
+ s.rubygems_version = %q{1.3.6.1}
39
39
  s.summary = %q{ActsAsTree plugin for Mongoid}
40
40
  s.test_files = [
41
41
  "test/test_tree.rb",
@@ -49,15 +49,18 @@ Gem::Specification.new do |s|
49
49
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
50
50
  s.specification_version = 3
51
51
 
52
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
52
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
53
53
  s.add_runtime_dependency(%q<mongoid>, ["<= 2.0.0"])
54
+ s.add_runtime_dependency(%q<bson>, [">= 0.20.1"])
54
55
  s.add_development_dependency(%q<shoulda>, [">= 2.10.2"])
55
56
  else
56
57
  s.add_dependency(%q<mongoid>, ["<= 2.0.0"])
58
+ s.add_dependency(%q<bson>, [">= 0.20.1"])
57
59
  s.add_dependency(%q<shoulda>, [">= 2.10.2"])
58
60
  end
59
61
  else
60
62
  s.add_dependency(%q<mongoid>, ["<= 2.0.0"])
63
+ s.add_dependency(%q<bson>, [">= 0.20.1"])
61
64
  s.add_dependency(%q<shoulda>, [">= 2.10.2"])
62
65
  end
63
66
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 1
9
- version: 0.1.1
8
+ - 2
9
+ version: 0.1.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jakob Vidmar, Aliaksandr Rahalevich
@@ -14,13 +14,14 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-05 00:00:00 +03:00
17
+ date: 2010-05-04 00:00:00 +03:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: mongoid
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
24
25
  requirements:
25
26
  - - <=
26
27
  - !ruby/object:Gem::Version
@@ -32,9 +33,25 @@ dependencies:
32
33
  type: :runtime
33
34
  version_requirements: *id001
34
35
  - !ruby/object:Gem::Dependency
35
- name: shoulda
36
+ name: bson
36
37
  prerelease: false
37
38
  requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 0
45
+ - 20
46
+ - 1
47
+ version: 0.20.1
48
+ type: :runtime
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: shoulda
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
38
55
  requirements:
39
56
  - - ">="
40
57
  - !ruby/object:Gem::Version
@@ -44,7 +61,7 @@ dependencies:
44
61
  - 2
45
62
  version: 2.10.2
46
63
  type: :development
47
- version_requirements: *id002
64
+ version_requirements: *id003
48
65
  description: Port of the old, venerable ActsAsTree with a bit of a twist
49
66
  email: saksmlz@gmail.com
50
67
  executables: []
@@ -79,6 +96,7 @@ rdoc_options:
79
96
  require_paths:
80
97
  - lib
81
98
  required_ruby_version: !ruby/object:Gem::Requirement
99
+ none: false
82
100
  requirements:
83
101
  - - ">="
84
102
  - !ruby/object:Gem::Version
@@ -86,6 +104,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
86
104
  - 0
87
105
  version: "0"
88
106
  required_rubygems_version: !ruby/object:Gem::Requirement
107
+ none: false
89
108
  requirements:
90
109
  - - ">="
91
110
  - !ruby/object:Gem::Version
@@ -95,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
114
  requirements: []
96
115
 
97
116
  rubyforge_project:
98
- rubygems_version: 1.3.6
117
+ rubygems_version: 1.3.6.1
99
118
  signing_key:
100
119
  specification_version: 3
101
120
  summary: ActsAsTree plugin for Mongoid