gotime-cassandra_object 3.0.0 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'gotime-cassandra_object'
5
- s.version = '3.0.0'
5
+ s.version = '3.0.1'
6
6
  s.description = 'Cassandra ActiveModel'
7
7
  s.summary = 'Cassandra ActiveModel'
8
8
  s.authors = ["Michael Koziarski", "gotime"]
@@ -43,7 +43,7 @@ module CassandraObject
43
43
  include BelongsTo
44
44
  include Callbacks, ActiveModel::Observing
45
45
  include Timestamps
46
- include Transactions
46
+ include Savepoints
47
47
 
48
48
  include Serialization
49
49
  include Migrations
@@ -24,7 +24,7 @@ module CassandraObject
24
24
 
25
25
  def generated_belongs_to_methods
26
26
  @generated_belongs_to_methods ||= begin
27
- mod = const_set(:GeneratedSearchesManyMethods, Module.new)
27
+ mod = const_set(:GeneratedBelongsToMethods, Module.new)
28
28
  include mod
29
29
  mod
30
30
  end
@@ -1,37 +1,39 @@
1
1
  module CassandraObject
2
- module Transactions
3
- class State
4
- attr_accessor :action, :record, :original_attributes
2
+ module Savepoints
3
+ class Rollback
4
+ attr_accessor :action, :record, :rollback_attributes
5
5
  def initialize(action, record)
6
6
  @action = action
7
7
  @record = record
8
- @original_attributes = record.changed_attributes.deep_dup
8
+ if action == :update
9
+ @rollback_attributes = record.changed_attributes.deep_dup
10
+ elsif action == :create
11
+ @rollback_attributes = record.attributes.deep_dup
12
+ end
9
13
  end
10
14
 
11
- def rollback!
15
+ def run!
12
16
  case action
13
- when :create
14
- record.class.remove(record.id)
15
- when :update
16
- record.class.write(record.id, original_attributes)
17
17
  when :destroy
18
- record.class.write(record.id, original_attributes)
18
+ record.class.remove(record.id)
19
+ when :create, :update
20
+ record.class.write(record.id, rollback_attributes)
19
21
  end
20
22
  end
21
23
  end
22
24
 
23
25
  class Savepoint
24
- attr_accessor :states
26
+ attr_accessor :rollbacks
25
27
  def initialize
26
- self.states = []
28
+ self.rollbacks = []
27
29
  end
28
30
 
29
- def add_state(action, record)
30
- states << State.new(action, record)
31
+ def add_rollback(action, record)
32
+ states << Rollback.new(action, record)
31
33
  end
32
34
 
33
35
  def rollback!
34
- states.reverse_each(&:rollback!)
36
+ rollbacks.reverse_each(&:run!)
35
37
  end
36
38
  end
37
39
 
@@ -43,7 +45,7 @@ module CassandraObject
43
45
  end
44
46
 
45
47
  module ClassMethods
46
- def transaction
48
+ def savepoint
47
49
  self.savepoints.push Savepoint.new
48
50
  yield
49
51
  savepoints.pop
@@ -51,21 +53,21 @@ module CassandraObject
51
53
  savepoints.pop.rollback!
52
54
  end
53
55
 
54
- def add_savepoint_state(action, record)
56
+ def add_savepoint_rollback(action, record)
55
57
  unless savepoints.empty?
56
- savepoints.last.add_state(action, record)
58
+ savepoints.last.add_rollback(action, record)
57
59
  end
58
60
  end
59
61
  end
60
62
 
61
63
  def destroy
62
- self.class.add_savepoint_state(:destroy, self)
64
+ self.class.add_savepoint_rollback(:create, self)
63
65
  super
64
66
  end
65
67
 
66
68
  private
67
69
  def create
68
- self.class.add_savepoint_state(:create, self)
70
+ self.class.add_savepoint_rollback(:destroy, self)
69
71
  super
70
72
  end
71
73
 
@@ -20,8 +20,8 @@ module CassandraObject
20
20
  autoload :Mocking
21
21
  autoload :Batches
22
22
  autoload :FinderMethods
23
+ autoload :Savepoints
23
24
  autoload :Timestamps
24
- autoload :Transactions
25
25
  autoload :Type
26
26
  autoload :Schema
27
27
 
@@ -1,8 +1,8 @@
1
1
  require 'test_helper'
2
2
 
3
- class CassandraObject::TransactionsTest < CassandraObject::TestCase
3
+ class CassandraObject::SavepointsTest < CassandraObject::TestCase
4
4
  test 'rollback create' do
5
- Issue.transaction do
5
+ Issue.savepoint do
6
6
  issue = Issue.create description: 'foo'
7
7
  raise 'lol'
8
8
  end
@@ -10,11 +10,10 @@ class CassandraObject::TransactionsTest < CassandraObject::TestCase
10
10
  assert_nil Issue.first
11
11
  end
12
12
 
13
-
14
13
  test 'rollback update' do
15
14
  issue = Issue.create description: 'foo'
16
15
 
17
- Issue.transaction do
16
+ Issue.savepoint do
18
17
  issue.update_attributes description: 'bar'
19
18
  raise 'lol'
20
19
  end
@@ -22,4 +21,15 @@ class CassandraObject::TransactionsTest < CassandraObject::TestCase
22
21
  issue = Issue.find issue.id
23
22
  assert_equal 'foo', issue.description
24
23
  end
24
+
25
+ test 'rollback destroy' do
26
+ issue = Issue.create description: 'foo'
27
+
28
+ Issue.savepoint do
29
+ issue.destroy
30
+ raise 'lol'
31
+ end
32
+
33
+ assert_nothing_raised { Issue.find issue.id }
34
+ end
25
35
  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: 3.0.0
4
+ version: 3.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -14,7 +14,7 @@ date: 2012-07-06 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activemodel
17
- requirement: &70172804588920 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,15 @@ dependencies:
22
22
  version: '3.0'
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *70172804588920
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '3.0'
26
31
  - !ruby/object:Gem::Dependency
27
32
  name: mcmire-cassandra
28
- requirement: &70172804588460 !ruby/object:Gem::Requirement
33
+ requirement: !ruby/object:Gem::Requirement
29
34
  none: false
30
35
  requirements:
31
36
  - - ! '>='
@@ -33,10 +38,15 @@ dependencies:
33
38
  version: 0.12.3
34
39
  type: :runtime
35
40
  prerelease: false
36
- version_requirements: *70172804588460
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: 0.12.3
37
47
  - !ruby/object:Gem::Dependency
38
48
  name: thrift_client
39
- requirement: &70172804588000 !ruby/object:Gem::Requirement
49
+ requirement: !ruby/object:Gem::Requirement
40
50
  none: false
41
51
  requirements:
42
52
  - - ~>
@@ -44,10 +54,15 @@ dependencies:
44
54
  version: 0.8.0
45
55
  type: :runtime
46
56
  prerelease: false
47
- version_requirements: *70172804588000
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: 0.8.0
48
63
  - !ruby/object:Gem::Dependency
49
64
  name: bundler
50
- requirement: &70172804587620 !ruby/object:Gem::Requirement
65
+ requirement: !ruby/object:Gem::Requirement
51
66
  none: false
52
67
  requirements:
53
68
  - - ! '>='
@@ -55,7 +70,12 @@ dependencies:
55
70
  version: '0'
56
71
  type: :development
57
72
  prerelease: false
58
- version_requirements: *70172804587620
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
59
79
  description: Cassandra ActiveModel
60
80
  email: gems@gotime.com
61
81
  executables: []
@@ -99,6 +119,7 @@ files:
99
119
  - lib/cassandra_object/mocking.rb
100
120
  - lib/cassandra_object/persistence.rb
101
121
  - lib/cassandra_object/railtie.rb
122
+ - lib/cassandra_object/savepoints.rb
102
123
  - lib/cassandra_object/schema.rb
103
124
  - lib/cassandra_object/schema/migration.rb
104
125
  - lib/cassandra_object/schema/migration_proxy.rb
@@ -108,7 +129,6 @@ files:
108
129
  - lib/cassandra_object/tasks/keyspace.rb
109
130
  - lib/cassandra_object/tasks/ks.rake
110
131
  - lib/cassandra_object/timestamps.rb
111
- - lib/cassandra_object/transactions.rb
112
132
  - lib/cassandra_object/type.rb
113
133
  - lib/cassandra_object/types.rb
114
134
  - lib/cassandra_object/types/array_type.rb
@@ -143,9 +163,9 @@ files:
143
163
  - test/unit/identity_test.rb
144
164
  - test/unit/inspect_test.rb
145
165
  - test/unit/persistence_test.rb
166
+ - test/unit/savepoints_test.rb
146
167
  - test/unit/tasks/column_family_test.rb
147
168
  - test/unit/timestamps_test.rb
148
- - test/unit/transactions_test.rb
149
169
  - test/unit/types/array_type_test.rb
150
170
  - test/unit/types/base_type_test.rb
151
171
  - test/unit/types/boolean_type_test.rb
@@ -176,9 +196,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
176
196
  version: 1.3.5
177
197
  requirements: []
178
198
  rubyforge_project:
179
- rubygems_version: 1.8.17
199
+ rubygems_version: 1.8.24
180
200
  signing_key:
181
201
  specification_version: 3
182
202
  summary: Cassandra ActiveModel
183
203
  test_files: []
184
- has_rdoc: