dm-is-nested_set 0.9.11 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,7 @@
1
+ === 0.10.0 / 2009-10-15
2
+
3
+ * Updated to work with dm-core 0.10.0
4
+
1
5
  === 0.9.11 / 2009-03-29
2
6
 
3
7
  * No changes this version
data/Manifest.txt CHANGED
@@ -1,7 +1,7 @@
1
- History.txt
1
+ History.rdoc
2
2
  LICENSE
3
3
  Manifest.txt
4
- README.txt
4
+ README.rdoc
5
5
  Rakefile
6
6
  TODO
7
7
  lib/dm-is-nested_set.rb
File without changes
data/Rakefile CHANGED
@@ -1,5 +1,4 @@
1
1
  require 'pathname'
2
- require 'rubygems'
3
2
 
4
3
  ROOT = Pathname(__FILE__).dirname.expand_path
5
4
  JRUBY = RUBY_PLATFORM =~ /java/
@@ -14,10 +13,10 @@ GEM_NAME = 'dm-is-nested_set'
14
13
  GEM_VERSION = DataMapper::Is::NestedSet::VERSION
15
14
  GEM_DEPENDENCIES = [['dm-core', GEM_VERSION], ['dm-adjust', GEM_VERSION]]
16
15
  GEM_CLEAN = %w[ log pkg coverage ]
17
- GEM_EXTRAS = { :has_rdoc => true, :extra_rdoc_files => %w[ README.txt LICENSE TODO History.txt ] }
16
+ GEM_EXTRAS = { :has_rdoc => true, :extra_rdoc_files => %w[ README.rdoc LICENSE TODO History.rdoc ] }
18
17
 
19
18
  PROJECT_NAME = 'datamapper'
20
- PROJECT_URL = "http://github.com/sam/dm-more/tree/master/#{GEM_NAME}"
19
+ PROJECT_URL = "http://github.com/datamapper/dm-more/tree/master/#{GEM_NAME}"
21
20
  PROJECT_DESCRIPTION = PROJECT_SUMMARY = 'DataMapper plugin allowing the creation of nested sets from data models'
22
21
 
23
22
  [ ROOT, ROOT.parent ].each do |dir|
@@ -6,12 +6,12 @@ module DataMapper
6
6
  # docs in the works
7
7
  #
8
8
  def is_nested_set(options={})
9
- options = { :child_key => [:parent_id], :scope => [] }.merge(options)
9
+ options = { :child_key => [ :parent_id ], :scope => [] }.merge(options)
10
10
 
11
11
  extend DataMapper::Is::NestedSet::ClassMethods
12
12
  include DataMapper::Is::NestedSet::InstanceMethods
13
13
 
14
- @nested_set_scope = options[:scope]
14
+ @nested_set_scope = options[:scope]
15
15
  @nested_set_parent = options[:child_key]
16
16
 
17
17
  property :lft, Integer, :writer => :private
@@ -21,36 +21,36 @@ module DataMapper
21
21
  # be cut down to 1 instead of 2 queries. this would be the other way, but seems hackish:
22
22
  # options[:child_key].each{|pname| property(pname, Integer) unless properties.detect{|p| p.name == pname}}
23
23
 
24
- belongs_to :parent, :class_name => self.name, :child_key => options[:child_key], :order => [:lft.asc]
25
- has n, :children, :class_name => self.name, :child_key => options[:child_key], :order => [:lft.asc]
24
+ belongs_to :parent, :model => self, :child_key => options[:child_key], :order => [ :lft ], :nullable => true
25
+ has n, :children, :model => self, :child_key => options[:child_key], :order => [ :lft ]
26
26
 
27
27
  before :create do
28
- if !self.parent
28
+ if !parent
29
29
  # TODO must change for nested sets
30
- self.root ? self.move_without_saving(:into => self.root) : self.move_without_saving(:to => 1)
31
- elsif self.parent && !self.lft
32
- self.move_without_saving(:into => self.parent)
30
+ root ? move_without_saving(:into => root) : move_without_saving(:to => 1)
31
+ elsif parent && !lft
32
+ move_without_saving(:into => parent)
33
33
  end
34
34
  end
35
35
 
36
36
  before :update do
37
- if self.nested_set_scope != self.original_nested_set_scope
37
+ if nested_set_scope != original_nested_set_scope
38
38
  # TODO detach from old list first. many edge-cases here, need good testing
39
- self.lft,self.rgt = nil,nil
40
- #puts "#{self.root.inspect} - #{[self.nested_set_scope,self.original_nested_set_scope].inspect}"
41
- self.root ? self.move_without_saving(:into => self.root) : self.move_without_saving(:to => 1)
42
- elsif (self.parent && !self.lft) || (self.parent != self.ancestor)
39
+ self.lft, self.rgt = nil, nil
40
+ #puts "#{root.inspect} - #{[nested_set_scope,original_nested_set_scope].inspect}"
41
+ root ? move_without_saving(:into => root) : move_without_saving(:to => 1)
42
+ elsif (parent && !lft) || (parent != ancestor)
43
43
  # if the parent is set, we try to move this into that parent, otherwise move into root.
44
- self.parent ? self.move_without_saving(:into => self.parent) : self.move_without_saving(:into => self.class.root)
44
+ parent ? move_without_saving(:into => parent) : move_without_saving(:into => model.root)
45
45
  end
46
46
  end
47
47
 
48
48
  before :destroy do
49
- self.send(:detach)
49
+ send(:detach)
50
50
  end
51
51
 
52
- after_class_method :inherited do |retval,target|
53
- target.instance_variable_set(:@nested_set_scope, @nested_set_scope.dup)
52
+ after_class_method :inherited do |retval, target|
53
+ target.instance_variable_set(:@nested_set_scope, @nested_set_scope.dup)
54
54
  target.instance_variable_set(:@nested_set_parent, @nested_set_parent.dup)
55
55
  end
56
56
 
@@ -60,8 +60,8 @@ module DataMapper
60
60
  attr_reader :nested_set_scope, :nested_set_parent
61
61
 
62
62
  def adjust_gap!(scoped_set,at,adjustment)
63
- scoped_set.all(:rgt.gt => at).adjust!({:rgt => adjustment},true)
64
- scoped_set.all(:lft.gt => at).adjust!({:lft => adjustment},true)
63
+ scoped_set.all(:rgt.gt => at).adjust!({ :rgt => adjustment }, true)
64
+ scoped_set.all(:lft.gt => at).adjust!({ :lft => adjustment }, true)
65
65
  end
66
66
 
67
67
  ##
@@ -88,7 +88,7 @@ module DataMapper
88
88
  def leaves
89
89
  # TODO scoping, how should it act?
90
90
  # TODO supply filtering-option?
91
- all(:conditions => ["rgt=lft+1"], :order => [:lft.asc])
91
+ all(:conditions => [ 'rgt = lft + ?', 1 ], :order => [ :lft ])
92
92
  end
93
93
 
94
94
  ##
@@ -104,7 +104,7 @@ module DataMapper
104
104
  ##
105
105
  # rebuilds the nested set using parent/child relationships and a chosen order
106
106
  #
107
- def rebuild_set_from_tree(order=nil)
107
+ def rebuild_set_from_tree(order = nil)
108
108
  # TODO pending
109
109
  end
110
110
  end
@@ -115,7 +115,7 @@ module DataMapper
115
115
  #
116
116
  # @private
117
117
  def nested_set_scope
118
- self.model.base_model.nested_set_scope.map{|p| [p,attribute_get(p)]}.to_hash
118
+ model.base_model.nested_set_scope.map{ |p| [ p, attribute_get(p) ] }.to_hash
119
119
  end
120
120
 
121
121
  ##
@@ -123,7 +123,7 @@ module DataMapper
123
123
  # @private
124
124
  def original_nested_set_scope
125
125
  # TODO commit
126
- self.model.base_model.nested_set_scope.map{|p| [p, original_values.key?(p) ? original_values[p] : attribute_get(p)]}.to_hash
126
+ model.base_model.nested_set_scope.map{ |p| [ p, (property = properties[p]) && original_attributes.key?(property) ? original_attributes[property] : attribute_get(p) ] }.to_hash
127
127
  end
128
128
 
129
129
  ##
@@ -131,7 +131,7 @@ module DataMapper
131
131
  #
132
132
  def nested_set
133
133
  # TODO add option for serving it as a nested array
134
- self.model.base_model.all(nested_set_scope.merge(:order => [:lft.asc]))
134
+ model.base_model.all(nested_set_scope.merge(:order => [ :lft ]))
135
135
  end
136
136
 
137
137
  ##
@@ -167,21 +167,25 @@ module DataMapper
167
167
  ##
168
168
  # @see move
169
169
  def move_without_saving(vector)
170
- if vector.is_a? Hash then action,object = vector.keys[0],vector.values[0] else action = vector end
170
+ if vector.kind_of?(Hash)
171
+ action, object = vector.keys[0], vector.values[0]
172
+ else
173
+ action = vector
174
+ end
171
175
 
172
176
  changed_scope = nested_set_scope != original_nested_set_scope
173
177
 
174
178
  position = case action
175
- when :higher then left_sibling ? left_sibling.lft : nil # : "already at the top"
176
- when :highest then ancestor ? ancestor.lft+1 : nil # : "is root, or has no parent"
177
- when :lower then right_sibling ? right_sibling.rgt+1 : nil # : "already at the bottom"
178
- when :lowest then ancestor ? ancestor.rgt : nil # : "is root, or has no parent"
179
- when :indent then left_sibling ? left_sibling.rgt : nil # : "cannot find a sibling to indent into"
180
- when :outdent then ancestor ? ancestor.rgt+1 : nil # : "is root, or has no parent"
181
- when :into then object ? object.rgt : nil # : "supply an object"
182
- when :above then object ? object.lft : nil # : "supply an object"
183
- when :below then object ? object.rgt+1 : nil # : "supply an object"
184
- when :to then object ? object.to_i : nil # : "supply a number"
179
+ when :higher then left_sibling ? left_sibling.lft : nil # : "already at the top"
180
+ when :highest then ancestor ? ancestor.lft + 1 : nil # : "is root, or has no parent"
181
+ when :lower then right_sibling ? right_sibling.rgt + 1 : nil # : "already at the bottom"
182
+ when :lowest then ancestor ? ancestor.rgt : nil # : "is root, or has no parent"
183
+ when :indent then left_sibling ? left_sibling.rgt : nil # : "cannot find a sibling to indent into"
184
+ when :outdent then ancestor ? ancestor.rgt + 1 : nil # : "is root, or has no parent"
185
+ when :into then object ? object.rgt : nil # : "supply an object"
186
+ when :above then object ? object.lft : nil # : "supply an object"
187
+ when :below then object ? object.rgt + 1 : nil # : "supply an object"
188
+ when :to then object ? object.to_i : nil # : "supply a number"
185
189
  end
186
190
 
187
191
  ##
@@ -192,45 +196,45 @@ module DataMapper
192
196
  # raise UnableToPositionError unless position.is_a?(Integer) && position > 0
193
197
  return false if !position || position < 1
194
198
  # return false if you are trying to move this into another scope
195
- return false if [:into, :above,:below].include?(action) && nested_set_scope != object.nested_set_scope
199
+ return false if [ :into, :above, :below ].include?(action) && nested_set_scope != object.nested_set_scope
196
200
  # if node is already in the requested position
197
- if self.lft == position || self.rgt == position - 1
198
- self.parent = self.ancestor # must set this again, because it might have been changed by the user before move.
201
+ if lft == position || rgt == position - 1
202
+ self.parent = ancestor # must set this again, because it might have been changed by the user before move.
199
203
  return false
200
204
  end
201
205
 
202
-
203
- DataMapper::Transaction.new(self.repository) do |transaction|
206
+ model.transaction do
204
207
 
205
208
  ##
206
209
  # if this node is already positioned we need to move it, and close the gap it leaves behind etc
207
210
  # otherwise we only need to open a gap in the set, and smash that buggar in
208
211
  #
209
- if self.lft && self.rgt
210
- # raise exception if node is trying to move into one of its descendants (infinate loop, spacetime will warp)
211
- raise RecursiveNestingError if position > self.lft && position < self.rgt
212
+ if lft && rgt
213
+ # raise exception if node is trying to move into one of its descendants (infinite loop, spacetime will warp)
214
+ raise RecursiveNestingError if position > lft && position < rgt
212
215
  # find out how wide this node is, as we need to make a gap large enough for it to fit in
213
- gap = self.rgt - self.lft + 1
216
+ gap = rgt - lft + 1
214
217
 
215
218
  # make a gap at position, that is as wide as this node
216
- self.model.base_model.adjust_gap!(nested_set,position-1,gap)
219
+ model.base_model.adjust_gap!(nested_set, position - 1, gap)
217
220
 
218
221
  # offset this node (and all its descendants) to the right position
