cequel 1.4.5 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/Gemfile.lock +2 -1
- data/README.md +3 -0
- data/lib/cequel.rb +1 -0
- data/lib/cequel/instrumentation.rb +65 -0
- data/lib/cequel/metal/new_relic_instrumentation.rb +1 -1
- data/lib/cequel/record/persistence.rb +4 -0
- data/lib/cequel/record/railtie.rb +32 -17
- data/lib/cequel/record/schema.rb +1 -1
- data/lib/cequel/record/tasks.rb +7 -5
- data/lib/cequel/schema/column.rb +1 -1
- data/lib/cequel/schema/keyspace.rb +31 -6
- data/lib/cequel/version.rb +1 -1
- data/spec/examples/record/persistence_spec.rb +38 -0
- data/spec/examples/schema/keyspace_spec.rb +132 -0
- data/templates/config/cequel.yml +11 -0
- metadata +35 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b668ffc98274e61d21a3aef2e10ea369ee23bd16
|
4
|
+
data.tar.gz: a5bddb78739ecdd00f0bc663e40535460b92410e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: acd56facacd1b9c6000fb73bd68719bb7e2c8e64f89069e06cf37480e6b1ac2924754b5a34367a87cac48bd233b62e1bc418da54933af52204b5eefa2494cc1f
|
7
|
+
data.tar.gz: f9b63848ae3bd83d070bc1251142e40f186f6d4ff924f4f2dd6ab717d148ff85efe56db1b7a6823ca3b64d72cd52ccbd5528254064fc69fb502fea8a7c09bde5
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
## 1.5.0
|
2
|
+
|
3
|
+
* Support ActiveSupport instrumentation of Record create, update, destroy
|
4
|
+
* Allow config/cequel.yml to specify `:replication` and `:durable_writes`
|
5
|
+
settings
|
6
|
+
* `Key#to_s` correctly returns String, not Symbol
|
7
|
+
* Don't assume all constants are classes in migrations
|
8
|
+
* Explicitly require yaml and erb in Railtie
|
9
|
+
* NewRelic integration can be explicitly disabled
|
10
|
+
* Demodulize model class name before transforming it to table name
|
11
|
+
|
1
12
|
## 1.4.5
|
2
13
|
|
3
14
|
* Fix recovery from connection error
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
cequel (1.
|
4
|
+
cequel (1.5.0)
|
5
5
|
activemodel (>= 3.1, < 5.0)
|
6
6
|
cql-rb (>= 1.2, < 3.0)
|
7
7
|
|
@@ -291,6 +291,7 @@ GEM
|
|
291
291
|
ffi
|
292
292
|
thor (0.19.1)
|
293
293
|
thread_safe (0.3.4)
|
294
|
+
thread_safe (0.3.4-java)
|
294
295
|
timecop (0.7.1)
|
295
296
|
tzinfo (1.2.2)
|
296
297
|
thread_safe (~> 0.1)
|
data/README.md
CHANGED
@@ -570,6 +570,9 @@ Cequel was written by:
|
|
570
570
|
* Masaki Takahashi
|
571
571
|
* G Gordon Worley III
|
572
572
|
* Clark Bremer
|
573
|
+
* Tamara Temple
|
574
|
+
* Long On
|
575
|
+
* Lucas Mundim
|
573
576
|
|
574
577
|
Special thanks to [Brewster](https://www.brewster.com), which supported the 0.x
|
575
578
|
releases of Cequel.
|
data/lib/cequel.rb
CHANGED
@@ -0,0 +1,65 @@
|
|
1
|
+
module Cequel
|
2
|
+
#
|
3
|
+
# Generic module which enables injection of ActiveSupport notification
|
4
|
+
# functionality into including classes
|
5
|
+
#
|
6
|
+
module Instrumentation
|
7
|
+
#
|
8
|
+
# Metaprogramming method to wrap an existing method with instrumentation
|
9
|
+
#
|
10
|
+
module ModuleMethods
|
11
|
+
# Instruments `method_name` to publish the value returned by the
|
12
|
+
# `data_builder` proc onto `topic`
|
13
|
+
#
|
14
|
+
# Example:
|
15
|
+
#
|
16
|
+
# extend Instrumentation
|
17
|
+
# instrument :create, "create.cequel", data: {table_name: table_name}
|
18
|
+
#
|
19
|
+
# @param method_name [Symbol,String] The method to instrument
|
20
|
+
#
|
21
|
+
# @param opts [String] :topic ("#{method_name}.cequel") The name
|
22
|
+
# with which to publish this instrumentation
|
23
|
+
#
|
24
|
+
# @option opts [Object] :data_method (nil) the data to publish along
|
25
|
+
# with the notification. If it responds to `#call` it will be
|
26
|
+
# called with the record object and the return value used for
|
27
|
+
# each notification.
|
28
|
+
def instrument(method_name, opts)
|
29
|
+
data = opts[:data]
|
30
|
+
topic = opts.fetch(:topic, "#{method_name}.cequel")
|
31
|
+
|
32
|
+
data_proc = if data.respond_to? :call
|
33
|
+
data
|
34
|
+
else
|
35
|
+
->(_) { data }
|
36
|
+
end
|
37
|
+
|
38
|
+
define_method(:"__data_for_#{method_name}_instrumentation", &data_proc)
|
39
|
+
|
40
|
+
module_eval <<-METH
|
41
|
+
def #{method_name}_with_instrumentation(*args)
|
42
|
+
instrument("#{topic}",
|
43
|
+
__data_for_#{method_name}_instrumentation(self)) do
|
44
|
+
#{method_name}_without_instrumentation(*args)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
METH
|
48
|
+
|
49
|
+
alias_method_chain method_name, "instrumentation"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
protected
|
54
|
+
|
55
|
+
def instrument(name, data, &blk)
|
56
|
+
ActiveSupport::Notifications.instrument(name, data, &blk)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Module Methods
|
60
|
+
|
61
|
+
def self.included(a_module)
|
62
|
+
a_module.extend ModuleMethods
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -12,6 +12,7 @@ module Cequel
|
|
12
12
|
module Persistence
|
13
13
|
extend ActiveSupport::Concern
|
14
14
|
extend Forwardable
|
15
|
+
include Instrumentation
|
15
16
|
|
16
17
|
#
|
17
18
|
# Class-level functionality for loading and saving records
|
@@ -223,6 +224,7 @@ module Cequel
|
|
223
224
|
transient!
|
224
225
|
self
|
225
226
|
end
|
227
|
+
instrument :destroy, data: ->(rec) { {table_name: rec.table_name} }
|
226
228
|
|
227
229
|
#
|
228
230
|
# @return true if this is a new, unsaved record
|
@@ -277,6 +279,7 @@ module Cequel
|
|
277
279
|
loaded!
|
278
280
|
persisted!
|
279
281
|
end
|
282
|
+
instrument :create, data: ->(rec) { {table_name: rec.table_name} }
|
280
283
|
|
281
284
|
def update(options = {})
|
282
285
|
assert_keys_present!
|
@@ -286,6 +289,7 @@ module Cequel
|
|
286
289
|
deleter.execute(options.except(:ttl))
|
287
290
|
end
|
288
291
|
end
|
292
|
+
instrument :update, data: ->(rec) { {table_name: rec.table_name} }
|
289
293
|
|
290
294
|
def updater
|
291
295
|
@updater ||= Metal::Updater.new(metal_scope)
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
2
2
|
require 'i18n/core_ext/hash'
|
3
|
+
require 'yaml'
|
4
|
+
require 'erb'
|
3
5
|
|
4
6
|
module Cequel
|
5
7
|
module Record
|
@@ -13,29 +15,22 @@ module Cequel
|
|
13
15
|
end
|
14
16
|
|
15
17
|
initializer "cequel.configure_rails" do
|
16
|
-
|
17
|
-
|
18
|
-
if File.exist?(config_path)
|
19
|
-
config = YAML.load(ERB.new(IO.read(config_path)).result)[Rails.env]
|
20
|
-
.deep_symbolize_keys
|
21
|
-
else
|
22
|
-
config = {host: '127.0.0.1:9042'}
|
23
|
-
end
|
24
|
-
config.reverse_merge!(keyspace: "#{Railtie.app_name}_#{Rails.env}")
|
25
|
-
connection = Cequel.connect(config)
|
18
|
+
connection = Cequel.connect(configuration)
|
26
19
|
|
27
20
|
connection.logger = Rails.logger
|
28
21
|
Record.connection = connection
|
29
22
|
end
|
30
23
|
|
31
24
|
initializer "cequel.add_new_relic" do
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
25
|
+
if configuration.fetch(:newrelic_enabled, true)
|
26
|
+
begin
|
27
|
+
require 'new_relic/agent/method_tracer'
|
28
|
+
rescue LoadError => e
|
29
|
+
Rails.logger.debug(
|
30
|
+
"New Relic not installed; skipping New Relic integration")
|
31
|
+
else
|
32
|
+
require 'cequel/metal/new_relic_instrumentation'
|
33
|
+
end
|
39
34
|
end
|
40
35
|
end
|
41
36
|
|
@@ -47,6 +42,26 @@ module Cequel
|
|
47
42
|
require 'cequel/record/configuration_generator'
|
48
43
|
require 'cequel/record/record_generator'
|
49
44
|
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def configuration
|
49
|
+
return @configuration if defined? @configuration
|
50
|
+
|
51
|
+
config_path = Rails.root.join('config/cequel.yml').to_s
|
52
|
+
|
53
|
+
if File.exist?(config_path)
|
54
|
+
config_yaml = ERB.new(File.read(config_path)).result
|
55
|
+
@configuration = YAML.load(config_yaml)[Rails.env]
|
56
|
+
.deep_symbolize_keys
|
57
|
+
else
|
58
|
+
@configuration = {host: '127.0.0.1:9042'}
|
59
|
+
end
|
60
|
+
@configuration
|
61
|
+
.reverse_merge!(keyspace: "#{Railtie.app_name}_#{Rails.env}")
|
62
|
+
|
63
|
+
@configuration
|
64
|
+
end
|
50
65
|
end
|
51
66
|
end
|
52
67
|
end
|
data/lib/cequel/record/schema.rb
CHANGED
data/lib/cequel/record/tasks.rb
CHANGED
@@ -44,11 +44,13 @@ namespace :cequel do
|
|
44
44
|
clazz = class_name.constantize
|
45
45
|
rescue NameError, RuntimeError # rubocop:disable HandleExceptions
|
46
46
|
else
|
47
|
-
if clazz.
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
47
|
+
if clazz.is_a?(Class)
|
48
|
+
if clazz.ancestors.include?(Cequel::Record) &&
|
49
|
+
!migration_table_names.include?(clazz.table_name.to_sym)
|
50
|
+
clazz.synchronize_schema
|
51
|
+
migration_table_names << clazz.table_name.to_sym
|
52
|
+
puts "Synchronized schema for #{class_name}"
|
53
|
+
end
|
52
54
|
end
|
53
55
|
end
|
54
56
|
end
|
data/lib/cequel/schema/column.rb
CHANGED
@@ -29,6 +29,10 @@ module Cequel
|
|
29
29
|
# strategy to use for this keyspace
|
30
30
|
# @option options [Integer] :replication_factor (1) the number of
|
31
31
|
# replicas that should exist for each piece of data
|
32
|
+
# @option options [Hash] :replication ({ class: "SimpleStrategy",
|
33
|
+
# replication_factor: 1 }) replication options for this keyspace
|
34
|
+
# @option options [Boolean] :durable_writes (true) durable_writes
|
35
|
+
# option for the keyspace
|
32
36
|
# @return [void]
|
33
37
|
#
|
34
38
|
# @see
|
@@ -39,18 +43,39 @@ module Cequel
|
|
39
43
|
bare_connection =
|
40
44
|
Metal::Keyspace.new(keyspace.configuration.except(:keyspace))
|
41
45
|
|
46
|
+
default_options = {
|
47
|
+
replication: {
|
48
|
+
class: "SimpleStrategy",
|
49
|
+
replication_factor: 1
|
50
|
+
},
|
51
|
+
durable_writes: true
|
52
|
+
}
|
53
|
+
|
42
54
|
options = options.symbolize_keys
|
43
|
-
options
|
44
|
-
|
45
|
-
|
55
|
+
options.reverse_merge!(keyspace.configuration)
|
56
|
+
options.reverse_merge!(default_options)
|
57
|
+
|
58
|
+
if options.key?(:class)
|
59
|
+
options[:replication][:class] = options[:class]
|
60
|
+
if options[:class] != 'SimpleStrategy'
|
61
|
+
raise 'For strategy other than SimpleStrategy, please ' \
|
62
|
+
'use the :replication option.'
|
63
|
+
end
|
46
64
|
end
|
47
|
-
|
65
|
+
|
66
|
+
if options.key?(:replication_factor)
|
67
|
+
options[:replication][:replication_factor] =
|
68
|
+
options[:replication_factor]
|
69
|
+
end
|
70
|
+
|
71
|
+
replication_options_strs = options[:replication].map do |name, value|
|
48
72
|
"'#{name}': #{Cequel::Type.quote(value)}"
|
49
73
|
end
|
50
74
|
|
51
|
-
bare_connection.execute(<<-CQL)
|
75
|
+
bare_connection.execute(<<-CQL.strip_heredoc)
|
52
76
|
CREATE KEYSPACE #{keyspace.name}
|
53
|
-
WITH REPLICATION = {#{
|
77
|
+
WITH REPLICATION = {#{replication_options_strs.join(', ')}}
|
78
|
+
AND durable_writes = #{options[:durable_writes]}
|
54
79
|
CQL
|
55
80
|
end
|
56
81
|
|
data/lib/cequel/version.rb
CHANGED
@@ -72,6 +72,14 @@ describe Cequel::Record::Persistence do
|
|
72
72
|
.to eq((timestamp.to_f * 1_000_000).to_i)
|
73
73
|
Blog.connection.schema.truncate_table(Blog.table_name)
|
74
74
|
end
|
75
|
+
|
76
|
+
it 'should notify of create' do
|
77
|
+
expect { Blog.new do |blog|
|
78
|
+
blog.subdomain = 'cequel'
|
79
|
+
blog.name = 'Cequel'
|
80
|
+
end.save
|
81
|
+
}.to notify_name("create.cequel")
|
82
|
+
end
|
75
83
|
end
|
76
84
|
|
77
85
|
context 'on update' do
|
@@ -327,6 +335,14 @@ describe Cequel::Record::Persistence do
|
|
327
335
|
post.save
|
328
336
|
}.to raise_error(ArgumentError)
|
329
337
|
end
|
338
|
+
|
339
|
+
it 'should notify subscribers' do
|
340
|
+
expect {
|
341
|
+
post.title = 'Cequel 1.0'
|
342
|
+
post.save
|
343
|
+
}.to notify_name('update.cequel')
|
344
|
+
end
|
345
|
+
|
330
346
|
end
|
331
347
|
end
|
332
348
|
|
@@ -341,5 +357,27 @@ describe Cequel::Record::Persistence do
|
|
341
357
|
expect(post).to be_transient
|
342
358
|
end
|
343
359
|
end
|
360
|
+
|
361
|
+
describe '#destroy' do
|
362
|
+
it 'should notify subscribers' do
|
363
|
+
expect { post.destroy }.to notify_name('destroy.cequel')
|
364
|
+
end
|
365
|
+
end
|
366
|
+
end
|
367
|
+
|
368
|
+
# Custom matcher for active support notification
|
369
|
+
matcher :notify_name do |expected_name|
|
370
|
+
match { |blk|
|
371
|
+
notification_recieved = false
|
372
|
+
ActiveSupport::Notifications.subscribe expected_name do |*args|
|
373
|
+
notification_recieved = true
|
374
|
+
end
|
375
|
+
|
376
|
+
blk.call
|
377
|
+
|
378
|
+
notification_recieved
|
379
|
+
}
|
380
|
+
|
381
|
+
supports_block_expectations
|
344
382
|
end
|
345
383
|
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
3
|
+
|
4
|
+
describe Cequel::Schema::Keyspace do
|
5
|
+
let(:connection) do
|
6
|
+
Cequel.connect(config)
|
7
|
+
end
|
8
|
+
let(:keyspace) { connection.schema }
|
9
|
+
|
10
|
+
describe 'creating keyspace' do
|
11
|
+
before do
|
12
|
+
connection.configure(config)
|
13
|
+
connection.schema.drop! if connection.schema.exists?
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:keyspace_name) do
|
17
|
+
test_env_number = ENV['TEST_ENV_NUMBER']
|
18
|
+
test_env_number ?
|
19
|
+
"cequel_schema_test_#{test_env_number}" :
|
20
|
+
"cequel_schema_test"
|
21
|
+
end
|
22
|
+
|
23
|
+
let(:basic_config) do
|
24
|
+
{
|
25
|
+
host: Cequel::SpecSupport::Helpers.host,
|
26
|
+
port: Cequel::SpecSupport::Helpers.port,
|
27
|
+
keyspace: keyspace_name
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
let(:schema_config) do
|
32
|
+
connection.client.use('system')
|
33
|
+
connection.client.execute("SELECT * FROM schema_keyspaces WHERE keyspace_name = '#{keyspace_name}'").first
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'with default options' do
|
37
|
+
let(:config) { basic_config }
|
38
|
+
|
39
|
+
it 'uses default keyspace configuration' do
|
40
|
+
keyspace.create!
|
41
|
+
expect(schema_config).to eq({
|
42
|
+
"keyspace_name"=>keyspace_name,
|
43
|
+
"durable_writes"=>true,
|
44
|
+
"strategy_class"=>"org.apache.cassandra.locator.SimpleStrategy",
|
45
|
+
"strategy_options"=>"{\"replication_factor\":\"1\"}"
|
46
|
+
})
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'with explicit options' do
|
51
|
+
let(:config) { basic_config }
|
52
|
+
|
53
|
+
it 'uses specified options' do
|
54
|
+
keyspace.create! replication: { class: "SimpleStrategy", replication_factor: 2 }
|
55
|
+
expect(schema_config).to eq({
|
56
|
+
"keyspace_name"=>keyspace_name,
|
57
|
+
"durable_writes"=>true,
|
58
|
+
"strategy_class"=>"org.apache.cassandra.locator.SimpleStrategy",
|
59
|
+
"strategy_options"=>"{\"replication_factor\":\"2\"}"
|
60
|
+
})
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'keeping compatibility' do
|
65
|
+
let(:config) { basic_config }
|
66
|
+
|
67
|
+
it 'accepts class and replication_factor options' do
|
68
|
+
keyspace.create! class: "SimpleStrategy", replication_factor: 2
|
69
|
+
expect(schema_config).to eq({
|
70
|
+
"keyspace_name"=>keyspace_name,
|
71
|
+
"durable_writes"=>true,
|
72
|
+
"strategy_class"=>"org.apache.cassandra.locator.SimpleStrategy",
|
73
|
+
"strategy_options"=>"{\"replication_factor\":\"2\"}"
|
74
|
+
})
|
75
|
+
end
|
76
|
+
|
77
|
+
it "raises an error if a class other than SimpleStrategy is given" do
|
78
|
+
expect {
|
79
|
+
keyspace.create! class: "NetworkTopologyStrategy", replication_factor: 2
|
80
|
+
}.to raise_error
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context 'with custom replication options' do
|
85
|
+
let(:config) {
|
86
|
+
basic_config.merge(replication: { class: "SimpleStrategy", replication_factor: 3 })
|
87
|
+
}
|
88
|
+
|
89
|
+
it 'uses default keyspace configuration' do
|
90
|
+
keyspace.create!
|
91
|
+
expect(schema_config).to eq({
|
92
|
+
"keyspace_name"=>keyspace_name,
|
93
|
+
"durable_writes"=>true,
|
94
|
+
"strategy_class"=>"org.apache.cassandra.locator.SimpleStrategy",
|
95
|
+
"strategy_options"=>"{\"replication_factor\":\"3\"}"
|
96
|
+
})
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context 'with another custom replication options' do
|
101
|
+
let(:config) {
|
102
|
+
basic_config.merge(replication: { class: "NetworkTopologyStrategy", datacenter1: 3, datacenter2: 2 })
|
103
|
+
}
|
104
|
+
|
105
|
+
it 'uses default keyspace configuration' do
|
106
|
+
keyspace.create!
|
107
|
+
expect(schema_config).to eq({
|
108
|
+
"keyspace_name"=>keyspace_name,
|
109
|
+
"durable_writes"=>true,
|
110
|
+
"strategy_class"=>"org.apache.cassandra.locator.NetworkTopologyStrategy",
|
111
|
+
"strategy_options"=>"{\"datacenter1\":\"3\",\"datacenter2\":\"2\"}"
|
112
|
+
})
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
context 'with custom durable_write option' do
|
117
|
+
let(:config) {
|
118
|
+
basic_config.merge(durable_writes: false)
|
119
|
+
}
|
120
|
+
|
121
|
+
it 'uses default keyspace configuration' do
|
122
|
+
keyspace.create!
|
123
|
+
expect(schema_config).to eq({
|
124
|
+
"keyspace_name"=>keyspace_name,
|
125
|
+
"durable_writes"=>false,
|
126
|
+
"strategy_class"=>"org.apache.cassandra.locator.SimpleStrategy",
|
127
|
+
"strategy_options"=>"{\"replication_factor\":\"1\"}"
|
128
|
+
})
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end # describe 'creating keyspace'
|
132
|
+
end
|
data/templates/config/cequel.yml
CHANGED
@@ -5,6 +5,7 @@ development:
|
|
5
5
|
keyspace: <%= app_name %>_development
|
6
6
|
max_retries: 3
|
7
7
|
retry_delay: 0.5
|
8
|
+
newrelic: false
|
8
9
|
|
9
10
|
test:
|
10
11
|
host: '127.0.0.1'
|
@@ -12,6 +13,7 @@ test:
|
|
12
13
|
keyspace: <%= app_name %>_test
|
13
14
|
max_retries: 3
|
14
15
|
retry_delay: 0.5
|
16
|
+
newrelic: false
|
15
17
|
|
16
18
|
production:
|
17
19
|
hosts:
|
@@ -24,3 +26,12 @@ production:
|
|
24
26
|
password: 'password1'
|
25
27
|
max_retries: 3
|
26
28
|
retry_delay: 0.5
|
29
|
+
newrelic: true
|
30
|
+
replication:
|
31
|
+
class: SimpleStrategy
|
32
|
+
replication_factor: 1
|
33
|
+
# replication:
|
34
|
+
# class: NetworkTopologyStrategy
|
35
|
+
# datacenter1: 3
|
36
|
+
# datacenter2: 2
|
37
|
+
# durable_writes: false
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cequel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mat Brown
|
@@ -23,161 +23,164 @@ authors:
|
|
23
23
|
- Masaki Takahashi
|
24
24
|
- G Gordon Worley III
|
25
25
|
- Clark Bremer
|
26
|
+
- Tamara Temple
|
27
|
+
- Long On
|
28
|
+
- Lucas Mundim
|
26
29
|
autorequire:
|
27
30
|
bindir: bin
|
28
31
|
cert_chain: []
|
29
|
-
date: 2014-
|
32
|
+
date: 2014-11-09 00:00:00.000000000 Z
|
30
33
|
dependencies:
|
31
34
|
- !ruby/object:Gem::Dependency
|
32
35
|
name: activemodel
|
33
36
|
requirement: !ruby/object:Gem::Requirement
|
34
37
|
requirements:
|
35
|
-
- -
|
38
|
+
- - '>='
|
36
39
|
- !ruby/object:Gem::Version
|
37
40
|
version: '3.1'
|
38
|
-
- -
|
41
|
+
- - <
|
39
42
|
- !ruby/object:Gem::Version
|
40
43
|
version: '5.0'
|
41
44
|
type: :runtime
|
42
45
|
prerelease: false
|
43
46
|
version_requirements: !ruby/object:Gem::Requirement
|
44
47
|
requirements:
|
45
|
-
- -
|
48
|
+
- - '>='
|
46
49
|
- !ruby/object:Gem::Version
|
47
50
|
version: '3.1'
|
48
|
-
- -
|
51
|
+
- - <
|
49
52
|
- !ruby/object:Gem::Version
|
50
53
|
version: '5.0'
|
51
54
|
- !ruby/object:Gem::Dependency
|
52
55
|
name: cql-rb
|
53
56
|
requirement: !ruby/object:Gem::Requirement
|
54
57
|
requirements:
|
55
|
-
- -
|
58
|
+
- - '>='
|
56
59
|
- !ruby/object:Gem::Version
|
57
60
|
version: '1.2'
|
58
|
-
- -
|
61
|
+
- - <
|
59
62
|
- !ruby/object:Gem::Version
|
60
63
|
version: '3.0'
|
61
64
|
type: :runtime
|
62
65
|
prerelease: false
|
63
66
|
version_requirements: !ruby/object:Gem::Requirement
|
64
67
|
requirements:
|
65
|
-
- -
|
68
|
+
- - '>='
|
66
69
|
- !ruby/object:Gem::Version
|
67
70
|
version: '1.2'
|
68
|
-
- -
|
71
|
+
- - <
|
69
72
|
- !ruby/object:Gem::Version
|
70
73
|
version: '3.0'
|
71
74
|
- !ruby/object:Gem::Dependency
|
72
75
|
name: appraisal
|
73
76
|
requirement: !ruby/object:Gem::Requirement
|
74
77
|
requirements:
|
75
|
-
- -
|
78
|
+
- - ~>
|
76
79
|
- !ruby/object:Gem::Version
|
77
80
|
version: '1.0'
|
78
81
|
type: :development
|
79
82
|
prerelease: false
|
80
83
|
version_requirements: !ruby/object:Gem::Requirement
|
81
84
|
requirements:
|
82
|
-
- -
|
85
|
+
- - ~>
|
83
86
|
- !ruby/object:Gem::Version
|
84
87
|
version: '1.0'
|
85
88
|
- !ruby/object:Gem::Dependency
|
86
89
|
name: wwtd
|
87
90
|
requirement: !ruby/object:Gem::Requirement
|
88
91
|
requirements:
|
89
|
-
- -
|
92
|
+
- - ~>
|
90
93
|
- !ruby/object:Gem::Version
|
91
94
|
version: '0.5'
|
92
95
|
type: :development
|
93
96
|
prerelease: false
|
94
97
|
version_requirements: !ruby/object:Gem::Requirement
|
95
98
|
requirements:
|
96
|
-
- -
|
99
|
+
- - ~>
|
97
100
|
- !ruby/object:Gem::Version
|
98
101
|
version: '0.5'
|
99
102
|
- !ruby/object:Gem::Dependency
|
100
103
|
name: rake
|
101
104
|
requirement: !ruby/object:Gem::Requirement
|
102
105
|
requirements:
|
103
|
-
- -
|
106
|
+
- - ~>
|
104
107
|
- !ruby/object:Gem::Version
|
105
108
|
version: '10.1'
|
106
109
|
type: :development
|
107
110
|
prerelease: false
|
108
111
|
version_requirements: !ruby/object:Gem::Requirement
|
109
112
|
requirements:
|
110
|
-
- -
|
113
|
+
- - ~>
|
111
114
|
- !ruby/object:Gem::Version
|
112
115
|
version: '10.1'
|
113
116
|
- !ruby/object:Gem::Dependency
|
114
117
|
name: rspec
|
115
118
|
requirement: !ruby/object:Gem::Requirement
|
116
119
|
requirements:
|
117
|
-
- -
|
120
|
+
- - ~>
|
118
121
|
- !ruby/object:Gem::Version
|
119
122
|
version: '3.1'
|
120
123
|
type: :development
|
121
124
|
prerelease: false
|
122
125
|
version_requirements: !ruby/object:Gem::Requirement
|
123
126
|
requirements:
|
124
|
-
- -
|
127
|
+
- - ~>
|
125
128
|
- !ruby/object:Gem::Version
|
126
129
|
version: '3.1'
|
127
130
|
- !ruby/object:Gem::Dependency
|
128
131
|
name: rspec-its
|
129
132
|
requirement: !ruby/object:Gem::Requirement
|
130
133
|
requirements:
|
131
|
-
- -
|
134
|
+
- - ~>
|
132
135
|
- !ruby/object:Gem::Version
|
133
136
|
version: '1.0'
|
134
137
|
type: :development
|
135
138
|
prerelease: false
|
136
139
|
version_requirements: !ruby/object:Gem::Requirement
|
137
140
|
requirements:
|
138
|
-
- -
|
141
|
+
- - ~>
|
139
142
|
- !ruby/object:Gem::Version
|
140
143
|
version: '1.0'
|
141
144
|
- !ruby/object:Gem::Dependency
|
142
145
|
name: rubocop
|
143
146
|
requirement: !ruby/object:Gem::Requirement
|
144
147
|
requirements:
|
145
|
-
- -
|
148
|
+
- - ~>
|
146
149
|
- !ruby/object:Gem::Version
|
147
150
|
version: 0.19.0
|
148
151
|
type: :development
|
149
152
|
prerelease: false
|
150
153
|
version_requirements: !ruby/object:Gem::Requirement
|
151
154
|
requirements:
|
152
|
-
- -
|
155
|
+
- - ~>
|
153
156
|
- !ruby/object:Gem::Version
|
154
157
|
version: 0.19.0
|
155
158
|
- !ruby/object:Gem::Dependency
|
156
159
|
name: timecop
|
157
160
|
requirement: !ruby/object:Gem::Requirement
|
158
161
|
requirements:
|
159
|
-
- -
|
162
|
+
- - ~>
|
160
163
|
- !ruby/object:Gem::Version
|
161
164
|
version: '0.7'
|
162
165
|
type: :development
|
163
166
|
prerelease: false
|
164
167
|
version_requirements: !ruby/object:Gem::Requirement
|
165
168
|
requirements:
|
166
|
-
- -
|
169
|
+
- - ~>
|
167
170
|
- !ruby/object:Gem::Version
|
168
171
|
version: '0.7'
|
169
172
|
- !ruby/object:Gem::Dependency
|
170
173
|
name: yard
|
171
174
|
requirement: !ruby/object:Gem::Requirement
|
172
175
|
requirements:
|
173
|
-
- -
|
176
|
+
- - ~>
|
174
177
|
- !ruby/object:Gem::Version
|
175
178
|
version: '0.6'
|
176
179
|
type: :development
|
177
180
|
prerelease: false
|
178
181
|
version_requirements: !ruby/object:Gem::Requirement
|
179
182
|
requirements:
|
180
|
-
- -
|
183
|
+
- - ~>
|
181
184
|
- !ruby/object:Gem::Version
|
182
185
|
version: '0.6'
|
183
186
|
description: |
|
@@ -202,6 +205,7 @@ files:
|
|
202
205
|
- Vagrantfile
|
203
206
|
- lib/cequel.rb
|
204
207
|
- lib/cequel/errors.rb
|
208
|
+
- lib/cequel/instrumentation.rb
|
205
209
|
- lib/cequel/metal.rb
|
206
210
|
- lib/cequel/metal/batch.rb
|
207
211
|
- lib/cequel/metal/batch_manager.rb
|
@@ -285,6 +289,7 @@ files:
|
|
285
289
|
- spec/examples/record/spec_helper.rb
|
286
290
|
- spec/examples/record/timestamps_spec.rb
|
287
291
|
- spec/examples/record/validations_spec.rb
|
292
|
+
- spec/examples/schema/keyspace_spec.rb
|
288
293
|
- spec/examples/schema/table_reader_spec.rb
|
289
294
|
- spec/examples/schema/table_synchronizer_spec.rb
|
290
295
|
- spec/examples/schema/table_updater_spec.rb
|
@@ -307,18 +312,18 @@ require_paths:
|
|
307
312
|
- lib
|
308
313
|
required_ruby_version: !ruby/object:Gem::Requirement
|
309
314
|
requirements:
|
310
|
-
- -
|
315
|
+
- - '>='
|
311
316
|
- !ruby/object:Gem::Version
|
312
317
|
version: '1.9'
|
313
318
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
314
319
|
requirements:
|
315
|
-
- -
|
320
|
+
- - '>='
|
316
321
|
- !ruby/object:Gem::Version
|
317
322
|
version: '0'
|
318
323
|
requirements:
|
319
324
|
- Cassandra >= 1.2.0
|
320
325
|
rubyforge_project:
|
321
|
-
rubygems_version: 2.
|
326
|
+
rubygems_version: 2.4.2
|
322
327
|
signing_key:
|
323
328
|
specification_version: 4
|
324
329
|
summary: Full-featured, ActiveModel-compliant ORM for Cassandra using CQL3
|
@@ -343,6 +348,7 @@ test_files:
|
|
343
348
|
- spec/examples/record/spec_helper.rb
|
344
349
|
- spec/examples/record/timestamps_spec.rb
|
345
350
|
- spec/examples/record/validations_spec.rb
|
351
|
+
- spec/examples/schema/keyspace_spec.rb
|
346
352
|
- spec/examples/schema/table_reader_spec.rb
|
347
353
|
- spec/examples/schema/table_synchronizer_spec.rb
|
348
354
|
- spec/examples/schema/table_updater_spec.rb
|