yam-db-charmer 1.7.01

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.
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
+