219
- self.reload_attributes(:lft,:rgt)
220
- old_position = self.lft
222
+ reload_attributes([ :lft, :rgt ])
223
+ old_position = lft
221
224
  offset = position - old_position
222
225
 
223
- nested_set.all(:rgt => self.lft..self.rgt).adjust!({:lft => offset, :rgt => offset},true)
226
+ nested_set.all(:rgt => lft..rgt).adjust!({ :lft => offset, :rgt => offset }, true)
227
+
224
228
  # close the gap this movement left behind.
225
- self.model.base_model.adjust_gap!(nested_set,old_position,-gap)
226
- self.reload_attributes(:lft,:rgt)
229
+ model.base_model.adjust_gap!(nested_set, old_position, -gap)
230
+ reload_attributes([ :lft, :rgt ])
227
231
  else
228
232
  # make a gap where the new node can be inserted
229
- self.model.base_model.adjust_gap!(nested_set,position-1,2)
233
+ model.base_model.adjust_gap!(nested_set, position - 1, 2)
230
234
  # set the position fields
231
235
  self.lft, self.rgt = position, position + 1
232
236
  end
233
- self.parent = self.ancestor
237
+ self.parent = ancestor
234
238
  end
235
239
  end
236
240
 
@@ -258,7 +262,7 @@ module DataMapper
258
262
  # @see #self_and_ancestors
259
263
  def ancestors
260
264
  nested_set.all(:lft.lt => lft, :rgt.gt => rgt)
261
- #self_and_ancestors.reject{|r| r.key == self.key } # because identitymap is not used in console
265
+ #self_and_ancestors.reject{|r| r.key == key } # because identitymap is not used in console
262
266
  end
263
267
 
264
268
  ##
@@ -266,7 +270,7 @@ module DataMapper
266
270
  #
267
271
  # @return <Resource, NilClass> returns the parent-object, or nil if this is root/detached
268
272
  def ancestor
269
- ancestors.reverse.first
273
+ ancestors.last
270
274
  end
271
275
 
272
276
  ##
@@ -302,7 +306,7 @@ module DataMapper
302
306
  def descendants
303
307
  # TODO add argument for returning as a nested array.
304
308
  # TODO supply filtering-option?
305
- nested_set.all(:lft => (lft+1)..(rgt-1))
309
+ nested_set.all(:lft => (lft + 1)..(rgt - 1))
306
310
  end
307
311
 
308
312
  ##
@@ -311,7 +315,7 @@ module DataMapper
311
315
  # @return <Collection>
312
316
  def leaves
313
317
  # TODO supply filtering-option?
314
- nested_set.all(:lft => (lft+1)..rgt, :conditions=>["rgt=lft+1"])
318
+ nested_set.all(:lft => (lft + 1)..rgt, :conditions => [ 'rgt = lft + ?', 1 ])
315
319
  end
316
320
 
317
321
  ##
@@ -320,7 +324,7 @@ module DataMapper
320
324
  #
321
325
  # @par
322
326
  def leaf?
323
- rgt-lft == 1
327
+ rgt - lft == 1
324
328
  end
325
329
 
326
330
  ##
@@ -328,7 +332,7 @@ module DataMapper
328
332
  #
329
333
  # @return <Collection>
330
334
  def self_and_siblings
331
- parent ? parent.children : [self]
335
+ parent ? parent.children : [ self ]
332
336
  end
333
337
 
334
338
  ##
@@ -339,7 +343,7 @@ module DataMapper
339
343
  def siblings
340
344
  # TODO find a way to return this as a collection?
341
345
  # TODO supply filtering-option?
342
- self_and_siblings.reject{|r| r.key == self.key } # because identitymap is not used in console
346
+ self_and_siblings.reject { |r| r.key == key } # because identitymap is not used in console
343
347
  end
344
348
 
345
349
  ##
@@ -348,7 +352,7 @@ module DataMapper
348
352
  # @return <Resource, NilClass> the resource to the left, or nil if self is leftmost
349
353
  # @see #self_and_siblings
350
354
  def left_sibling
351
- self_and_siblings.find{|v| v.rgt == lft-1}
355
+ self_and_siblings.detect { |v| v.rgt == lft - 1 }
352
356
  end
353
357
 
354
358
  ##
@@ -357,14 +361,14 @@ module DataMapper
357
361
  # @return <Resource, NilClass> the resource to the right, or nil if self is rightmost
358
362
  # @see #self_and_siblings
359
363
  def right_sibling
360
- self_and_siblings.find{|v| v.lft == rgt+1}
364
+ self_and_siblings.detect { |v| v.lft == rgt + 1 }
361
365
  end
362
366
 
363
367
  private
364
368
  def detach
365
- offset = self.lft - self.rgt - 1
366
- self.model.base_model.adjust_gap!(nested_set,self.rgt,offset)
367
- self.lft,self.rgt = nil,nil
369
+ offset = lft - rgt - 1
370
+ model.base_model.adjust_gap!(nested_set, rgt, offset)
371
+ self.lft, self.rgt = nil, nil
368
372
  end
369
373
 
370
374
  end
@@ -1,7 +1,7 @@
1
1
  module DataMapper
2
2
  module Is
3
3
  module NestedSet
4
- VERSION = '0.9.11'
4
+ VERSION = '0.10.0'.freeze
5
5
  end
6
6
  end
7
7
  end
@@ -1,10 +1,4 @@
1
- require 'pathname'
2
- require 'rubygems'
3
-
4
- gem 'dm-core', '0.9.11'
5
- require 'dm-core'
6
-
7
- #gem 'dm-adjust', '0.9.11'
8
1
  require 'dm-adjust'
9
2
 
10
- require Pathname(__FILE__).dirname.expand_path / 'dm-is-nested_set' / 'is' / 'nested_set'
3
+ require 'dm-is-nested_set/is/nested_set'
4
+ require 'dm-is-nested_set/is/version'
@@ -1,5 +1,4 @@
1
- require 'pathname'
2
- require Pathname(__FILE__).dirname.expand_path.parent + 'spec_helper'
1
+ require 'spec_helper'
3
2
 
4
3
  if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
5
4
 
@@ -33,7 +32,7 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
33
32
  class ::User
34
33
  include DataMapper::Resource
35
34
 
36
- property :id, Serial
35
+ property :id, Serial
37
36
  property :name, String
38
37
 
39
38
  has n, :categories
@@ -43,8 +42,8 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
43
42
  class ::Category
44
43
  include DataMapper::Resource
45
44
 
46
- property :id, Integer, :serial => true
47
- property :name, String
45
+ property :id, Serial
46
+ property :name, String
48
47
  property :class_name, Discriminator
49
48
 
50
49
  belongs_to :user
@@ -59,26 +58,26 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
59
58
 
60
59
  DataMapper.auto_migrate!
61
60
 
62
- repository(:default) do
63
- @paul = User.create(:name => "paul")
64
- @john = User.create(:name => "john")
65
-
66
- Category.create(:id => 1, :name => "Electronics")
67
- Category.create(:id => 2, :parent_id => 1, :name => "Televisions")
68
- Category.create(:id => 3, :parent_id => 2, :name => "Tube")
69
- Category.create(:id => 4, :parent_id => 2, :name => "LCD")
70
- Category.create(:id => 5, :parent_id => 2, :name => "Plasma")
71
- Category.create(:id => 6, :parent_id => 1, :name => "Portable Electronics")
72
- Category.create(:id => 7, :parent_id => 6, :name => "MP3 Players")
73
- Category.create(:id => 8, :parent_id => 7, :name => "Flash")
74
- Category.create(:id => 9, :parent_id => 6, :name => "CD Players")
75
- Category.create(:id => 10,:parent_id => 6, :name => "2 Way Radios")
61
+ DataMapper.repository do
62
+ @user = User.create(:name => 'paul')
63
+ @other = User.create(:name => 'john')
64
+
65
+ electronics = @user.categories.create( :name => 'Electronics')
66
+ televisions = @user.categories.create(:parent => electronics, :name => 'Televisions')
67
+ tube = @user.categories.create(:parent => televisions, :name => 'Tube')
68
+ lcd = @user.categories.create(:parent => televisions, :name => 'LCD')
69
+ plasma = @user.categories.create(:parent => televisions, :name => 'Plasma')
70
+ portable_electronics = @user.categories.create(:parent => electronics, :name => 'Portable Electronics')
71
+ mp3_players = @user.categories.create(:parent => portable_electronics, :name => 'MP3 Players')
72
+ flash = @user.categories.create(:parent => mp3_players, :name => 'Flash')
73
+ cd_players = @user.categories.create(:parent => portable_electronics, :name => 'CD Players')
74
+ two_way_radios = @user.categories.create(:parent => portable_electronics, :name => '2 Way Radios')
76
75
  end
77
76
  end
