Sha256: 93fbf7e6aaebe49a1499d9a21d310fb5cfa867ddad65436caa087c288fa9e5c2

Contents?: true

Size: 1.03 KB

Versions: 1

Compression:

Stored size: 1.03 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)        
    @klass.connection.run_queries_on_shard(@shard) do
      @klass = @klass.send(method, *args, &block)
    end
                
    return @klass if @klass.is_a?(ActiveRecord::Base) or @klass.is_a?(Array) or @klass.is_a?(Fixnum) or @klass.nil?
    return self
  end
  
  def ==(other)
    @shard == other.shard
    @klass == other.klass
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ar-octopus-0.4.0 lib/octopus/scope_proxy.rb