orderable 0.1.1 → 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/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