activerecord-turntable 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml ADDED
@@ -0,0 +1,12 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
4
+ - 1.9.3
5
+ gemfile:
6
+ - gemfiles/rails3_0.gemfile
7
+ - gemfiles/rails3_1.gemfile
8
+ - gemfiles/rails3_2.gemfile
9
+ before_script:
10
+ - bundle exec rake turntable:db:reset
11
+ script: bundle exec rake spec
12
+
data/README.rdoc CHANGED
@@ -1,4 +1,4 @@
1
- = ActiveRecord::Turntable
1
+ = ActiveRecord::Turntable {<img src="https://secure.travis-ci.org/drecom/activerecord-turntable.png" />}[http://travis-ci.org/drecom/activerecord-turntable]
2
2
 
3
3
  ActiveRecord::Turntable is a database sharding extension for ActiveRecord.
4
4
 
@@ -26,10 +26,10 @@ generator creates Rails.root/config/turntable.yml
26
26
 
27
27
  == ActiveRecord::Turntable terms
28
28
 
29
- *Shard
30
- *Cluster - a cluster of shards.
31
- *Master - default ActiveRecord::Base's connection
32
- *Sequencer - a module that creates global sequence number
29
+ * Shard
30
+ * Cluster - a cluster of shards.
31
+ * Master - default ActiveRecord::Base's connection
32
+ * Sequencer - a module that creates global sequence number
33
33
 
34
34
  == Example
35
35
 
@@ -57,6 +57,8 @@ example turntable.yml:
57
57
  clusters:
58
58
  user_cluster: # <-- cluster name
59
59
  algorithm: range # <-- only range or range_bsearch sharding is supported currently.
60
+ seq:
61
+ connection: user_seq_1
60
62
  shards:
61
63
  - connection: user_shard_1 # <-- shard name
62
64
  less_than: 100 # <-- shard range(like mysql partitioning)
@@ -267,7 +269,9 @@ To use turntable's ConnectionManagement middleware, add below line to your initi
267
269
  == Thanks to
268
270
  ConnectionProxy, Distributed Migration implementation is inspired by Octopus and DataFabric.
269
271
 
270
- == LICENSE
272
+ == License
273
+ activerecord-turntable is released under the MIT license:
274
+
271
275
  Copyright (c) 2012 Drecom Co.,Ltd.
272
276
 
273
277
  Permission is hereby granted, free of charge, to any person obtaining
data/Rakefile CHANGED
@@ -24,7 +24,11 @@ namespace :turntable do
24
24
  task :create => :load_config do
25
25
  database_configs = [ActiveRecord::Base.configurations[RAILS_ENV]] + ActiveRecord::Base.configurations[RAILS_ENV]["shards"].values + ActiveRecord::Base.configurations[RAILS_ENV]["seq"].values
26
26
  database_configs.each do |dbconf|
27
- %x{ echo "CREATE DATABASE #{dbconf["database"]}" | mysql -u #{dbconf["username"]} -p#{dbconf["password"]} -h #{dbconf["host"]} }
27
+ command = "mysql "
28
+ command << "-u #{dbconf["username"]} " if dbconf["username"]
29
+ command << "-p#{dbconf["password"]} " if dbconf["password"]
30
+ command << "-h #{dbconf["host"]}" if dbconf["host"]
31
+ %x{ echo "CREATE DATABASE #{dbconf["database"]}" | #{command} }
28
32
  end
29
33
  end
30
34
 
@@ -33,7 +37,7 @@ namespace :turntable do
33
37
  ActiveRecord::Base.establish_connection RAILS_ENV
34
38
  require 'active_record/turntable'
35
39
  ActiveRecord::Base.send(:include, ActiveRecord::Turntable)
36
- ActiveRecord::ConnectionAdapters::SchemaStatements.send(:include, Turntable::Migration::SchemaStatementsExt)
40
+ ActiveRecord::ConnectionAdapters::SchemaStatements.send(:include, ActiveRecord::Turntable::Migration::SchemaStatementsExt)
37
41
  database_configs = [ActiveRecord::Base.configurations[RAILS_ENV]] + ActiveRecord::Base.configurations[RAILS_ENV]["shards"].values + ActiveRecord::Base.configurations[RAILS_ENV]["seq"].values
38
42
 
39
43
  database_configs.each do |dbconf|
@@ -92,7 +96,11 @@ namespace :turntable do
92
96
  task :drop => :load_config do
93
97
  database_configs = [ActiveRecord::Base.configurations[RAILS_ENV]] + ActiveRecord::Base.configurations[RAILS_ENV]["shards"].values + ActiveRecord::Base.configurations[RAILS_ENV]["seq"].values
94
98
  database_configs.each do |dbconf|
95
- %x{ echo "DROP DATABASE #{dbconf["database"]}" | mysql -u #{dbconf["username"]} -p#{dbconf["password"]} -h #{dbconf["host"]} }
99
+ command = "mysql "
100
+ command << "-u #{dbconf["username"]} " if dbconf["username"]
101
+ command << "-p#{dbconf["password"]} " if dbconf["password"]
102
+ command << "-h #{dbconf["host"]}" if dbconf["host"]
103
+ %x{ echo "DROP DATABASE #{dbconf["database"]}" | #{command} }
96
104
  end
97
105
  end
98
106
 
@@ -0,0 +1,22 @@
1
+ source :rubygems
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ gem 'activerecord', "~> 3.0.0"
7
+ gem 'activesupport', "~> 3.0.0"
8
+ gem "sql_tree", "=0.2.0"
9
+ gem "bsearch", "~>1.5"
10
+ gem "httpclient"
11
+
12
+ # Add dependencies to develop your gem here.
13
+ # Include everything needed to run rake, tests, features, etc.
14
+ group :development, :test do
15
+ gem "rake", "~>0.9.2"
16
+ gem "rspec"
17
+ gem "rr"
18
+ gem "mysql2", "< 0.3"
19
+ gem "fabrication"
20
+ gem "faker"
21
+ gem "activerecord-import"
22
+ end
@@ -0,0 +1,22 @@
1
+ source :rubygems
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ gem 'activerecord', "~> 3.1.0"
7
+ gem 'activesupport', "~> 3.1.0"
8
+ gem "sql_tree", "=0.2.0"
9
+ gem "bsearch", "~>1.5"
10
+ gem "httpclient"
11
+
12
+ # Add dependencies to develop your gem here.
13
+ # Include everything needed to run rake, tests, features, etc.
14
+ group :development, :test do
15
+ gem "rake", "~>0.9.2"
16
+ gem "rspec"
17
+ gem "rr"
18
+ gem "mysql2"
19
+ gem "fabrication"
20
+ gem "faker"
21
+ gem "activerecord-import"
22
+ end
@@ -0,0 +1,22 @@
1
+ source :rubygems
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ gem 'activerecord', "~> 3.2.0"
7
+ gem 'activesupport', "~> 3.2.0"
8
+ gem "sql_tree", "=0.2.0"
9
+ gem "bsearch", "~>1.5"
10
+ gem "httpclient"
11
+
12
+ # Add dependencies to develop your gem here.
13
+ # Include everything needed to run rake, tests, features, etc.
14
+ group :development, :test do
15
+ gem "rake", "~>0.9.2"
16
+ gem "rspec"
17
+ gem "rr"
18
+ gem "mysql2"
19
+ gem "fabrication"
20
+ gem "faker"
21
+ gem "activerecord-import"
22
+ end
@@ -77,7 +77,7 @@ module ActiveRecord::Turntable
77
77
  raise "Please install the #{config['adapter']} adapter: `gem install activerecord-#{config['adapter']}-adapter` (#{e})"
78
78
  end
79
79
  adapter_method = "#{config['adapter']}_connection"
80
- ActiveRecord::Base::ConnectionSpecification.new(config, adapter_method)
80
+ ActiveRecord::Base::ConnectionSpecification.new(config.symbolize_keys, adapter_method)
81
81
  end
82
82
 
83
83
  def clear_all_connections!
@@ -41,7 +41,7 @@ module ActiveRecord::Turntable
41
41
  raise "Please install the #{config['adapter']} adapter: `gem install activerecord-#{config['adapter']}-adapter` (#{e})"
42
42
  end
43
43
  adapter_method = "#{config['adapter']}_connection"
44
- ActiveRecord::Base::ConnectionSpecification.new(config, adapter_method)
44
+ ActiveRecord::Base::ConnectionSpecification.new(config.symbolize_keys, adapter_method)
45
45
  end
46
46
  end
47
47
  end
@@ -1,5 +1,5 @@
1
1
  module ActiveRecord
2
2
  module Turntable
3
- VERSION = "1.0.0"
3
+ VERSION = "1.0.1"
4
4
  end
5
5
  end
@@ -6,6 +6,8 @@ development:
6
6
  clusters:
7
7
  user_cluster:
8
8
  algorithm: range
9
+ seq:
10
+ connection: user_seq_1
9
11
  shards:
10
12
  - connection: user_shard_1
11
13
  less_than: 100
@@ -18,6 +20,8 @@ test:
18
20
  clusters:
19
21
  user_cluster:
20
22
  algorithm: range
23
+ seq:
24
+ connection: user_seq_1
21
25
  shards:
22
26
  - connection: user_shard_1
23
27
  less_than: 20000
@@ -30,6 +34,8 @@ production:
30
34
  clusters:
31
35
  user_cluster:
32
36
  algorithm: range
37
+ seq:
38
+ connection: user_seq_1
33
39
  shards:
34
40
  - connection: user_shard_1
35
41
  less_than: 20000
@@ -34,8 +34,14 @@ describe ActiveRecord::Turntable::ActiveRecordExt::CleverLoad do
34
34
  end
35
35
 
36
36
  it "should target loaded" do
37
- @users.each do |user|
38
- user.association(:user_status).loaded?.should be_true
37
+ if ActiveRecord::VERSION::STRING < "3.1"
38
+ @users.each do |user|
39
+ user.loaded_user_status?.should be_true
40
+ end
41
+ else
42
+ @users.each do |user|
43
+ user.association(:user_status).loaded?.should be_true
44
+ end
39
45
  end
40
46
  end
41
47
 
@@ -60,8 +66,14 @@ describe ActiveRecord::Turntable::ActiveRecordExt::CleverLoad do
60
66
  end
61
67
 
62
68
  it "should target loaded" do
63
- @user_statuses.each do |user_status|
64
- user_status.association(:user).loaded?.should be_true
69
+ if ActiveRecord::VERSION::STRING < "3.1"
70
+ @user_statuses.each do |user_status|
71
+ user_status.loaded_user?.should be_true
72
+ end
73
+ else
74
+ @user_statuses.each do |user_status|
75
+ user_status.association(:user).loaded?.should be_true
76
+ end
65
77
  end
66
78
  end
67
79
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-turntable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-10 00:00:00.000000000 Z
12
+ date: 2013-01-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
16
- requirement: &70194215920340 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: 3.0.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70194215920340
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 3.0.0
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: activesupport
27
- requirement: &70194215919380 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,21 +37,31 @@ dependencies:
32
37
  version: 3.0.0
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *70194215919380
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 3.0.0
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: sql_tree
38
- requirement: &70194215918260 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
- - - =
51
+ - - '='
42
52
  - !ruby/object:Gem::Version
43
53
  version: 0.2.0
44
54
  type: :runtime
45
55
  prerelease: false
46
- version_requirements: *70194215918260
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.2.0
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: bsearch
49
- requirement: &70194215917060 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ~>
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: '1.5'
55
70
  type: :runtime
56
71
  prerelease: false
57
- version_requirements: *70194215917060
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '1.5'
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: httpclient
60
- requirement: &70194215920960 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ! '>='
@@ -65,10 +85,15 @@ dependencies:
65
85
  version: '0'
66
86
  type: :runtime
67
87
  prerelease: false
68
- version_requirements: *70194215920960
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: rake
71
- requirement: &70194215919200 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
72
97
  none: false
73
98
  requirements:
74
99
  - - ~>
@@ -76,10 +101,15 @@ dependencies:
76
101
  version: 0.9.2
77
102
  type: :development
78
103
  prerelease: false
79
- version_requirements: *70194215919200
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 0.9.2
80
110
  - !ruby/object:Gem::Dependency
81
111
  name: rspec
82
- requirement: &70194215671500 !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
83
113
  none: false
84
114
  requirements:
85
115
  - - ! '>='
@@ -87,10 +117,15 @@ dependencies:
87
117
  version: '0'
88
118
  type: :development
89
119
  prerelease: false
90
- version_requirements: *70194215671500
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
91
126
  - !ruby/object:Gem::Dependency
92
127
  name: rr
93
- requirement: &70194215671020 !ruby/object:Gem::Requirement
128
+ requirement: !ruby/object:Gem::Requirement
94
129
  none: false
95
130
  requirements:
96
131
  - - ! '>='
@@ -98,10 +133,15 @@ dependencies:
98
133
  version: '0'
99
134
  type: :development
100
135
  prerelease: false
101
- version_requirements: *70194215671020
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
102
142
  - !ruby/object:Gem::Dependency
103
143
  name: mysql2
104
- requirement: &70194215670540 !ruby/object:Gem::Requirement
144
+ requirement: !ruby/object:Gem::Requirement
105
145
  none: false
106
146
  requirements:
107
147
  - - ! '>='
@@ -109,10 +149,15 @@ dependencies:
109
149
  version: '0'
110
150
  type: :development
111
151
  prerelease: false
112
- version_requirements: *70194215670540
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
113
158
  - !ruby/object:Gem::Dependency
114
159
  name: fabrication
115
- requirement: &70194215670060 !ruby/object:Gem::Requirement
160
+ requirement: !ruby/object:Gem::Requirement
116
161
  none: false
117
162
  requirements:
118
163
  - - ! '>='
@@ -120,10 +165,15 @@ dependencies:
120
165
  version: '0'
121
166
  type: :development
122
167
  prerelease: false
123
- version_requirements: *70194215670060
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
124
174
  - !ruby/object:Gem::Dependency
125
175
  name: faker
126
- requirement: &70194215669580 !ruby/object:Gem::Requirement
176
+ requirement: !ruby/object:Gem::Requirement
127
177
  none: false
128
178
  requirements:
129
179
  - - ! '>='
@@ -131,10 +181,15 @@ dependencies:
131
181
  version: '0'
132
182
  type: :development
133
183
  prerelease: false
134
- version_requirements: *70194215669580
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - ! '>='
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
135
190
  - !ruby/object:Gem::Dependency
136
191
  name: activerecord-import
137
- requirement: &70194215669100 !ruby/object:Gem::Requirement
192
+ requirement: !ruby/object:Gem::Requirement
138
193
  none: false
139
194
  requirements:
140
195
  - - ! '>='
@@ -142,10 +197,15 @@ dependencies:
142
197
  version: '0'
143
198
  type: :development
144
199
  prerelease: false
145
- version_requirements: *70194215669100
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ! '>='
204
+ - !ruby/object:Gem::Version
205
+ version: '0'
146
206
  - !ruby/object:Gem::Dependency
147
207
  name: pry
148
- requirement: &70194215668620 !ruby/object:Gem::Requirement
208
+ requirement: !ruby/object:Gem::Requirement
149
209
  none: false
150
210
  requirements:
151
211
  - - ! '>='
@@ -153,10 +213,15 @@ dependencies:
153
213
  version: '0'
154
214
  type: :development
155
215
  prerelease: false
156
- version_requirements: *70194215668620
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
218
+ requirements:
219
+ - - ! '>='
220
+ - !ruby/object:Gem::Version
221
+ version: '0'
157
222
  - !ruby/object:Gem::Dependency
158
223
  name: guard-rspec
159
- requirement: &70194215668140 !ruby/object:Gem::Requirement
224
+ requirement: !ruby/object:Gem::Requirement
160
225
  none: false
161
226
  requirements:
162
227
  - - ! '>='
@@ -164,10 +229,15 @@ dependencies:
164
229
  version: '0'
165
230
  type: :development
166
231
  prerelease: false
167
- version_requirements: *70194215668140
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ none: false
234
+ requirements:
235
+ - - ! '>='
236
+ - !ruby/object:Gem::Version
237
+ version: '0'
168
238
  - !ruby/object:Gem::Dependency
169
239
  name: growl
170
- requirement: &70194215667620 !ruby/object:Gem::Requirement
240
+ requirement: !ruby/object:Gem::Requirement
171
241
  none: false
172
242
  requirements:
173
243
  - - ! '>='
@@ -175,7 +245,12 @@ dependencies:
175
245
  version: '0'
176
246
  type: :development
177
247
  prerelease: false
178
- version_requirements: *70194215667620
248
+ version_requirements: !ruby/object:Gem::Requirement
249
+ none: false
250
+ requirements:
251
+ - - ! '>='
252
+ - !ruby/object:Gem::Version
253
+ version: '0'
179
254
  description: AcviveRecord Sharding plugin
180
255
  email:
181
256
  executables: []
@@ -187,12 +262,16 @@ files:
187
262
  - .document
188
263
  - .gitignore
189
264
  - .rspec
265
+ - .travis.yml
190
266
  - Gemfile
191
267
  - Guardfile
192
268
  - LICENSE.txt
193
269
  - README.rdoc
194
270
  - Rakefile
195
271
  - activerecord-turntable.gemspec
272
+ - gemfiles/rails3_0.gemfile
273
+ - gemfiles/rails3_1.gemfile
274
+ - gemfiles/rails3_2.gemfile
196
275
  - lib/active_record/turntable.rb
197
276
  - lib/active_record/turntable/active_record_ext.rb
198
277
  - lib/active_record/turntable/active_record_ext/.gitkeep
@@ -334,7 +413,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
334
413
  version: '0'
335
414
  requirements: []
336
415
  rubyforge_project: activerecord-turntable
337
- rubygems_version: 1.8.16
416
+ rubygems_version: 1.8.23
338
417
  signing_key:
339
418
  specification_version: 3
340
419
  summary: ActiveRecord Sharding plugin
@@ -364,4 +443,3 @@ test_files:
364
443
  - spec/spec_helper.rb
365
444
  - spec/test_models.rb
366
445
  - spec/turntable_helper.rb
367
- has_rdoc: