dm-is-nested_set 1.0.0.rc2 → 1.0.0.rc3

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -71,7 +71,7 @@
71
71
  source 'http://rubygems.org'
72
72
 
73
73
  DATAMAPPER = 'git://github.com/datamapper'
74
- DM_VERSION = '~> 1.0.0.rc2'
74
+ DM_VERSION = '~> 1.0.0.rc3'
75
75
 
76
76
  group :runtime do # Runtime dependencies (as in the gemspec)
77
77
 
@@ -83,7 +83,6 @@ group :runtime do # Runtime dependencies (as in the gemspec)
83
83
 
84
84
  gem 'dm-core', DM_VERSION, :git => "#{DATAMAPPER}/dm-core.git"
85
85
  gem 'dm-adjust', DM_VERSION, :git => "#{DATAMAPPER}/dm-adjust.git"
86
- gem 'dm-transactions', DM_VERSION, :git => "#{DATAMAPPER}/dm-transactions.git"
87
86
 
88
87
  end
89
88
 
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009 Sindre Aarsaether
1
+ Copyright (c) 2010 Sindre Aarsaether
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/Rakefile CHANGED
@@ -10,14 +10,13 @@ begin
10
10
  gem.summary = 'DataMapper plugin allowing the creation of nested sets from data models'
11
11
  gem.description = gem.summary
12
12
  gem.email = 'sindre [a] identu [d] no'
13
- gem.homepage = 'http://github.com/datamapper/dm-more/tree/master/%s' % gem.name
13
+ gem.homepage = 'http://github.com/datamapper/%s' % gem.name
14
14
  gem.authors = [ 'Sindre Aarsaether' ]
15
15
 
16
16
  gem.rubyforge_project = 'datamapper'
17
17
 
18
- gem.add_dependency 'dm-core', '~> 1.0.0.rc2'
19
- gem.add_dependency 'dm-adjust', '~> 1.0.0.rc2'
20
- gem.add_dependency 'dm-transactions', '~> 1.0.0.rc2'
18
+ gem.add_dependency 'dm-core', '~> 1.0.0.rc3'
19
+ gem.add_dependency 'dm-adjust', '~> 1.0.0.rc3'
21
20
 
22
21
  gem.add_development_dependency 'rspec', '~> 1.3'
23
22
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0.rc2
1
+ 1.0.0.rc3
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{dm-is-nested_set}
8
- s.version = "1.0.0.rc2"
8
+ s.version = "1.0.0.rc3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Sindre Aarsaether"]
12
- s.date = %q{2010-05-19}
12
+ s.date = %q{2010-05-27}
13
13
  s.description = %q{DataMapper plugin allowing the creation of nested sets from data models}
14
14
  s.email = %q{sindre [a] identu [d] no}
15
15
  s.extra_rdoc_files = [
@@ -37,7 +37,7 @@ Gem::Specification.new do |s|
37
37
  "tasks/yard.rake",
38
38
  "tasks/yardstick.rake"
39
39
  ]
