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