Module: DbCharmer::ActiveRecord::ClassAttributes
- Defined in:
- lib/db_charmer/active_record/class_attributes.rb
Constant Summary collapse
- @@db_charmer_opts =
{}
- @@db_charmer_default_connections =
{}
- @@db_charmer_slaves =
{}
Instance Method Summary collapse
- #db_charmer_connection_level ⇒ Object
- #db_charmer_connection_level=(level) ⇒ Object
-
#db_charmer_connection_levels ⇒ Object
———————————————————————————————.
-
#db_charmer_connection_proxies ⇒ Object
———————————————————————————————.
- #db_charmer_connection_proxy ⇒ Object
- #db_charmer_connection_proxy=(proxy) ⇒ Object
- #db_charmer_database_remappings ⇒ Object
- #db_charmer_database_remappings=(mappings) ⇒ Object
- #db_charmer_default_connection ⇒ Object
- #db_charmer_default_connection=(conn) ⇒ Object
- #db_charmer_force_slave_reads ⇒ Object
- #db_charmer_force_slave_reads=(force) ⇒ Object
-
#db_charmer_force_slave_reads? ⇒ Boolean
Slave reads are used in two cases: - per-model slave reads are enabled (see db_magic method for more details) - global slave reads enforcing is enabled (in a controller action).
-
#db_charmer_force_slave_reads_flags ⇒ Object
———————————————————————————————.
-
#db_charmer_model_connection_proxy ⇒ Object
——————————————————————————————— Returns model-specific connection proxy, ignoring any global connection remappings.
- #db_charmer_opts ⇒ Object
- #db_charmer_opts=(opts) ⇒ Object
-
#db_charmer_random_slave ⇒ Object
Returns a random connection from the list of slaves configured for this AR class.
-
#db_charmer_remapped_connection ⇒ Object
———————————————————————————————.
- #db_charmer_slaves ⇒ Object
- #db_charmer_slaves=(slaves) ⇒ Object
- #db_charmer_top_level_connection? ⇒ Boolean
Instance Method Details
#db_charmer_connection_level ⇒ Object
81 82 83 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 81 def db_charmer_connection_level db_charmer_connection_levels[self.name] || 0 end |
#db_charmer_connection_level=(level) ⇒ Object
77 78 79 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 77 def db_charmer_connection_level=(level) db_charmer_connection_levels[self.name] = level end |
#db_charmer_connection_levels ⇒ Object
73 74 75 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 73 def db_charmer_connection_levels Thread.current[:db_charmer_connection_levels] ||= Hash.new(0) end |
#db_charmer_connection_proxies ⇒ Object
40 41 42 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 40 def db_charmer_connection_proxies Thread.current[:db_charmer_connection_proxies] ||= {} end |
#db_charmer_connection_proxy ⇒ Object
48 49 50 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 48 def db_charmer_connection_proxy db_charmer_connection_proxies[self.name] end |
#db_charmer_connection_proxy=(proxy) ⇒ Object
44 45 46 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 44 def db_charmer_connection_proxy=(proxy) db_charmer_connection_proxies[self.name] = proxy end |
#db_charmer_database_remappings ⇒ Object
100 101 102 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 100 def db_charmer_database_remappings Thread.current[:db_charmer_database_remappings] ||= Hash.new end |
#db_charmer_database_remappings=(mappings) ⇒ Object
104 105 106 107 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 104 def db_charmer_database_remappings=(mappings) raise "Mappings must be nil or respond to []" if mappings && (! mappings.respond_to?(:[])) Thread.current[:db_charmer_database_remappings] = mappings || {} end |
#db_charmer_default_connection ⇒ Object
19 20 21 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 19 def db_charmer_default_connection @@db_charmer_default_connections[self.name] end |
#db_charmer_default_connection=(conn) ⇒ Object
15 16 17 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 15 def db_charmer_default_connection=(conn) @@db_charmer_default_connections[self.name] = conn end |
#db_charmer_force_slave_reads ⇒ Object
61 62 63 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 61 def db_charmer_force_slave_reads db_charmer_force_slave_reads_flags[self.name] end |
#db_charmer_force_slave_reads=(force) ⇒ Object
57 58 59 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 57 def db_charmer_force_slave_reads=(force) db_charmer_force_slave_reads_flags[self.name] = force end |
#db_charmer_force_slave_reads? ⇒ Boolean
Slave reads are used in two cases:
- per-model slave reads are enabled (see db_magic method for more details)
- global slave reads enforcing is enabled (in a controller action)
68 69 70 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 68 def db_charmer_force_slave_reads? db_charmer_force_slave_reads || DbCharmer.force_slave_reads? end |
#db_charmer_force_slave_reads_flags ⇒ Object
53 54 55 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 53 def db_charmer_force_slave_reads_flags Thread.current[:db_charmer_force_slave_reads] ||= {} end |
#db_charmer_model_connection_proxy ⇒ Object
Returns model-specific connection proxy, ignoring any global connection remappings
111 112 113 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 111 def db_charmer_model_connection_proxy db_charmer_connection_proxy || db_charmer_default_connection end |
#db_charmer_opts ⇒ Object
9 10 11 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 9 def db_charmer_opts @@db_charmer_opts[self.name] || {} end |
#db_charmer_opts=(opts) ⇒ Object
5 6 7 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 5 def db_charmer_opts=(opts) @@db_charmer_opts[self.name] = opts end |
#db_charmer_random_slave ⇒ Object
Returns a random connection from the list of slaves configured for this AR class
34 35 36 37 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 34 def db_charmer_random_slave return nil unless db_charmer_slaves.any? db_charmer_slaves[rand(db_charmer_slaves.size)] end |
#db_charmer_remapped_connection ⇒ Object
90 91 92 93 94 95 96 97 98 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 90 def db_charmer_remapped_connection return nil unless db_charmer_top_level_connection? name = :master proxy = db_charmer_model_connection_proxy name = proxy.db_charmer_connection_name.to_sym if proxy remapped = db_charmer_database_remappings[name] remapped ? DbCharmer::ConnectionFactory.connect(remapped, true) : nil end |
#db_charmer_slaves ⇒ Object
29 30 31 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 29 def db_charmer_slaves @@db_charmer_slaves[self.name] || [] end |
#db_charmer_slaves=(slaves) ⇒ Object
25 26 27 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 25 def db_charmer_slaves=(slaves) @@db_charmer_slaves[self.name] = slaves end |
#db_charmer_top_level_connection? ⇒ Boolean
85 86 87 |
# File 'lib/db_charmer/active_record/class_attributes.rb', line 85 def db_charmer_top_level_connection? db_charmer_connection_level.zero? end |