Sha256: 653cceed17a2f479e6df8e8c38c82e5700c7d20b171426f55918620cce1c0205

Contents?: true

Size: 1.8 KB

Versions: 11

Compression:

Stored size: 1.8 KB

Contents

module CassandraObject
  module Tasks
    class Keyspace
      def self.parse(hash)
        ks = Cassandra::Keyspace.new.with_fields hash
        ks.cf_defs = []
        hash['cf_defs'].each do |cf|
          ks.cf_defs << Cassandra::ColumnFamily.new.with_fields(cf)
        end
        ks
      end

      def exists?(name)
        connection.keyspaces.include? name.to_s
      end

      def create(name, options = {})
        opts = {
          name: name.to_s,
          strategy_class: 'org.apache.cassandra.locator.SimpleStrategy',
          replication_factor: 1,
          cf_defs: []
        }.merge(options)
        
        ks = Cassandra::Keyspace.new.with_fields(opts)
        connection.add_keyspace ks
      end

      def drop(name)
        connection.drop_keyspace name.to_s
      end

      def set(name)
        connection.keyspace = name.to_s
      end

      def get
        connection.keyspace
      end

      def clear
        return puts 'Cannot clear system keyspace' if connection.keyspace == 'system'

        connection.clear_keyspace!
      end

      def schema_dump
        connection.schema
      end

      def schema_load(schema)
        connection.schema.cf_defs.each do |cf|
          connection.drop_column_family cf.name
        end

        keyspace = get
        schema.cf_defs.each do |cf|
          cf.keyspace = keyspace
          connection.add_column_family cf
        end
      end

      private
        def connection
          @connection ||= begin
            Cassandra.new('system', CassandraObject::Base.connection.servers)
          end
        end
    end
  end
end

class Cassandra
  class Keyspace
    def with_fields(options)
      struct_fields.collect { |f| f[1][:name] }.each do |f|
        send("#{f}=", options[f.to_sym] || options[f.to_s])
      end
      self
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
gotime-cassandra_object-3.0.2 lib/cassandra_object/tasks/keyspace.rb
gotime-cassandra_object-3.0.1 lib/cassandra_object/tasks/keyspace.rb
gotime-cassandra_object-3.0.0 lib/cassandra_object/tasks/keyspace.rb
gotime-cassandra_object-2.13.0 lib/cassandra_object/tasks/keyspace.rb
gotime-cassandra_object-2.12.5 lib/cassandra_object/tasks/keyspace.rb
gotime-cassandra_object-2.12.4 lib/cassandra_object/tasks/keyspace.rb
gotime-cassandra_object-2.12.3 lib/cassandra_object/tasks/keyspace.rb
gotime-cassandra_object-2.12.2 lib/cassandra_object/tasks/keyspace.rb
gotime-cassandra_object-2.12.1 lib/cassandra_object/tasks/keyspace.rb
gotime-cassandra_object-2.12.0 lib/cassandra_object/tasks/keyspace.rb
gotime-cassandra_object-2.11.9 lib/cassandra_object/tasks/keyspace.rb