78
77
 
79
78
  describe 'Class#rebuild_tree_from_set' do
80
79
  it 'should reset all parent_ids correctly' do
81
- repository(:default) do
80
+ DataMapper.repository(:default) do
82
81
  plasma = Category.get(5)
83
82
  plasma.parent_id.should == 2
84
83
  plasma.ancestor.id.should == 2
@@ -92,13 +91,13 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
92
91
 
93
92
  describe 'Class#root and #root' do
94
93
  it 'should return the toplevel node' do
95
- Category.root.name.should == "Electronics"
94
+ Category.root.name.should == 'Electronics'
96
95
  end
97
96
  end
98
97
 
99
98
  describe 'Class#leaves and #leaves' do
100
99
  it 'should return all nodes without descendants' do
101
- repository(:default) do
100
+ DataMapper.repository(:default) do
102
101
  Category.leaves.length.should == 6
103
102
 
104
103
  r = Category.root
@@ -110,56 +109,56 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
110
109
 
111
110
  describe '#ancestor, #ancestors and #self_and_ancestors' do
112
111
  it 'should return ancestors in an array' do
113
- repository(:default) do |repos|
112
+ DataMapper.repository(:default) do |repos|
114
113
  c8 = Category.get(8)
115
114
  c8.ancestor.should == Category.get(7)
116
115
  c8.ancestor.should == c8.parent
117
116
 
118
- c8.ancestors.map{|a|a.name}.should == ["Electronics","Portable Electronics","MP3 Players"]
119
- c8.self_and_ancestors.map{|a|a.name}.should == ["Electronics","Portable Electronics","MP3 Players","Flash"]
117
+ c8.ancestors.map{|a|a.name}.should == ['Electronics','Portable Electronics','MP3 Players']
118
+ c8.self_and_ancestors.map{|a|a.name}.should == ['Electronics','Portable Electronics','MP3 Players','Flash']
120
119
  end
121
120
  end
122
121
  end
123
122
 
124
123
  describe '#children' do
125
124
  it 'should return children of node' do
126
- repository(:default) do |repos|
125
+ DataMapper.repository(:default) do |repos|
127
126
  r = Category.root
128
127
  r.children.length.should == 2
129
128
 
130
129
  t = r.children.first
131
130
  t.children.length.should == 3
132
- t.children.first.name.should == "Tube"
133
- t.children[2].name.should == "Plasma"
131
+ t.children.first.name.should == 'Tube'
132
+ t.children[2].name.should == 'Plasma'
134
133
  end
135
134
  end
136
135
  end
137
136
 
138
137
  describe '#descendants and #self_and_descendants' do
139
138
  it 'should return all subnodes of node' do
140
- repository(:default) do
139
+ DataMapper.repository(:default) do
141
140
  r = Category.get(1)
142
141
  r.self_and_descendants.length.should == 10
143
142
  r.descendants.length.should == 9
144
- r.name.should == "Electronics"
143
+ r.name.should == 'Electronics'
145
144
  t = r.children[1]
146
- t.name.should == "Portable Electronics"
145
+ t.name.should == 'Portable Electronics'
147
146
  t.descendants.length.should == 4
148
- t.descendants.map{|a|a.name}.should == ["MP3 Players","Flash","CD Players","2 Way Radios"]
147
+ t.descendants.map{|a|a.name}.should == ['MP3 Players','Flash','CD Players','2 Way Radios']
149
148
  end
150
149
  end
151
150
  end
152
151
 
153
152
  describe '#siblings and #self_and_siblings' do
154
153
  it 'should return all siblings of node' do
155
- repository(:default) do
154
+ DataMapper.repository(:default) do
156
155
  r = Category.root
157
156
  r.self_and_siblings.length.should == 1
158
157
  r.descendants.length.should == 9
159
158
 
160
159
  televisions = r.children[0]
161
160
  televisions.siblings.length.should == 1
162
- televisions.siblings.map{|a|a.name}.should == ["Portable Electronics"]
161
+ televisions.siblings.map{|a|a.name}.should == ['Portable Electronics']
163
162
  end
164
163
  end
165
164
  end
@@ -181,7 +180,7 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
181
180
  # 10 | 17 | 18 | - 2 Way Radios
182
181
 
183
182
  it 'should move items correctly with :higher / :highest / :lower / :lowest' do
184
- repository(:default) do |repos|
183
+ DataMapper.repository(:default) do |repos|
185
184
 
186
185
  Category.get(4).pos.should == [5,6]
187
186
 
@@ -212,7 +211,7 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
212
211
  end
213
212
 
214
213
  it 'should move items correctly with :indent / :outdent' do
215
- repository(:default) do |repos|
214
+ DataMapper.repository(:default) do |repos|
216
215
 
217
216
  mp3_players = Category.get(7)
218
217
 
@@ -240,18 +239,18 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
240
239
 
241
240
  describe 'moving objects with #move_* #and place_node_at' do
242
241
  it 'should set left/right when choosing a parent' do
243
- repository(:default) do |repos|
242
+ DataMapper.repository(:default) do |repos|
244
243
  Category.auto_migrate!
245
244
 
246
- c1 = Category.create(:name => "New Electronics")
245
+ c1 = @user.categories.create(:name => 'New Electronics')
247
246
 
248
- c2 = Category.create(:name => "OLED TVs")
247
+ c2 = @user.categories.create(:name => 'OLED TVs')
249
248
 
250
249
  c1.pos.should == [1,4]
251
250
  c1.root.should == c1
252
251
  c2.pos.should == [2,3]
253
252
 
254
- c3 = Category.create(:name => "Portable Electronics")
253
+ c3 = @user.categories.create(:name => 'Portable Electronics')
255
254
  c3.parent=c1
256
255
  c3.save
257
256
 
@@ -273,8 +272,8 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
273
272
  c2.pos.should == [2,5]
274
273
  c3.pos.should == [3,4]
275
274
 
276
- c4 = Category.create(:name => "Tube", :parent => c2)
277
- c5 = Category.create(:name => "Flatpanel", :parent => c2)
275
+ c4 = @user.categories.create(:name => 'Tube', :parent => c2)
276
+ c5 = @user.categories.create(:name => 'Flatpanel', :parent => c2)
278
277
 
279
278
  c1.pos.should == [1,10]
280
279
  c2.pos.should == [2,9]
@@ -293,11 +292,10 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
293
292
 
294
293
  describe 'scoping' do
295
294
  it 'should detach from list when changing scope' do
296
- repository(:default) do |repos|
295
+ DataMapper.repository(:default) do |repos|
297
296
  plasma = Category.get(5)
298
297
  plasma.pos.should == [7,8]
299
- plasma.user_id = 1
300
- plasma.save
298
+ plasma.update(:user => @other)
301
299
  plasma.pos.should == [1,2]
302
300
  end
303
301
  end
@@ -305,7 +303,7 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
305
303
 
306
304
  describe 'integrity' do
307
305
  it 'should detach object from list when deleted' do
308
- repository(:default) do |repos|
306
+ DataMapper.repository(:default) do |repos|
309
307
  lcd = Category.get(4)
310
308
  lcd.pos.should == [5,6]
311
309
  Category.get(3).destroy
@@ -313,6 +311,5 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
313
311
  end
314
312
  end
315
313
  end
316
-
317
314
  end
318
315
  end
data/spec/spec.opts CHANGED
@@ -1 +1,2 @@
1
1
  --colour
2
+ --loadby random
data/spec/spec_helper.rb CHANGED
@@ -1,16 +1,19 @@
1
- require 'pathname'
2
1
  require 'rubygems'
3
2
 
4
- gem 'rspec', '~>1.2'
5
- require 'spec'
3
+ # use local dm-core if running from a typical dev checkout.
4
+ lib = File.join('..', '..', 'dm-core', 'lib')
5
+ $LOAD_PATH.unshift(lib) if File.directory?(lib)
6
+ require 'dm-core'
6
7
 
7
- ROOT = Pathname(__FILE__).dirname.parent.expand_path
8
+ # use local dm-adjust if running from a typical dev checkout.
9
+ lib = File.join('..', 'dm-adjust', 'lib')
10
+ $LOAD_PATH.unshift(lib) if File.directory?(lib)
11
+ require 'dm-adjust'
8
12
 
9
- # use local dm-adjust if running from dm-more directly
10
- lib = ROOT.parent.join('dm-adjust', 'lib').expand_path
11
- $LOAD_PATH.unshift(lib) if lib.directory?
13
+ # Support running specs with 'rake spec' and 'spec'
14
+ $LOAD_PATH.unshift('lib') unless $LOAD_PATH.include?('lib')
12
15
 
13
- require ROOT + 'lib/dm-is-nested_set'
16
+ require 'dm-is-nested_set'
14
17
 
