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