yam-db-charmer 1.7.01

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. data/.gitignore +4 -0
  2. data/CHANGES +184 -0
  3. data/LICENSE +21 -0
  4. data/Makefile +2 -0
  5. data/README.rdoc +612 -0
  6. data/Rakefile +4 -0
  7. data/db-charmer.gemspec +29 -0
  8. data/init.rb +1 -0
  9. data/lib/db_charmer/action_controller/force_slave_reads.rb +69 -0
  10. data/lib/db_charmer/active_record/association_preload.rb +23 -0
  11. data/lib/db_charmer/active_record/class_attributes.rb +101 -0
  12. data/lib/db_charmer/active_record/connection_switching.rb +81 -0
  13. data/lib/db_charmer/active_record/db_magic.rb +85 -0
  14. data/lib/db_charmer/active_record/migration/multi_db_migrations.rb +71 -0
  15. data/lib/db_charmer/active_record/multi_db_proxy.rb +77 -0
  16. data/lib/db_charmer/active_record/sharding.rb +40 -0
  17. data/lib/db_charmer/connection_factory.rb +76 -0
  18. data/lib/db_charmer/connection_proxy.rb +27 -0
  19. data/lib/db_charmer/core_extensions.rb +23 -0
  20. data/lib/db_charmer/force_slave_reads.rb +36 -0
  21. data/lib/db_charmer/rails2/abstract_adapter/log_formatting.rb +24 -0
  22. data/lib/db_charmer/rails2/active_record/master_slave_routing.rb +49 -0
  23. data/lib/db_charmer/rails2/active_record/named_scope/scope_proxy.rb +26 -0
  24. data/lib/db_charmer/rails3/abstract_adapter/connection_name.rb +38 -0
  25. data/lib/db_charmer/rails3/active_record/log_subscriber.rb +23 -0
  26. data/lib/db_charmer/rails3/active_record/master_slave_routing.rb +46 -0
  27. data/lib/db_charmer/rails3/active_record/relation/connection_routing.rb +147 -0
  28. data/lib/db_charmer/rails3/active_record/relation_method.rb +28 -0
  29. data/lib/db_charmer/sharding/connection.rb +31 -0
  30. data/lib/db_charmer/sharding/method/db_block_group_map.rb +257 -0
  31. data/lib/db_charmer/sharding/method/db_block_map.rb +211 -0
  32. data/lib/db_charmer/sharding/method/hash_map.rb +23 -0
  33. data/lib/db_charmer/sharding/method/range.rb +33 -0
  34. data/lib/db_charmer/sharding/method.rb +10 -0
  35. data/lib/db_charmer/sharding/stub_connection.rb +60 -0
  36. data/lib/db_charmer/sharding.rb +18 -0
  37. data/lib/db_charmer/version.rb +10 -0
  38. data/lib/db_charmer.rb +192 -0
  39. data/lib/tasks/databases.rake +82 -0
  40. metadata +178 -0
