gotime-cassandra_object 4.7.1 → 4.7.2

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 = '4.7.1'
5
+ s.version = '4.7.2'
6
6
  s.description = 'Cassandra ActiveModel'
7
7
  s.summary = 'Cassandra ActiveModel'
8
8
  s.authors = ["Michael Koziarski", "gotime"]
@@ -2,7 +2,6 @@ require 'set'
2
2
 
3
3
  require 'cassandra_object/log_subscriber'
4
4
  require 'cassandra_object/types'
5
- require 'cassandra_object/errors'
6
5
 
7
6
  module CassandraObject
8
7
  class Base
@@ -16,11 +15,7 @@ module CassandraObject
16
15
  end
17
16
 
18
17
  def base_class
19
- klass = self
20
- while klass.superclass != Base
21
- klass = klass.superclass
22
- end
23
- klass
18
+ class_of_active_record_descendant(self)
24
19
  end
25
20
 
26
21
  def config=(config)
@@ -30,6 +25,20 @@ module CassandraObject
30
25
  def config
31
26
  @@config
32
27
  end
28
+
29
+ private
30
+
31
+ # Returns the class descending directly from ActiveRecord::Base or an
32
+ # abstract class, if any, in the inheritance hierarchy.
33
+ def class_of_active_record_descendant(klass)
34
+ if klass == Base || klass.superclass == Base
35
+ klass
36
+ elsif klass.superclass.nil?
37
+ raise "#{name} doesn't belong in a hierarchy descending from CassandraObject"
38
+ else
39
+ class_of_active_record_descendant(klass.superclass)
40
+ end
41
+ end
33
42
  end
34
43
 
35
44
  extend ActiveModel::Naming
@@ -44,6 +44,10 @@ module CassandraObject
44
44
  end
45
45
 
46
46
  private
47
+ def clear_belongs_to_cache
48
+ belongs_to_cache.clear if persisted?
49
+ end
50
+
47
51
  def belongs_to_cache
48
52
  @belongs_to_cache ||= {}
49
53
  end
@@ -2,6 +2,7 @@ module CassandraObject
2
2
  module BelongsTo
3
3
  class Association
4
4
  attr_reader :owner, :reflection
5
+ attr_accessor :record_variable
5
6
  delegate :options, to: :reflection
6
7
 
7
8
  def initialize(owner, reflection)
@@ -16,6 +17,7 @@ module CassandraObject
16
17
  else
17
18
  self.record_variable = nil
18
19
  end
20
+ @loaded = true
19
21
  end
20
22
 
21
23
  record_variable
@@ -23,6 +25,7 @@ module CassandraObject
23
25
 
24
26
  def writer(record)
25
27
  self.record_variable = record
28
+ @loaded = true
26
29
  owner.send("#{reflection.foreign_key}=", record.try(:id))
27
30
  if reflection.polymorphic?
28
31
  owner.send("#{reflection.polymorphic_column}=", record.class.name)
@@ -37,16 +40,8 @@ module CassandraObject
37
40
  reflection.polymorphic? ? owner.send(reflection.polymorphic_column) : reflection.class_name
38
41
  end
39
42
 
40
- def record_variable
41
- owner.instance_variable_get(reflection.instance_variable_name)
42
- end
43
-
44
- def record_variable=(record)
45
- owner.instance_variable_set(reflection.instance_variable_name, record)
46
- end
47
-
48
43
  def loaded?
49
- owner.instance_variable_defined?(reflection.instance_variable_name)
44
+ @loaded
50
45
  end
51
46
  end
52
47
  end
@@ -29,39 +29,16 @@ module CassandraObject
29
29
  end
30
30
  end
31
31
 
32
- def batch_start
33
- @batch = []
34
- end
35
-
36
- def batch_statement
37
- return nil unless @batch.any?
38
-
39
- [
40
- "BEGIN BATCH#{write_option_string(true)}",
41
- @batch * "\n",
42
- 'APPLY BATCH'
43
- ] * "\n"
44
- end
45
-
46
- def batch_end
47
- if @batch.any?
48
- execute_cql batch_statement
49
- end
50
- ensure
51
- @batch = nil
52
- end
53
-
54
32
  def batching?
55
33
  !@batch.nil?
56
34
  end
57
35
 
58
36
  def batch
59
- batch_start
60
-
37
+ @batch = []
61
38
  yield
62
-
39
+ execute_cql(batch_statement) if @batch.any?
63
40
  ensure
64
- batch_end
41
+ @batch = nil
65
42
  end
66
43
 
67
44
  def instantiate(id, attributes)
@@ -89,6 +66,16 @@ module CassandraObject
89
66
  column_names.map { |name| "'#{name}'" }
90
67
  end
91
68
 
69
+ def batch_statement
70
+ return nil unless @batch.any?
71
+
72
+ [
73
+ "BEGIN BATCH#{write_option_string(true)}",
74
+ @batch * "\n",
75
+ 'APPLY BATCH'
76
+ ] * "\n"
77
+ end
78
+
92
79
  def execute_batchable_cql(cql_string, *bind_vars)
93
80
  if @batch
94
81
  @batch << CassandraCQL::Statement.sanitize(cql_string, bind_vars)
@@ -156,6 +143,7 @@ module CassandraObject
156
143
  end
157
144
 
158
145
  def reload
146
+ clear_belongs_to_cache
159
147
  @attributes.update(self.class.find(id).instance_variable_get('@attributes'))
160
148
  self
161
149
  end
@@ -51,7 +51,7 @@ module CassandraObject
51
51
 
52
52
  stmt
53
53
  end
54
-
54
+
55
55
  def execute(cql)
56
56
  CassandraObject::Base.execute_cql cql
57
57
  end
@@ -1,6 +1,7 @@
1
1
  require 'active_support/all'
2
2
  require 'active_model'
3
3
  require 'cassandra-cql'
4
+ require 'cassandra_object/errors'
4
5
 
5
6
  module CassandraObject
6
7
  extend ActiveSupport::Autoload
@@ -8,6 +8,7 @@ class CassandraObject::BaseTest < CassandraObject::TestCase
8
8
  end
9
9
 
10
10
  test 'base_class' do
11
+ assert_equal CassandraObject::Base, CassandraObject::Base
11
12
  assert_equal Son, Son.base_class
12
13
  assert_equal Son, Grandson.base_class
13
14
  end
@@ -49,4 +49,14 @@ class CassandraObject::BelongsToTest < CassandraObject::TestCase
49
49
  record = TestObject.find(record.id)
50
50
  assert_equal issue, record.target
51
51
  end
52
+
53
+ test 'belongs_to clear cache after reload' do
54
+ issue = Issue.create
55
+ record = TestObject.create(issue: issue)
56
+ issue.destroy
57
+
58
+ assert_not_nil record.issue
59
+ assert_nil TestObject.find(record.id).issue
60
+ assert_nil record.reload.issue
61
+ end
52
62
  end
@@ -14,7 +14,7 @@ class CassandraObject::ConfigTest < CassandraObject::TestCase
14
14
  assert_equal 10, config.thrift_options[:timeout]
15
15
  assert_equal 'NetworkTopologyStrategy', config.keyspace_options[:placement_strategy]
16
16
  end
17
-
17
+
18
18
  test 'defaults' do
19
19
  config = CassandraObject::Config.new(keyspace: 'widget_factory')
20
20
 
@@ -26,6 +26,8 @@ class CassandraObject::PersistenceTest < CassandraObject::TestCase
26
26
  first_issue = second_issue = nil
27
27
 
28
28
  Issue.batch do
29
+ assert Issue.batching?
30
+
29
31
  first_issue = Issue.create
30
32
  second_issue = Issue.create
31
33
 
@@ -33,26 +35,9 @@ class CassandraObject::PersistenceTest < CassandraObject::TestCase
33
35
  assert_raise(CassandraObject::RecordNotFound) { Issue.find(second_issue.id) }
34
36
  end
35
37
 
36
- assert_nothing_raised(CassandraObject::RecordNotFound) { Issue.find(first_issue.id) }
37
- assert_nothing_raised(CassandraObject::RecordNotFound) { Issue.find(second_issue.id) }
38
- end
39
-
40
- test "batch state" do
41
- first_issue = Issue.create
42
-
43
38
  assert !Issue.batching?
44
- Issue.batch_start
45
-
46
- second_issue = Issue.create
47
- assert Issue.batching?
48
-
49
39
  assert_nothing_raised(CassandraObject::RecordNotFound) { Issue.find(first_issue.id) }
50
- assert_raise(CassandraObject::RecordNotFound) { Issue.find(second_issue.id) }
51
-
52
- Issue.batch_end
53
-
54
40
  assert_nothing_raised(CassandraObject::RecordNotFound) { Issue.find(second_issue.id) }
55
-
56
41
  end
57
42
 
58
43
  test 'persistance inquiries' do
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: 4.7.1
4
+ version: 4.7.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,72 +10,72 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-11-23 00:00:00.000000000 Z
13
+ date: 2012-12-12 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activemodel
17
+ prerelease: false
17
18
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
19
  requirements:
20
20
  - - ! '>='
21
21
  - !ruby/object:Gem::Version
22
22
  version: '3.0'
23
+ none: false
23
24
  type: :runtime
24
- prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
26
  requirements:
28
27
  - - ! '>='
29
28
  - !ruby/object:Gem::Version
30
29
  version: '3.0'
30
+ none: false
31
31
  - !ruby/object:Gem::Dependency
32
32
  name: cassandra-cql
33
+ prerelease: false
33
34
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
35
  requirements:
36
36
  - - ! '>='
37
37
  - !ruby/object:Gem::Version
38
38
  version: '0'
39
+ none: false
39
40
  type: :runtime
40
- prerelease: false
41
41
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
42
  requirements:
44
43
  - - ! '>='
45
44
  - !ruby/object:Gem::Version
46
45
  version: '0'
46
+ none: false
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: thrift_client
49
+ prerelease: false
49
50
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.8.0
55
+ none: false
55
56
  type: :runtime
56
- prerelease: false
57
57
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
58
  requirements:
60
59
  - - ~>
61
60
  - !ruby/object:Gem::Version
62
61
  version: 0.8.0
62
+ none: false
63
63
  - !ruby/object:Gem::Dependency
64
64
  name: bundler
65
+ prerelease: false
65
66
  requirement: !ruby/object:Gem::Requirement
66
- none: false
67
67
  requirements:
68
68
  - - ! '>='
69
69
  - !ruby/object:Gem::Version
70
70
  version: '0'
71
+ none: false
71
72
  type: :development
72
- prerelease: false
73
73
  version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
74
  requirements:
76
75
  - - ! '>='
77
76
  - !ruby/object:Gem::Version
78
77
  version: '0'
78
+ none: false
79
79
  description: Cassandra ActiveModel
80
80
  email: gems@gotime.com
81
81
  executables: []
@@ -184,17 +184,17 @@ rdoc_options: []
184
184
  require_paths:
185
185
  - lib
186
186
  required_ruby_version: !ruby/object:Gem::Requirement
187
- none: false
188
187
  requirements:
189
188
  - - ! '>='
190
189
  - !ruby/object:Gem::Version
191
190
  version: 1.9.2
192
- required_rubygems_version: !ruby/object:Gem::Requirement
193
191
  none: false
192
+ required_rubygems_version: !ruby/object:Gem::Requirement
194
193
  requirements:
195
194
  - - ! '>='
196
195
  - !ruby/object:Gem::Version
197
196
  version: 1.3.5
197
+ none: false
198
198
  requirements: []
199
199
  rubyforge_project:
200
200
  rubygems_version: 1.8.24