orderable 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,13 +1,18 @@
1
1
  source "http://rubygems.org"
2
- # Add dependencies required to use your gem here.
3
- # Example:
4
- # gem "activesupport", ">= 2.3.5"
5
2
 
6
- # Add dependencies to develop your gem here.
7
- # Include everything needed to run rake, tests, features, etc.
3
+ gem "activesupport", ">= 2.3.5"
4
+ gem "activerecord", ">= 2.3.5"
5
+
8
6
  group :development do
9
7
  gem "shoulda", ">= 0"
10
8
  gem "bundler", "~> 1.0.0"
11
9
  gem "jeweler", "~> 1.5.2"
12
10
  gem "rcov", ">= 0"
13
11
  end
12
+
13
+ group :test do
14
+ gem "sqlite3"
15
+ gem "mysql2"
16
+ gem "pg"
17
+ gem "rr"
18
+ end
@@ -1,20 +1,44 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ activemodel (3.0.6)
5
+ activesupport (= 3.0.6)
6
+ builder (~> 2.1.2)
7
+ i18n (~> 0.5.0)
8
+ activerecord (3.0.6)
9
+ activemodel (= 3.0.6)
10
+ activesupport (= 3.0.6)
11
+ arel (~> 2.0.2)
12
+ tzinfo (~> 0.3.23)
13
+ activesupport (3.0.6)
14
+ arel (2.0.9)
15
+ builder (2.1.2)
4
16
  git (1.2.5)
17
+ i18n (0.5.0)
5
18
  jeweler (1.5.2)
6
19
  bundler (~> 1.0.0)
7
20
  git (>= 1.2.5)
8
21
  rake
22
+ mysql2 (0.2.7)
23
+ pg (0.10.1)
9
24
  rake (0.8.7)
10
25
  rcov (0.9.9)
26
+ rr (1.0.2)
11
27
  shoulda (2.11.3)
28
+ sqlite3 (1.3.3)
29
+ tzinfo (0.3.26)
12
30
 
13
31
  PLATFORMS
14
32
  ruby
15
33
 
16
34
  DEPENDENCIES
35
+ activerecord (>= 2.3.5)
36
+ activesupport (>= 2.3.5)
17
37
  bundler (~> 1.0.0)
18
38
  jeweler (~> 1.5.2)
39
+ mysql2
40
+ pg
19
41
  rcov
42
+ rr
20
43
  shoulda
44
+ sqlite3
data/Rakefile CHANGED
@@ -19,10 +19,10 @@ Jeweler::Tasks.new do |gem|
19
19
  gem.description = %Q{Add user defined ordering to ActiveRecord, supports MySQL and PostgreSQL.}
20
20
  gem.email = "jebarker@gmail.com"
21
21
  gem.authors = ["Darcy Laycock", "John Barker"]
22
- gem.add_runtime_dependency 'activesupport'
23
- gem.add_runtime_dependency 'activerecord'
24
- gem.add_development_dependency 'activesupport'
25
- gem.add_development_dependency 'activerecord'
22
+ gem.add_runtime_dependency 'activesupport', '>= 2.3.5'
23
+ gem.add_runtime_dependency 'activerecord', '>= 2.3.5'
24
+ gem.add_development_dependency 'activesupport', '>= 2.3.5'
25
+ gem.add_development_dependency 'activerecord', '>= 2.3.5'
26
26
  end
27
27
  Jeweler::RubygemsDotOrgTasks.new
28
28
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.2.0
@@ -19,8 +19,9 @@ module Orderable
19
19
  self.orderable_field = field.to_sym
20
20
  end
21
21
 
22
- def update_order(id_array = nil)
23
- id_array = Array(id_array).flatten.reject(&:blank?).map(&:to_i).uniq
22
+ def update_order(*id_array)
23
+ id_array = Array.wrap(id_array).flatten.reject(&:blank?).map(&:to_i).uniq
24
+ return if id_array.blank?
24
25
  update_all orderable_sql_for_ids(id_array), ['id IN (?)', id_array]
25
26
  end
26
27
 
@@ -34,11 +35,13 @@ module Orderable
34
35
 
35
36
  def orderable_sql_for_ids(ids)
36
37
  ids = ids.join(",")
37
- case Orderable.adapter
38
+ case adapter = Orderable.adapter
38
39
  when /^mysql/
39
40
  ["#{quoted_column} = FIND_IN_SET(id, ?)", ids]
40
41
  when /^postgres/
41
42
  ["#{quoted_column} = STRPOS(?, ','||id||',')", ",#{ids},"]
43
+ else
44
+ raise ArgumentError, "The database adapter #{adapter} is not supported by orderable"
42
45
  end
43
46
  end
44
47
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{orderable}
8
- s.version = "0.1.1"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Darcy Laycock", "John Barker"]
@@ -29,7 +29,8 @@ Gem::Specification.new do |s|
29
29
  "orderable.gems",
30
30
  "orderable.gemspec",
31
31
  "test/helper.rb",
32
- "test/test_orderable.rb"
32
+ "test/test_orderable_mysql.rb",
33
+ "test/test_orderable_postgres.rb"
33
34
  ]
34
35
  s.homepage = %q{http://github.com/excepttheweasel/orderable}
35
36
  s.licenses = ["MIT"]
@@ -38,40 +39,47 @@ Gem::Specification.new do |s|
38
39
  s.summary = %q{Add user defined ordering to ActiveRecord}
39
40
  s.test_files = [
40
41
  "test/helper.rb",
41
- "test/test_orderable.rb"
42
+ "test/test_orderable_mysql.rb",
43
+ "test/test_orderable_postgres.rb"
42
44
  ]
43
45
 
44
46
  if s.respond_to? :specification_version then
45
47
  s.specification_version = 3
46
48
 
47
49
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
50
+ s.add_runtime_dependency(%q<activesupport>, [">= 2.3.5"])
51
+ s.add_runtime_dependency(%q<activerecord>, [">= 2.3.5"])
48
52
  s.add_development_dependency(%q<shoulda>, [">= 0"])
49
53
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
50
54
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
51
55
  s.add_development_dependency(%q<rcov>, [">= 0"])
52
- s.add_runtime_dependency(%q<activesupport>, [">= 0"])
53
- s.add_runtime_dependency(%q<activerecord>, [">= 0"])
54
- s.add_development_dependency(%q<activesupport>, [">= 0"])
55
- s.add_development_dependency(%q<activerecord>, [">= 0"])
56
+ s.add_runtime_dependency(%q<activesupport>, [">= 2.3.5"])
57
+ s.add_runtime_dependency(%q<activerecord>, [">= 2.3.5"])
58
+ s.add_development_dependency(%q<activesupport>, [">= 2.3.5"])
59
+ s.add_development_dependency(%q<activerecord>, [">= 2.3.5"])
56
60
  else
61
+ s.add_dependency(%q<activesupport>, [">= 2.3.5"])
62
+ s.add_dependency(%q<activerecord>, [">= 2.3.5"])
57
63
  s.add_dependency(%q<shoulda>, [">= 0"])
58
64
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
59
65
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
60
66
  s.add_dependency(%q<rcov>, [">= 0"])
61
- s.add_dependency(%q<activesupport>, [">= 0"])
62
- s.add_dependency(%q<activerecord>, [">= 0"])
63
- s.add_dependency(%q<activesupport>, [">= 0"])
64
- s.add_dependency(%q<activerecord>, [">= 0"])
67
+ s.add_dependency(%q<activesupport>, [">= 2.3.5"])
68
+ s.add_dependency(%q<activerecord>, [">= 2.3.5"])
69
+ s.add_dependency(%q<activesupport>, [">= 2.3.5"])
70
+ s.add_dependency(%q<activerecord>, [">= 2.3.5"])
65
71
  end
66
72
  else
73
+ s.add_dependency(%q<activesupport>, [">= 2.3.5"])
74
+ s.add_dependency(%q<activerecord>, [">= 2.3.5"])
67
75
  s.add_dependency(%q<shoulda>, [">= 0"])
68
76
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
69
77
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
70
78
  s.add_dependency(%q<rcov>, [">= 0"])
71
- s.add_dependency(%q<activesupport>, [">= 0"])
72
- s.add_dependency(%q<activerecord>, [">= 0"])
73
- s.add_dependency(%q<activesupport>, [">= 0"])
74
- s.add_dependency(%q<activerecord>, [">= 0"])
79
+ s.add_dependency(%q<activesupport>, [">= 2.3.5"])
80
+ s.add_dependency(%q<activerecord>, [">= 2.3.5"])
81
+ s.add_dependency(%q<activesupport>, [">= 2.3.5"])
82
+ s.add_dependency(%q<activerecord>, [">= 2.3.5"])
75
83
  end
76
84
  end
77
85
 
@@ -1,7 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'bundler'
3
3
  begin
4
- Bundler.setup(:default, :development)
4
+ Bundler.setup(:default, :test)
5
5
  rescue Bundler::BundlerError => e
6
6
  $stderr.puts e.message
7
7
  $stderr.puts "Run `bundle install` to install missing gems"
@@ -9,10 +9,14 @@ rescue Bundler::BundlerError => e
9
9
  end
10
10
  require 'test/unit'
11
11
  require 'shoulda'
12
+ require 'active_support'
13
+ require 'active_record'
14
+ require 'rr'
12
15
 
13
16
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
17
  $LOAD_PATH.unshift(File.dirname(__FILE__))
15
18
  require 'orderable'
16
19
 
17
20
  class Test::Unit::TestCase
21
+ include RR::Adapters::TestUnit
18
22
  end
@@ -0,0 +1,46 @@
1
+ require 'helper'
2
+
3
+ MySQLRecord = Class.new ActiveRecord::Base
4
+ MySQLRecord.establish_connection(:adapter => 'mysql2', :host => 'localhost', :database => 'orderable_test')
5
+
6
+ MySQLRecord.connection.drop_table(:items) rescue Mysql2::Error
7
+ MySQLRecord.connection.create_table :items do |t|
8
+ t.string :name
9
+ t.integer :order_position
10
+ end
11
+
12
+ class MySQLItem < MySQLRecord
13
+ set_table_name 'items'
14
+ include Orderable
15
+ orderable_field_is :order_position
16
+ end
17
+
18
+ class TestOrderableMySQL < Test::Unit::TestCase
19
+
20
+ def setup
21
+ stub(Orderable).adapter.returns 'mysql'
22
+ @items = [
23
+ MySQLItem.create(:name => 'item1'),
24
+ MySQLItem.create(:name => 'item2'),
25
+ MySQLItem.create(:name => 'item3'),
26
+ MySQLItem.create(:name => 'item4')]
27
+ end
28
+
29
+ def teardown
30
+ @items.each(&:delete)
31
+ end
32
+
33
+ def test_default_order
34
+ assert_equal ['item1', 'item2', 'item3', 'item4'], MySQLItem.in_order.all.map(&:name)
35
+ end
36
+
37
+ def test_updated_order
38
+ MySQLItem.update_order \
39
+ @items[3].id,
40
+ @items[1].id,
41
+ @items[2].id,
42
+ @items[0].id
43
+ assert_equal ['item4', 'item2', 'item3', 'item1'], MySQLItem.in_order.all.map(&:name)
44
+ end
45
+
46
+ end
@@ -0,0 +1,46 @@
1
+ require 'helper'
2
+
3
+ PostgreSQLRecord = Class.new ActiveRecord::Base
4
+ PostgreSQLRecord.establish_connection(:adapter => 'postgresql', :host => 'localhost', :database => 'orderable_test')
5
+
6
+ PostgreSQLRecord.connection.drop_table(:items)
7
+ PostgreSQLRecord.connection.create_table :items do |t|
8
+ t.string :name
9
+ t.integer :order_position
10
+ end
11
+
12
+ class PSQLItem < PostgreSQLRecord
13
+ set_table_name 'items'
14
+ include Orderable
15
+ orderable_field_is :order_position
16
+ end
17
+
18
+ class TestOrderablePostgres < Test::Unit::TestCase
19
+
20
+ def setup
21
+ stub(Orderable).adapter.returns 'postgres'
22
+ @items = [
23
+ PSQLItem.create(:name => 'item1'),
24
+ PSQLItem.create(:name => 'item2'),
25
+ PSQLItem.create(:name => 'item3'),
26
+ PSQLItem.create(:name => 'item4')]
27
+ end
28
+
29
+ def teardown
30
+ @items.each(&:delete)
31
+ end
32
+
33
+ def test_default_order
34
+ assert_equal ['item1', 'item2', 'item3', 'item4'], PSQLItem.in_order.all.map(&:name)
35
+ end
36
+
37
+ def test_updated_order
38
+ PSQLItem.update_order \
39
+ @items[3].id,
40
+ @items[1].id,
41
+ @items[2].id,
42
+ @items[0].id
43
+ assert_equal ['item4', 'item2', 'item3', 'item1'], PSQLItem.in_order.all.map(&:name)
44
+ end
45
+
46
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: orderable
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 1
10
- version: 0.1.1
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Darcy Laycock
@@ -20,8 +20,40 @@ date: 2011-04-16 00:00:00 +08:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
23
- name: shoulda
23
+ name: activesupport
24
24
  version_requirements: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 9
30
+ segments:
31
+ - 2
32
+ - 3
33
+ - 5
34
+ version: 2.3.5
35
+ prerelease: false
36
+ type: :runtime
37
+ requirement: *id001
38
+ - !ruby/object:Gem::Dependency
39
+ name: activerecord
40
+ version_requirements: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 9
46
+ segments:
47
+ - 2
48
+ - 3
49
+ - 5
50
+ version: 2.3.5
51
+ prerelease: false
52
+ type: :runtime
53
+ requirement: *id002
54
+ - !ruby/object:Gem::Dependency
55
+ name: shoulda
56
+ version_requirements: &id003 !ruby/object:Gem::Requirement
25
57
  none: false
26
58
  requirements:
27
59
  - - ">="
@@ -32,10 +64,10 @@ dependencies:
32
64
  version: "0"
33
65
  prerelease: false
34
66
  type: :development
35
- requirement: *id001
67
+ requirement: *id003
36
68
  - !ruby/object:Gem::Dependency
37
69
  name: bundler
38
- version_requirements: &id002 !ruby/object:Gem::Requirement
70
+ version_requirements: &id004 !ruby/object:Gem::Requirement
39
71
  none: false
40
72
  requirements:
41
73
  - - ~>
@@ -48,10 +80,10 @@ dependencies:
48
80
  version: 1.0.0
49
81
  prerelease: false
50
82
  type: :development
51
- requirement: *id002
83
+ requirement: *id004
52
84
  - !ruby/object:Gem::Dependency
53
85
  name: jeweler
54
- version_requirements: &id003 !ruby/object:Gem::Requirement
86
+ version_requirements: &id005 !ruby/object:Gem::Requirement
55
87
  none: false
56
88
  requirements:
57
89
  - - ~>
@@ -64,10 +96,10 @@ dependencies:
64
96
  version: 1.5.2
65
97
  prerelease: false
66
98
  type: :development
67
- requirement: *id003
99
+ requirement: *id005
68
100
  - !ruby/object:Gem::Dependency
69
101
  name: rcov
70
- version_requirements: &id004 !ruby/object:Gem::Requirement
102
+ version_requirements: &id006 !ruby/object:Gem::Requirement
71
103
  none: false
72
104
  requirements:
73
105
  - - ">="
@@ -78,63 +110,71 @@ dependencies:
78
110
  version: "0"
79
111
  prerelease: false
80
112
  type: :development
81
- requirement: *id004
113
+ requirement: *id006
82
114
  - !ruby/object:Gem::Dependency
83
115
  name: activesupport
84
- version_requirements: &id005 !ruby/object:Gem::Requirement
116
+ version_requirements: &id007 !ruby/object:Gem::Requirement
85
117
  none: false
86
118
  requirements:
87
119
  - - ">="
88
120
  - !ruby/object:Gem::Version
89
- hash: 3
121
+ hash: 9
90
122
  segments:
91
- - 0
92
- version: "0"
123
+ - 2
124
+ - 3
125
+ - 5
126
+ version: 2.3.5
93
127
  prerelease: false
94
128
  type: :runtime
95
- requirement: *id005
129
+ requirement: *id007
96
130
  - !ruby/object:Gem::Dependency
97
131
  name: activerecord
98
- version_requirements: &id006 !ruby/object:Gem::Requirement
132
+ version_requirements: &id008 !ruby/object:Gem::Requirement
99
133
  none: false
100
134
  requirements:
101
135
  - - ">="
102
136
  - !ruby/object:Gem::Version
103
- hash: 3
137
+ hash: 9
104
138
  segments:
105
- - 0
106
- version: "0"
139
+ - 2
140
+ - 3
141
+ - 5
142
+ version: 2.3.5
107
143
  prerelease: false
108
144
  type: :runtime
109
- requirement: *id006
145
+ requirement: *id008
110
146
  - !ruby/object:Gem::Dependency
111
147
  name: activesupport
112
- version_requirements: &id007 !ruby/object:Gem::Requirement
148
+ version_requirements: &id009 !ruby/object:Gem::Requirement
113
149
  none: false
114
150
  requirements:
115
151
  - - ">="
116
152
  - !ruby/object:Gem::Version
117
- hash: 3
153
+ hash: 9
118
154
  segments:
119
- - 0
120
- version: "0"
155
+ - 2
156
+ - 3
157
+ - 5
158
+ version: 2.3.5
121
159
  prerelease: false
122
160
  type: :development
123
- requirement: *id007
161
+ requirement: *id009
124
162
  - !ruby/object:Gem::Dependency
125
163
  name: activerecord
126
- version_requirements: &id008 !ruby/object:Gem::Requirement
164
+ version_requirements: &id010 !ruby/object:Gem::Requirement
127
165
  none: false
128
166
  requirements:
129
167
  - - ">="
130
168
  - !ruby/object:Gem::Version
131
- hash: 3
169
+ hash: 9
132
170
  segments:
133
- - 0
134
- version: "0"
171
+ - 2
172
+ - 3
173
+ - 5
174
+ version: 2.3.5
135
175
  prerelease: false
136
176
  type: :development
137
- requirement: *id008
177
+ requirement: *id010
138
178
  description: Add user defined ordering to ActiveRecord, supports MySQL and PostgreSQL.
139
179
  email: jebarker@gmail.com
140
180
  executables: []
@@ -157,7 +197,8 @@ files:
157
197
  - orderable.gems
158
198
  - orderable.gemspec
159
199
  - test/helper.rb
160
- - test/test_orderable.rb
200
+ - test/test_orderable_mysql.rb
201
+ - test/test_orderable_postgres.rb
161
202
  has_rdoc: true
162
203
  homepage: http://github.com/excepttheweasel/orderable
163
204
  licenses:
@@ -194,4 +235,5 @@ specification_version: 3
194
235
  summary: Add user defined ordering to ActiveRecord
195
236
  test_files:
196
237
  - test/helper.rb
197
- - test/test_orderable.rb
238
+ - test/test_orderable_mysql.rb
239
+ - test/test_orderable_postgres.rb
@@ -1,7 +0,0 @@
1
- require 'helper'
2
-
3
- class TestOrderable < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
6
- end
7
- end