Sha256: 0c485abe9cabbeef0c240a9c152d2993abe5922744421d92e4a593ebb1d031da

Contents?: true

Size: 1 KB

Versions: 7

Compression:

Stored size: 1 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

7 entries across 7 versions & 1 rubygems

Version Path
ar-octopus-0.3.4 lib/octopus/scope_proxy.rb
ar-octopus-0.3.3 lib/octopus/scope_proxy.rb
ar-octopus-0.3.2 lib/octopus/scope_proxy.rb
ar-octopus-0.3.1 lib/octopus/scope_proxy.rb
ar-octopus-0.3.0 lib/octopus/scope_proxy.rb
ar-octopus-0.2.2 lib/octopus/scope_proxy.rb
ar-octopus-0.2.1 lib/octopus/scope_proxy.rb