acts_as_restful_list 0.1.0 → 0.2.0
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/README.rdoc +13 -2
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/acts_as_restful_list.gemspec +57 -0
- data/lib/acts_as_restful_list.rb +6 -3
- data/spec/acts_as_restful_list_spec.rb +94 -3
- metadata +4 -3
data/README.rdoc
CHANGED
@@ -5,14 +5,23 @@ non-standard method calls like insert_at, acts_as_restful_list makes managing li
|
|
5
5
|
simple. You update the position attribute just like you would update anything else
|
6
6
|
and the rest is taken care of for you.
|
7
7
|
|
8
|
-
|
8
|
+
== Installation
|
9
|
+
#environment.rb
|
10
|
+
config.gem 'acts_as_restful_list'
|
11
|
+
|
12
|
+
# in Terminal
|
13
|
+
rake gems:install
|
14
|
+
|
15
|
+
== Usage
|
16
|
+
|
17
|
+
=== In your model:
|
9
18
|
|
10
19
|
class Item < ActiveRecord::Base
|
11
20
|
belongs_to :parent
|
12
21
|
acts_as_restful_list :scope => :parent
|
13
22
|
end
|
14
23
|
|
15
|
-
Now, simply CRUD away:
|
24
|
+
=== Now, simply CRUD away:
|
16
25
|
|
17
26
|
item = Item.create
|
18
27
|
item.position # 1
|
@@ -37,6 +46,8 @@ Now, simply CRUD away:
|
|
37
46
|
|
38
47
|
And that's that.
|
39
48
|
|
49
|
+
Report issues at http://github.com/12spokes/acts_as_restful_list/issues
|
50
|
+
|
40
51
|
== Note on Patches/Pull Requests
|
41
52
|
|
42
53
|
* Fork the project.
|
data/Rakefile
CHANGED
@@ -8,7 +8,7 @@ begin
|
|
8
8
|
gem.summary = %Q{Restful acts_as_list}
|
9
9
|
gem.description = %Q{Just like acts_as_list, but allows updating through standard restful methods.}
|
10
10
|
gem.email = "trey@12spokes.com"
|
11
|
-
gem.homepage = "http://github.com/
|
11
|
+
gem.homepage = "http://github.com/12spokes/acts_as_restful_list"
|
12
12
|
gem.authors = ["'Trey Bean'"]
|
13
13
|
gem.add_development_dependency "rspec", ">= 1.2.9"
|
14
14
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{acts_as_restful_list}
|
8
|
+
s.version = "0.2.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["'Trey Bean'"]
|
12
|
+
s.date = %q{2010-02-19}
|
13
|
+
s.description = %q{Just like acts_as_list, but allows updating through standard restful methods.}
|
14
|
+
s.email = %q{trey@12spokes.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.rdoc"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".gitignore",
|
22
|
+
"History.rdoc",
|
23
|
+
"LICENSE",
|
24
|
+
"README.rdoc",
|
25
|
+
"Rakefile",
|
26
|
+
"Todo.rdoc",
|
27
|
+
"VERSION",
|
28
|
+
"acts_as_restful_list.gemspec",
|
29
|
+
"lib/acts_as_restful_list.rb",
|
30
|
+
"spec/acts_as_restful_list_spec.rb",
|
31
|
+
"spec/spec.opts",
|
32
|
+
"spec/spec_helper.rb"
|
33
|
+
]
|
34
|
+
s.homepage = %q{http://github.com/12spokes/acts_as_restful_list}
|
35
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
36
|
+
s.require_paths = ["lib"]
|
37
|
+
s.rubygems_version = %q{1.3.5}
|
38
|
+
s.summary = %q{Restful acts_as_list}
|
39
|
+
s.test_files = [
|
40
|
+
"spec/acts_as_restful_list_spec.rb",
|
41
|
+
"spec/spec_helper.rb"
|
42
|
+
]
|
43
|
+
|
44
|
+
if s.respond_to? :specification_version then
|
45
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
46
|
+
s.specification_version = 3
|
47
|
+
|
48
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
49
|
+
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
50
|
+
else
|
51
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
52
|
+
end
|
53
|
+
else
|
54
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
data/lib/acts_as_restful_list.rb
CHANGED
@@ -27,9 +27,12 @@ module ActsAsRestfulList
|
|
27
27
|
if configuration[:scope].nil?
|
28
28
|
nil
|
29
29
|
else
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
scopes = Array(configuration[:scope]).collect do |scope|
|
31
|
+
column = scope.to_s.match(/_id$/) ? scope.to_s : "#{scope}_id"
|
32
|
+
value = self.send(column)
|
33
|
+
value.nil? ? "#{column} IS NULL" : "#{column} = #{value}"
|
34
|
+
end
|
35
|
+
scopes.join(' AND ')
|
33
36
|
end
|
34
37
|
end
|
35
38
|
end
|
@@ -85,7 +85,7 @@ describe "ActsAsRestfulList" do
|
|
85
85
|
mixin.destroy
|
86
86
|
end
|
87
87
|
|
88
|
-
it 'should automatically reorder the list if the record
|
88
|
+
it 'should automatically reorder the list if the record is deleted' do
|
89
89
|
(1..4).each{ Mixin.create! }
|
90
90
|
second_mixin = Mixin.first( :conditions => { :position => 2 } )
|
91
91
|
second_mixin.destroy
|
@@ -178,7 +178,7 @@ describe "ActsAsRestfulList" do
|
|
178
178
|
mixin.destroy
|
179
179
|
end
|
180
180
|
|
181
|
-
it 'should automatically reorder the list if the record
|
181
|
+
it 'should automatically reorder the list if the record is deleted' do
|
182
182
|
(1..4).each{ Mixin.create! }
|
183
183
|
second_mixin = Mixin.first( :conditions => { :pos => 2 } )
|
184
184
|
second_mixin.destroy
|
@@ -255,7 +255,7 @@ describe "ActsAsRestfulList" do
|
|
255
255
|
end
|
256
256
|
end
|
257
257
|
|
258
|
-
it 'should automatically reorder the list scoped by parent if the record
|
258
|
+
it 'should automatically reorder the list scoped by parent if the record is deleted' do
|
259
259
|
(1..4).each{ Mixin.create!(:parent_id => 1) }
|
260
260
|
(1..6).each{ Mixin.create!(:parent_id => 2) }
|
261
261
|
second_mixin = Mixin.first( :conditions => { :position => 2, :parent_id => 1 } )
|
@@ -297,4 +297,95 @@ describe "ActsAsRestfulList" do
|
|
297
297
|
Mixin.new(:parent_id => 3).scope_condition.should == "parent_id = 3"
|
298
298
|
end
|
299
299
|
end
|
300
|
+
|
301
|
+
|
302
|
+
describe 'declaring acts_as_restful_list and setting the scope to multiple columns' do
|
303
|
+
before(:all) do
|
304
|
+
ActiveRecord::Schema.define(:version => 1) do
|
305
|
+
create_table :mixins do |t|
|
306
|
+
t.column :position, :integer
|
307
|
+
t.column :user_id, :integer
|
308
|
+
t.column :parent_id, :integer
|
309
|
+
t.column :created_at, :datetime
|
310
|
+
t.column :updated_at, :datetime
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
class Mixin < ActiveRecord::Base
|
315
|
+
acts_as_restful_list :scope => [:parent, :user]
|
316
|
+
end
|
317
|
+
end
|
318
|
+
|
319
|
+
after(:all) do
|
320
|
+
Object.send(:remove_const, :Mixin)
|
321
|
+
|
322
|
+
ActiveRecord::Base.connection.tables.each do |table|
|
323
|
+
ActiveRecord::Base.connection.drop_table(table)
|
324
|
+
end
|
325
|
+
end
|
326
|
+
|
327
|
+
it 'should define scope_condition as an instance method' do
|
328
|
+
Mixin.new.should respond_to(:scope_condition)
|
329
|
+
end
|
330
|
+
|
331
|
+
it 'should return a scope condition that limits based on the parent_id' do
|
332
|
+
Mixin.new(:user_id => 4, :parent_id => 3).scope_condition.should == "parent_id = 3 AND user_id = 4"
|
333
|
+
end
|
334
|
+
|
335
|
+
describe 'reordering on update' do
|
336
|
+
before(:each) do
|
337
|
+
(1..4).each{ Mixin.create!(:parent_id => 1, :user_id => 5) }
|
338
|
+
(1..4).each{ Mixin.create!(:parent_id => 2, :user_id => 5) }
|
339
|
+
(1..4).each{ Mixin.create!(:parent_id => 1, :user_id => 7) }
|
340
|
+
(1..4).each{ Mixin.create!(:parent_id => 2, :user_id => 7) }
|
341
|
+
end
|
342
|
+
|
343
|
+
it 'should automatically reorder the list if a record is updated with a lower position' do
|
344
|
+
user5_parent1_fourth_mixin = Mixin.first( :conditions => { :position => 4, :parent_id => 1, :user_id => 5 } )
|
345
|
+
user5_parent1_fourth_mixin.position = 2
|
346
|
+
user5_parent1_fourth_mixin.save!
|
347
|
+
user5_parent1_fourth_mixin.reload.position.should == 2
|
348
|
+
Mixin.all(:conditions => { :parent_id => 1, :user_id => 5 }, :order => 'position ASC').collect(&:position).should == [1,2,3,4]
|
349
|
+
Mixin.all(:conditions => { :parent_id => 1, :user_id => 5 }, :order => 'position ASC').collect(&:id).should == [1,4,2,3]
|
350
|
+
Mixin.all(:conditions => { :parent_id => 2, :user_id => 5 }, :order => 'position ASC').collect(&:position).should == [1,2,3,4]
|
351
|
+
Mixin.all(:conditions => { :parent_id => 2, :user_id => 5 }, :order => 'position ASC').collect(&:id).should == [5,6,7,8]
|
352
|
+
Mixin.all(:conditions => { :parent_id => 1, :user_id => 7 }, :order => 'position ASC').collect(&:position).should == [1,2,3,4]
|
353
|
+
Mixin.all(:conditions => { :parent_id => 1, :user_id => 7 }, :order => 'position ASC').collect(&:id).should == [9,10,11,12]
|
354
|
+
Mixin.all(:conditions => { :parent_id => 2, :user_id => 7 }, :order => 'position ASC').collect(&:position).should == [1,2,3,4]
|
355
|
+
Mixin.all(:conditions => { :parent_id => 2, :user_id => 7 }, :order => 'position ASC').collect(&:id).should == [13,14,15,16]
|
356
|
+
end
|
357
|
+
|
358
|
+
it 'should automatically reorder the list if a record is updated with a higher position' do
|
359
|
+
second_mixin = Mixin.first( :conditions => { :position => 2, :parent_id => 1, :user_id => 5 } )
|
360
|
+
second_mixin.position = 4
|
361
|
+
second_mixin.save!
|
362
|
+
second_mixin.reload.position.should == 4
|
363
|
+
Mixin.all(:conditions => { :parent_id => 1, :user_id => 5 }, :order => 'position ASC').collect(&:position).should == [1,2,3,4]
|
364
|
+
Mixin.all(:conditions => { :parent_id => 1, :user_id => 5 }, :order => 'position ASC').collect(&:id).should == [1,3,4,2]
|
365
|
+
Mixin.all(:conditions => { :parent_id => 2, :user_id => 5 }, :order => 'position ASC').collect(&:position).should == [1,2,3,4]
|
366
|
+
Mixin.all(:conditions => { :parent_id => 2, :user_id => 5 }, :order => 'position ASC').collect(&:id).should == [5,6,7,8]
|
367
|
+
Mixin.all(:conditions => { :parent_id => 1, :user_id => 7 }, :order => 'position ASC').collect(&:position).should == [1,2,3,4]
|
368
|
+
Mixin.all(:conditions => { :parent_id => 1, :user_id => 7 }, :order => 'position ASC').collect(&:id).should == [9,10,11,12]
|
369
|
+
Mixin.all(:conditions => { :parent_id => 2, :user_id => 7 }, :order => 'position ASC').collect(&:position).should == [1,2,3,4]
|
370
|
+
Mixin.all(:conditions => { :parent_id => 2, :user_id => 7 }, :order => 'position ASC').collect(&:id).should == [13,14,15,16]
|
371
|
+
end
|
372
|
+
end
|
373
|
+
|
374
|
+
it 'should automatically reorder if the record is deleted' do
|
375
|
+
(1..4).each{ Mixin.create!(:parent_id => 1, :user_id => 5) }
|
376
|
+
(1..4).each{ Mixin.create!(:parent_id => 2, :user_id => 5) }
|
377
|
+
(1..4).each{ Mixin.create!(:parent_id => 1, :user_id => 7) }
|
378
|
+
(1..4).each{ Mixin.create!(:parent_id => 2, :user_id => 7) }
|
379
|
+
second_mixin = Mixin.first( :conditions => { :position => 2, :parent_id => 1, :user_id => 5 } )
|
380
|
+
second_mixin.destroy
|
381
|
+
Mixin.all(:conditions => { :parent_id => 1, :user_id => 5 }, :order => 'position ASC').collect(&:position).should == [1,2,3]
|
382
|
+
Mixin.all(:conditions => { :parent_id => 1, :user_id => 5 }, :order => 'position ASC').collect(&:id).should == [1,3,4]
|
383
|
+
Mixin.all(:conditions => { :parent_id => 2, :user_id => 5 }, :order => 'position ASC').collect(&:position).should == [1,2,3,4]
|
384
|
+
Mixin.all(:conditions => { :parent_id => 2, :user_id => 5 }, :order => 'position ASC').collect(&:id).should == [5,6,7,8]
|
385
|
+
Mixin.all(:conditions => { :parent_id => 1, :user_id => 7 }, :order => 'position ASC').collect(&:position).should == [1,2,3,4]
|
386
|
+
Mixin.all(:conditions => { :parent_id => 1, :user_id => 7 }, :order => 'position ASC').collect(&:id).should == [9,10,11,12]
|
387
|
+
Mixin.all(:conditions => { :parent_id => 2, :user_id => 7 }, :order => 'position ASC').collect(&:position).should == [1,2,3,4]
|
388
|
+
Mixin.all(:conditions => { :parent_id => 2, :user_id => 7 }, :order => 'position ASC').collect(&:id).should == [13,14,15,16]
|
389
|
+
end
|
390
|
+
end
|
300
391
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_restful_list
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "'Trey Bean'"
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-02-
|
12
|
+
date: 2010-02-19 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -40,12 +40,13 @@ files:
|
|
40
40
|
- Rakefile
|
41
41
|
- Todo.rdoc
|
42
42
|
- VERSION
|
43
|
+
- acts_as_restful_list.gemspec
|
43
44
|
- lib/acts_as_restful_list.rb
|
44
45
|
- spec/acts_as_restful_list_spec.rb
|
45
46
|
- spec/spec.opts
|
46
47
|
- spec/spec_helper.rb
|
47
48
|
has_rdoc: true
|
48
|
-
homepage: http://github.com/
|
49
|
+
homepage: http://github.com/12spokes/acts_as_restful_list
|
49
50
|
licenses: []
|
50
51
|
|
51
52
|
post_install_message:
|