Sha256: 771e9c8c9f8d22d6e4853471e508b7168d4ee49112eab531f13741c715775046

Contents?: true

Size: 1.4 KB

Versions: 9

Compression:

Stored size: 1.4 KB

Contents

module CassandraObject
  module AsyncConnection
    extend ActiveSupport::Concern
    
    included do
      class_attribute :connection_spec

      class_eval do
        @@fiber_connections = {}
        def self.connection()
          @@fiber_connections[Fiber.current.object_id] ||=
            begin
              spec = connection_spec.dup
              
              if EM.reactor_running?
                require 'thrift_client/event_machine'
                spec[:thrift].merge!(:transport => Thrift::EventMachineTransport,
                                     :transport_wrapper => nil)
              end
              
              Cassandra.new(spec[:keyspace], spec[:servers], spec[:thrift])
            end
        end
        def self.connection?() !!connection end

        def self.disconnect!
          @@fiber_connections.delete(Fiber.current.object_id).tap { |conn|
            conn.disconnect! if conn
          }
        end

        def connection
          defined?(@connection) ? @connection : singleton_class.connection
        end

        def connection?
          !!connection
        end
      end
    end

    module ClassMethods
      DEFAULT_OPTIONS = {
        servers: "127.0.0.1:9160",
        thrift: {}
      }
      def establish_connection(spec)
        spec.reverse_merge!(DEFAULT_OPTIONS)
        spec[:thrift].symbolize_keys!
        self.connection_spec = spec
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
sessionm-cassandra_object-2.2.55 lib/cassandra_object/async_connection.rb
sessionm-cassandra_object-2.2.54 lib/cassandra_object/async_connection.rb
sessionm-cassandra_object-2.2.53 lib/cassandra_object/async_connection.rb
sessionm-cassandra_object-2.2.48 lib/cassandra_object/async_connection.rb
sessionm-cassandra_object-2.2.47 lib/cassandra_object/async_connection.rb
sessionm-cassandra_object-2.2.46 lib/cassandra_object/async_connection.rb
sessionm-cassandra_object-2.2.45 lib/cassandra_object/async_connection.rb
sessionm-cassandra_object-2.2.44 lib/cassandra_object/async_connection.rb
sessionm-cassandra_object-2.2.43 lib/cassandra_object/async_connection.rb