cassie-queries 0.0.1.a1

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 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: []