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

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/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: