sessionm-cassandra_object 4.0.6 → 4.0.7
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.
- checksums.yaml +4 -4
- data/lib/cassandra_object/adapters/cassandra_driver.rb +28 -0
- data/lib/cassandra_object/connection.rb +5 -4
- data/lib/cassandra_object/schema/migration.rb +11 -0
- data/lib/cassandra_object/tasks/column_family.rb +1 -13
- data/sessionm-cassandra_object.gemspec +1 -1
- data/spec/cassandra_object/schema/migration_spec.rb +25 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5c25269842c2a62630aa2accf056e3d15464f12
|
4
|
+
data.tar.gz: e74ccbb479ce36b61c48700e9ff79b971f196f25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c0c095994244bf02b66e8f1197b756f0fc523d3f1bfc6935a48ad33d5abe3fdd72ea1e816ebe0ba93511ee9e832e2986ecc23d7062ede08c942aba509c07cd6e
|
7
|
+
data.tar.gz: 682992879ccf1e9fdc81436511fb90358dbe05eadf10952064f18a4a7dcc119b73c816768f474eac921af91c8743228d1c0927886ddb35a7e6a7fd328ff81723
|
@@ -163,6 +163,10 @@ module CassandraObject
|
|
163
163
|
) || {}
|
164
164
|
end
|
165
165
|
|
166
|
+
def keyspace
|
167
|
+
session.keyspace
|
168
|
+
end
|
169
|
+
|
166
170
|
def has_table?(name)
|
167
171
|
self.cluster.keyspace(session.keyspace).has_table? name
|
168
172
|
end
|
@@ -174,6 +178,30 @@ module CassandraObject
|
|
174
178
|
def column_families
|
175
179
|
@column_families ||= self.cluster.keyspace(session.keyspace).tables.inject({}) { |hsh, table| hsh[table.name] = table; hsh }
|
176
180
|
end
|
181
|
+
|
182
|
+
def schema(reload=false)
|
183
|
+
if reload
|
184
|
+
remove_instance_variable(:@schema_cache) if instance_variable_defined?(:@schema_cache)
|
185
|
+
remove_instance_variable(:@column_families) if instance_variable_defined?(:@column_families)
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
def add_column_family(column_family)
|
190
|
+
value_type = column_family.column_type == 'Standard' ? 'text' : 'counter'
|
191
|
+
|
192
|
+
query = <<-CQL
|
193
|
+
CREATE TABLE "#{column_family.name}" (
|
194
|
+
key blob,
|
195
|
+
column1 text,
|
196
|
+
value #{value_type},
|
197
|
+
PRIMARY KEY (key, column1)
|
198
|
+
)
|
199
|
+
CQL
|
200
|
+
|
201
|
+
self.execute(query)
|
202
|
+
|
203
|
+
self.column_families[column_family.name.to_s] = column_family
|
204
|
+
end
|
177
205
|
end
|
178
206
|
end
|
179
207
|
end
|
@@ -42,17 +42,18 @@ module CassandraObject
|
|
42
42
|
self.connection_spec = spec
|
43
43
|
end
|
44
44
|
|
45
|
+
@@connection = nil
|
45
46
|
def connection
|
46
|
-
|
47
|
+
@@connection ||= CassandraObject::Adapters::CassandraDriver.new(self.connection_spec).client
|
47
48
|
end
|
48
49
|
|
49
50
|
def connection?
|
50
|
-
!!
|
51
|
+
!! @@connection
|
51
52
|
end
|
52
53
|
|
53
54
|
def disconnect!
|
54
|
-
|
55
|
-
|
55
|
+
@@connection.try(:close)
|
56
|
+
@@connection = nil
|
56
57
|
end
|
57
58
|
|
58
59
|
def with_connection(*args)
|
@@ -102,5 +102,16 @@ module CassandraObject
|
|
102
102
|
end
|
103
103
|
|
104
104
|
end
|
105
|
+
|
106
|
+
class ColumnFamily < Struct.new(:name,
|
107
|
+
:keyspace,
|
108
|
+
:comparator_type,
|
109
|
+
:column_type,
|
110
|
+
:compaction_strategy,
|
111
|
+
:row_cache_provider,
|
112
|
+
:default_validation_class,
|
113
|
+
:subcomparator_type
|
114
|
+
)
|
115
|
+
end
|
105
116
|
end
|
106
117
|
end
|
@@ -28,7 +28,7 @@ module CassandraObject
|
|
28
28
|
}.merge(options)
|
29
29
|
|
30
30
|
# this won't work with cassandra-driver
|
31
|
-
cf =
|
31
|
+
cf = CassandraObject::Schema::ColumnFamily.new
|
32
32
|
cf.name = name.to_s
|
33
33
|
cf.keyspace = @keyspace.to_s
|
34
34
|
options.each do |option, value|
|
@@ -83,15 +83,3 @@ module CassandraObject
|
|
83
83
|
end
|
84
84
|
|
85
85
|
end
|
86
|
-
|
87
|
-
class Cassandra
|
88
|
-
class ColumnFamily
|
89
|
-
def with_fields(options)
|
90
|
-
struct_fields.collect { |f| f[1][:name] }.each do |f|
|
91
|
-
send("#{f}=", options[f.to_sym] || options[f.to_s])
|
92
|
-
end
|
93
|
-
self
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CassandraObject::Schema::Migration do
|
4
|
+
context "create_column_family" do
|
5
|
+
it "should create a new standard column family" do
|
6
|
+
expect(Issue.connection.column_families['Foobars'].present?).to be false
|
7
|
+
CassandraObject::Schema::Migration.create_column_family("Foobars") do |cf|
|
8
|
+
cf.column_type = 'Standard'
|
9
|
+
cf.comparator_type = 'UTF8Type'
|
10
|
+
cf.default_validation_class = 'UTF8Type'
|
11
|
+
end
|
12
|
+
expect(Issue.connection.column_families['Foobars'].present?).to be true
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should create a new counter column family" do
|
16
|
+
expect(Issue.connection.column_families['FooCounters'].present?).to be false
|
17
|
+
CassandraObject::Schema::Migration.create_column_family("FooCounters") do |cf|
|
18
|
+
cf.column_type = 'Counter'
|
19
|
+
cf.comparator_type = 'UTF8Type'
|
20
|
+
cf.default_validation_class = 'UTF8Type'
|
21
|
+
end
|
22
|
+
expect(Issue.connection.column_families['FooCounters'].present?).to be true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sessionm-cassandra_object
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.0.
|
4
|
+
version: 4.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Koziarski
|
@@ -100,6 +100,7 @@ files:
|
|
100
100
|
- spec/cassandra_object/associations_spec.rb
|
101
101
|
- spec/cassandra_object/base_spec.rb
|
102
102
|
- spec/cassandra_object/persistence_spec.rb
|
103
|
+
- spec/cassandra_object/schema/migration_spec.rb
|
103
104
|
- spec/spec_helper.rb
|
104
105
|
- spec/support/cassandra.rb
|
105
106
|
- spec/support/db/migrate/001_create_test_tables.rb
|
@@ -160,6 +161,7 @@ test_files:
|
|
160
161
|
- spec/cassandra_object/associations_spec.rb
|
161
162
|
- spec/cassandra_object/base_spec.rb
|
162
163
|
- spec/cassandra_object/persistence_spec.rb
|
164
|
+
- spec/cassandra_object/schema/migration_spec.rb
|
163
165
|
- spec/spec_helper.rb
|
164
166
|
- spec/support/cassandra.rb
|
165
167
|
- spec/support/db/migrate/001_create_test_tables.rb
|