active_column 0.1.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,4 +1,5 @@
1
1
  pkg/*
2
+ doc/*
2
3
  .yardoc/*
3
4
  *.gem
4
5
  .bundle
data/.rvmrc CHANGED
@@ -1,7 +1 @@
1
-
2
- if [[ -d "${rvm_path:-$HOME/.rvm}/environments" \
3
- && -s "${rvm_path:-$HOME/.rvm}/environments/ruby-1.9.2-p0@active_column" ]] ; then
4
- \. "${rvm_path:-$HOME/.rvm}/environments/ruby-1.9.2-p0@active_column"
5
- else
6
- rvm --create "ruby-1.9.2-p0@active_column"
7
- fi
1
+ rvm --create 1.9.2@active_column
@@ -1,51 +1,50 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_column (0.0.3)
5
- activesupport
4
+ active_column (0.2)
6
5
  cassandra (>= 0.9)
7
6
  rake
8
7
 
9
8
  GEM
10
9
  remote: http://rubygems.org/
11
10
  specs:
12
- ParseTree (3.0.6)
11
+ ParseTree (3.0.7)
13
12
  RubyInline (>= 3.7.0)
14
13
  sexp_processor (>= 3.0.0)
15
- RubyInline (3.8.6)
14
+ RubyInline (3.9.0)
16
15
  ZenTest (~> 4.3)
17
- ZenTest (4.4.2)
16
+ ZenTest (4.5.0)
18
17
  abstract (1.0.0)
19
- actionmailer (3.0.3)
20
- actionpack (= 3.0.3)
21
- mail (~> 2.2.9)
22
- actionpack (3.0.3)
23
- activemodel (= 3.0.3)
24
- activesupport (= 3.0.3)
18
+ actionmailer (3.0.7)
19
+ actionpack (= 3.0.7)
20
+ mail (~> 2.2.15)
21
+ actionpack (3.0.7)
22
+ activemodel (= 3.0.7)
23
+ activesupport (= 3.0.7)
25
24
  builder (~> 2.1.2)
26
25
  erubis (~> 2.6.6)
27
- i18n (~> 0.4)
26
+ i18n (~> 0.5.0)
28
27
  rack (~> 1.2.1)
29
- rack-mount (~> 0.6.13)
30
- rack-test (~> 0.5.6)
28
+ rack-mount (~> 0.6.14)
29
+ rack-test (~> 0.5.7)
31
30
  tzinfo (~> 0.3.23)
32
- activemodel (3.0.3)
33
- activesupport (= 3.0.3)
31
+ activemodel (3.0.7)
32
+ activesupport (= 3.0.7)
34
33
  builder (~> 2.1.2)
35
- i18n (~> 0.4)
36
- activerecord (3.0.3)
37
- activemodel (= 3.0.3)
38
- activesupport (= 3.0.3)
34
+ i18n (~> 0.5.0)
35
+ activerecord (3.0.7)
36
+ activemodel (= 3.0.7)
37
+ activesupport (= 3.0.7)
39
38
  arel (~> 2.0.2)
40
39
  tzinfo (~> 0.3.23)
41
- activeresource (3.0.3)
42
- activemodel (= 3.0.3)
43
- activesupport (= 3.0.3)
44
- activesupport (3.0.3)
45
- arel (2.0.6)
46
- bluecloth (2.0.9)
40
+ activeresource (3.0.7)
41
+ activemodel (= 3.0.7)
42
+ activesupport (= 3.0.7)
43
+ activesupport (3.0.7)
44
+ arel (2.0.9)
45
+ bluecloth (2.1.0)
47
46
  builder (2.1.2)
48
- cassandra (0.9.0)
47
+ cassandra (0.9.1)
49
48
  json
50
49
  rake
51
50
  simple_uuid (>= 0.1.0)
@@ -56,65 +55,67 @@ GEM
56
55
  file-tail (1.0.5)
57
56
  spruz (>= 0.1.0)
58
57
  i18n (0.5.0)
59
- json (1.4.6)
60
- mail (2.2.12)
58
+ json (1.5.1)
59
+ mail (2.2.19)
61
60
  activesupport (>= 2.3.6)
62
61
  i18n (>= 0.4.0)
63
62
  mime-types (~> 1.16)
64
63
  treetop (~> 1.4.8)
65
64
  mime-types (1.16)
65
+ mocha (0.9.12)
66
66
  polyglot (0.3.1)
67
67
  predicated (0.2.2)
68
- rack (1.2.1)
69
- rack-mount (0.6.13)
68
+ rack (1.2.2)
69
+ rack-mount (0.6.14)
70
70
  rack (>= 1.0.0)
71
- rack-test (0.5.6)
71
+ rack-test (0.5.7)
72
72
  rack (>= 1.0)
73
- rails (3.0.3)
74
- actionmailer (= 3.0.3)
75
- actionpack (= 3.0.3)
76
- activerecord (= 3.0.3)
77
- activeresource (= 3.0.3)
78
- activesupport (= 3.0.3)
73
+ rails (3.0.7)
74
+ actionmailer (= 3.0.7)
75
+ actionpack (= 3.0.7)
76
+ activerecord (= 3.0.7)
77
+ activeresource (= 3.0.7)
78
+ activesupport (= 3.0.7)
79
79
  bundler (~> 1.0)
80
- railties (= 3.0.3)
81
- railties (3.0.3)
82
- actionpack (= 3.0.3)
83
- activesupport (= 3.0.3)
80
+ railties (= 3.0.7)
81
+ railties (3.0.7)
82
+ actionpack (= 3.0.7)
83
+ activesupport (= 3.0.7)
84
84
  rake (>= 0.8.7)
85
85
  thor (~> 0.14.4)
86
86
  rake (0.8.7)
87
- rspec (2.3.0)
88
- rspec-core (~> 2.3.0)
89
- rspec-expectations (~> 2.3.0)
90
- rspec-mocks (~> 2.3.0)
91
- rspec-core (2.3.1)
92
- rspec-expectations (2.3.0)
87
+ rspec (2.5.0)
88
+ rspec-core (~> 2.5.0)
89
+ rspec-expectations (~> 2.5.0)
90
+ rspec-mocks (~> 2.5.0)
91
+ rspec-core (2.5.1)
92
+ rspec-expectations (2.5.0)
93
93
  diff-lcs (~> 1.1.2)
94
- rspec-mocks (2.3.0)
95
- rspec-rails (2.3.1)
94
+ rspec-mocks (2.5.0)
95
+ rspec-rails (2.5.0)
96
96
  actionpack (~> 3.0)
97
97
  activesupport (~> 3.0)
98
98
  railties (~> 3.0)
99
- rspec (~> 2.3.0)
99
+ rspec (~> 2.5.0)
100
100
  ruby2ruby (1.2.5)
101
101
  ruby_parser (~> 2.0)
102
102
  sexp_processor (~> 3.0)
103
- ruby_parser (2.0.5)
103
+ ruby_parser (2.0.6)
104
104
  sexp_processor (~> 3.0)
105
105
  sexp_processor (3.0.5)
106
- simple_uuid (0.1.1)
107
- sourcify (0.4.0)
106
+ simple_uuid (0.1.2)
107
+ sourcify (0.4.2)
108
+ file-tail (>= 1.0.5)
108
109
  ruby2ruby (>= 1.2.5)
109
110
  sexp_processor (>= 3.0.5)
110
- spruz (0.2.2)
111
+ spruz (0.2.5)
111
112
  thor (0.14.6)
112
113
  thrift (0.5.0)
113
114
  thrift_client (0.6.0)
114
115
  thrift (~> 0.5.0)
115
116
  treetop (1.4.9)
116
117
  polyglot (>= 0.3.1)
117
- tzinfo (0.3.23)
118
+ tzinfo (0.3.27)
118
119
  wrong (0.5.0)
119
120
  ParseTree (~> 3.0)
120
121
  diff-lcs (~> 1.1.2)
@@ -124,18 +125,16 @@ GEM
124
125
  ruby_parser (~> 2.0.4)
125
126
  sexp_processor (~> 3.0)
126
127
  sourcify (>= 0.3.0)
127
- yard (0.6.4)
128
+ yard (0.6.8)
128
129
 
129
130
  PLATFORMS
130
131
  ruby
131
132
 
132
133
  DEPENDENCIES
133
134
  active_column!
134
- activesupport
135
135
  bluecloth
136
- cassandra (>= 0.9)
136
+ mocha
137
137
  rails (>= 3.0)
138
- rake
139
- rspec-rails
138
+ rspec-rails (>= 2.5.0)
140
139
  wrong
141
140
  yard
data/README.md CHANGED
@@ -33,8 +33,12 @@ bundle install
33
33
 
34
34
  ### Configuration
35
35
 
36
- ActiveColumn requires Cassandra 0.7 or above, as we as the [cassandra gem](https://github.com/fauna/cassandra),
37
- version 0.9 or above.
36
+ ActiveColumn requires Cassandra 0.7 or above, as well as the [cassandra gem](https://github.com/fauna/cassandra),
37
+ version 0.9 or above. You must also be sure to use the Cassandra 0.7 support in the gem, which can be done by
38
+ adding Cassandra to your Gemfile like this:
39
+ <pre>
40
+ gem 'cassandra', '>= 0.9', :require => 'cassandra/0.7'
41
+ </pre>
38
42
 
39
43
  Data migrations in ActiveColumn are used within a Rails project, and are driven off of a configuration file,
40
44
  config/cassandra.yml. It should look something like this:
@@ -74,4 +78,4 @@ As you can see, I create a global $cassandra variable, which I use in my tests t
74
78
 
75
79
  One other thing to note is that you obviously must have Cassandra installed and running! Please take a look at the
76
80
  [mama_cass gem](https://github.com/carbonfive/mama_cass) for a quick way to get up and running with Cassandra for
77
- development and testing.
81
+ development and testing.
@@ -18,15 +18,14 @@ Gem::Specification.new do |s|
18
18
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  s.require_paths = ["lib"]
21
- s.has_rdoc = true
22
21
 
23
22
  s.add_dependency 'cassandra', '>= 0.9'
24
- s.add_dependency 'activesupport'
25
23
  s.add_dependency 'rake'
26
24
 
27
25
  s.add_development_dependency 'rails', '>= 3.0'
28
- s.add_development_dependency 'rspec-rails'
26
+ s.add_development_dependency 'rspec-rails', '>= 2.5.0'
29
27
  s.add_development_dependency 'wrong'
30
28
  s.add_development_dependency 'yard'
31
29
  s.add_development_dependency 'bluecloth'
30
+ s.add_development_dependency 'mocha'
32
31
  end
@@ -23,7 +23,7 @@ the equivalent of a database in MySQL (or other relational dbs). To see the ava
23
23
  rake -T ks
24
24
  </pre>
25
25
 
26
- 3. Create your databases with the **ks:create:all** rake task:
26
+ 3. Create your keyspaces with the **ks:create:all** rake task:
27
27
 
28
28
  <pre>
29
29
  rake ks:create:all
@@ -40,6 +40,11 @@ command:
40
40
  rails g active_column:migration NameOfYourMigration
41
41
  </pre>
42
42
 
43
+ If you are using Rails 2, run this command instead:
44
+ <pre>
45
+ ./script/generate ks_migration NameOfYourMigration
46
+ </pre>
47
+
43
48
  The name of the migration might be something like "CreateUsersColumnFamily". After you run this command, you should see
44
49
  a new file that is located here:
45
50
 
@@ -71,7 +76,10 @@ this:
71
76
  class CreateUsersColumnFamily &lt; ActiveColumn::Migration
72
77
 
73
78
  def self.up
74
- create_column_family :users
79
+ create_column_family :users do |cf|
80
+ cf.comment = 'Users column family'
81
+ cf.comparator_type = :string
82
+ end
75
83
  end
76
84
 
77
85
  def self.down
@@ -88,13 +96,28 @@ rake ks:migrate
88
96
  </pre>
89
97
 
90
98
  This will create the column family for your development environment. But you also need it in your test environment.
91
- For now, you have to do this like the following. However, soon this will be updated to work more like ActiveRecord
92
- migrations.
93
99
 
94
- 7. Run the migrate rake task (for test):
100
+ 7. Prepare the test environment keyspace:
101
+
102
+ <pre>
103
+ rake ks:test:prepare
104
+ </pre>
105
+
106
+ And BAM! You have your development and test keyspaces set up correctly.
107
+
108
+ ### Inside your migrations
109
+
110
+ ActiveColumn::Migration, which all migrations extend by default, offers some useful functions. They are documented
111
+ via rdoc in the code itself.
112
+
113
+ ### But I'm using Sinatra!
95
114
 
115
+ If you are using Rails, you don't need to do anything beyond including the active\_column gem in your Gemfile.
116
+ However, if you are using Sinatra (or some other framework), you can get these rake tasks to work merely by adding
117
+ the following line to your Rakefile:
96
118
  <pre>
97
- RAILS_ENV=test rake ks:migrate
119
+ require 'active_column'
98
120
  </pre>
99
121
 
100
- And BAM! You have your development and test keyspaces set up correctly.
122
+ Please note, however, that the Rails generator is only available if you are using Rails. If you are not using Rails,
123
+ you will have to create your migrations by hand.
@@ -0,0 +1,6 @@
1
+ Description:
2
+ Create an empty Cassandra migration file in 'ks/migrate'. Very similar to Rails database migrations.
3
+
4
+ Example:
5
+ ./script/generate ks_migration CreateFooColumnFamily
6
+
@@ -0,0 +1,17 @@
1
+ require 'rails_generator/base'
2
+
3
+ class KsMigrationGenerator < Rails::Generator::NamedBase
4
+
5
+ def manifest
6
+ record do |m|
7
+ m.directory 'ks/migrate'
8
+ timestamp = Time.now.utc.strftime("%Y%m%d%H%M%S")
9
+ m.template 'migration.rb.erb', "ks/migrate/#{timestamp}_#{file_name.underscore}.rb"
10
+ end
11
+ end
12
+
13
+ def banner
14
+ "Usage: ./script/generate ks_migration NAME [options]"
15
+ end
16
+
17
+ end
@@ -0,0 +1,11 @@
1
+ class <%= name %> < ActiveColumn::Migration
2
+
3
+ def self.up
4
+
5
+ end
6
+
7
+ def self.down
8
+
9
+ end
10
+
11
+ end
@@ -1,28 +1,35 @@
1
1
  require 'cassandra/0.7'
2
- require 'active_support'
3
- require 'active_support/core_ext/string'
2
+ require 'benchmark'
3
+ require 'yaml'
4
4
 
5
5
  module ActiveColumn
6
6
 
7
7
  autoload :Base, 'active_column/base'
8
- autoload :Connection, 'active_column/connection'
8
+ autoload :Configuration, 'active_column/configuration'
9
9
  autoload :KeyConfig, 'active_column/key_config'
10
10
  autoload :Version, 'active_column/version'
11
+ autoload :Helpers, 'active_column/helpers'
11
12
 
12
13
  require 'active_column/errors'
14
+ require 'active_column/migrator'
13
15
  require 'active_column/migration'
14
16
 
15
17
  module Tasks
16
18
  autoload :Keyspace, 'active_column/tasks/keyspace'
17
19
  autoload :ColumnFamily, 'active_column/tasks/column_family'
18
-
19
- require 'active_column/tasks/ks'
20
20
  end
21
21
 
22
- module Generators
23
- require 'active_column/generators/migration_generator'
22
+ load 'active_column/tasks/ks.rake'
23
+
24
+
25
+ if defined? ::Rails
26
+ module Generators
27
+ if ::Rails::VERSION::MAJOR >= 3
28
+ require 'active_column/generators/migration_generator'
29
+ end
30
+ end
24
31
  end
25
32
 
26
- extend Connection
27
-
33
+ extend Configuration
34
+
28
35
  end
@@ -0,0 +1,36 @@
1
+ module ActiveColumn
2
+
3
+ module Configuration
4
+
5
+ def connect(config)
6
+ default_thrift_options = { :timeout => 3, :retries => 2, :server_retry_period => nil }
7
+ override_thrift_options = (config['thrift'] || {}).inject({}){|h, (k, v)| h[k.to_sym] = v; h} # symbolize keys
8
+ thrift_options = default_thrift_options.merge(override_thrift_options)
9
+ self.connection = Cassandra.new(config['keyspace'], config['servers'], thrift_options)
10
+ end
11
+
12
+ def connected?
13
+ defined? @@connection
14
+ end
15
+
16
+ def connection
17
+ @@connection
18
+ end
19
+
20
+ def connection=(connection)
21
+ @@connection = connection
22
+ @@keyspace_tasks = ActiveColumn::Tasks::Keyspace.new
23
+ @@keyspace = connection.keyspace
24
+ end
25
+
26
+ def keyspace_tasks
27
+ @@keyspace_tasks
28
+ end
29
+
30
+ def column_family_tasks
31
+ ActiveColumn::Tasks::ColumnFamily.new(@@keyspace)
32
+ end
33
+
34
+ end
35
+
36
+ end
@@ -0,0 +1,36 @@
1
+ module ActiveColumn
2
+ module Helpers
3
+
4
+ def self.current_env
5
+ ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development'
6
+ end
7
+
8
+ def current_env
9
+ ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development'
10
+ end
11
+
12
+ def testing?
13
+ self.current_env == 'test'
14
+ end
15
+
16
+ def log(msg, e = nil)
17
+ puts msg if e || !testing?
18
+ p e if e
19
+ nil
20
+ end
21
+
22
+ end
23
+ end
24
+
25
+ class Object
26
+ def to_json(*a)
27
+ result = {
28
+ JSON.create_id => self.class.name
29
+ }
30
+ instance_variables.inject(result) do |r, name|
31
+ r[name[1..-1]] = instance_variable_get name
32
+ r
33
+ end
34
+ result.to_json(*a)
35
+ end
36
+ end