sortifiable 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,11 @@
1
+ *0.2.4 (June 18th, 2011)
2
+
3
+ * Typecast the list of primary keys return by lock_list! correctly as
4
+ the postgresql and mysql adapters return strings by default. [Reinier de Lange]
5
+
6
+ * Check for existence of foreign key attribute with symbol scope option
7
+
8
+
1
9
  *0.2.3 (May 3rd, 2011)
2
10
 
3
11
  * Rails 3.1 has added Model.foreign_{key,type} to association reflections
data/README.md CHANGED
@@ -38,5 +38,6 @@ pull request and I will review it and respond as quickly as possible.
38
38
  Thanks to the following people for their contributions:
39
39
 
40
40
  * Manuel Meurer
41
+ * Reinier de Lange
41
42
 
42
43
  Copyright (c) 2011 Andrew White, released under the MIT license
data/Rakefile CHANGED
@@ -10,7 +10,7 @@ task :default => :test
10
10
 
11
11
  desc 'Test the sortifiable gem.'
12
12
  Rake::TestTask.new(:test) do |t|
13
- t.libs << 'lib'
13
+ t.libs += %w[lib test]
14
14
  t.pattern = 'test/**/*_test.rb'
15
15
  t.verbose = true
16
16
  end
@@ -22,3 +22,33 @@ Rake::RDocTask.new(:rdoc) do |rdoc|
22
22
  rdoc.options << '--line-numbers' << '--inline-source'
23
23
  rdoc.rdoc_files.include('lib/**/*.rb')
24
24
  end
25
+
26
+ namespace :test do
27
+ desc 'Test using the mysql connection adapter'
28
+ task :mysql do
29
+ sh 'rake test DB=mysql'
30
+ end
31
+
32
+ desc 'Test using the mysql2 connection adapter'
33
+ task :mysql2 do
34
+ sh 'rake test DB=mysql2'
35
+ end
36
+
37
+ desc 'Test using the postgresql connection adapter'
38
+ task :postgresql do
39
+ sh 'rake test DB=postgresql'
40
+ end
41
+
42
+ desc 'Test using the sqlite3 connection adapter'
43
+ task :sqlite3 do
44
+ sh 'rake test DB=sqlite3'
45
+ end
46
+
47
+ desc 'Test all connection adapters'
48
+ task :all do
49
+ sh 'rake test DB=mysql'
50
+ sh 'rake test DB=mysql2'
51
+ sh 'rake test DB=postgresql'
52
+ sh 'rake test DB=sqlite3'
53
+ end
54
+ end
@@ -58,7 +58,8 @@ module Sortifiable
58
58
  raise ArgumentError, "Only belongs_to associations can be used as a scope"
59
59
  end
60
60
  elsif options[:scope].to_s !~ /_id$/
61
- options[:scope] = "#{options[:scope]}_id".to_sym
61
+ scope_name = "#{options[:scope]}_id"
62
+ options[:scope] = scope_name.to_sym if column_names.include?(scope_name)
62
63
  end
63
64
  end
64
65
 
@@ -438,7 +439,11 @@ module Sortifiable
438
439
  end
439
440
 
440
441
  def lock_list! #:nodoc:
441
- connection.select_values(list_scope.select(list_class.primary_key).lock(true).to_sql)
442
+ sql = list_scope.select(list_class.primary_key).lock(true).to_sql
443
+ column = list_class.columns_hash[list_class.primary_key]
444
+ connection.select_values(sql).map do |value|
445
+ column.type_cast(value)
446
+ end
442
447
  end
443
448
 
444
449
  def lower_scope(position) #:nodoc:
@@ -1,3 +1,3 @@
1
1
  module Sortifiable
2
- VERSION = "0.2.3"
2
+ VERSION = "0.2.4"
3
3
  end
@@ -38,5 +38,8 @@ EOF
38
38
  s.add_dependency "activesupport", ">= 3.0"
39
39
  s.add_dependency "activerecord", ">= 3.0"
40
40
  s.add_development_dependency "bundler", ">= 1.0.10"
41
- s.add_development_dependency "sqlite3", ">= 1.3.3"
41
+ s.add_development_dependency "mysql", "~> 2.8.1"
42
+ s.add_development_dependency "mysql2", "~> 0.2.7"
43
+ s.add_development_dependency "pg", "~> 0.9.0"
44
+ s.add_development_dependency "sqlite3", "~> 1.3.3"
42
45
  end
@@ -1,86 +1,6 @@
1
- require 'test/unit'
2
- require 'rubygems'
3
- require 'active_record'
4
- require 'active_support/core_ext/kernel/reporting'
5
- require 'sortifiable'
6
-
7
- ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
8
-
9
- def setup_db
10
- silence_stream(STDOUT) do
11
- ActiveRecord::Schema.define(:version => 1) do
12
- create_table :mixins do |t|
13
- t.column :type, :string
14
- t.column :pos, :integer
15
- t.column :parent_id, :integer
16
- t.column :parent_type, :string
17
- t.column :created_at, :datetime
18
- t.column :updated_at, :datetime
19
- end
20
- end
21
- end
22
- end
1
+ require 'test_helper'
23
2
 
24
- def teardown_db
25
- ActiveRecord::Base.connection.tables.each do |table|
26
- ActiveRecord::Base.connection.drop_table(table)
27
- end
28
- end
29
-
30
- setup_db
31
-
32
- class Mixin < ActiveRecord::Base
33
- end
34
-
35
- class ListMixin < ActiveRecord::Base
36
- acts_as_list :column => "pos", :scope => :parent
37
- set_table_name "mixins"
38
- default_scope order(:pos)
39
- end
40
-
41
- class ListMixinSub1 < ListMixin
42
- end
43
-
44
- class ListMixinSub2 < ListMixin
45
- end
46
-
47
- class ListWithStringScopeMixin < ActiveRecord::Base
48
- acts_as_list :column => "pos", :scope => 'parent_id = #{parent_id}'
49
- set_table_name "mixins"
50
- default_scope order(:pos)
51
- end
52
-
53
- class ArrayScopeListMixin < ActiveRecord::Base
54
- acts_as_list :column => "pos", :scope => [:parent_id, :parent_type]
55
- set_table_name "mixins"
56
- default_scope order(:pos)
57
- end
58
-
59
- class AssociationScopeListMixin < ActiveRecord::Base
60
- belongs_to :parent
61
- acts_as_list :column => "pos", :scope => :parent
62
- set_table_name "mixins"
63
- default_scope order(:pos)
64
- end
65
-
66
- class PolymorphicAssociationScopeListMixin < ActiveRecord::Base
67
- belongs_to :parent, :polymorphic => true
68
- acts_as_list :column => "pos", :scope => :parent
69
- set_table_name "mixins"
70
- default_scope order(:pos)
71
- end
72
-
73
- teardown_db
74
-
75
- class NonListTest < Test::Unit::TestCase
76
-
77
- def setup
78
- setup_db
79
- end
80
-
81
- def teardown
82
- teardown_db
83
- end
3
+ class NonListTest < ActiveSupport::TestCase
84
4
 
85
5
  def test_callbacks_are_not_added_to_all_models
86
6
  Mixin.create! :pos => 1, :parent_id => 5
@@ -97,10 +17,9 @@ class NonListTest < Test::Unit::TestCase
97
17
 
98
18
  end
99
19
 
100
- class ListTest < Test::Unit::TestCase
20
+ class ListTest < ActiveSupport::TestCase
101
21
 
102
22
  def setup
103
- setup_db
104
23
  [5, 6].each do |parent_id|
105
24
  (1..4).each do |i|
106
25
  ListMixin.create! :pos => i, :parent_id => parent_id
@@ -108,10 +27,6 @@ class ListTest < Test::Unit::TestCase
108
27
  end
109
28
  end
110
29
 
111
- def teardown
112
- teardown_db
113
- end
114
-
115
30
  def test_reordering
116
31
  assert_equal [1, 2, 3, 4], ListMixin.where(:parent_id => 5).map(&:id)
117
32
 
@@ -257,7 +172,7 @@ class ListTest < Test::Unit::TestCase
257
172
 
258
173
  ListMixin.find(2).remove_from_list
259
174
 
260
- assert_equal [2, 1, 3, 4], ListMixin.where(:parent_id => 5).map(&:id)
175
+ assert_equal [1, 3, 4], ListMixin.where(:parent_id => 5).where('pos IS NOT NULL').map(&:id)
261
176
 
262
177
  assert_equal 1, ListMixin.find(1).pos
263
178
  assert_equal nil, ListMixin.find(2).pos
@@ -378,10 +293,9 @@ class ListTest < Test::Unit::TestCase
378
293
 
379
294
  end
380
295
 
381
- class ListWithStringScopeTest < Test::Unit::TestCase
296
+ class ListWithStringScopeTest < ActiveSupport::TestCase
382
297
 
383
298
  def setup
384
- setup_db
385
299
  [5, 6].each do |parent_id|
386
300
  (1..4).each do |i|
387
301
  ListWithStringScopeMixin.create! :parent_id => parent_id
@@ -389,10 +303,6 @@ class ListWithStringScopeTest < Test::Unit::TestCase
389
303
  end
390
304
  end
391
305
 
392
- def teardown
393
- teardown_db
394
- end
395
-
396
306
  def test_insert
397
307
  new = ListWithStringScopeMixin.create(:parent_id => 500)
398
308
  assert_equal 1, new.pos
@@ -444,20 +354,15 @@ class ListWithStringScopeTest < Test::Unit::TestCase
444
354
 
445
355
  end
446
356
 
447
- class ListSubTest < Test::Unit::TestCase
357
+ class ListSubTest < ActiveSupport::TestCase
448
358
 
449
359
  def setup
450
- setup_db
451
360
  (1..4).each do |i|
452
361
  klass = ((i % 2 == 1) ? ListMixinSub1 : ListMixinSub2)
453
362
  klass.create! :pos => i, :parent_id => 5000
454
363
  end
455
364
  end
456
365
 
457
- def teardown
458
- teardown_db
459
- end
460
-
461
366
  def test_sti_class
462
367
  assert_instance_of ListMixinSub1, ListMixin.find(1)
463
368
  assert_instance_of ListMixinSub2, ListMixin.find(2)
@@ -588,10 +493,9 @@ class ListSubTest < Test::Unit::TestCase
588
493
 
589
494
  end
590
495
 
591
- class ArrayScopeListTest < Test::Unit::TestCase
496
+ class ArrayScopeListTest < ActiveSupport::TestCase
592
497
 
593
498
  def setup
594
- setup_db
595
499
  ['ParentClass', 'bananas'].each do |parent_type|
596
500
  [5, 6].each do |parent_id|
597
501
  (1..4).each do |i|
@@ -605,10 +509,6 @@ class ArrayScopeListTest < Test::Unit::TestCase
605
509
  end
606
510
  end
607
511
 
608
- def teardown
609
- teardown_db
610
- end
611
-
612
512
  def conditions(options = {})
613
513
  { :parent_id => 5, :parent_type => 'ParentClass' }.merge(options)
614
514
  end
@@ -807,7 +707,7 @@ class ArrayScopeListTest < Test::Unit::TestCase
807
707
  end
808
708
 
809
709
  def test_move_to_new_list_by_updating_complete_scope_should_append
810
- assert_equal [ 1, 2, 3, 4], ArrayScopeListMixin.where(conditions).map(&:id)
710
+ assert_equal [1, 2, 3, 4], ArrayScopeListMixin.where(conditions).map(&:id)
811
711
  assert_equal [13, 14, 15, 16], ArrayScopeListMixin.where(:parent_id => 6, :parent_type => 'bananas').map(&:id)
812
712
 
813
713
  ArrayScopeListMixin.find(2).update_attributes! :parent_id => 6, :parent_type => 'bananas'
