quandl_cassandra 1.0.2 → 1.0.3
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/UPGRADE.md +7 -1
- data/lib/quandl/cassandra/base/connection.rb +1 -1
- data/lib/quandl/cassandra/base/persistence.rb +13 -1
- data/lib/quandl/cassandra/base/sanitization.rb +0 -4
- data/lib/quandl/cassandra/base/schema.rb +2 -0
- data/lib/quandl/cassandra/version.rb +1 -1
- data/spec/config/cassandra.rb +25 -0
- data/spec/config/logger.rb +6 -0
- data/spec/lib/quandl/cassandra/base/connection_spec.rb +8 -9
- data/spec/lib/quandl/cassandra/base/persistence_spec.rb +48 -0
- data/spec/lib/quandl/cassandra/base/sanitization_spec.rb +0 -2
- data/spec/lib/quandl/cassandra/base/scoping_spec.rb +20 -20
- data/spec/lib/quandl/cassandra_spec.rb +1 -1
- data/spec/spec_helper.rb +4 -14
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f83fe0075114dcd993b31f6b0a0f56799d66bb90
|
4
|
+
data.tar.gz: daad90584e0adbf6edd4190ca50fb5f97b8d9eef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5140c4b99eec70768e703a1f1f44305462e518c0e3af9712c17448c11dbf69c4b4736a19f30eb28914136e3d4c021edc69ab5afb56328d430a554274e6542195
|
7
|
+
data.tar.gz: ad3c0b11d1657d9f78480dc2fcfd35af61080a4b2bf0e7721ae266dd5de0ae5a7c7f543ba2c2d71d06e52025385088cdef368d87ce997bf729546af06001e7ca
|
data/UPGRADE.md
CHANGED
@@ -1,6 +1,12 @@
|
|
1
|
+
## 1.0.3
|
2
|
+
|
3
|
+
* add Base#delete and Base#destroy
|
4
|
+
* add persistence specs and creation of test keyspace
|
5
|
+
|
6
|
+
|
1
7
|
## 1.0.2
|
2
8
|
|
3
|
-
*
|
9
|
+
* Post .connection, .find should raise Cql::QueryError given missing keyspace
|
4
10
|
|
5
11
|
|
6
12
|
## 1.0.0
|
@@ -67,7 +67,7 @@ module Quandl::Cassandra::Base::Connection
|
|
67
67
|
hosts: Quandl::Cassandra.configuration.hosts,
|
68
68
|
consistency: Quandl::Cassandra.configuration.consistency )
|
69
69
|
# switch keyspace
|
70
|
-
c.use( Quandl::Cassandra.configuration.keyspace )
|
70
|
+
c.use( Quandl::Cassandra.configuration.keyspace ) if Quandl::Cassandra.configuration.keyspace.present?
|
71
71
|
@@connection = c
|
72
72
|
c
|
73
73
|
end
|
@@ -42,7 +42,7 @@ module Quandl::Cassandra::Base::Persistence
|
|
42
42
|
touch
|
43
43
|
save_changes! if self.class.autosave_changes == true
|
44
44
|
cycle_changes!
|
45
|
-
new_record = false
|
45
|
+
self.new_record = false
|
46
46
|
true
|
47
47
|
end
|
48
48
|
end
|
@@ -52,6 +52,18 @@ module Quandl::Cassandra::Base::Persistence
|
|
52
52
|
self.updated_at = Time.now if respond_to?(:updated_at=)
|
53
53
|
end
|
54
54
|
|
55
|
+
def destroy
|
56
|
+
return false if new_record?
|
57
|
+
run_callbacks :destroy do
|
58
|
+
self.class.delete(id)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def delete
|
63
|
+
return false if new_record?
|
64
|
+
self.class.delete(id)
|
65
|
+
end
|
66
|
+
|
55
67
|
def update_attributes(values)
|
56
68
|
values = self.class.sanitize_attributes(values)
|
57
69
|
# add primary key parts to values
|
@@ -5,10 +5,6 @@ module Quandl::Cassandra::Base::Sanitization
|
|
5
5
|
module ClassMethods
|
6
6
|
|
7
7
|
def bind_primary_key(*args)
|
8
|
-
if args.count > primary_key.count
|
9
|
-
message = "wrong number of arguments (#{args.count} for 1..#{primary_key.count}) expected: #{primary_key.join(', ')}"
|
10
|
-
raise(ArgumentError, message)
|
11
|
-
end
|
12
8
|
attrs = {}
|
13
9
|
primary_key.each_with_index { |k, i| attrs[k] = args[i] if args[i].present? }
|
14
10
|
attrs
|
@@ -44,12 +44,14 @@ module Quandl::Cassandra::Base::Schema
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def column_aliases
|
47
|
+
return [] if system_schema.blank?
|
47
48
|
@column_aliases ||= JSON.parse(system_schema['column_aliases']).collect(&:to_sym)
|
48
49
|
rescue JSON::ParserError
|
49
50
|
[]
|
50
51
|
end
|
51
52
|
|
52
53
|
def key_aliases
|
54
|
+
return [] if system_schema.blank?
|
53
55
|
@key_aliases ||= JSON.parse(system_schema['key_aliases']).collect(&:to_sym)
|
54
56
|
rescue JSON::ParserError
|
55
57
|
[]
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# set host
|
2
|
+
Quandl::Cassandra.configure do |c|
|
3
|
+
c.hosts = ['localhost','192.168.33.10']
|
4
|
+
c.consistency = :one
|
5
|
+
end
|
6
|
+
|
7
|
+
# reset keyspace
|
8
|
+
keyspace_exists = Quandl::Cassandra::Base.execute("SELECT * FROM system.schema_keyspaces WHERE keyspace_name = 'quandl_cassandra_test';")
|
9
|
+
Quandl::Cassandra::Base.execute("DROP KEYSPACE quandl_cassandra_test;") if keyspace_exists.present?
|
10
|
+
|
11
|
+
# create keyspace
|
12
|
+
Quandl::Cassandra::Base.execute("CREATE KEYSPACE quandl_cassandra_test WITH REPLICATION = {'class' : 'SimpleStrategy', 'replication_factor': 3};")
|
13
|
+
|
14
|
+
# reconnect to keyspace
|
15
|
+
Quandl::Cassandra.configuration.keyspace = 'quandl_cassandra_test'
|
16
|
+
Quandl::Cassandra::Base.reset_connection
|
17
|
+
|
18
|
+
# create posts table
|
19
|
+
Quandl::Cassandra::Base.execute("CREATE TABLE posts (
|
20
|
+
id uuid PRIMARY KEY,
|
21
|
+
content text,
|
22
|
+
author varchar,
|
23
|
+
updated_at timestamp );")
|
24
|
+
|
25
|
+
class Post < Quandl::Cassandra::Base; end
|
@@ -1,23 +1,22 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
class TestModel < Quandl::Cassandra::Base; end
|
4
|
-
|
5
3
|
describe Quandl::Cassandra::Base::Connection do
|
6
|
-
before(:all){ Quandl::Cassandra.configuration.keyspace = 'missing_keyspace' }
|
7
|
-
|
8
|
-
subject{ TestModel }
|
9
4
|
|
10
|
-
describe ".
|
5
|
+
describe ".reset_connection" do
|
11
6
|
it "should raise Cql::QueryError" do
|
12
|
-
|
7
|
+
Quandl::Cassandra.configuration.keyspace = 'missing_keyspace'
|
8
|
+
expect{ Post.reset_connection }.to raise_error(Cql::QueryError)
|
13
9
|
end
|
14
10
|
end
|
15
11
|
|
16
12
|
describe ".find" do
|
17
13
|
it "should raise Cql::QueryError" do
|
18
|
-
expect{
|
14
|
+
expect{ Post.find(1) }.to raise_error(Cql::QueryError)
|
19
15
|
end
|
20
16
|
end
|
21
17
|
|
22
|
-
after(:all)
|
18
|
+
after(:all) do
|
19
|
+
Quandl::Cassandra.configuration.keyspace = 'quandl_cassandra_test'
|
20
|
+
Quandl::Cassandra::Base.reset_connection
|
21
|
+
end
|
23
22
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Quandl::Cassandra::Base::Persistence do
|
4
|
+
|
5
|
+
let(:id){ Cql::Uuid.new(SecureRandom.uuid) }
|
6
|
+
|
7
|
+
subject{ Post.new }
|
8
|
+
|
9
|
+
it{ should respond_to :id }
|
10
|
+
it{ should respond_to :content }
|
11
|
+
it{ should respond_to :author }
|
12
|
+
it{ should respond_to :updated_at }
|
13
|
+
|
14
|
+
its(:new_record?){ should be_true }
|
15
|
+
|
16
|
+
describe ".create" do
|
17
|
+
|
18
|
+
let(:post){ Post.create( id: id, content: 'test content', author: "quandl" ) }
|
19
|
+
subject{ post }
|
20
|
+
|
21
|
+
its(:new_record?){ should be_false }
|
22
|
+
|
23
|
+
describe ".find" do
|
24
|
+
subject{ Post.find(post.id) }
|
25
|
+
|
26
|
+
its(:id){ should eq id }
|
27
|
+
its(:content){ should eq 'test content' }
|
28
|
+
its(:author){ should eq 'quandl' }
|
29
|
+
its(:new_record?){ should be_false }
|
30
|
+
end
|
31
|
+
|
32
|
+
describe ".destroy" do
|
33
|
+
before(:each){ post.destroy }
|
34
|
+
it "should not find the post" do
|
35
|
+
Post.find(post.id).should be_nil
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe ".delete" do
|
40
|
+
before(:each){ post.delete }
|
41
|
+
it "should not find the post" do
|
42
|
+
Post.find(post.id).should be_nil
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -1,46 +1,46 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
class TestModel < Quandl::Cassandra::Base; end
|
4
|
-
|
5
3
|
describe Quandl::Cassandra::Base::Scoping do
|
6
4
|
|
7
|
-
subject{
|
5
|
+
subject{ Post }
|
8
6
|
|
9
7
|
[:where, :select, :limit, :order].each do |name|
|
10
8
|
it{ should respond_to name }
|
11
9
|
end
|
12
10
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
11
|
+
let(:id){ SecureRandom.uuid }
|
12
|
+
|
13
|
+
its(:scope_names){ should eq Post.scope.scope_names }
|
14
|
+
|
15
|
+
describe ".find_or_build" do
|
16
|
+
it "given nil should be a new record" do
|
17
|
+
Post.find_or_build(nil).new_record?.should be_true
|
18
|
+
end
|
19
|
+
it "given empty sting should be a new record" do
|
20
|
+
Post.find_or_build('').new_record?.should be_true
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
24
|
describe ".to_cql" do
|
25
25
|
|
26
|
-
let(:scope) {
|
26
|
+
let(:scope) { Post.scope.new }
|
27
27
|
subject{ scope.to_cql }
|
28
28
|
|
29
29
|
describe "#where" do
|
30
|
-
before(:each){ scope.where( id:
|
31
|
-
it{ should eq "SELECT * FROM
|
30
|
+
before(:each){ scope.where( id: id ) }
|
31
|
+
it{ should eq "SELECT * FROM posts WHERE id = #{id}" }
|
32
32
|
|
33
33
|
describe "#limit" do
|
34
34
|
before(:each){ scope.limit( 10 ) }
|
35
|
-
it{ should eq "SELECT * FROM
|
35
|
+
it{ should eq "SELECT * FROM posts WHERE id = #{id} LIMIT 10" }
|
36
36
|
|
37
37
|
describe "#select" do
|
38
38
|
before(:each){ scope.select( :name, :value ) }
|
39
|
-
it{ should eq "SELECT name,value FROM
|
39
|
+
it{ should eq "SELECT name,value FROM posts WHERE id = #{id} LIMIT 10" }
|
40
40
|
|
41
41
|
describe "#order" do
|
42
42
|
before(:each){ scope.order("name DESC") }
|
43
|
-
it{ should eq "SELECT name,value FROM
|
43
|
+
it{ should eq "SELECT name,value FROM posts WHERE id = #{id} ORDER BY name DESC LIMIT 10" }
|
44
44
|
end
|
45
45
|
|
46
46
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -5,10 +5,14 @@ QUANDL_LOGGER = true
|
|
5
5
|
require "rspec"
|
6
6
|
require 'factory_girl'
|
7
7
|
require 'pry'
|
8
|
+
require 'securerandom'
|
8
9
|
|
9
10
|
require "quandl/cassandra"
|
10
11
|
require "quandl/fabricate"
|
11
12
|
|
13
|
+
# require config
|
14
|
+
Dir.glob( File.join( File.dirname(__FILE__), 'config/**/*.rb' ) ).each{|f| require(f) }
|
15
|
+
|
12
16
|
# require expectations
|
13
17
|
require 'rspec/expectations'
|
14
18
|
Dir.glob( File.join( File.dirname(__FILE__), 'expectations/**/*.rb' ) ).each{|f| require(f) }
|
@@ -16,20 +20,6 @@ Dir.glob( File.join( File.dirname(__FILE__), 'expectations/**/*.rb' ) ).each{|f|
|
|
16
20
|
# require factories
|
17
21
|
Dir.glob( File.join( File.dirname(__FILE__), 'factories/**/*.rb' ) ).each{|f| require(f) }
|
18
22
|
|
19
|
-
include Quandl::Cassandra
|
20
|
-
|
21
|
-
logger = Logger.new( 'log/test.log', 2, 52428800 )
|
22
|
-
logger.formatter = proc do |severity, datetime, progname, msg|
|
23
|
-
"[#{datetime.strftime("%Y-%m-%d %H:%M:%S")}]: #{msg}\n"
|
24
|
-
end
|
25
|
-
Quandl::Logger.use(logger)
|
26
|
-
|
27
|
-
Quandl::Cassandra.configure do |c|
|
28
|
-
c.hosts = ['192.168.33.10']
|
29
|
-
c.keyspace = 'wikiposit'
|
30
|
-
c.consistency = :one
|
31
|
-
end
|
32
|
-
|
33
23
|
RSpec.configure do |config|
|
34
24
|
config.include FactoryGirl::Syntax::Methods
|
35
25
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quandl_cassandra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Blake Hilscher
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -235,9 +235,12 @@ files:
|
|
235
235
|
- lib/quandl/cassandra/version.rb
|
236
236
|
- lib/quandl/strategy.rb
|
237
237
|
- quandl_cassandra.gemspec
|
238
|
+
- spec/config/cassandra.rb
|
239
|
+
- spec/config/logger.rb
|
238
240
|
- spec/expectations/string.rb
|
239
241
|
- spec/expectations/time.rb
|
240
242
|
- spec/lib/quandl/cassandra/base/connection_spec.rb
|
243
|
+
- spec/lib/quandl/cassandra/base/persistence_spec.rb
|
241
244
|
- spec/lib/quandl/cassandra/base/sanitization_spec.rb
|
242
245
|
- spec/lib/quandl/cassandra/base/scoping_spec.rb
|
243
246
|
- spec/lib/quandl/cassandra_spec.rb
|
@@ -267,9 +270,12 @@ signing_key:
|
|
267
270
|
specification_version: 4
|
268
271
|
summary: Quandl cassandra interface.
|
269
272
|
test_files:
|
273
|
+
- spec/config/cassandra.rb
|
274
|
+
- spec/config/logger.rb
|
270
275
|
- spec/expectations/string.rb
|
271
276
|
- spec/expectations/time.rb
|
272
277
|
- spec/lib/quandl/cassandra/base/connection_spec.rb
|
278
|
+
- spec/lib/quandl/cassandra/base/persistence_spec.rb
|
273
279
|
- spec/lib/quandl/cassandra/base/sanitization_spec.rb
|
274
280
|
- spec/lib/quandl/cassandra/base/scoping_spec.rb
|
275
281
|
- spec/lib/quandl/cassandra_spec.rb
|