Sha256: 1605fc01d2c6f1ab0d5b8c88dd8e3ea5aa651b45bc76a173d0a4f11ee1bdf3bd

Contents?: true

Size: 918 Bytes

Versions: 8

Compression:

Stored size: 918 Bytes

Contents

class Octopus::ScopeProxy
  attr_accessor :shard, :klass
  
  def initialize(shard, klass)
    @shard = shard
    @klass = klass
  end
  
  def using(shard)
    @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

8 entries across 8 versions & 1 rubygems

Version Path
ar-octopus-0.2.0 lib/octopus/scope_proxy.rb
ar-octopus-0.1.2 lib/octopus/scope_proxy.rb
ar-octopus-0.1.1 lib/octopus/scope_proxy.rb
ar-octopus-0.1.0 lib/octopus/scope_proxy.rb
ar-octopus-0.0.30 lib/octopus/scope_proxy.rb
ar-octopus-0.0.29 lib/octopus/scope_proxy.rb
ar-octopus-0.0.28 lib/octopus/scope_proxy.rb
ar-octopus-0.0.27 lib/octopus/scope_proxy.rb