@@ -0,0 +1,82 @@
1
+ namespace :db_charmer do
2
+ namespace :create do
3
+ desc 'Create all the local databases defined in config/database.yml'
4
+ task :all => "db:load_config" do
5
+ ::ActiveRecord::Base.configurations.each_value do |config|
6
+ # Skip entries that don't have a database key, such as the first entry here:
7
+ #
8
+ # defaults: &defaults
9
+ # adapter: mysql
10
+ # username: root
11
+ # password:
12
+ # host: localhost
13
+ #
14
+ # development:
15
+ # database: blog_development
16
+ # <<: *defaults
17
+ next unless config['database']
18
+ # Only connect to local databases
19
+ local_database?(config) { create_core_and_sub_database(config) }
20
+ end
21
+ end
22
+ end
23
+
24
+ desc 'Create the databases defined in config/database.yml for the current RAILS_ENV'
25
+ task :create => "db:load_config" do
26
+ create_core_and_sub_database(ActiveRecord::Base.configurations[RAILS_ENV])
27
+ end
28
+
29
+ def create_core_and_sub_database(config)
30
+ create_database(config)
31
+ config.each_value do | sub_config |
32
+ next unless sub_config.is_a?(Hash)
33
+ next unless sub_config['database']
34
+ create_database(sub_config)
35
+ end
36
+ end
37
+
38
+ namespace :drop do
39
+ desc 'Drops all the local databases defined in config/database.yml'
40
+ task :all => "db:load_config" do
41
+ ::ActiveRecord::Base.configurations.each_value do |config|
42
+ # Skip entries that don't have a database key
43
+ next unless config['database']
44
+ # Only connect to local databases
45
+ local_database?(config) { drop_core_and_sub_database(config) }
46
+ end
47
+ end
48
+ end
49
+
50
+ desc 'Drops the database for the current RAILS_ENV'
51
+ task :drop => "db:load_config" do
52
+ config = ::ActiveRecord::Base.configurations[RAILS_ENV || 'development']
53
+ begin
54
+ drop_core_and_sub_database(config)
55
+ rescue Exception => e
56
+ puts "Couldn't drop #{config['database']} : #{e.inspect}"
57
+ end
58
+ end
59
+
60
+
61
+ def local_database?(config, &block)
62
+ if %w( 127.0.0.1 localhost ).include?(config['host']) || config['host'].blank?
63
+ yield
64
+ else
65
+ puts "This task only modifies local databases. #{config['database']} is on a remote host."
66
+ end
67
+ end
68
+ end
69
+
70
+ def drop_core_and_sub_database(config)
71
+ drop_database(config)
72
+ config.each_value do | sub_config |
73
+ next unless sub_config.is_a?(Hash)
74
+ next unless sub_config['database']
75
+ begin
76
+ drop_database(sub_config)
77
+ rescue
78
+ $stderr.puts "#{config['database']} not exists"
79
+ end
80
+ end
81
+ end
82
+
metadata ADDED
@@ -0,0 +1,178 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: yam-db-charmer
3
+ version: !ruby/object:Gem::Version
4
+ hash: 9
5
+ prerelease:
6
+ segments:
7
+ - 1
8
+ - 7
9
+ - 1
10
+ version: 1.7.01
11
+ platform: ruby
12
+ authors:
13
+ - Oleksiy Kovyrin
14
+ - Mike Ihbe
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2012-06-04 00:00:00 -07:00
20
+ default_executable:
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: activesupport
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - <
29
+ - !ruby/object:Gem::Version
30
+ hash: 5
31
+ segments:
32
+ - 3
33
+ - 1
34
+ version: "3.1"
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: activerecord
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - <
44
+ - !ruby/object:Gem::Version
45
+ hash: 5
46
+ segments:
47
+ - 3
48
+ - 1
49
+ version: "3.1"
50
+ type: :runtime
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: rspec
54
+ prerelease: false
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ hash: 3
61
+ segments:
62
+ - 0
63
+ version: "0"
64
+ type: :development
65
+ version_requirements: *id003
66
+ - !ruby/object:Gem::Dependency
67
+ name: yard
68
+ prerelease: false
69
+ requirement: &id004 !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ hash: 3
75
+ segments:
76
+ - 0
77
+ version: "0"
78
+ type: :development
79
+ version_requirements: *id004
80
+ - !ruby/object:Gem::Dependency
81
+ name: actionpack
82
+ prerelease: false
83
+ requirement: &id005 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ hash: 3
89
+ segments:
90
+ - 0
91
+ version: "0"
92
+ type: :development
93
+ version_requirements: *id005
94
+ description: DbCharmer is a Rails plugin (and gem) that could be used to manage AR model connections, implement master/slave query schemes, sharding and other magic features many high-scale applications need.
95
+ email: mihbe@yammer-inc.com
96
+ executables: []
97
+
98
+ extensions: []
99
+
100
+ extra_rdoc_files:
101
+ - LICENSE
102
+ - README.rdoc
103
+ files:
104
+ - .gitignore
105
+ - CHANGES
106
+ - LICENSE
107
+ - Makefile
108
+ - README.rdoc
109
+ - Rakefile
110
+ - db-charmer.gemspec
111
+ - init.rb
112
+ - lib/db_charmer.rb
113
+ - lib/db_charmer/action_controller/force_slave_reads.rb
114
+ - lib/db_charmer/active_record/association_preload.rb
115
+ - lib/db_charmer/active_record/class_attributes.rb
116
+ - lib/db_charmer/active_record/connection_switching.rb
117
+ - lib/db_charmer/active_record/db_magic.rb
118
+ - lib/db_charmer/active_record/migration/multi_db_migrations.rb
119
+ - lib/db_charmer/active_record/multi_db_proxy.rb
120
+ - lib/db_charmer/active_record/sharding.rb
121
+ - lib/db_charmer/connection_factory.rb
122
+ - lib/db_charmer/connection_proxy.rb
123
+ - lib/db_charmer/core_extensions.rb
124
+ - lib/db_charmer/force_slave_reads.rb
125
+ - lib/db_charmer/rails2/abstract_adapter/log_formatting.rb
126
+ - lib/db_charmer/rails2/active_record/master_slave_routing.rb
127
+ - lib/db_charmer/rails2/active_record/named_scope/scope_proxy.rb
128
+ - lib/db_charmer/rails3/abstract_adapter/connection_name.rb
129
+ - lib/db_charmer/rails3/active_record/log_subscriber.rb
130
+ - lib/db_charmer/rails3/active_record/master_slave_routing.rb
131
+ - lib/db_charmer/rails3/active_record/relation/connection_routing.rb
132
+ - lib/db_charmer/rails3/active_record/relation_method.rb
133
+ - lib/db_charmer/sharding.rb
134
+ - lib/db_charmer/sharding/connection.rb
135
+ - lib/db_charmer/sharding/method.rb
136
+ - lib/db_charmer/sharding/method/db_block_group_map.rb
137
+ - lib/db_charmer/sharding/method/db_block_map.rb
138
+ - lib/db_charmer/sharding/method/hash_map.rb
139
+ - lib/db_charmer/sharding/method/range.rb
140
+ - lib/db_charmer/sharding/stub_connection.rb
141
+ - lib/db_charmer/version.rb
142
+ - lib/tasks/databases.rake
143
+ has_rdoc: true
144
+ homepage: http://kovyrin.github.com/db-charmer
145
+ licenses: []
146
+
147
+ post_install_message:
148
+ rdoc_options:
149
+ - --charset=UTF-8
150
+ require_paths:
151
+ - lib
152
+ required_ruby_version: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ hash: 3
158
+ segments:
159
+ - 0
160
+ version: "0"
161
+ required_rubygems_version: !ruby/object:Gem::Requirement
162
+ none: false
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ hash: 3
167
+ segments:
168
+ - 0
169
+ version: "0"
170
+ requirements: []
171
+
172
+ rubyforge_project:
173
+ rubygems_version: 1.5.2
174
+ signing_key:
175
+ specification_version: 3
176
+ summary: ActiveRecord Connections Magic (slaves, multiple connections, etc)
177
+ test_files: []
178
+