@@ -834,7 +734,7 @@ class ArrayScopeListTest < Test::Unit::TestCase
834
734
 
835
735
  ArrayScopeListMixin.find(2).remove_from_list
836
736
 
837
- assert_equal [2, 1, 3, 4], ArrayScopeListMixin.where(conditions).map(&:id)
737
+ assert_equal [1, 3, 4], ArrayScopeListMixin.where(conditions).where('pos IS NOT NULL').map(&:id)
838
738
 
839
739
  assert_equal 1, ArrayScopeListMixin.find(1).pos
840
740
  assert_equal nil, ArrayScopeListMixin.find(2).pos
@@ -867,10 +767,9 @@ class ArrayScopeListTest < Test::Unit::TestCase
867
767
 
868
768
  end
869
769
 
870
- class AssociationScopeListTest < Test::Unit::TestCase
770
+ class AssociationScopeListTest < ActiveSupport::TestCase
871
771
 
872
772
  def setup
873
- setup_db
874
773
  (1..4).each do |i|
875
774
  AssociationScopeListMixin.create!(
876
775
  :pos => i,
@@ -887,10 +786,6 @@ class AssociationScopeListTest < Test::Unit::TestCase
887
786
  end
888
787
  end
889
788
 
890
- def teardown
891
- teardown_db
892
- end
893
-
894
789
  def test_association_scope_is_configured
895
790
  assert_equal :parent_id,
896
791
  AssociationScopeListMixin.acts_as_list_options[:scope]
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sortifiable
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 3
10
- version: 0.2.3
9
+ - 4
10
+ version: 0.2.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Andrew White
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-05-03 00:00:00 +01:00
18
+ date: 2011-06-18 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -65,12 +65,60 @@ dependencies:
65
65
  type: :development
66
66
  version_requirements: *id003
67
67
  - !ruby/object:Gem::Dependency
68
- name: sqlite3
68
+ name: mysql
69
69
  prerelease: false
70
70
  requirement: &id004 !ruby/object:Gem::Requirement
71
71
  none: false
72
72
  requirements:
73
- - - ">="
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ hash: 45
76
+ segments:
77
+ - 2
78
+ - 8
79
+ - 1
80
+ version: 2.8.1
81
+ type: :development
82
+ version_requirements: *id004
83
+ - !ruby/object:Gem::Dependency
84
+ name: mysql2
85
+ prerelease: false
86
+ requirement: &id005 !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ~>
90
+ - !ruby/object:Gem::Version
91
+ hash: 25
92
+ segments:
93
+ - 0
94
+ - 2
95
+ - 7
96
+ version: 0.2.7
97
+ type: :development
98
+ version_requirements: *id005
99
+ - !ruby/object:Gem::Dependency
100
+ name: pg
101
+ prerelease: false
102
+ requirement: &id006 !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ~>
106
+ - !ruby/object:Gem::Version
107
+ hash: 59
108
+ segments:
109
+ - 0
110
+ - 9
111
+ - 0
112
+ version: 0.9.0
113
+ type: :development
114
+ version_requirements: *id006
115
+ - !ruby/object:Gem::Dependency
116
+ name: sqlite3
117
+ prerelease: false
118
+ requirement: &id007 !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ~>
74
122
  - !ruby/object:Gem::Version
75
123
  hash: 29
76
124
  segments:
@@ -79,7 +127,7 @@ dependencies:
79
127
  - 3
80
128
  version: 1.3.3
81
129
  type: :development
82
- version_requirements: *id004
130
+ version_requirements: *id007
83
131
  description: |
84
132
  This gem provides an acts_as_list compatible capability for sorting
85
133
  and reordering a number of objects in a list. The class that has this
@@ -137,7 +185,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
137
185
  requirements: []
138
186
 
139
187
  rubyforge_project:
140
- rubygems_version: 1.6.2
188
+ rubygems_version: 1.5.2
141
189
  signing_key:
142
190
  specification_version: 3
143
191
  summary: Sort your models