gotime-cassandra_object 2.6.1 → 2.6.2

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 = '2.6.1'
5
+ s.version = '2.6.2'
6
6
  s.description = 'Cassandra ActiveModel'
7
7
  s.summary = 'Cassandra ActiveModel'
8
8
 
@@ -52,7 +52,7 @@ module CassandraObject
52
52
  @key = attributes.delete(:key)
53
53
  @new_record = true
54
54
  @destroyed = false
55
- @attributes = {}.with_indifferent_access
55
+ @attributes = {}
56
56
  self.attributes = attributes
57
57
  @schema_version = self.class.current_schema_version
58
58
  end
@@ -20,6 +20,14 @@ module CassandraObject
20
20
  end
21
21
  end
22
22
 
23
+ # <tt>reload</tt> the record and clears changed attributes.
24
+ def reload
25
+ super.tap do
26
+ @previously_changed.try :clear
27
+ @changed_attributes.clear
28
+ end
29
+ end
30
+
23
31
  def write_attribute(name, value)
24
32
  name = name.to_s
25
33
  unless attribute_changed?(name)
@@ -2,24 +2,41 @@ module CassandraObject
2
2
  module Types
3
3
  class ArrayType < BaseType
4
4
  class Proxy < BasicObject
5
+ instance_methods.each { |m| undef_method m }
6
+
5
7
  attr_accessor :record, :name, :array, :options
6
8
  def initialize(record, name, array, options)
7
9
  @record = record
8
- @name = name
10
+ @name = name.to_s
9
11
  @array = array.presence || []
10
12
  @options = options
11
13
  end
12
14
 
13
15
  def <<(obj)
14
- array << obj
15
- array.sort!
16
- array.uniq! if options[:unique]
17
- record.send("#{name}=", array)
16
+ modifying do
17
+ array << obj
18
+ array.uniq! if options[:unique]
19
+ end
18
20
  end
19
21
 
20
- def method_missing(method, *args, &block)
21
- array.send(method, *args, &block)
22
- end
22
+ private
23
+ def method_missing(method, *args, &block)
24
+ array.send(method, *args, &block)
25
+ end
26
+
27
+ def modifying
28
+ unless record.changed_attributes.include?(name)
29
+ original = array.dup
30
+ end
31
+
32
+ yield
33
+
34
+ if !record.changed_attributes.key?(name) && original.sort != array.sort
35
+ record.changed_attributes[name] = original
36
+ end
37
+
38
+ record.send("#{name}=", array)
39
+ end
23
40
  end
24
41
 
25
42
  def ignore_nil?
data/test/dirty_test.rb CHANGED
@@ -15,4 +15,16 @@ class CassandraObject::DirtyTest < CassandraObject::TestCase
15
15
 
16
16
  assert !record.changed?
17
17
  end
18
+
19
+ test 'reload clears dirty' do
20
+ record = TestRecord.create!(name: 'foo')
21
+ record = TestRecord.find(record.id)
22
+
23
+ record.name = 'bar'
24
+ assert record.changed?
25
+
26
+ record.reload
27
+
28
+ assert !record.changed?
29
+ end
18
30
  end
data/test/test_helper.rb CHANGED
@@ -4,6 +4,11 @@ require 'test/unit'
4
4
  require 'cassandra/0.8'
5
5
  require 'gotime-cassandra_object'
6
6
 
7
+ CassandraObject::Base.establish_connection(
8
+ keyspace: 'place_directory_development',
9
+ servers: '127.0.0.1:9160'
10
+ )
11
+
7
12
  class Issue < CassandraObject::Base
8
13
  key :uuid
9
14
  string :description
@@ -12,11 +17,6 @@ end
12
17
  module CassandraObject
13
18
  class TestCase < ActiveSupport::TestCase
14
19
  setup do
15
- CassandraObject::Base.establish_connection(
16
- keyspace: 'place_directory_development',
17
- # servers: '192.168.0.100:9160'
18
- servers: '127.0.0.1:9160'
19
- )
20
20
  end
21
21
 
22
22
  teardown do
@@ -29,7 +29,7 @@ module CassandraObject
29
29
  end
30
30
 
31
31
  module Types
32
- class TestCase < ActiveSupport::TestCase
32
+ class TestCase < CassandraObject::TestCase
33
33
  attr_accessor :coder
34
34
  setup do
35
35
  @coder = self.class.name.sub(/Test$/, '').constantize.new
@@ -18,19 +18,30 @@ class CassandraObject::Types::ArrayTypeTest < CassandraObject::Types::TestCase
18
18
  end
19
19
 
20
20
  class TestIssue < CassandraObject::Base
21
- self.column_family = 'Issue'
22
- array :favorite_colors
21
+ key :uuid
22
+ self.column_family = 'Issues'
23
+ array :favorite_colors, unique: true
23
24
  end
24
25
 
25
- test 'wrap' do
26
- issue = TestIssue.new
27
- colors = []
28
- wrapper = coder.wrap(issue, 'favorite_colors', colors)
29
-
30
- assert_kind_of Array, wrapper
26
+ test 'array attribute' do
27
+ issue = TestIssue.new favorite_colors: []
31
28
 
32
- assert !issue.changed?
33
- wrapper << 'red'
29
+ assert_kind_of Array, issue.favorite_colors
30
+ issue.favorite_colors << 'red'
31
+
34
32
  assert issue.changed?
33
+ assert_equal({'favorite_colors' => [nil, ['red']]}, issue.changes)
34
+ end
35
+
36
+ test 'array uniques' do
37
+ issue = TestIssue.create! favorite_colors: ['red', 'blue']
38
+
39
+ issue.favorite_colors << 'red'
40
+ assert_equal ['red', 'blue'], issue.favorite_colors
41
+ assert !issue.changed?
42
+
43
+ issue.favorite_colors << 'yellow'
44
+ assert_equal ['red', 'blue', 'yellow'], issue.favorite_colors
45
+ assert_equal({'favorite_colors' => [['red', 'blue'], ['red', 'blue', 'yellow']]}, issue.changes)
35
46
  end
36
47
  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.6.1
4
+ version: 2.6.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -14,7 +14,7 @@ date: 2011-08-29 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activemodel
17
- requirement: &70147973264920 !ruby/object:Gem::Requirement
17
+ requirement: &70186041043380 !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: *70147973264920
25
+ version_requirements: *70186041043380
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: cassandra
28
- requirement: &70147973264260 !ruby/object:Gem::Requirement
28
+ requirement: &70186041042820 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 0.12.0
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *70147973264260
36
+ version_requirements: *70186041042820
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: bundler
39
- requirement: &70147973263640 !ruby/object:Gem::Requirement
39
+ requirement: &70186041042140 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,7 +44,7 @@ dependencies:
44
44
  version: 1.0.0
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *70147973263640
47
+ version_requirements: *70186041042140
48
48
  description: Cassandra ActiveModel
49
49
  email: gems@gotime.com
50
50
  executables: []