gotime-cassandra_object 3.0.0 → 3.0.1
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/gotime-cassandra_object.gemspec +1 -1
- data/lib/cassandra_object/base.rb +1 -1
- data/lib/cassandra_object/belongs_to.rb +1 -1
- data/lib/cassandra_object/{transactions.rb → savepoints.rb} +22 -20
- data/lib/gotime-cassandra_object.rb +1 -1
- data/test/unit/{transactions_test.rb → savepoints_test.rb} +14 -4
- metadata +32 -13
@@ -1,37 +1,39 @@
|
|
1
1
|
module CassandraObject
|
2
|
-
module
|
3
|
-
class
|
4
|
-
attr_accessor :action, :record, :
|
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
|
-
|
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
|
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.
|
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 :
|
26
|
+
attr_accessor :rollbacks
|
25
27
|
def initialize
|
26
|
-
self.
|
28
|
+
self.rollbacks = []
|
27
29
|
end
|
28
30
|
|
29
|
-
def
|
30
|
-
states <<
|
31
|
+
def add_rollback(action, record)
|
32
|
+
states << Rollback.new(action, record)
|
31
33
|
end
|
32
34
|
|
33
35
|
def rollback!
|
34
|
-
|
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
|
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
|
56
|
+
def add_savepoint_rollback(action, record)
|
55
57
|
unless savepoints.empty?
|
56
|
-
savepoints.last.
|
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.
|
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.
|
70
|
+
self.class.add_savepoint_rollback(:destroy, self)
|
69
71
|
super
|
70
72
|
end
|
71
73
|
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class CassandraObject::
|
3
|
+
class CassandraObject::SavepointsTest < CassandraObject::TestCase
|
4
4
|
test 'rollback create' do
|
5
|
-
Issue.
|
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.
|
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.
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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.
|
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:
|