carl 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,22 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+
9
+ gem 'cassandra-cql', '~> 1.0.2'
10
+
11
+ group :development do
12
+ gem "rspec", "~> 2.5.0"
13
+ gem "guard-rspec", "~> 0.5.9"
14
+ gem "bundler", "~> 1.0.0"
15
+ gem "jeweler", "~> 1.6.4"
16
+ gem "rcov", ">= 0"
17
+ end
18
+
19
+ group :development, :linux do
20
+ gem 'rb-inotify'
21
+ gem 'libnotify'
22
+ end
@@ -0,0 +1,13 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'rspec', :version => 2 do
5
+ watch(%r{^spec/.+_spec\.rb$})
6
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
7
+ watch('spec/spec_helper.rb') { "spec" }
8
+
9
+ # Rails example
10
+ watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
11
+ watch('spec/spec_helper.rb') { "spec" }
12
+ end
13
+
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Thomas Hollstegge
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,48 @@
1
+ # Carl
2
+
3
+ Carl constructs CQL statements for Cassandra.
4
+
5
+ Quick Start
6
+ -----------
7
+
8
+ Establish a connection:
9
+
10
+ require 'carl'
11
+ Carl::Base.establish_connection :keyspace => 'carl', :hosts => ['localhost:9160']
12
+
13
+ Build a query
14
+
15
+ carl = Carl::Base.new
16
+ carl.select('rowname').from('columnfamily').where(:key => 42).query
17
+ # => ["SELECT ? FROM ? WHERE key = ?", "rowname", "columnfamily", 42]
18
+
19
+ Execute a query
20
+
21
+ carl.select('rowname').from('columnfamily').where(:key => 42).execute
22
+ # => #<CassandraCQL::Result:...
23
+
24
+ carl.select('rowname').from('columnfamily').where(:key => 42).to_hash
25
+ # => {...}
26
+
27
+ Supported statements
28
+ --------------------
29
+
30
+ * *INSERT*: ~90% complete
31
+ * *other*: ~0% complete
32
+
33
+ Contributing to Carl
34
+ --------------------
35
+
36
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
37
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
38
+ * Fork the project
39
+ * Start a feature/bugfix branch
40
+ * Commit and push until you are happy with your contribution
41
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
42
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
43
+
44
+ Copyright
45
+ ---------
46
+
47
+ Copyright (c) 2011 Thomas Hollstegge. See LICENSE.txt for
48
+ further details.
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "carl"
18
+ gem.homepage = "http://github.com/Tho85/carl"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{A CQL statement generator for Cassandra}
21
+ gem.description = %Q{Cassandra CQL queries - gone awesome!}
22
+ gem.email = "thomas.hollstegge@zweitag.de"
23
+ gem.authors = ["Thomas Hollstegge"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rspec/core'
29
+ require 'rspec/core/rake_task'
30
+ RSpec::Core::RakeTask.new(:spec) do |spec|
31
+ spec.pattern = FileList['spec/**/*_spec.rb']
32
+ end
33
+
34
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
35
+ spec.pattern = 'spec/**/*_spec.rb'
36
+ spec.rcov = true
37
+ end
38
+
39
+ task :default => :spec
40
+
41
+ require 'rake/rdoctask'
42
+ Rake::RDocTask.new do |rdoc|
43
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
44
+
45
+ rdoc.rdoc_dir = 'rdoc'
46
+ rdoc.title = "carl #{version}"
47
+ rdoc.rdoc_files.include('README*')
48
+ rdoc.rdoc_files.include('lib/**/*.rb')
49
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.1
@@ -0,0 +1,73 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{carl}
8
+ s.version = "0.1.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = [%q{Thomas Hollstegge}]
12
+ s.date = %q{2011-12-11}
13
+ s.description = %q{Cassandra CQL queries - gone awesome!}
14
+ s.email = %q{thomas.hollstegge@zweitag.de}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.md"
18
+ ]
19
+ s.files = [
20
+ "Gemfile",
21
+ "Guardfile",
22
+ "LICENSE.txt",
23
+ "README.md",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "carl.gemspec",
27
+ "lib/carl.rb",
28
+ "lib/carl/base.rb",
29
+ "spec/carl/base_spec.rb",
30
+ "spec/carl_spec.rb",
31
+ "spec/spec_helper.rb",
32
+ "spec/support/generate_query_matcher.rb"
33
+ ]
34
+ s.homepage = %q{http://github.com/Tho85/carl}
35
+ s.licenses = [%q{MIT}]
36
+ s.require_paths = [%q{lib}]
37
+ s.rubygems_version = %q{1.8.7}
38
+ s.summary = %q{A CQL statement generator for Cassandra}
39
+
40
+ if s.respond_to? :specification_version then
41
+ s.specification_version = 3
42
+
43
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
44
+ s.add_runtime_dependency(%q<cassandra-cql>, ["~> 1.0.2"])
45
+ s.add_development_dependency(%q<rspec>, ["~> 2.5.0"])
46
+ s.add_development_dependency(%q<guard-rspec>, ["~> 0.5.9"])
47
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
48
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
49
+ s.add_development_dependency(%q<rcov>, [">= 0"])
50
+ s.add_development_dependency(%q<rb-inotify>, [">= 0"])
51
+ s.add_development_dependency(%q<libnotify>, [">= 0"])
52
+ else
53
+ s.add_dependency(%q<cassandra-cql>, ["~> 1.0.2"])
54
+ s.add_dependency(%q<rspec>, ["~> 2.5.0"])
55
+ s.add_dependency(%q<guard-rspec>, ["~> 0.5.9"])
56
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
57
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
58
+ s.add_dependency(%q<rcov>, [">= 0"])
59
+ s.add_dependency(%q<rb-inotify>, [">= 0"])
60
+ s.add_dependency(%q<libnotify>, [">= 0"])
61
+ end
62
+ else
63
+ s.add_dependency(%q<cassandra-cql>, ["~> 1.0.2"])
64
+ s.add_dependency(%q<rspec>, ["~> 2.5.0"])
65
+ s.add_dependency(%q<guard-rspec>, ["~> 0.5.9"])
66
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
67
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
68
+ s.add_dependency(%q<rcov>, [">= 0"])
69
+ s.add_dependency(%q<rb-inotify>, [">= 0"])
70
+ s.add_dependency(%q<libnotify>, [">= 0"])
71
+ end
72
+ end
73
+
@@ -0,0 +1,3 @@
1
+ require 'cassandra-cql'
2
+ require 'carl/base'
3
+
@@ -0,0 +1,123 @@
1
+ module Carl
2
+ class Base
3
+ include Enumerable
4
+
5
+ class << self
6
+ attr_accessor :config
7
+
8
+ def connection
9
+ @connection ||= establish_connection
10
+ end
11
+
12
+ def establish_connection(config={:keyspace => 'carl', :hosts => ['localhost:9160']})
13
+ @config = config
14
+ @connection = CassandraCQL::Database.new config[:hosts], :keyspace => config[:keyspace]
15
+ end
16
+ end
17
+
18
+ # Define single argument methods
19
+ [:from, :using_consistency, :limit, :count, :column_limit, :reversed].each do |meth|
20
+ class_eval %Q$
21
+ attr_accessor :#{meth}_value
22
+
23
+ def #{meth}(value=true)
24
+ clone.tap {|c| c.#{meth}_value = value }
25
+ end
26
+ $
27
+ end
28
+
29
+ # Define multiple argument methods
30
+ [:select, :range].each do |meth|
31
+ class_eval %Q$
32
+ attr_accessor :#{meth}_values
33
+
34
+ def #{meth}(*values)
35
+ clone.tap {|c| c.#{meth}_values = values }
36
+ end
37
+ $
38
+ end
39
+
40
+ # Define "additive" methods
41
+ attr_accessor :where_sql, :where_bindings
42
+ def where(*conditions)
43
+ clone.tap do |c|
44
+ c.where_sql ||= []
45
+ c.where_bindings ||= []
46
+ # Simple conditions: {:condition => 42}
47
+
48
+ if conditions.first.is_a?(Hash)
49
+ conditions.first.each do |k,v|
50
+ c.where_sql << "#{k} = ?"
51
+ c.where_bindings << v
52
+ end
53
+ elsif conditions.first.is_a?(String)
54
+ c.where_sql << conditions.shift
55
+ c.where_bindings += conditions
56
+ end
57
+ end
58
+ end
59
+
60
+ alias :and :where
61
+
62
+ # Build query
63
+ def query
64
+ @sql = []
65
+ @bindings = []
66
+
67
+ # SELECT
68
+ add_to_sql "SELECT"
69
+ if select_values
70
+ add_to_sql (["?"] * select_values.count).join(", "), *select_values.map(&:to_s)
71
+ elsif count_value
72
+ add_to_sql "COUNT(*)"
73
+ else
74
+ add_to_sql "FIRST ?", column_limit_value if column_limit_value
75
+ add_to_sql "REVERSED" if reversed_value
76
+ if range_values
77
+ add_to_sql (["?"] * range_values.count).join(" .. "), *range_values
78
+ else
79
+ add_to_sql "*"
80
+ end
81
+ end
82
+
83
+ # FROM
84
+ add_to_sql "FROM ?", from_value if from_value
85
+
86
+ # USING CONSISTENCY
87
+ add_to_sql "USING CONSISTENCY ?", using_consistency_value.to_s if using_consistency_value
88
+
89
+ # WHERE
90
+ if where_sql && !where_sql.empty?
91
+ add_to_sql "WHERE"
92
+ add_to_sql where_sql.join(" AND "), *where_bindings
93
+ end
94
+
95
+ # LIMIT
96
+ add_to_sql "LIMIT ?", limit_value if limit_value
97
+
98
+ [@sql.join(" ")] + @bindings
99
+ end
100
+
101
+ def execute
102
+ self.class.connection.execute(*query)
103
+ end
104
+
105
+ def to_hash
106
+ execute.result.fetch_hash
107
+ end
108
+
109
+ def each
110
+ to_hash.each do |_,v|
111
+ yield v
112
+ end
113
+ end
114
+
115
+ private
116
+
117
+ def add_to_sql(*args)
118
+ @sql << args.shift
119
+ @bindings += args
120
+ end
121
+
122
+ end
123
+ end
@@ -0,0 +1,86 @@
1
+ require 'spec_helper'
2
+
3
+ describe Carl::Base do
4
+ it "should have a Cassandra connection" do
5
+ Carl::Base.connection.should be_kind_of CassandraCQL::Database
6
+ end
7
+
8
+ it "should establish a connection with given parameters" do
9
+ CassandraCQL::Database.should_receive(:new).with(['localhost:9160'], :keyspace => 'carl')
10
+ Carl::Base.establish_connection :keyspace => 'carl', :hosts => ['localhost:9160']
11
+ end
12
+
13
+ subject { Carl::Base.new.select('row-name').from('my_cf') }
14
+
15
+ context "simple queries" do
16
+
17
+ it "should generate a simple query" do
18
+ expect { subject }.to generate_query 'SELECT ? FROM ?', 'row-name', 'my_cf'
19
+ end
20
+
21
+ it "should fallback to SELECT *" do
22
+ expect { Carl::Base.new.from('my_cf') }.to generate_query 'SELECT * FROM ?', 'my_cf'
23
+ end
24
+
25
+ it "should allow to specify a consistency level" do
26
+ expect { subject.using_consistency(:quorum) }.to generate_query 'SELECT ? FROM ? USING CONSISTENCY ?', 'row-name', 'my_cf', 'quorum'
27
+ end
28
+
29
+ it "should allow to specify a limit" do
30
+ expect { subject.limit(10) }.to generate_query 'SELECT ? FROM ? LIMIT ?', 'row-name', 'my_cf', 10
31
+ end
32
+ end
33
+
34
+ context "conditions" do
35
+ it "should allow to specify simple conditions" do
36
+ expect { subject.where(:condition => 42) }.to generate_query 'SELECT ? FROM ? WHERE condition = ?', 'row-name', 'my_cf', 42
37
+ end
38
+
39
+ it "should allow to specify multiple conditions chained by AND" do
40
+ expect { subject.where(:condition1 => 42).and(:condition2 => 24) }.to generate_query 'SELECT ? FROM ? WHERE condition1 = ? AND condition2 = ?', 'row-name', 'my_cf', 42, 24
41
+ end
42
+
43
+ it "should allow to specify CQL in conditions" do
44
+ expect { subject.where("condition => 42") }.to generate_query 'SELECT ? FROM ? WHERE condition => 42', 'row-name', 'my_cf'
45
+ end
46
+
47
+ it "should allow to add bindings to string conditions" do
48
+ expect { subject.where("condition1 = ? and condition2 = ?", 24, 42) }.to generate_query 'SELECT ? FROM ? WHERE condition1 = ? and condition2 = ?', 'row-name', 'my_cf', 24, 42
49
+ end
50
+ end
51
+
52
+ context "projections" do
53
+
54
+ subject { Carl::Base.new.from('my_cf') }
55
+
56
+ it "should count rows" do
57
+ expect { subject.count }.to generate_query 'SELECT COUNT(*) FROM ?', 'my_cf'
58
+ end
59
+
60
+ it "should allow multiple columns" do
61
+ expect { subject.select(:column1, :column2) }.to generate_query 'SELECT ?, ? FROM ?', 'column1', 'column2', 'my_cf'
62
+ end
63
+
64
+ it "should accept ranges" do
65
+ expect { subject.range(24, 42) }.to generate_query 'SELECT ? .. ? FROM ?', 24, 42, 'my_cf'
66
+ end
67
+
68
+ it "should allow FIRST statements" do
69
+ # We don't use #first as it is already taken by Enumerable
70
+ expect { subject.column_limit(10) }.to generate_query 'SELECT FIRST ? * FROM ?', 10, 'my_cf'
71
+ end
72
+
73
+ it "should allow REVERSED keyword" do
74
+ expect { subject.reversed }.to generate_query 'SELECT REVERSED * FROM ?', 'my_cf'
75
+ end
76
+ end
77
+
78
+ context "execution" do
79
+ subject { Carl::Base.new.from('my_cf') }
80
+
81
+ it "should execute the query" do
82
+ Carl::Base.connection.should_receive(:execute).with(*subject.query)
83
+ subject.execute
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,4 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Carl" do
4
+ end
@@ -0,0 +1,13 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+ require 'cassandra-cql'
5
+ require 'carl'
6
+
7
+ # Requires supporting files with custom matchers and macros, etc,
8
+ # in ./support/ and its subdirectories.
9
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
10
+
11
+ RSpec.configure do |config|
12
+
13
+ end
@@ -0,0 +1,11 @@
1
+ require 'rspec/expectations'
2
+
3
+ RSpec::Matchers.define :generate_query do |*query|
4
+ match do |block|
5
+ block.call.query == query
6
+ end
7
+
8
+ failure_message_for_should do |block|
9
+ %Q(expected query "#{query}",\ngot query "#{block.call.query}")
10
+ end
11
+ end
metadata ADDED
@@ -0,0 +1,151 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: carl
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Thomas Hollstegge
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-12-11 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: cassandra-cql
16
+ requirement: &78270930 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.0.2
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *78270930
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &78270500 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 2.5.0
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *78270500
36
+ - !ruby/object:Gem::Dependency
37
+ name: guard-rspec
38
+ requirement: &78270140 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 0.5.9
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *78270140
47
+ - !ruby/object:Gem::Dependency
48
+ name: bundler
49
+ requirement: &78269790 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.0
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *78269790
58
+ - !ruby/object:Gem::Dependency
59
+ name: jeweler
60
+ requirement: &78269520 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: 1.6.4
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *78269520
69
+ - !ruby/object:Gem::Dependency
70
+ name: rcov
71
+ requirement: &78269230 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *78269230
80
+ - !ruby/object:Gem::Dependency
81
+ name: rb-inotify
82
+ requirement: &78268900 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *78268900
91
+ - !ruby/object:Gem::Dependency
92
+ name: libnotify
93
+ requirement: &78268600 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *78268600
102
+ description: Cassandra CQL queries - gone awesome!
103
+ email: thomas.hollstegge@zweitag.de
104
+ executables: []
105
+ extensions: []
106
+ extra_rdoc_files:
107
+ - LICENSE.txt
108
+ - README.md
109
+ files:
110
+ - Gemfile
111
+ - Guardfile
112
+ - LICENSE.txt
113
+ - README.md
114
+ - Rakefile
115
+ - VERSION
116
+ - carl.gemspec
117
+ - lib/carl.rb
118
+ - lib/carl/base.rb
119
+ - spec/carl/base_spec.rb
120
+ - spec/carl_spec.rb
121
+ - spec/spec_helper.rb
122
+ - spec/support/generate_query_matcher.rb
123
+ homepage: http://github.com/Tho85/carl
124
+ licenses:
125
+ - MIT
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - ! '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ segments:
137
+ - 0
138
+ hash: 141567407
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
140
+ none: false
141
+ requirements:
142
+ - - ! '>='
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ requirements: []
146
+ rubyforge_project:
147
+ rubygems_version: 1.8.7
148
+ signing_key:
149
+ specification_version: 3
150
+ summary: A CQL statement generator for Cassandra
151
+ test_files: []