Module: Octopus::ShardTracking
- Defined in:
- lib/octopus/shard_tracking.rb,
lib/octopus/shard_tracking/dynamic.rb,
lib/octopus/shard_tracking/attribute.rb
Defined Under Namespace
Modules: Attribute, ClassMethods, Dynamic
Class Method Summary collapse
Instance Method Summary collapse
-
#run_on_shard(&block) ⇒ Object
Adds run_on_shard method, but does not implement current_shard method.
Class Method Details
.included(base) ⇒ Object
3 4 5 |
# File 'lib/octopus/shard_tracking.rb', line 3 def self.included(base) base.extend(ClassMethods) end |
Instance Method Details
#run_on_shard(&block) ⇒ Object
Adds run_on_shard method, but does not implement current_shard method
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/octopus/shard_tracking.rb', line 29 def run_on_shard(&block) if (cs = current_shard) r = ActiveRecord::Base.connection_proxy.run_queries_on_shard(cs, &block) # Use a case statement to avoid any path through ActiveRecord::Delegation's # respond_to? code. We want to avoid the respond_to? code because it can have # the side effect of causing a call to load_target if (ActiveRecord::Relation === r || ActiveRecord::QueryMethods::WhereChain === r) && !(Octopus::RelationProxy === r) Octopus::RelationProxy.new(cs, r) else r end else yield end end |