Sha256: 502b461aa4b858dd9d14bae41a45db40b650856817b9895283b5c5880bc1abb3
Contents?: true
Size: 1.18 KB
Versions: 2
Compression:
Stored size: 1.18 KB
Contents
class Octopus::ScopeProxy attr_accessor :shard, :klass def initialize(shard, klass) @shard = shard @klass = klass end def using(shard) raise "Nonexistent Shard Name: #{shard}" if @klass.connection.instance_variable_get(:@shards)[shard].nil? @shard = shard return self end # Transaction Method send all queries to a specified shard. def transaction(options = {}, &block) @klass.connection.run_queries_on_shard(@shard) do @klass = @klass.connection().transaction(options, &block) end end def connection @klass.connection().current_shard = @shard @klass.connection() end def method_missing(method, *args, &block) result = @klass.connection.run_queries_on_shard(@shard) do @klass.send(method, *args, &block) end if result.respond_to?(:scoped) @klass = result return self end result end def as_json(options = nil) method_missing(:as_json, options) end # Delegates to method_missing (instead of @klass) so that User.using(:blah).where(:name => "Mike") # gets run in the correct shard context when #== is evaluated. def ==(*args) method_missing(:==, *args) end alias :eql? :== end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ar-octopus-0.8.1 | lib/octopus/scope_proxy.rb |
ar-octopus-0.8.0 | lib/octopus/scope_proxy.rb |