cassie-queries 0.0.1.a1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 616d830ce0e5af7de3bae56c7d8b0375e628bfbb
4
+ data.tar.gz: 0a2971a05512cc8038dff5a4ae2aad8c0ffdb7d6
5
+ SHA512:
6
+ metadata.gz: 605d2082d4d825745d1f565fd1e4d5f8ac58798d688506ceaa8f184861eb52b33c5a55fe075ddfbf307da7f63b7f3edadd41a91f6a9e3d7478a6d78e7de17cdf
7
+ data.tar.gz: 0af76ba1a61bb514cce49bdc7b6968939f4f20ff939276549c8e6ef9db895de822a6e1581b39f52d08af63c8ad465e587f57163558d15f9c9ea4b816d42bf239
@@ -0,0 +1,73 @@
1
+ require 'active_support/core_ext/string/filters'
2
+
3
+ module Cassie::Queries
4
+ module Statement
5
+ extend ::ActiveSupport::Concern
6
+
7
+ included do
8
+ attr_reader :result
9
+ end
10
+
11
+ module ClassMethods
12
+ def cql(statement)
13
+ if self.const_defined?(:STATEMENT)
14
+ raise "a cql statement has already been defined and cannot be changed"
15
+ else
16
+ self.const_set(:STATEMENT, statement.squish)
17
+ end
18
+ end
19
+
20
+ def statement
21
+ self.const_get(:STATEMENT)
22
+ end
23
+
24
+ def prepared_statement
25
+ # use class instance variable to esnure only 1
26
+ # statement is prepared per process
27
+ # no mutex required in MRI because of GIL
28
+ #
29
+ # note: cassandra-driver handles the case
30
+ # of executing a prepared statement
31
+ # on a host where it has not been prepared
32
+ # yet, by re-preparing.
33
+ @prepared_statement ||= begin
34
+ session.prepare(statement)
35
+ end
36
+ end
37
+ end
38
+
39
+ def execute
40
+ @result = session.execute(prepared_statement, arguments: bindings)
41
+
42
+ execution_successful?
43
+ end
44
+
45
+ def statement
46
+ self.class.statement
47
+ end
48
+
49
+ def prepared_statement
50
+ self.class.prepared_statement
51
+ end
52
+
53
+ protected
54
+
55
+ def bindings
56
+ []
57
+ end
58
+
59
+ private
60
+
61
+ def execution_successful?
62
+ raise "execution not complete, no results to parse" unless result
63
+
64
+ # empty select
65
+ return true if result.empty?
66
+
67
+ # failed upsert
68
+ return false if (!result.rows.first["[applied]"].nil?) && (result.rows.first["[applied]"] == false)
69
+
70
+ true
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,8 @@
1
+ module Cassie
2
+ # think about ActiveSupport autoloading
3
+ require_relative 'queries/statement'
4
+
5
+ class Query
6
+ include Cassie::Queries::Statement
7
+ end
8
+ end
@@ -0,0 +1,6 @@
1
+ require 'active_support'
2
+
3
+ # cassie directory instead of cassie_queries
4
+ # to allow sharing of cassie module with other libraries
5
+ # but maintain folder/file/module/class naming conventions
6
+ require 'cassie/query'
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cassie-queries
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1.a1
5
+ platform: ruby
6
+ authors:
7
+ - Evan Prothro
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-12-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: cassandra-driver
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '4.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '4.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '3.4'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '3.4'
55
+ description: '`cassie-queries` is a lightweight interface adapter allowing easy use
56
+ of the functionality provided by the `cassandra-driver`.'
57
+ email: evan.prothro@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - lib/cassie/queries/statement.rb
63
+ - lib/cassie/query.rb
64
+ - lib/cassie-queries.rb
65
+ homepage: https://github.com/eprothro/cassie-queries
66
+ licenses:
67
+ - MIT
68
+ metadata: {}
69
+ post_install_message:
70
+ rdoc_options: []
71
+ require_paths:
72
+ - lib
73
+ required_ruby_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>'
81
+ - !ruby/object:Gem::Version
82
+ version: 1.3.1
83
+ requirements: []
84
+ rubyforge_project:
85
+ rubygems_version: 2.0.14
86
+ signing_key:
87
+ specification_version: 4
88
+ summary: Apache Cassandra query management
89
+ test_files: []