15
18
  def load_driver(name, default_uri)
16
19
  return false if ENV['ADAPTER'] != name.to_s
data/tasks/install.rb CHANGED
@@ -4,7 +4,7 @@ end
4
4
 
5
5
  desc "Install #{GEM_NAME} #{GEM_VERSION}"
6
6
  task :install => [ :package ] do
7
- sudo_gem "install --local pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources"
7
+ sudo_gem "install pkg/#{GEM_NAME}-#{GEM_VERSION} --no-update-sources"
8
8
  end
9
9
 
10
10
  desc "Uninstall #{GEM_NAME} #{GEM_VERSION}"
data/tasks/spec.rb CHANGED
@@ -1,6 +1,4 @@
1
1
  begin
2
- gem 'rspec', '~>1.2'
3
- require 'spec'
4
2
  require 'spec/rake/spectask'
5
3
 
6
4
  task :default => [ :spec ]
@@ -8,16 +6,18 @@ begin
8
6
  desc 'Run specifications'
9
7
  Spec::Rake::SpecTask.new(:spec) do |t|
10
8
  t.spec_opts << '--options' << 'spec/spec.opts' if File.exists?('spec/spec.opts')
11
- t.spec_files = Pathname.glob((ROOT + 'spec/**/*_spec.rb').to_s).map { |f| f.to_s }
9
+ t.libs << 'lib' << 'spec' # needed for CI rake spec task, duplicated in spec_helper
12
10
 
13
11
  begin
14
- gem 'rcov', '~>0.8'
12
+ require 'rcov'
15
13
  t.rcov = JRUBY ? false : (ENV.has_key?('NO_RCOV') ? ENV['NO_RCOV'] != 'true' : true)
16
14
  t.rcov_opts << '--exclude' << 'spec'
17
15
  t.rcov_opts << '--text-summary'
18
16
  t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
19
17
  rescue LoadError
20
18
  # rcov not installed
19
+ rescue SyntaxError
20
+ # rcov syntax invalid
21
21
  end
22
22
  end
23
23
  rescue LoadError
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dm-is-nested_set
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.11
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sindre Aarsaether
@@ -9,29 +9,10 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-03-29 00:00:00 -07:00
12
+ date: 2009-09-16 00:00:00 -07:00
13
13
  default_executable:
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: dm-core
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - "="
22
- - !ruby/object:Gem::Version
23
- version: 0.9.11
24
- version:
25
- - !ruby/object:Gem::Dependency
26
- name: dm-adjust
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "="
32
- - !ruby/object:Gem::Version
33
- version: 0.9.11
34
- version:
14
+ dependencies: []
15
+
35
16
  description: DataMapper plugin allowing the creation of nested sets from data models
36
17
  email:
37
18
  - sindre [a] identu [d] no
@@ -40,15 +21,15 @@ executables: []
40
21
  extensions: []
41
22
 
42
23
  extra_rdoc_files:
43
- - README.txt
24
+ - README.rdoc
44
25
  - LICENSE
45
26
  - TODO
46
- - History.txt
27
+ - History.rdoc
47
28
  files:
48
- - History.txt
29
+ - History.rdoc
49
30
  - LICENSE
50
31
  - Manifest.txt
51
- - README.txt
32
+ - README.rdoc
52
33
  - Rakefile
53
34
  - TODO
54
35
  - lib/dm-is-nested_set.rb
@@ -60,11 +41,13 @@ files:
60
41
  - tasks/install.rb
61
42
  - tasks/spec.rb
62
43
  has_rdoc: true
63
- homepage: http://github.com/sam/dm-more/tree/master/dm-is-nested_set
44
+ homepage: http://github.com/datamapper/dm-more/tree/master/dm-is-nested_set
45
+ licenses: []
46
+
64
47
  post_install_message:
65
48
  rdoc_options:
66
49
  - --main
67
- - README.txt
50
+ - README.rdoc
68
51
  require_paths:
69
52
  - lib
70
53
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -82,9 +65,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
65
  requirements: []
83
66
 
84
67
  rubyforge_project: datamapper
85
- rubygems_version: 1.3.1
68
+ rubygems_version: 1.3.5
86
69
  signing_key:
87
- specification_version: 2
70
+ specification_version: 3
88
71
  summary: DataMapper plugin allowing the creation of nested sets from data models
89
72
  test_files: []
90
73