data_fabric 1.1.0 → 1.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/CHANGELOG +4 -0
- data/Manifest +73 -0
- data/README.rdoc +1 -1
- data/Rakefile +34 -8
- data/data_fabric.gemspec +7 -7
- data/example/app/models/figment.rb +1 -1
- data/example/db/development.sqlite3 +0 -0
- data/example/db/s0_development.sqlite3 +0 -0
- data/example/db/s0_test.sqlite3 +0 -0
- data/example/db/s1_development.sqlite3 +0 -0
- data/example/db/s1_test.sqlite3 +0 -0
- data/example/db/test.sqlite3 +0 -0
- data/example/vendor/plugins/data_fabric/init.rb +1 -0
- data/example/vendor/plugins/data_fabric/lib/data_fabric.rb +106 -0
- data/example/vendor/plugins/data_fabric/lib/data_fabric/ar20.rb +135 -0
- data/example/vendor/plugins/data_fabric/lib/data_fabric/ar22.rb +172 -0
- data/example/vendor/plugins/data_fabric/lib/data_fabric/version.rb +5 -0
- data/example22/Rakefile +58 -0
- data/example22/app/controllers/accounts_controller.rb +22 -0
- data/example22/app/controllers/application.rb +39 -0
- data/example22/app/controllers/figments_controller.rb +8 -0
- data/example22/app/helpers/application_helper.rb +3 -0
- data/example22/app/models/account.rb +3 -0
- data/example22/app/models/figment.rb +4 -0
- data/example22/app/views/accounts/index.html.erb +47 -0
- data/example22/app/views/layouts/application.html.erb +8 -0
- data/example22/config/boot.rb +109 -0
- data/example22/config/database.yml +21 -0
- data/example22/config/environment.rb +76 -0
- data/example22/config/environments/development.rb +17 -0
- data/example22/config/environments/production.rb +24 -0
- data/example22/config/environments/test.rb +22 -0
- data/example22/config/initializers/inflections.rb +10 -0
- data/example22/config/initializers/mime_types.rb +5 -0
- data/example22/config/initializers/new_rails_defaults.rb +17 -0
- data/example22/config/locales/en.yml +5 -0
- data/example22/config/routes.rb +46 -0
- data/example22/db/migrate/20080702154628_create_accounts.rb +14 -0
- data/example22/db/migrate/20080702154820_create_figments.rb +14 -0
- data/example22/public/404.html +30 -0
- data/example22/public/422.html +30 -0
- data/example22/public/500.html +33 -0
- data/example22/public/dispatch.cgi +10 -0
- data/example22/public/dispatch.fcgi +24 -0
- data/example22/public/dispatch.rb +10 -0
- data/example22/public/favicon.ico +0 -0
- data/example22/public/images/rails.png +0 -0
- data/example22/public/index.html +274 -0
- data/example22/public/javascripts/application.js +2 -0
- data/example22/public/javascripts/controls.js +963 -0
- data/example22/public/javascripts/dragdrop.js +973 -0
- data/example22/public/javascripts/effects.js +1128 -0
- data/example22/public/javascripts/prototype.js +4320 -0
- data/example22/public/robots.txt +5 -0
- data/example22/script/about +4 -0
- data/example22/script/console +3 -0
- data/example22/script/dbconsole +3 -0
- data/example22/script/destroy +3 -0
- data/example22/script/generate +3 -0
- data/example22/script/performance/benchmarker +3 -0
- data/example22/script/performance/profiler +3 -0
- data/example22/script/performance/request +3 -0
- data/example22/script/plugin +3 -0
- data/example22/script/process/inspector +3 -0
- data/example22/script/process/reaper +3 -0
- data/example22/script/process/spawner +3 -0
- data/example22/script/runner +3 -0
- data/example22/script/server +3 -0
- data/example22/test/fixtures/accounts.yml +7 -0
- data/example22/test/functional/accounts_controller_test.rb +12 -0
- data/example22/test/integration/account_figments_test.rb +97 -0
- data/example22/test/performance/browsing_test.rb +9 -0
- data/example22/test/test_helper.rb +38 -0
- data/lib/data_fabric.rb +7 -132
- data/lib/data_fabric/ar20.rb +133 -0
- data/lib/data_fabric/ar22.rb +172 -0
- data/lib/data_fabric/version.rb +1 -1
- data/test/connection_test.rb +6 -2
- data/test/database_test.rb +26 -2
- data/test/test_helper.rb +34 -28
- data/test/thread_test.rb +19 -11
- data/test/vr_austin_master.db +0 -0
- data/test/vr_austin_slave.db +0 -0
- data/test/vr_dallas_master.db +0 -0
- data/test/vr_dallas_slave.db +0 -0
- metadata +79 -5
@@ -0,0 +1,172 @@
|
|
1
|
+
module DataFabric
|
2
|
+
module Extensions
|
3
|
+
def self.included(model)
|
4
|
+
# Wire up ActiveRecord::Base
|
5
|
+
model.extend ClassMethods
|
6
|
+
ConnectionProxy.shard_pools = {}
|
7
|
+
end
|
8
|
+
|
9
|
+
# Class methods injected into ActiveRecord::Base
|
10
|
+
module ClassMethods
|
11
|
+
def data_fabric(options)
|
12
|
+
DataFabric.log { "Creating data_fabric proxy for class #{name}" }
|
13
|
+
@proxy = DataFabric::ConnectionProxy.new(self, options)
|
14
|
+
|
15
|
+
class << self
|
16
|
+
def connection
|
17
|
+
@proxy
|
18
|
+
end
|
19
|
+
|
20
|
+
def connected?
|
21
|
+
@proxy.connected?
|
22
|
+
end
|
23
|
+
|
24
|
+
def remove_connection(klass)
|
25
|
+
DataFabric.log(Logger::ERROR) { "remove_connection not implemented by data_fabric" }
|
26
|
+
end
|
27
|
+
|
28
|
+
def connection_pool
|
29
|
+
raise "dynamic connection switching means you cannot get direct access to a pool"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class ConnectionProxy
|
37
|
+
cattr_accessor :shard_pools
|
38
|
+
|
39
|
+
def initialize(model_class, options)
|
40
|
+
@model_class = model_class
|
41
|
+
@replicated = options[:replicated]
|
42
|
+
@shard_group = options[:shard_by]
|
43
|
+
@prefix = options[:prefix]
|
44
|
+
set_role('slave') if @replicated
|
45
|
+
|
46
|
+
@model_class.send :include, ActiveRecordConnectionMethods if @replicated
|
47
|
+
end
|
48
|
+
|
49
|
+
delegate :insert, :update, :delete, :create_table, :rename_table, :drop_table, :add_column, :remove_column,
|
50
|
+
:change_column, :change_column_default, :rename_column, :add_index, :remove_index, :initialize_schema_information,
|
51
|
+
:dump_schema_information, :execute, :execute_ignore_duplicate, :to => :master
|
52
|
+
|
53
|
+
delegate :insert_many, :to => :master # ar-extensions bulk insert support
|
54
|
+
|
55
|
+
def transaction(start_db_transaction = true, &block)
|
56
|
+
# Transaction is not re-entrant in SQLite 3 so we
|
57
|
+
# need to track if we've already started an XA to avoid
|
58
|
+
# calling it twice.
|
59
|
+
return yield if in_transaction?
|
60
|
+
|
61
|
+
with_master do
|
62
|
+
connection.transaction(start_db_transaction, &block)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def method_missing(method, *args, &block)
|
67
|
+
DataFabric.log(Logger::DEBUG) { "Calling #{method} on #{connection}" }
|
68
|
+
connection.send(method, *args, &block)
|
69
|
+
end
|
70
|
+
|
71
|
+
def connection_name
|
72
|
+
connection_name_builder.join('_')
|
73
|
+
end
|
74
|
+
|
75
|
+
def with_master
|
76
|
+
# Allow nesting of with_master.
|
77
|
+
old_role = current_role
|
78
|
+
set_role('master')
|
79
|
+
yield
|
80
|
+
ensure
|
81
|
+
set_role(old_role)
|
82
|
+
end
|
83
|
+
|
84
|
+
def connected?
|
85
|
+
current_pool.connected?
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
def in_transaction?
|
91
|
+
current_role == 'master'
|
92
|
+
end
|
93
|
+
|
94
|
+
def current_pool
|
95
|
+
name = connection_name
|
96
|
+
self.class.shard_pools[name] ||= begin
|
97
|
+
config = ActiveRecord::Base.configurations[name]
|
98
|
+
raise ArgumentError, "Unknown database config: #{name}, have #{ActiveRecord::Base.configurations.inspect}" unless config
|
99
|
+
ActiveRecord::ConnectionAdapters::ConnectionPool.new(spec_for(config))
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def spec_for(config)
|
104
|
+
# XXX This looks pretty fragile. Will break if AR changes how it initializes connections and adapters.
|
105
|
+
config = config.symbolize_keys
|
106
|
+
adapter_method = "#{config[:adapter]}_connection"
|
107
|
+
initialize_adapter(config[:adapter])
|
108
|
+
ActiveRecord::Base::ConnectionSpecification.new(config, adapter_method)
|
109
|
+
end
|
110
|
+
|
111
|
+
def initialize_adapter(adapter)
|
112
|
+
begin
|
113
|
+
require 'rubygems'
|
114
|
+
gem "activerecord-#{adapter}-adapter"
|
115
|
+
require "active_record/connection_adapters/#{adapter}_adapter"
|
116
|
+
rescue LoadError
|
117
|
+
begin
|
118
|
+
require "active_record/connection_adapters/#{adapter}_adapter"
|
119
|
+
rescue LoadError
|
120
|
+
raise "Please install the #{adapter} adapter: `gem install activerecord-#{adapter}-adapter` (#{$!})"
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def connection_name_builder
|
126
|
+
@connection_name_builder ||= begin
|
127
|
+
clauses = []
|
128
|
+
clauses << @prefix if @prefix
|
129
|
+
clauses << @shard_group if @shard_group
|
130
|
+
clauses << StringProxy.new { DataFabric.active_shard(@shard_group) } if @shard_group
|
131
|
+
clauses << RAILS_ENV
|
132
|
+
clauses << StringProxy.new { current_role } if @replicated
|
133
|
+
clauses
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def connection
|
138
|
+
current_pool.connection
|
139
|
+
end
|
140
|
+
|
141
|
+
def set_role(role)
|
142
|
+
Thread.current[:data_fabric_role] = role
|
143
|
+
end
|
144
|
+
|
145
|
+
def current_role
|
146
|
+
Thread.current[:data_fabric_role]
|
147
|
+
end
|
148
|
+
|
149
|
+
def master
|
150
|
+
with_master { return connection }
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
module ActiveRecordConnectionMethods
|
155
|
+
def self.included(base)
|
156
|
+
base.alias_method_chain :reload, :master
|
157
|
+
end
|
158
|
+
|
159
|
+
def reload_with_master(*args, &block)
|
160
|
+
connection.with_master { reload_without_master }
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
class StringProxy
|
165
|
+
def initialize(&block)
|
166
|
+
@proc = block
|
167
|
+
end
|
168
|
+
def to_s
|
169
|
+
@proc.call
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
data/lib/data_fabric/version.rb
CHANGED
data/test/connection_test.rb
CHANGED
@@ -36,7 +36,7 @@ end
|
|
36
36
|
|
37
37
|
class RawConnection
|
38
38
|
def method_missing(name, *args)
|
39
|
-
|
39
|
+
puts "#{self.class.name} missing '#{name}': #{args.inspect}"
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
@@ -96,7 +96,11 @@ class ConnectionTest < Test::Unit::TestCase
|
|
96
96
|
private
|
97
97
|
|
98
98
|
def setup_configuration_for(clazz, name)
|
99
|
-
|
99
|
+
if ar22?
|
100
|
+
flexmock(ActiveRecord::ConnectionAdapters::ConnectionPool).new_instances.should_receive(:new_connection).and_return(AdapterMock.new(RawConnection.new))
|
101
|
+
else
|
102
|
+
flexmock(clazz).should_receive(:mysql_connection).and_return(AdapterMock.new(RawConnection.new))
|
103
|
+
end
|
100
104
|
ActiveRecord::Base.configurations ||= HashWithIndifferentAccess.new
|
101
105
|
ActiveRecord::Base.configurations[name] = HashWithIndifferentAccess.new({ :adapter => 'mysql', :database => name, :host => 'localhost'})
|
102
106
|
end
|
data/test/database_test.rb
CHANGED
@@ -10,6 +10,29 @@ class DatabaseTest < Test::Unit::TestCase
|
|
10
10
|
|
11
11
|
def setup
|
12
12
|
ActiveRecord::Base.configurations = load_database_yml
|
13
|
+
if ar22?
|
14
|
+
DataFabric::ConnectionProxy.shard_pools.clear
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_ar22_features
|
19
|
+
return unless ar22?
|
20
|
+
|
21
|
+
DataFabric.activate_shard :city => :dallas do
|
22
|
+
assert_equal 'fiveruns_city_dallas_test_slave', TheWholeBurrito.connection.connection_name
|
23
|
+
|
24
|
+
assert_raises RuntimeError do
|
25
|
+
TheWholeBurrito.connection_pool
|
26
|
+
end
|
27
|
+
|
28
|
+
assert !TheWholeBurrito.connected?
|
29
|
+
|
30
|
+
# Should use the slave
|
31
|
+
burrito = TheWholeBurrito.find(1)
|
32
|
+
assert_match 'vr_dallas_slave', burrito.name
|
33
|
+
|
34
|
+
assert TheWholeBurrito.connected?
|
35
|
+
end
|
13
36
|
end
|
14
37
|
|
15
38
|
def test_live_burrito
|
@@ -19,18 +42,19 @@ class DatabaseTest < Test::Unit::TestCase
|
|
19
42
|
# Should use the slave
|
20
43
|
burrito = TheWholeBurrito.find(1)
|
21
44
|
assert_match 'vr_dallas_slave', burrito.name
|
22
|
-
|
45
|
+
|
23
46
|
# Should use the master
|
24
47
|
burrito.reload
|
25
48
|
assert_match 'vr_dallas_master', burrito.name
|
26
49
|
|
27
50
|
# ...but immediately set it back to default to the slave
|
28
51
|
assert_equal 'fiveruns_city_dallas_test_slave', TheWholeBurrito.connection.connection_name
|
29
|
-
|
52
|
+
|
30
53
|
# Should use the master
|
31
54
|
TheWholeBurrito.transaction do
|
32
55
|
burrito = TheWholeBurrito.find(1)
|
33
56
|
assert_match 'vr_dallas_master', burrito.name
|
57
|
+
burrito.name = 'foo'
|
34
58
|
burrito.save!
|
35
59
|
end
|
36
60
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,34 +1,40 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
Dir.chdir(ROOT_PATH)
|
1
|
+
ENV['RAILS_ENV'] = 'test'
|
2
|
+
RAILS_ENV = 'test'
|
3
|
+
ROOT_PATH = File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
4
|
+
DATABASE_YML_PATH = File.join(ROOT_PATH, "test", "database.yml")
|
5
|
+
Dir.chdir(ROOT_PATH)
|
7
6
|
|
8
|
-
|
9
|
-
|
7
|
+
require 'rubygems'
|
8
|
+
require 'test/unit'
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
10
|
+
version = ENV['AR_VERSION']
|
11
|
+
if version
|
12
|
+
puts "Testing ActiveRecord #{version}"
|
13
|
+
gem 'activerecord', "=#{version}"
|
14
|
+
end
|
15
|
+
|
16
|
+
require 'active_record'
|
17
|
+
require 'active_record/version'
|
18
|
+
ActiveRecord::Base.logger = Logger.new(STDOUT)
|
19
|
+
ActiveRecord::Base.logger.level = Logger::WARN
|
18
20
|
|
19
|
-
|
20
|
-
|
21
|
-
|
21
|
+
# Bootstrap DF
|
22
|
+
deps = defined?(ActiveSupport::Dependencies) ? ActiveSupport::Dependencies : Dependencies
|
23
|
+
deps.load_paths << File.join(File.dirname(__FILE__), '../lib')
|
24
|
+
require 'init'
|
22
25
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
26
|
+
def load_database_yml
|
27
|
+
filename = DATABASE_YML_PATH
|
28
|
+
YAML::load(ERB.new(IO.read(filename)).result)
|
29
|
+
end
|
30
|
+
|
31
|
+
def ar22?
|
32
|
+
ActiveRecord::VERSION::STRING >= '2.2.0'
|
33
|
+
end
|
27
34
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end
|
35
|
+
if !File.exist?(DATABASE_YML_PATH)
|
36
|
+
puts "\n*** ERROR ***:\n" <<
|
37
|
+
"You must have a 'test/database.yml' file in order to run the unit tests. " <<
|
38
|
+
"An example is provided in 'test/database.yml.example'.\n\n"
|
39
|
+
exit 1
|
34
40
|
end
|
data/test/thread_test.rb
CHANGED
@@ -4,20 +4,28 @@ require 'erb'
|
|
4
4
|
class ThreadTest < Test::Unit::TestCase
|
5
5
|
|
6
6
|
MUTEX = Mutex.new
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
7
|
+
|
8
|
+
if ActiveRecord::VERSION::STRING < '2.2.0'
|
9
|
+
def test_concurrency_not_allowed
|
10
|
+
assert_raise ArgumentError do
|
11
|
+
Object.class_eval %{
|
12
|
+
class ThreadedEnchilada < ActiveRecord::Base
|
13
|
+
self.allow_concurrency = true
|
14
|
+
set_table_name :enchiladas
|
15
|
+
data_fabric :prefix => 'fiveruns', :replicated => true, :shard_by => :city
|
16
|
+
end
|
17
|
+
}
|
18
|
+
end
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
20
|
-
def
|
22
|
+
def test_class_and_instance_connections
|
23
|
+
Object.class_eval %{
|
24
|
+
class ThreadedEnchilada < ActiveRecord::Base
|
25
|
+
set_table_name :enchiladas
|
26
|
+
data_fabric :prefix => 'fiveruns', :replicated => true, :shard_by => :city
|
27
|
+
end
|
28
|
+
}
|
21
29
|
ActiveRecord::Base.configurations = load_database_yml
|
22
30
|
|
23
31
|
cconn = ThreadedEnchilada.connection
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: data_fabric
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Perham
|
@@ -9,11 +9,11 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-12-01 00:00:00 -06:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
16
|
-
description: Sharding and replication support for ActiveRecord 2.
|
16
|
+
description: Sharding and replication support for ActiveRecord 2.x
|
17
17
|
email: mperham@gmail.com
|
18
18
|
executables: []
|
19
19
|
|
@@ -21,6 +21,8 @@ extensions: []
|
|
21
21
|
|
22
22
|
extra_rdoc_files:
|
23
23
|
- CHANGELOG
|
24
|
+
- lib/data_fabric/ar20.rb
|
25
|
+
- lib/data_fabric/ar22.rb
|
24
26
|
- lib/data_fabric/version.rb
|
25
27
|
- lib/data_fabric.rb
|
26
28
|
- README.rdoc
|
@@ -46,9 +48,15 @@ files:
|
|
46
48
|
- example/config/initializers/mime_types.rb
|
47
49
|
- example/config/initializers/new_rails_defaults.rb
|
48
50
|
- example/config/routes.rb
|
51
|
+
- example/db/development.sqlite3
|
49
52
|
- example/db/migrate/20080702154628_create_accounts.rb
|
50
53
|
- example/db/migrate/20080702154820_create_figments.rb
|
54
|
+
- example/db/s0_development.sqlite3
|
55
|
+
- example/db/s0_test.sqlite3
|
56
|
+
- example/db/s1_development.sqlite3
|
57
|
+
- example/db/s1_test.sqlite3
|
51
58
|
- example/db/schema.rb
|
59
|
+
- example/db/test.sqlite3
|
52
60
|
- example/public/404.html
|
53
61
|
- example/public/422.html
|
54
62
|
- example/public/500.html
|
@@ -82,7 +90,70 @@ files:
|
|
82
90
|
- example/test/functional/accounts_controller_test.rb
|
83
91
|
- example/test/integration/account_figments_test.rb
|
84
92
|
- example/test/test_helper.rb
|
93
|
+
- example/vendor/plugins/data_fabric/init.rb
|
94
|
+
- example/vendor/plugins/data_fabric/lib/data_fabric/ar20.rb
|
95
|
+
- example/vendor/plugins/data_fabric/lib/data_fabric/ar22.rb
|
96
|
+
- example/vendor/plugins/data_fabric/lib/data_fabric/version.rb
|
97
|
+
- example/vendor/plugins/data_fabric/lib/data_fabric.rb
|
98
|
+
- example22/app/controllers/accounts_controller.rb
|
99
|
+
- example22/app/controllers/application.rb
|
100
|
+
- example22/app/controllers/figments_controller.rb
|
101
|
+
- example22/app/helpers/application_helper.rb
|
102
|
+
- example22/app/models/account.rb
|
103
|
+
- example22/app/models/figment.rb
|
104
|
+
- example22/app/views/accounts/index.html.erb
|
105
|
+
- example22/app/views/layouts/application.html.erb
|
106
|
+
- example22/config/boot.rb
|
107
|
+
- example22/config/database.yml
|
108
|
+
- example22/config/environment.rb
|
109
|
+
- example22/config/environments/development.rb
|
110
|
+
- example22/config/environments/production.rb
|
111
|
+
- example22/config/environments/test.rb
|
112
|
+
- example22/config/initializers/inflections.rb
|
113
|
+
- example22/config/initializers/mime_types.rb
|
114
|
+
- example22/config/initializers/new_rails_defaults.rb
|
115
|
+
- example22/config/locales/en.yml
|
116
|
+
- example22/config/routes.rb
|
117
|
+
- example22/db/migrate/20080702154628_create_accounts.rb
|
118
|
+
- example22/db/migrate/20080702154820_create_figments.rb
|
119
|
+
- example22/public/404.html
|
120
|
+
- example22/public/422.html
|
121
|
+
- example22/public/500.html
|
122
|
+
- example22/public/dispatch.cgi
|
123
|
+
- example22/public/dispatch.fcgi
|
124
|
+
- example22/public/dispatch.rb
|
125
|
+
- example22/public/favicon.ico
|
126
|
+
- example22/public/images/rails.png
|
127
|
+
- example22/public/index.html
|
128
|
+
- example22/public/javascripts/application.js
|
129
|
+
- example22/public/javascripts/controls.js
|
130
|
+
- example22/public/javascripts/dragdrop.js
|
131
|
+
- example22/public/javascripts/effects.js
|
132
|
+
- example22/public/javascripts/prototype.js
|
133
|
+
- example22/public/robots.txt
|
134
|
+
- example22/Rakefile
|
135
|
+
- example22/script/about
|
136
|
+
- example22/script/console
|
137
|
+
- example22/script/dbconsole
|
138
|
+
- example22/script/destroy
|
139
|
+
- example22/script/generate
|
140
|
+
- example22/script/performance/benchmarker
|
141
|
+
- example22/script/performance/profiler
|
142
|
+
- example22/script/performance/request
|
143
|
+
- example22/script/plugin
|
144
|
+
- example22/script/process/inspector
|
145
|
+
- example22/script/process/reaper
|
146
|
+
- example22/script/process/spawner
|
147
|
+
- example22/script/runner
|
148
|
+
- example22/script/server
|
149
|
+
- example22/test/fixtures/accounts.yml
|
150
|
+
- example22/test/functional/accounts_controller_test.rb
|
151
|
+
- example22/test/integration/account_figments_test.rb
|
152
|
+
- example22/test/performance/browsing_test.rb
|
153
|
+
- example22/test/test_helper.rb
|
85
154
|
- init.rb
|
155
|
+
- lib/data_fabric/ar20.rb
|
156
|
+
- lib/data_fabric/ar22.rb
|
86
157
|
- lib/data_fabric/version.rb
|
87
158
|
- lib/data_fabric.rb
|
88
159
|
- Manifest
|
@@ -95,6 +166,10 @@ files:
|
|
95
166
|
- test/shard_test.rb
|
96
167
|
- test/test_helper.rb
|
97
168
|
- test/thread_test.rb
|
169
|
+
- test/vr_austin_master.db
|
170
|
+
- test/vr_austin_slave.db
|
171
|
+
- test/vr_dallas_master.db
|
172
|
+
- test/vr_dallas_slave.db
|
98
173
|
- TESTING.rdoc
|
99
174
|
- data_fabric.gemspec
|
100
175
|
has_rdoc: true
|
@@ -127,10 +202,9 @@ rubyforge_project: fiveruns
|
|
127
202
|
rubygems_version: 1.3.1
|
128
203
|
signing_key:
|
129
204
|
specification_version: 2
|
130
|
-
summary: Sharding and replication support for ActiveRecord 2.
|
205
|
+
summary: Sharding and replication support for ActiveRecord 2.x
|
131
206
|
test_files:
|
132
207
|
- test/connection_test.rb
|
133
208
|
- test/database_test.rb
|
134
209
|
- test/shard_test.rb
|
135
|
-
- test/test_helper.rb
|
136
210
|
- test/thread_test.rb
|