gotime-cassandra_object 4.2.2 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/gotime-cassandra_object.gemspec +1 -1
- data/lib/cassandra_object/connection.rb +12 -7
- data/lib/cassandra_object/schema.rb +5 -2
- data/lib/cassandra_object/schema/tasks.rb +33 -0
- data/lib/cassandra_object/tasks/ks.rake +21 -1
- data/test/unit/connection_test.rb +5 -5
- data/test/unit/schema/tasks_test.rb +16 -0
- metadata +3 -1
@@ -16,6 +16,16 @@ module CassandraCQL
|
|
16
16
|
end
|
17
17
|
|
18
18
|
module CassandraObject
|
19
|
+
class Config
|
20
|
+
attr_accessor :servers, :keyspace, :thrift_options
|
21
|
+
|
22
|
+
def initialize(options)
|
23
|
+
self.servers = Array.wrap(options[:servers] || "127.0.0.1:9160")
|
24
|
+
self.keyspace = options[:keyspace]
|
25
|
+
self.thrift_options = (options[:thrift] || {}).symbolize_keys
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
19
29
|
module Connection
|
20
30
|
extend ActiveSupport::Concern
|
21
31
|
|
@@ -24,17 +34,12 @@ module CassandraObject
|
|
24
34
|
end
|
25
35
|
|
26
36
|
module ClassMethods
|
27
|
-
DEFAULT_OPTIONS = {
|
28
|
-
servers: "127.0.0.1:9160",
|
29
|
-
thrift: {}
|
30
|
-
}
|
31
|
-
|
32
37
|
def establish_connection(spec)
|
33
|
-
self.connection_config =
|
38
|
+
self.connection_config = Config.new(spec)
|
34
39
|
end
|
35
40
|
|
36
41
|
def cql
|
37
|
-
@@cql ||= CassandraCQL::Database.new(connection_config
|
42
|
+
@@cql ||= CassandraCQL::Database.new(connection_config.servers, {keyspace: connection_config.keyspace}, connection_config.thrift_options)
|
38
43
|
end
|
39
44
|
|
40
45
|
def execute_cql(cql_string, *bind_vars)
|
@@ -1,5 +1,9 @@
|
|
1
|
+
require 'cassandra_object/schema/tasks'
|
2
|
+
|
1
3
|
module CassandraObject
|
2
4
|
class Schema
|
5
|
+
extend Tasks
|
6
|
+
|
3
7
|
class << self
|
4
8
|
def create_keyspace(keyspace)
|
5
9
|
system_execute "CREATE KEYSPACE #{keyspace} " +
|
@@ -21,7 +25,6 @@ module CassandraObject
|
|
21
25
|
end
|
22
26
|
|
23
27
|
def add_index()
|
24
|
-
|
25
28
|
end
|
26
29
|
|
27
30
|
private
|
@@ -30,7 +33,7 @@ module CassandraObject
|
|
30
33
|
end
|
31
34
|
|
32
35
|
def system_execute(cql)
|
33
|
-
@system_cql ||= CassandraCQL::Database.new(CassandraObject::Base.connection_config
|
36
|
+
@system_cql ||= CassandraCQL::Database.new(CassandraObject::Base.connection_config.servers, keyspace: 'system')
|
34
37
|
@system_cql.execute cql
|
35
38
|
end
|
36
39
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module CassandraObject
|
2
|
+
class Schema
|
3
|
+
module Tasks
|
4
|
+
def dump(io)
|
5
|
+
column_families.each do |column_family|
|
6
|
+
io.puts run_command("DESCRIBE COLUMNFAMILY #{column_family}")
|
7
|
+
io.puts
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def load(filename)
|
12
|
+
`cqlsh -k #{keyspace} -f #{filename} #{server}`
|
13
|
+
end
|
14
|
+
|
15
|
+
def column_families
|
16
|
+
run_command('DESCRIBE COLUMNFAMILIES').split.sort
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
def run_command(command)
|
21
|
+
`echo "#{command};" | cqlsh -k #{keyspace} #{server}`.sub(/^(.*)$/, '').strip
|
22
|
+
end
|
23
|
+
|
24
|
+
def keyspace
|
25
|
+
CassandraObject::Base.connection_config.keyspace
|
26
|
+
end
|
27
|
+
|
28
|
+
def server
|
29
|
+
CassandraObject::Base.connection_config.servers.first.gsub(/:.*/, '')
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
namespace :ks do
|
1
|
+
ks_namespace = namespace :ks do
|
2
2
|
desc 'Create the keyspace in cassandra_config/cassandra.yml for the current environment'
|
3
3
|
task create: :environment do
|
4
4
|
CassandraObject::Schema.create_keyspace cassandra_config['keyspace']
|
@@ -8,6 +8,26 @@ namespace :ks do
|
|
8
8
|
CassandraObject::Schema.drop_keyspace cassandra_config['keyspace']
|
9
9
|
end
|
10
10
|
|
11
|
+
task reset: [:drop, :setup]
|
12
|
+
|
13
|
+
task setup: :create do
|
14
|
+
filename = ENV['SCHEMA'] || "#{Rails.root}/ks/structure.cql"
|
15
|
+
CassandraObject::Schema.load(filename)
|
16
|
+
end
|
17
|
+
|
18
|
+
namespace :structure do
|
19
|
+
task dump: :environment do
|
20
|
+
filename = ENV['SCHEMA'] || "#{Rails.root}/ks/structure.cql"
|
21
|
+
File.open(filename, "w:utf-8") do |file|
|
22
|
+
CassandraObject::Schema.dump(file)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
task :_dump do
|
28
|
+
ks_namespace["structure:dump"].invoke
|
29
|
+
end
|
30
|
+
|
11
31
|
private
|
12
32
|
def cassandra_config
|
13
33
|
@cassandra_config ||= begin
|
@@ -15,16 +15,16 @@ class CassandraObject::ConnectionTest < CassandraObject::TestCase
|
|
15
15
|
thrift: {'timeout' => 10}
|
16
16
|
)
|
17
17
|
#
|
18
|
-
assert_equal '
|
19
|
-
assert_equal
|
18
|
+
assert_equal ['192.168.0.100:9160'], TestObject.connection_config.servers
|
19
|
+
assert_equal 'place_directory_development', TestObject.connection_config.keyspace
|
20
|
+
assert_equal 10, TestObject.connection_config.thrift_options[:timeout]
|
20
21
|
end
|
21
22
|
|
22
23
|
test 'establish_connection defaults' do
|
23
24
|
TestObject.establish_connection(
|
24
25
|
keyspace: 'place_directory_development'
|
25
26
|
)
|
26
|
-
|
27
|
-
|
28
|
-
assert_equal "127.0.0.1:9160", TestObject.connection_config[:servers]
|
27
|
+
|
28
|
+
assert_equal ["127.0.0.1:9160"], TestObject.connection_config.servers
|
29
29
|
end
|
30
30
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class CassandraObject::Schema::TasksTest < CassandraObject::TestCase
|
4
|
+
test "column_families" do
|
5
|
+
assert_equal ['Issues'], CassandraObject::Schema.column_families
|
6
|
+
end
|
7
|
+
|
8
|
+
test "dump" do
|
9
|
+
io = StringIO.new
|
10
|
+
|
11
|
+
CassandraObject::Schema.dump(io)
|
12
|
+
io.rewind
|
13
|
+
|
14
|
+
assert_match /Issues/, io.read
|
15
|
+
end
|
16
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gotime-cassandra_object
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -112,6 +112,7 @@ files:
|
|
112
112
|
- lib/cassandra_object/railtie.rb
|
113
113
|
- lib/cassandra_object/savepoints.rb
|
114
114
|
- lib/cassandra_object/schema.rb
|
115
|
+
- lib/cassandra_object/schema/tasks.rb
|
115
116
|
- lib/cassandra_object/scope.rb
|
116
117
|
- lib/cassandra_object/scope/batches.rb
|
117
118
|
- lib/cassandra_object/scope/finder_methods.rb
|
@@ -154,6 +155,7 @@ files:
|
|
154
155
|
- test/unit/log_subscriber_test.rb
|
155
156
|
- test/unit/persistence_test.rb
|
156
157
|
- test/unit/savepoints_test.rb
|
158
|
+
- test/unit/schema/tasks_test.rb
|
157
159
|
- test/unit/scope/batches_test.rb
|
158
160
|
- test/unit/scope/finder_methods_test.rb
|
159
161
|
- test/unit/scope/query_methods_test.rb
|