module CassandraMigrations::Cassandra::KeyspaceOperations

Public Instance Methods

create_keyspace!(env) click to toggle source
# File lib/cassandra_migrations/cassandra/keyspace_operations.rb, line 9
def create_keyspace!(env)
  config = Config.configurations[env]
  execute(create_keyspace_statement(config))
  begin
    use(config.keyspace)
  rescue StandardError => exception
    drop_keyspace!(env)
    raise exception
  end
end
create_keyspace_statement(config) click to toggle source
# File lib/cassandra_migrations/cassandra/keyspace_operations.rb, line 20
      def create_keyspace_statement(config)
        validate_config(config)
        <<-CQL.strip_heredoc
          CREATE KEYSPACE #{config.keyspace}
          WITH replication = {
            'class': '#{config.replication['class']}',
            #{replication_options_statement(config)}
          }
        CQL
      end
drop_keyspace!(env) click to toggle source
# File lib/cassandra_migrations/cassandra/keyspace_operations.rb, line 31
def drop_keyspace!(env)
  config = Config.configurations[env]
  begin
    execute("DROP KEYSPACE #{config.keyspace}")
  rescue ::Cassandra::Errors::ConfigurationError
    raise Errors::UnexistingKeyspaceError, config.keyspace
  end
end

Private Instance Methods

config_includes_replication?(config) click to toggle source
# File lib/cassandra_migrations/cassandra/keyspace_operations.rb, line 55
def config_includes_replication?(config)
  config.replication &&
  config.replication['class'] &&
  config.replication['replication_factor']
end
config_requires_replication?(config) click to toggle source
# File lib/cassandra_migrations/cassandra/keyspace_operations.rb, line 51
def config_requires_replication?(config)
  config.replication['class'] == 'SimpleStrategy'
end
replication_options_statement(config) click to toggle source
# File lib/cassandra_migrations/cassandra/keyspace_operations.rb, line 61
def replication_options_statement(config)
  if config.replication['class'] == "SimpleStrategy"
   "'replication_factor': #{config.replication['replication_factor']}"
  elsif config.replication['class'] == "NetworkTopologyStrategy"
    config.replication.reject{ |k,v| k == 'class' }.map { |k,v| "'#{k}': #{v}" }.join(", ")
  end
end
validate_config(config) click to toggle source
# File lib/cassandra_migrations/cassandra/keyspace_operations.rb, line 42
def validate_config(config)
  if config.keyspace.nil?
    raise Errors::MissingConfigurationError.new("Configuration of 'keyspace' is required in config/cassandra.yml, but none is defined.")
  elsif config_requires_replication?(config) && !config_includes_replication?(config)
    raise Errors::MissingConfigurationError.new("Configuration for 'replication' is required in config/cassandra.yml, but none is defined.")
  end
  true
end