40
- s.homepage = %q{http://github.com/datamapper/dm-more/tree/master/dm-is-nested_set}
40
+ s.homepage = %q{http://github.com/datamapper/dm-is-nested_set}
41
41
  s.rdoc_options = ["--charset=UTF-8"]
42
42
  s.require_paths = ["lib"]
43
43
  s.rubyforge_project = %q{datamapper}
@@ -53,20 +53,17 @@ Gem::Specification.new do |s|
53
53
  s.specification_version = 3
54
54
 
55
55
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
56
- s.add_runtime_dependency(%q<dm-core>, ["~> 1.0.0.rc2"])
57
- s.add_runtime_dependency(%q<dm-adjust>, ["~> 1.0.0.rc2"])
58
- s.add_runtime_dependency(%q<dm-transactions>, ["~> 1.0.0.rc2"])
56
+ s.add_runtime_dependency(%q<dm-core>, ["~> 1.0.0.rc3"])
57
+ s.add_runtime_dependency(%q<dm-adjust>, ["~> 1.0.0.rc3"])
59
58
  s.add_development_dependency(%q<rspec>, ["~> 1.3"])
60
59
  else
61
- s.add_dependency(%q<dm-core>, ["~> 1.0.0.rc2"])
62
- s.add_dependency(%q<dm-adjust>, ["~> 1.0.0.rc2"])
63
- s.add_dependency(%q<dm-transactions>, ["~> 1.0.0.rc2"])
60
+ s.add_dependency(%q<dm-core>, ["~> 1.0.0.rc3"])
61
+ s.add_dependency(%q<dm-adjust>, ["~> 1.0.0.rc3"])
64
62
  s.add_dependency(%q<rspec>, ["~> 1.3"])
65
63
  end
66
64
  else
67
- s.add_dependency(%q<dm-core>, ["~> 1.0.0.rc2"])
68
- s.add_dependency(%q<dm-adjust>, ["~> 1.0.0.rc2"])
69
- s.add_dependency(%q<dm-transactions>, ["~> 1.0.0.rc2"])
65
+ s.add_dependency(%q<dm-core>, ["~> 1.0.0.rc3"])
66
+ s.add_dependency(%q<dm-adjust>, ["~> 1.0.0.rc3"])
70
67
  s.add_dependency(%q<rspec>, ["~> 1.3"])
71
68
  end
72
69
  end
@@ -203,46 +203,44 @@ module DataMapper
203
203
  return false
204
204
  end
205
205
 
206
- transaction do
207
-
208
- ##
209
- # if this node is already positioned we need to move it, and close the gap it leaves behind etc
210
- # otherwise we only need to open a gap in the set, and smash that buggar in
211
- #
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
215
- # find out how wide this node is, as we need to make a gap large enough for it to fit in
216
- gap = rgt - lft + 1
206
+ ##
207
+ # if this node is already positioned we need to move it, and close the gap it leaves behind etc
208
+ # otherwise we only need to open a gap in the set, and smash that buggar in
209
+ #
210
+ if lft && rgt
211
+ # raise exception if node is trying to move into one of its descendants (infinite loop, spacetime will warp)
212
+ raise RecursiveNestingError if position > lft && position < rgt
213
+ # find out how wide this node is, as we need to make a gap large enough for it to fit in
214
+ gap = rgt - lft + 1
217
215
 
218
- # make a gap at position, that is as wide as this node
219
- model.base_model.adjust_gap!(nested_set, position - 1, gap)
216
+ # make a gap at position, that is as wide as this node
217
+ model.base_model.adjust_gap!(nested_set, position - 1, gap)
220
218
 
221
- eager_props = model.properties.values_at(:lft, :rgt)
219
+ eager_props = model.properties.values_at(:lft, :rgt)
222
220
 
223
- # FIXME don't use @api private
224
- # offset this node (and all its descendants) to the right position
225
- eager_load(eager_props)
221
+ # FIXME don't use @api private
222
+ # offset this node (and all its descendants) to the right position
223
+ eager_load(eager_props)
226
224
 
227
- old_position = lft
228
- offset = position - old_position
225
+ old_position = lft
226
+ offset = position - old_position
229
227
 
230
- nested_set.all(:rgt => lft..rgt).adjust!({ :lft => offset, :rgt => offset }, true)
228
+ nested_set.all(:rgt => lft..rgt).adjust!({ :lft => offset, :rgt => offset }, true)
231
229
 
232
- # close the gap this movement left behind.
233
- model.base_model.adjust_gap!(nested_set, old_position, -gap)
230
+ # close the gap this movement left behind.
231
+ model.base_model.adjust_gap!(nested_set, old_position, -gap)
234
232
 
235
- # FIXME don't use @api private
236
- eager_load(eager_props)
233
+ # FIXME don't use @api private
234
+ eager_load(eager_props)
237
235
 
238
- else
239
- # make a gap where the new node can be inserted
240
- model.base_model.adjust_gap!(nested_set, position - 1, 2)
241
- # set the position fields
242
- self.lft, self.rgt = position, position + 1
243
- end
244
- self.parent = ancestor
236
+ else
237
+ # make a gap where the new node can be inserted
238
+ model.base_model.adjust_gap!(nested_set, position - 1, 2)
239
+ # set the position fields
240
+ self.lft, self.rgt = position, position + 1
245
241
  end
242
+
243
+ self.parent = ancestor
246
244
  end
247
245
 
248
246
  ##
@@ -371,10 +369,13 @@ module DataMapper
371
369
  self_and_siblings.detect { |v| v.lft == rgt + 1 }
372
370
  end
373
371
 
374
- private
372
+ private
373
+
375
374
  def detach
376
- offset = lft - rgt - 1
377
- model.base_model.adjust_gap!(nested_set, rgt, offset)
375
+ unless lft.nil? || rgt.nil?
376
+ offset = lft - rgt - 1
377
+ model.base_model.adjust_gap!(nested_set, rgt, offset)
378
+ end
378
379
  self.lft, self.rgt = nil, nil
379
380
  end
380
381
 
@@ -1,5 +1,4 @@
1
1
  require 'dm-core'
2
2
  require 'dm-adjust'
3
- require 'dm-transactions'
4
3
 
5
4
  require 'dm-is-nested_set/is/nested_set'
@@ -25,8 +25,7 @@ require 'spec_helper'
25
25
  # |____________________________________________________________________________________________________|
26
26
 
27
27
  describe DataMapper::Is::NestedSet do
28
- before do
29
- Object.send(:remove_const, :User) if defined?(User)
28
+ before :all do
30
29
  class ::User
31
30
  include DataMapper::Resource
32
31
 
@@ -36,48 +35,43 @@ describe DataMapper::Is::NestedSet do
36
35
  has n, :categories
37
36
  end
38
37
 
39
- Object.send(:remove_const, :Category) if defined?(Category)
40
38
  class ::Category
41
39
  include DataMapper::Resource
42
40
 
43
- property :id, Serial
44
- property :name, String
45
- property :class_name, Discriminator
41
+ property :id, Serial
42
+ property :name, String
43
+ property :type, Discriminator
46
44
 
47
45
  belongs_to :user
48
46
 
49
- is :nested_set, :scope => [:user_id]
47
+ is :nested_set, :scope => [ :user_id ]
50
48
 
51
49
  def pos; [lft,rgt] end # convenience method only for speccing.
52
50
  end
53
-
54
- Object.send(:remove_const, :CustomCategory) if defined?(CustomCategory)
55
- class ::CustomCategory < Category; end
56
-
57
- DataMapper.auto_migrate!
58
-
59
- DataMapper.repository do
60
- @user = User.create(:name => 'paul')
61
- @other = User.create(:name => 'john')
62
-
63
- electronics = @user.categories.create( :name => 'Electronics')
64
- televisions = @user.categories.create(:parent => electronics, :name => 'Televisions')
65
- tube = @user.categories.create(:parent => televisions, :name => 'Tube')
66
- lcd = @user.categories.create(:parent => televisions, :name => 'LCD')
67
- plasma = @user.categories.create(:parent => televisions, :name => 'Plasma')
68
- portable_electronics = @user.categories.create(:parent => electronics, :name => 'Portable Electronics')
69
- mp3_players = @user.categories.create(:parent => portable_electronics, :name => 'MP3 Players')
70
- flash = @user.categories.create(:parent => mp3_players, :name => 'Flash')
71
- cd_players = @user.categories.create(:parent => portable_electronics, :name => 'CD Players')
72
- two_way_radios = @user.categories.create(:parent => portable_electronics, :name => '2 Way Radios')
73
- end
74
51
  end
75
52
 
76
53
  supported_by :sqlite, :mysql, :postgres do
54
+ before do
55
+ DataMapper.repository do
56
+ @user = User.create(:name => 'paul')
57
+ @other = User.create(:name => 'john')
58
+
59
+ electronics = @user.categories.create( :name => 'Electronics')
60
+ televisions = @user.categories.create(:parent => electronics, :name => 'Televisions')
61
+ tube = @user.categories.create(:parent => televisions, :name => 'Tube')
62
+ lcd = @user.categories.create(:parent => televisions, :name => 'LCD')
63
+ plasma = @user.categories.create(:parent => televisions, :name => 'Plasma')
64
+ portable_electronics = @user.categories.create(:parent => electronics, :name => 'Portable Electronics')
65
+ mp3_players = @user.categories.create(:parent => portable_electronics, :name => 'MP3 Players')
66
+ flash = @user.categories.create(:parent => mp3_players, :name => 'Flash')
67
+ cd_players = @user.categories.create(:parent => portable_electronics, :name => 'CD Players')
68
+ two_way_radios = @user.categories.create(:parent => portable_electronics, :name => '2 Way Radios')
69
+ end
70
+ end
77
71
 
78
72
  describe 'Class#rebuild_tree_from_set' do
79
73
  it 'should reset all parent_ids correctly' do
80
- DataMapper.repository(:default) do
74
+ DataMapper.repository do
81
75
  plasma = Category.get(5)
82
76
  plasma.parent_id.should == 2
83
77
  plasma.ancestor.id.should == 2
@@ -97,7 +91,7 @@ describe DataMapper::Is::NestedSet do
97
91
 
98
92
  describe 'Class#leaves and #leaves' do
99
93
  it 'should return all nodes without descendants' do
100
- DataMapper.repository(:default) do
94
+ DataMapper.repository do
101
95
  Category.leaves.length.should == 6
102
96
 
103
97
  r = Category.root
@@ -109,7 +103,7 @@ describe DataMapper::Is::NestedSet do
109
103
 
110
104
  describe '#ancestor, #ancestors and #self_and_ancestors' do
111
105
  it 'should return ancestors in an array' do
112
- DataMapper.repository(:default) do |repos|
106
+ DataMapper.repository do
113
107
  c8 = Category.get(8)
114
108
  c8.ancestor.should == Category.get(7)
115
109
  c8.ancestor.should == c8.parent
@@ -122,7 +116,7 @@ describe DataMapper::Is::NestedSet do
122
116
 
123
117
  describe '#children' do
124
118
  it 'should return children of node' do
125
- DataMapper.repository(:default) do |repos|
119
+ DataMapper.repository do
126
120
  r = Category.root
127
121
  r.children.length.should == 2
128
122
 
@@ -136,7 +130,7 @@ describe DataMapper::Is::NestedSet do
136
130
 
137
131
  describe '#descendants and #self_and_descendants' do
138
132
  it 'should return all subnodes of node' do
139
- DataMapper.repository(:default) do
133
+ DataMapper.repository do
140
134
  r = Category.get(1)
141
135
  r.self_and_descendants.length.should == 10
142
136
  r.descendants.length.should == 9
@@ -151,7 +145,7 @@ describe DataMapper::Is::NestedSet do
151
145
 
152
146
  describe '#siblings and #self_and_siblings' do
153
147
  it 'should return all siblings of node' do
154
- DataMapper.repository(:default) do
148
+ DataMapper.repository do
155
149
  r = Category.root
156
150
  r.self_and_siblings.length.should == 1
157
151
  r.descendants.length.should == 9
@@ -180,7 +174,7 @@ describe DataMapper::Is::NestedSet do
180
174
  # 10 | 17 | 18 | - 2 Way Radios
181
175
 
182
176
  it 'should move items correctly with :higher / :highest / :lower / :lowest' do
183
- DataMapper.repository(:default) do |repos|
177
+ DataMapper.repository do
184
178
 
185
179
  Category.get(4).pos.should == [5,6]
186
180
 
@@ -211,7 +205,7 @@ describe DataMapper::Is::NestedSet do
211
205
  end
212
206
 
213
207
  it 'should move items correctly with :indent / :outdent' do
214
- DataMapper.repository(:default) do |repos|
208
+ DataMapper.repository do
215
209
 
216
210
  mp3_players = Category.get(7)
217
211
 
@@ -239,7 +233,7 @@ describe DataMapper::Is::NestedSet do
239
233
 
240
234
  describe 'moving objects with #move_* #and place_node_at' do
241
235
  it 'should set left/right when choosing a parent' do
242
- DataMapper.repository(:default) do |repos|
236
+ DataMapper.repository do
243
237
  Category.auto_migrate!
244
238
 
245
239
  c1 = @user.categories.create(:name => 'New Electronics')
@@ -292,7 +286,7 @@ describe DataMapper::Is::NestedSet do
292
286
 
293
287
  describe 'scoping' do
294
288
  it 'should detach from list when changing scope' do
295
- DataMapper.repository(:default) do |repos|
289
+ DataMapper.repository do
296
290
  plasma = Category.get(5)
297
291
  plasma.pos.should == [7,8]
298
292
  plasma.update(:user => @other)
@@ -303,7 +297,7 @@ describe DataMapper::Is::NestedSet do
303
297
 
304
298
  describe 'integrity' do
305
299
  it 'should detach object from list when deleted' do
306
- DataMapper.repository(:default) do |repos|
300
+ DataMapper.repository do
307
301
  lcd = Category.get(4)
308
302
  lcd.pos.should == [5,6]
309
303
  Category.get(3).destroy
data/spec/rcov.opts CHANGED
@@ -1,4 +1,4 @@
1
- --exclude "spec"
1
+ --exclude "spec,^/"
2
2
  --sort coverage
3
3
  --callsites
4
4
  --xrefs
data/tasks/spec.rake CHANGED
@@ -35,4 +35,7 @@ rescue LoadError
35
35
  end
36
36
  end
37
37
 
38
+ task :spec => :check_dependencies
39
+ task :rcov => :check_dependencies
40
+
38
41
  task :default => :spec
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dm-is-nested_set
3
3
  version: !ruby/object:Gem::Version
4
- hash: 977940575
4
+ hash: 977940572
5
5
  prerelease: true
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
9
  - 0
10
- - rc2
11
- version: 1.0.0.rc2
10
+ - rc3
11
+ version: 1.0.0.rc3
12
12
  platform: ruby
13
13
  authors:
14
14
  - Sindre Aarsaether
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-05-19 00:00:00 -07:00
19
+ date: 2010-05-27 00:00:00 -07:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -27,13 +27,13 @@ dependencies:
27
27
  requirements:
28
28
  - - ~>
29
29
  - !ruby/object:Gem::Version
30
- hash: 977940575
30
+ hash: 977940572
31
31
  segments:
32
32
  - 1
33
33
  - 0
34
34
  - 0
35
- - rc2
36
- version: 1.0.0.rc2
35
+ - rc3
36
+ version: 1.0.0.rc3
37
37
  type: :runtime
38
38
  version_requirements: *id001
39
39
  - !ruby/object:Gem::Dependency
@@ -44,36 +44,19 @@ dependencies:
44
44
  requirements:
45
45
  - - ~>
46
46
  - !ruby/object:Gem::Version
47
- hash: 977940575
47
+ hash: 977940572
48
48
  segments:
49
49
  - 1
50
50
  - 0
51
51
  - 0
52
- - rc2
53
- version: 1.0.0.rc2
52
+ - rc3
53
+ version: 1.0.0.rc3
54
54
  type: :runtime
55
55
  version_requirements: *id002
56
- - !ruby/object:Gem::Dependency
57
- name: dm-transactions
58
- prerelease: false
59
- requirement: &id003 !ruby/object:Gem::Requirement
60
- none: false
61
- requirements:
62
- - - ~>
63
- - !ruby/object:Gem::Version
64
- hash: 977940575
65
- segments:
66
- - 1
67
- - 0
68
- - 0
69
- - rc2
70
- version: 1.0.0.rc2
71
- type: :runtime
72
- version_requirements: *id003
73
56
  - !ruby/object:Gem::Dependency
74
57
  name: rspec
75
58
  prerelease: false
76
- requirement: &id004 !ruby/object:Gem::Requirement
59
+ requirement: &id003 !ruby/object:Gem::Requirement
77
60
  none: false
78
61
  requirements:
79
62
  - - ~>
@@ -84,7 +67,7 @@ dependencies:
84
67
  - 3
85
68
  version: "1.3"
86
69
  type: :development
87
- version_requirements: *id004
70
+ version_requirements: *id003
88
71
  description: DataMapper plugin allowing the creation of nested sets from data models
89
72
  email: sindre [a] identu [d] no
90
73
  executables: []
@@ -115,7 +98,7 @@ files:
115
98
  - tasks/yard.rake
116
99
  - tasks/yardstick.rake
117
100
  has_rdoc: true
118
- homepage: http://github.com/datamapper/dm-more/tree/master/dm-is-nested_set
101
+ homepage: http://github.com/datamapper/dm-is-nested_set
119
102
  licenses: []
120
103
 
121
104
  post_install_message: