acts_as_restful_list 0.4.0 → 0.5.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/History.rdoc CHANGED
@@ -1,3 +1,8 @@
1
+ === Version 0.5.0 / 2011-02-08
2
+
3
+ * enhancements
4
+ * Support moving items between lists. Thanks jamiemill!
5
+
1
6
  === Version 0.4.0 / 2010-11-15
2
7
 
3
8
  * enhancements
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.0
1
+ 0.5.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{acts_as_restful_list}
8
- s.version = "0.4.0"
8
+ s.version = "0.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["'Trey Bean'"]
12
- s.date = %q{2010-11-15}
12
+ s.date = %q{2011-02-08}
13
13
  s.description = %q{Just like acts_as_list, but allows updating through standard restful methods.}
14
14
  s.email = %q{trey@12spokes.com}
15
15
  s.extra_rdoc_files = [
@@ -36,6 +36,19 @@ module ActsAsRestfulList
36
36
  end
37
37
  end
38
38
 
39
+ define_method 'scope_condition_was' do
40
+ if configuration[:scope].nil?
41
+ nil
42
+ else
43
+ scopes = Array(configuration[:scope]).collect do |scope|
44
+ column = self.class.column_names.include?(scope.to_s) ? scope.to_s : "#{scope}_id"
45
+ value = self.send("#{column}_was")
46
+ value.nil? ? "#{column} IS NULL" : "#{column} = #{value.is_a?(String) ? "'#{value}'" : value}"
47
+ end
48
+ scopes.join(' AND ')
49
+ end
50
+ end
51
+
39
52
  define_method 'optimistic_locking_update' do
40
53
  self.class.column_names.include?("lock_version") ? ", lock_version = (lock_version + 1)" : ""
41
54
  end
@@ -49,7 +62,10 @@ module ActsAsRestfulList
49
62
  end
50
63
 
51
64
  def reset_order_after_update
52
- if self.send( "#{position_column}_changed?" )
65
+ if scope_condition != scope_condition_was
66
+ self.class.update_all("#{position_column} = (#{position_column} - 1) #{optimistic_locking_update}", [scope_condition_was, "#{position_column} > #{self.send( "#{position_column}_was" )}", "id != #{id}"].compact.join(' AND '))
67
+ self.class.update_all("#{position_column} = (#{position_column} + 1) #{optimistic_locking_update}", [scope_condition, "#{position_column} >= #{self.send( position_column )}", "id != #{id}"].compact.join(' AND '))
68
+ elsif self.send( "#{position_column}_changed?" )
53
69
  if self.send( "#{position_column}_was" ) > self.send( position_column )
54
70
  self.class.update_all("#{position_column} = (#{position_column} + 1) #{optimistic_locking_update}", [scope_condition, "#{position_column} >= #{self.send( position_column )}", "id != #{id}", "#{position_column} < #{self.send( "#{position_column}_was" )}"].compact.join(' AND '))
55
71
  else
@@ -333,6 +333,25 @@ describe "ActsAsRestfulList" do
333
333
  Mixin.all(:conditions => { :parent_id => 1 }, :order => 'position ASC').collect(&:position).should == [1,2,3,4]
334
334
  Mixin.all(:conditions => { :parent_id => 2 }, :order => 'position ASC').collect(&:position).should == [1,2,3,4,5,6]
335
335
  end
336
+
337
+ it 'should report the old and new scope correctly' do
338
+ second_mixin = Mixin.first( :conditions => { :position => 2, :parent_id => 1 } )
339
+ second_mixin.parent_id = 2
340
+ second_mixin.position = 4
341
+ second_mixin.scope_condition_was.should == 'parent_id = 1'
342
+ second_mixin.scope_condition.should == 'parent_id = 2'
343
+ end
344
+
345
+ it 'should automatically reorder both lists if a record is moved between them' do
346
+ second_mixin = Mixin.first( :conditions => { :position => 2, :parent_id => 1 } )
347
+ second_mixin.parent_id = 2
348
+ second_mixin.position = 4
349
+ second_mixin.save!
350
+ second_mixin.reload.parent_id.should == 2
351
+ second_mixin.reload.position.should == 4
352
+ Mixin.all(:conditions => { :parent_id => 1 }, :order => 'position ASC').collect(&:position).should == [1,2,3]
353
+ Mixin.all(:conditions => { :parent_id => 2 }, :order => 'position ASC').collect(&:position).should == [1,2,3,4,5,6,7]
354
+ end
336
355
  end
337
356
 
338
357
  it 'should automatically reorder the list scoped by parent if the record is deleted' do
data/spec/spec_helper.rb CHANGED
@@ -1,14 +1,14 @@
1
1
  require 'rubygems'
2
- gem 'activerecord', '>= 1.15.4.7794'
2
+ gem 'activerecord', '>= 3'
3
3
  require 'active_record'
4
4
 
5
5
  $LOAD_PATH.unshift(File.dirname(__FILE__))
6
6
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
7
7
  require 'acts_as_restful_list'
8
- require 'spec'
9
- require 'spec/autorun'
8
+ require 'rspec'
9
+ require 'rspec/autorun'
10
10
 
11
11
  ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
12
12
 
13
- Spec::Runner.configure do |config|
13
+ RSpec.configure do |config|
14
14
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_restful_list
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 11
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 4
8
+ - 5
9
9
  - 0
10
- version: 0.4.0
10
+ version: 0.5.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - "'Trey Bean'"
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-15 00:00:00 -07:00
18
+ date: 2011-02-08 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency