gotime-cassandra_object 2.10.11 → 2.11.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -3,5 +3,4 @@ gemspec
3
3
 
4
4
  group :test do
5
5
  gem 'cassandra', git: 'git://github.com/twitter/cassandra.git', require: 'cassandra/1.0'
6
- gem 'rails', path: '~/code/rails'
7
6
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'gotime-cassandra_object'
5
- s.version = '2.10.11'
5
+ s.version = '2.11.0'
6
6
  s.description = 'Cassandra ActiveModel'
7
7
  s.summary = 'Cassandra ActiveModel'
8
8
 
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
20
20
 
21
21
  s.add_runtime_dependency('activemodel', ">= 3.0")
22
22
  s.add_runtime_dependency('cassandra', ">= 0.12.0")
23
+ s.add_runtime_dependency('thrift_client', "~> 0.7.0")
23
24
 
24
25
  s.add_development_dependency('bundler')
25
26
  end
@@ -1,104 +1,104 @@
1
1
  module CassandraObject
2
2
  module Schema
3
-
4
3
  class Migration
5
4
 
6
5
  @@verbose = true
7
6
  cattr_accessor :verbose
8
7
 
9
- # Returns the raw connection to Cassandra
10
- def self.connection
11
- CassandraObject::Base.connection
12
- end
8
+ class << self
9
+ def connection
10
+ CassandraObject::Base.connection
11
+ end
13
12
 
14
- def self.migrate(direction)
15
- return unless respond_to?(direction)
13
+ def migrate(direction)
14
+ return unless respond_to?(direction)
16
15
 
17
- case direction
18
- when :up then announce "migrating"
19
- when :down then announce "reverting"
20
- end
16
+ case direction
17
+ when :up then announce "migrating"
18
+ when :down then announce "reverting"
19
+ end
20
+
21
+ result = nil
22
+ time = Benchmark.measure { result = send("#{direction}") }
21
23
 
22
- result = nil
23
- time = Benchmark.measure { result = send("#{direction}") }
24
+ case direction
25
+ when :up then announce "migrated (%.4fs)" % time.real; write
26
+ when :down then announce "reverted (%.4fs)" % time.real; write
27
+ end
24
28
 
25
- case direction
26
- when :up then announce "migrated (%.4fs)" % time.real; write
27
- when :down then announce "reverted (%.4fs)" % time.real; write
29
+ result
28
30
  end
29
31
 
30
- result
31
- end
32
+ # Creates a new column family with the given name. Column family configurations can be set within
33
+ # a block like this:
34
+ #
35
+ # create_column_family(:users) do |cf|
36
+ # cf.comment = 'Users column family'
37
+ # cf.comparator_type = 'TimeUUIDType'
38
+ # end
39
+ #
40
+ # A complete list of available configuration settings is here:
41
+ #
42
+ # http://github.com/fauna/cassandra/blob/master/vendor/0.7/gen-rb/cassandra_types.rb
43
+ #
44
+ # Scroll down to the CfDef definition.
45
+ def create_column_family(name, &block)
46
+ say_with_time("create_column_family #{name}") do
47
+ column_family_tasks.create(name, &block)
48
+ end
49
+ end
32
50
 
33
- # Creates a new column family with the given name. Column family configurations can be set within
34
- # a block like this:
35
- #
36
- # create_column_family(:users) do |cf|
37
- # cf.comment = 'Users column family'
38
- # cf.comparator_type = 'TimeUUIDType'
39
- # end
40
- #
41
- # A complete list of available configuration settings is here:
42
- #
43
- # http://github.com/fauna/cassandra/blob/master/vendor/0.7/gen-rb/cassandra_types.rb
44
- #
45
- # Scroll down to the CfDef definition.
46
- def self.create_column_family(name, &block)
47
- say_with_time("create_column_family #{name}") do
48
- column_family_tasks.create(name, &block)
51
+ # Drops the given column family
52
+ def drop_column_family(name)
53
+ say_with_time("drop_column_family #{name}") do
54
+ column_family_tasks.drop(name)
55
+ end
49
56
  end
50
- end
51
57
 
52
- # Drops the given column family
53
- def self.drop_column_family(name)
54
- say_with_time("drop_column_family #{name}") do
55
- column_family_tasks.drop(name)
58
+ # Renames the column family from the old name to the new name
59
+ def rename_column_family(old_name, new_name)
60
+ say_with_time("rename_column_family #{name}") do
61
+ column_family_tasks.rename(old_name, new_name)
62
+ end
56
63
  end
57
- end
58
64
 
59
- # Renames the column family from the old name to the new name
60
- def self.rename_column_family(old_name, new_name)
61
- say_with_time("rename_column_family #{name}") do
62
- column_family_tasks.rename(old_name, new_name)
65
+ def write(text="")
66
+ puts(text) if verbose
63
67
  end
64
- end
65
68
 
66
- def self.write(text="")
67
- puts(text) if verbose
68
- end
69
+ def announce(message)
70
+ version = defined?(@version) ? @version : nil
69
71
 
70
- def self.announce(message)
71
- version = defined?(@version) ? @version : nil
72
+ text = "#{version} #{name}: #{message}"
73
+ length = [0, 75 - text.length].max
74
+ write "== %s %s" % [text, "=" * length]
75
+ end
72
76
 
73
- text = "#{version} #{name}: #{message}"
74
- length = [0, 75 - text.length].max
75
- write "== %s %s" % [text, "=" * length]
76
- end
77
+ def say(message, subitem=false)
78
+ write "#{subitem ? " ->" : "--"} #{message}"
79
+ end
77
80
 
78
- def self.say(message, subitem=false)
79
- write "#{subitem ? " ->" : "--"} #{message}"
80
- end
81
+ def say_with_time(message)
82
+ say(message)
83
+ result = nil
84
+ time = Benchmark.measure { result = yield }
85
+ say "%.4fs" % time.real, :subitem
86
+ say("#{result} rows", :subitem) if result.is_a?(Integer)
87
+ result
88
+ end
81
89
 
82
- def self.say_with_time(message)
83
- say(message)
84
- result = nil
85
- time = Benchmark.measure { result = yield }
86
- say "%.4fs" % time.real, :subitem
87
- say("#{result} rows", :subitem) if result.is_a?(Integer)
88
- result
89
- end
90
+ def suppress_messages
91
+ save, self.verbose = verbose, false
92
+ yield
93
+ ensure
94
+ self.verbose = save
95
+ end
90
96
 
91
- def self.suppress_messages
92
- save, self.verbose = verbose, false
93
- yield
94
- ensure
95
- self.verbose = save
97
+ private
98
+ def column_family_tasks
99
+ Tasks::ColumnFamily.new(CassandraObject::Base.connection.keyspace)
100
+ end
96
101
  end
97
-
98
- private
99
- def self.column_family_tasks
100
- Tasks::ColumnFamily.new(CassandraObject::Base.connection.keyspace)
101
- end
102
102
  end
103
103
  end
104
- end
104
+ end
@@ -1,82 +1,80 @@
1
1
  module CassandraObject
2
2
  module Schema
3
-
4
3
  class Migrator
5
-
6
- def self.migrate(migrations_path, target_version = nil)
7
- case
8
- when target_version.nil?
9
- up(migrations_path, target_version)
10
- when current_version == 0 && target_version == 0
11
- when current_version > target_version
12
- down(migrations_path, target_version)
13
- else
14
- up(migrations_path, target_version)
4
+ class << self
5
+ def migrate(migrations_path, target_version = nil)
6
+ case
7
+ when target_version.nil?
8
+ up(migrations_path, target_version)
9
+ when current_version == 0 && target_version == 0
10
+ when current_version > target_version
11
+ down(migrations_path, target_version)
12
+ else
13
+ up(migrations_path, target_version)
14
+ end
15
15
  end
16
- end
17
16
 
18
- def self.rollback(migrations_path, steps = 1)
19
- move(:down, migrations_path, steps)
20
- end
17
+ def rollback(migrations_path, steps = 1)
18
+ move(:down, migrations_path, steps)
19
+ end
21
20
 
22
- def self.forward(migrations_path, steps = 1)
23
- move(:up, migrations_path, steps)
24
- end
21
+ def forward(migrations_path, steps = 1)
22
+ move(:up, migrations_path, steps)
23
+ end
25
24
 
26
- def self.up(migrations_path, target_version = nil)
27
- new(:up, migrations_path, target_version).migrate
28
- end
25
+ def up(migrations_path, target_version = nil)
26
+ new(:up, migrations_path, target_version).migrate
27
+ end
29
28
 
30
- def self.down(migrations_path, target_version = nil)
31
- new(:down, migrations_path, target_version).migrate
32
- end
29
+ def down(migrations_path, target_version = nil)
30
+ new(:down, migrations_path, target_version).migrate
31
+ end
33
32
 
34
- def self.run(direction, migrations_path, target_version)
35
- new(direction, migrations_path, target_version).run
36
- end
33
+ def run(direction, migrations_path, target_version)
34
+ new(direction, migrations_path, target_version).run
35
+ end
37
36
 
38
- def self.migrations_path
39
- 'ks/migrate'
40
- end
37
+ def migrations_path
38
+ 'ks/migrate'
39
+ end
41
40
 
42
- def self.schema_migrations_column_family
43
- :schema_migrations
44
- end
41
+ def schema_migrations_column_family
42
+ :schema_migrations
43
+ end
45
44
 
46
- def self.column_family_tasks
47
- cas = CassandraObject::Base.connection
48
- Tasks::ColumnFamily.new(cas.keyspace)
49
- end
45
+ def column_family_tasks
46
+ cas = CassandraObject::Base.connection
47
+ Tasks::ColumnFamily.new(cas.keyspace)
48
+ end
50
49
 
51
- def self.get_all_versions
52
- cas = CassandraObject::Base.connection
53
- cas.get(schema_migrations_column_family, 'all').map {|(name, _value)| name.to_i}.sort
54
- end
50
+ def get_all_versions
51
+ cas = CassandraObject::Base.connection
52
+ cas.get(schema_migrations_column_family, 'all').map {|(name, _value)| name.to_i}.sort
53
+ end
55
54
 
56
- def self.current_version
57
- sm_cf = schema_migrations_column_family
58
- if column_family_tasks.exists?(sm_cf)
59
- get_all_versions.max || 0
60
- else
61
- 0
55
+ def current_version
56
+ sm_cf = schema_migrations_column_family
57
+ if column_family_tasks.exists?(sm_cf)
58
+ get_all_versions.max || 0
59
+ else
60
+ 0
61
+ end
62
62
  end
63
- end
64
63
 
65
- private
64
+ private
66
65
 
67
- def self.move(direction, migrations_path, steps)
68
- migrator = self.new(direction, migrations_path)
69
- start_index = migrator.migrations.index(migrator.current_migration)
66
+ def move(direction, migrations_path, steps)
67
+ migrator = self.new(direction, migrations_path)
68
+ start_index = migrator.migrations.index(migrator.current_migration)
70
69
 
71
- if start_index
72
- finish = migrator.migrations[start_index + steps]
73
- version = finish ? finish.version : 0
74
- send(direction, migrations_path, version)
75
- end
70
+ if start_index
71
+ finish = migrator.migrations[start_index + steps]
72
+ version = finish ? finish.version : 0
73
+ send(direction, migrations_path, version)
74
+ end
75
+ end
76
76
  end
77
77
 
78
- public
79
-
80
78
  def initialize(direction, migrations_path, target_version = nil)
81
79
  sm_cf = self.class.schema_migrations_column_family
82
80
 
@@ -140,32 +138,32 @@ module CassandraObject
140
138
 
141
139
  def migrations
142
140
  @migrations ||= begin
143
- files = Dir["#{@migrations_path}/[0-9]*_*.rb"]
141
+ files = Dir["#{@migrations_path}/[0-9]*_*.rb"]
144
142
 
145
- migrations = files.inject([]) do |klasses, file|
146
- version, name = file.scan(/([0-9]+)_([_a-z0-9]*).rb/).first
143
+ migrations = files.inject([]) do |klasses, file|
144
+ version, name = file.scan(/([0-9]+)_([_a-z0-9]*).rb/).first
147
145
 
148
- raise IllegalMigrationNameError.new(file) unless version
149
- version = version.to_i
146
+ raise IllegalMigrationNameError.new(file) unless version
147
+ version = version.to_i
150
148
 
151
- if klasses.detect { |m| m.version == version }
152
- raise DuplicateMigrationVersionError.new(version)
153
- end
149
+ if klasses.detect { |m| m.version == version }
150
+ raise DuplicateMigrationVersionError.new(version)
151
+ end
154
152
 
155
- if klasses.detect { |m| m.name == name.camelize }
156
- raise DuplicateMigrationNameError.new(name.camelize)
157
- end
153
+ if klasses.detect { |m| m.name == name.camelize }
154
+ raise DuplicateMigrationNameError.new(name.camelize)
155
+ end
158
156
 
159
- migration = MigrationProxy.new
160
- migration.name = name.camelize
161
- migration.version = version
162
- migration.filename = file
163
- klasses << migration
164
- end
157
+ migration = MigrationProxy.new
158
+ migration.name = name.camelize
159
+ migration.version = version
160
+ migration.filename = file
161
+ klasses << migration
162
+ end
165
163
 
166
- migrations = migrations.sort_by { |m| m.version }
167
- down? ? migrations.reverse : migrations
168
- end
164
+ migrations = migrations.sort_by { |m| m.version }
165
+ down? ? migrations.reverse : migrations
166
+ end
169
167
  end
170
168
 
171
169
  def pending_migrations
@@ -179,35 +177,34 @@ module CassandraObject
179
177
 
180
178
  private
181
179
 
182
- def column_family_tasks
183
- Tasks::ColumnFamily.new(connection.keyspace)
184
- end
180
+ def column_family_tasks
181
+ Tasks::ColumnFamily.new(connection.keyspace)
182
+ end
185
183
 
186
- def connection
187
- CassandraObject::Base.connection
188
- end
184
+ def connection
185
+ CassandraObject::Base.connection
186
+ end
189
187
 
190
- def record_version_state_after_migrating(migration)
191
- sm_cf = self.class.schema_migrations_column_family
188
+ def record_version_state_after_migrating(migration)
189
+ sm_cf = self.class.schema_migrations_column_family
192
190
 
193
- @migrated_versions ||= []
194
- if down?
195
- @migrated_versions.delete(migration.version)
196
- connection.remove sm_cf, 'all', migration.version
197
- else
198
- @migrated_versions.push(migration.version).sort!
199
- connection.insert sm_cf, 'all', { migration.version => migration.name }
191
+ @migrated_versions ||= []
192
+ if down?
193
+ @migrated_versions.delete(migration.version)
194
+ connection.remove sm_cf, 'all', migration.version
195
+ else
196
+ @migrated_versions.push(migration.version).sort!
197
+ connection.insert sm_cf, 'all', { migration.version => migration.name }
198
+ end
200
199
  end
201
- end
202
200
 
203
- def up?
204
- @direction == :up
205
- end
206
-
207
- def down?
208
- @direction == :down
209
- end
201
+ def up?
202
+ @direction == :up
203
+ end
210
204
 
205
+ def down?
206
+ @direction == :down
207
+ end
211
208
  end
212
209
  end
213
210
  end
@@ -1,15 +1,10 @@
1
1
  module CassandraObject
2
2
  module Tasks
3
3
  class ColumnFamily
4
-
5
- COMPARATOR_TYPES = { :time => 'TimeUUIDType',
6
- :timestamp => 'TimeUUIDType',
7
- :long => 'LongType',
8
- :string => 'BytesType',
9
- :utf8 => 'UTF8Type' }
10
-
11
- COLUMN_TYPES = { :standard => 'Standard',
12
- :super => 'Super' }
4
+ COLUMN_TYPES = {
5
+ standard: 'Standard',
6
+ super: 'Super'
7
+ }
13
8
 
14
9
  def initialize(keyspace)
15
10
  @keyspace = keyspace
@@ -23,7 +18,7 @@ module CassandraObject
23
18
  cf = Cassandra::ColumnFamily.new
24
19
  cf.name = name.to_s
25
20
  cf.keyspace = @keyspace.to_s
26
- cf.comparator_type = 'BytesType'
21
+ cf.comparator_type = 'UTF8Type'
27
22
  cf.column_type = 'Standard'
28
23
 
29
24
  yield(cf) if block_given?
@@ -40,39 +35,21 @@ module CassandraObject
40
35
  connection.rename_column_family(old_name.to_s, new_name.to_s)
41
36
  end
42
37
 
43
- def clear(name)
44
- connection.truncate!(name.to_s)
45
- end
46
-
47
38
  private
48
-
49
- def connection
50
- CassandraObject::Base.connection
51
- end
52
-
53
- def post_process_column_family(cf)
54
- comp_type = cf.comparator_type
55
- if comp_type && COMPARATOR_TYPES.has_key?(comp_type)
56
- cf.comparator_type = COMPARATOR_TYPES[comp_type]
39
+ def connection
40
+ CassandraObject::Base.connection
57
41
  end
58
42
 
59
- comp_type = cf.subcomparator_type
60
- if comp_type && COMPARATOR_TYPES.has_key?(comp_type)
61
- cf.subcomparator_type = COMPARATOR_TYPES[comp_type]
62
- end
43
+ def post_process_column_family(cf)
44
+ col_type = cf.column_type
45
+ if col_type && COLUMN_TYPES.has_key?(col_type)
46
+ cf.column_type = COLUMN_TYPES[col_type]
47
+ end
63
48
 
64
- col_type = cf.column_type
65
- if col_type && COLUMN_TYPES.has_key?(col_type)
66
- cf.column_type = COLUMN_TYPES[col_type]
49
+ cf
67
50
  end
68
-
69
- cf
70
- end
71
-
72
51
  end
73
-
74
52
  end
75
-
76
53
  end
77
54
 
78
55
  class Cassandra
@@ -1,9 +1,6 @@
1
1
  module CassandraObject
2
-
3
2
  module Tasks
4
-
5
3
  class Keyspace
6
-
7
4
  def self.parse(hash)
8
5
  ks = Cassandra::Keyspace.new.with_fields hash
9
6
  ks.cf_defs = []
@@ -69,11 +66,8 @@ module CassandraObject
69
66
  end
70
67
  @connection
71
68
  end
72
-
73
69
  end
74
-
75
70
  end
76
-
77
71
  end
78
72
 
79
73
  class Cassandra
@@ -0,0 +1,29 @@
1
+ require 'test_helper'
2
+
3
+ class CassandraObject::Tasks::ColumnFamilyTest < CassandraObject::TestCase
4
+ setup do
5
+ column_family_task.drop('Gadgets') if column_family_task.exists?('Gadgets')
6
+ column_family_task.drop('Widgets') if column_family_task.exists?('Widgets')
7
+ end
8
+
9
+ test 'create' do
10
+ assert !column_family_task.exists?('Widgets')
11
+ column_family_task.create 'Widgets'
12
+ assert column_family_task.exists?('Widgets')
13
+ end
14
+
15
+ # test 'rename' do
16
+ # column_family_task.create 'Widgets'
17
+ # column_family_task.rename 'Widgets', 'Gadgets'
18
+ #
19
+ # sleep 2
20
+ #
21
+ # assert !column_family_task.exists?('Widgets')
22
+ # assert column_family_task.exists?('Gadgets')
23
+ # end
24
+
25
+ private
26
+ def column_family_task
27
+ @column_family_task ||= CassandraObject::Tasks::ColumnFamily.new(CassandraObject::Base.connection.keyspace)
28
+ end
29
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gotime-cassandra_object
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.10.11
4
+ version: 2.11.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-02-16 00:00:00.000000000 Z
13
+ date: 2012-03-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activemodel
17
- requirement: &70104281371060 !ruby/object:Gem::Requirement
17
+ requirement: &70366970329520 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '3.0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70104281371060
25
+ version_requirements: *70366970329520
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: cassandra
28
- requirement: &70104281368940 !ruby/object:Gem::Requirement
28
+ requirement: &70366970329000 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
@@ -33,10 +33,21 @@ dependencies:
33
33
  version: 0.12.0
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *70104281368940
36
+ version_requirements: *70366970329000
37
+ - !ruby/object:Gem::Dependency
38
+ name: thrift_client
39
+ requirement: &70366970326120 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ version: 0.7.0
45
+ type: :runtime
46
+ prerelease: false
47
+ version_requirements: *70366970326120
37
48
  - !ruby/object:Gem::Dependency
38
49
  name: bundler
39
- requirement: &70104281386900 !ruby/object:Gem::Requirement
50
+ requirement: &70366970325440 !ruby/object:Gem::Requirement
40
51
  none: false
41
52
  requirements:
42
53
  - - ! '>='
@@ -44,7 +55,7 @@ dependencies:
44
55
  version: '0'
45
56
  type: :development
46
57
  prerelease: false
47
- version_requirements: *70104281386900
58
+ version_requirements: *70366970325440
48
59
  description: Cassandra ActiveModel
49
60
  email: gems@gotime.com
50
61
  executables: []
@@ -131,6 +142,7 @@ files:
131
142
  - test/unit/identity_test.rb
132
143
  - test/unit/inspect_test.rb
133
144
  - test/unit/persistence_test.rb
145
+ - test/unit/tasks/column_family_test.rb
134
146
  - test/unit/timestamps_test.rb
135
147
  - test/unit/types/array_type_test.rb
136
148
  - test/unit/types/base_type_test.rb
@@ -162,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
162
174
  version: 1.3.5
163
175
  requirements: []
164
176
  rubyforge_project:
165
- rubygems_version: 1.8.10
177
+ rubygems_version: 1.8.15
166
178
  signing_key:
167
179
  specification_version: 3
168
180
  summary: Cassandra ActiveModel