gotime-cassandra_object 2.10.11 → 2.11.0

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.
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