gotime-cassandra_object 2.6.4 → 2.7.0
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/attributes.rb +8 -7
- data/lib/cassandra_object/base.rb +7 -1
- data/lib/cassandra_object/persistence.rb +8 -11
- data/lib/cassandra_object/types/array_type.rb +2 -2
- data/lib/cassandra_object/types/base_type.rb +2 -2
- data/lib/cassandra_object/types/date_type.rb +0 -1
- data/test/base_test.rb +8 -1
- data/test/dirty_test.rb +12 -2
- data/test/types/array_type_test.rb +0 -4
- data/test/types/base_type_test.rb +3 -2
- metadata +7 -7
| @@ -8,8 +8,9 @@ module CassandraObject | |
| 8 8 | 
             
                end
         | 
| 9 9 |  | 
| 10 10 | 
             
                def instantiate(record, value)
         | 
| 11 | 
            -
                   | 
| 12 | 
            -
             | 
| 11 | 
            +
                  value ||= coder.default
         | 
| 12 | 
            +
                  return unless value
         | 
| 13 | 
            +
                    
         | 
| 13 14 | 
             
                  value = value.kind_of?(expected_type) ? value : coder.decode(value)
         | 
| 14 15 | 
             
                  coder.wrap(record, name, value)
         | 
| 15 16 | 
             
                end
         | 
| @@ -21,7 +22,7 @@ module CassandraObject | |
| 21 22 |  | 
| 22 23 | 
             
                included do
         | 
| 23 24 | 
             
                  class_attribute :model_attributes
         | 
| 24 | 
            -
                  self.model_attributes = {} | 
| 25 | 
            +
                  self.model_attributes = {}
         | 
| 25 26 |  | 
| 26 27 | 
             
                  attribute_method_suffix("", "=")
         | 
| 27 28 |  | 
| @@ -56,15 +57,15 @@ module CassandraObject | |
| 56 57 | 
             
                      type_mapping = CassandraObject::Type::TypeMapping.new(expected_type, coder)
         | 
| 57 58 | 
             
                    end
         | 
| 58 59 |  | 
| 59 | 
            -
                    model_attributes[name] = Attribute.new(name, type_mapping, options)
         | 
| 60 | 
            +
                    model_attributes[name.to_sym] = Attribute.new(name, type_mapping, options)
         | 
| 60 61 | 
             
                  end
         | 
| 61 62 |  | 
| 62 | 
            -
                  def json(name)
         | 
| 63 | 
            -
                    attribute(name, type: :hash)
         | 
| 63 | 
            +
                  def json(name, options = {})
         | 
| 64 | 
            +
                    attribute(name, options.update(type: :hash))
         | 
| 64 65 | 
             
                  end
         | 
| 65 66 |  | 
| 66 67 | 
             
                  def instantiate_attribute(record, name, value)
         | 
| 67 | 
            -
                    if model_attribute = model_attributes[name]
         | 
| 68 | 
            +
                    if model_attribute = model_attributes[name.to_sym]
         | 
| 68 69 | 
             
                      model_attribute.instantiate(record, value)
         | 
| 69 70 | 
             
                    else
         | 
| 70 71 | 
             
                      raise NoMethodError, "Unknown attribute #{name.inspect}"
         | 
| @@ -52,8 +52,14 @@ module CassandraObject | |
| 52 52 | 
             
                  @key = attributes.delete(:key)
         | 
| 53 53 | 
             
                  @new_record = true
         | 
| 54 54 | 
             
                  @destroyed = false
         | 
| 55 | 
            -
                  @attributes = {} | 
| 55 | 
            +
                  @attributes = {}
         | 
| 56 56 | 
             
                  self.attributes = attributes
         | 
| 57 | 
            +
                  model_attributes.each do |k, model_attribute|
         | 
| 58 | 
            +
                    unless read_attribute(k)
         | 
| 59 | 
            +
                      write_attribute(k, model_attribute.instantiate(self, nil))
         | 
| 60 | 
            +
                    end
         | 
| 61 | 
            +
                  end
         | 
| 62 | 
            +
             | 
| 57 63 | 
             
                  @schema_version = self.class.current_schema_version
         | 
| 58 64 | 
             
                end
         | 
| 59 65 |  | 
| @@ -23,7 +23,7 @@ module CassandraObject | |
| 23 23 |  | 
| 24 24 | 
             
                  def write(key, attributes, schema_version)
         | 
| 25 25 | 
             
                    key.tap do |key|
         | 
| 26 | 
            -
                      attributes =  | 
| 26 | 
            +
                      attributes = encode_attributes(attributes, schema_version)
         | 
| 27 27 | 
             
                      ActiveSupport::Notifications.instrument("insert.cassandra_object", column_family: column_family, key: key, attributes: attributes) do
         | 
| 28 28 | 
             
                        connection.insert(column_family, key.to_s, attributes, consistency: thrift_write_consistency)
         | 
| 29 29 | 
             
                      end
         | 
| @@ -31,31 +31,28 @@ module CassandraObject | |
| 31 31 | 
             
                  end
         | 
| 32 32 |  | 
| 33 33 | 
             
                  def instantiate(key, attributes)
         | 
| 34 | 
            -
                    # remove any attributes we don't know about. we would do this earlier, but we want to make such
         | 
| 35 | 
            -
                    # attributes available to migrations
         | 
| 36 | 
            -
                    attributes.delete_if { |k,_| model_attributes[k].nil? }
         | 
| 37 | 
            -
             | 
| 38 34 | 
             
                    allocate.tap do |object|
         | 
| 39 35 | 
             
                      object.instance_variable_set("@schema_version", attributes.delete('schema_version'))
         | 
| 40 | 
            -
                      object.instance_variable_set("@key", parse_key(key))
         | 
| 36 | 
            +
                      object.instance_variable_set("@key", parse_key(key)) if key
         | 
| 41 37 | 
             
                      object.instance_variable_set("@new_record", false)
         | 
| 42 38 | 
             
                      object.instance_variable_set("@destroyed", false)
         | 
| 43 | 
            -
                      object.instance_variable_set("@attributes",  | 
| 39 | 
            +
                      object.instance_variable_set("@attributes", instantiate_attributes(object, attributes))
         | 
| 44 40 | 
             
                    end
         | 
| 45 41 | 
             
                  end
         | 
| 46 42 |  | 
| 47 | 
            -
                  def  | 
| 43 | 
            +
                  def encode_attributes(attributes, schema_version)
         | 
| 48 44 | 
             
                    attributes.inject({}) do |memo, (column_name, value)|
         | 
| 49 45 | 
             
                      # cassandra stores bytes, not strings, so it has no concept of encodings. The ruby thrift gem 
         | 
| 50 46 | 
             
                      # expects all strings to be encoded as ascii-8bit.
         | 
| 51 47 | 
             
                      # don't attempt to encode columns that are nil
         | 
| 52 | 
            -
                      memo[column_name.to_s] = value.nil? ? '' : model_attributes[column_name].coder.encode(value).force_encoding('ASCII-8BIT')
         | 
| 48 | 
            +
                      memo[column_name.to_s] = value.nil? ? '' : model_attributes[column_name.to_sym].coder.encode(value).force_encoding('ASCII-8BIT')
         | 
| 53 49 | 
             
                      memo
         | 
| 54 50 | 
             
                    end.merge({"schema_version" => schema_version.to_s})
         | 
| 55 51 | 
             
                  end
         | 
| 56 52 |  | 
| 57 | 
            -
                  def  | 
| 58 | 
            -
                     | 
| 53 | 
            +
                  def instantiate_attributes(object, attributes)
         | 
| 54 | 
            +
                    attributes = attributes.symbolize_keys
         | 
| 55 | 
            +
                    Hash[model_attributes.map { |k, model_attribute| [k.to_s, model_attribute.instantiate(object, attributes[k])] }]
         | 
| 59 56 | 
             
                  end
         | 
| 60 57 | 
             
                end
         | 
| 61 58 |  | 
    
        data/test/base_test.rb
    CHANGED
    
    | @@ -6,7 +6,7 @@ class CassandraObject::BaseTest < CassandraObject::TestCase | |
| 6 6 |  | 
| 7 7 | 
             
              class Grandson < Son
         | 
| 8 8 | 
             
              end
         | 
| 9 | 
            -
             | 
| 9 | 
            +
             | 
| 10 10 | 
             
              test 'base_class' do
         | 
| 11 11 | 
             
                assert_equal Son, Son.base_class
         | 
| 12 12 | 
             
                assert_equal Son, Grandson.base_class
         | 
| @@ -16,6 +16,13 @@ class CassandraObject::BaseTest < CassandraObject::TestCase | |
| 16 16 | 
             
                assert_equal 'CassandraObject::BaseTest::Sons', Son.column_family
         | 
| 17 17 | 
             
              end
         | 
| 18 18 |  | 
| 19 | 
            +
              test 'initialiaze' do
         | 
| 20 | 
            +
                issue = Issue.new
         | 
| 21 | 
            +
                
         | 
| 22 | 
            +
                assert issue.new_record?
         | 
| 23 | 
            +
                assert !issue.destroyed?
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 19 26 | 
             
              test 'to_param' do
         | 
| 20 27 | 
             
                issue = Issue.create
         | 
| 21 28 | 
             
                assert_equal issue.id, issue.to_param
         | 
    
        data/test/dirty_test.rb
    CHANGED
    
    | @@ -8,10 +8,20 @@ class CassandraObject::DirtyTest < CassandraObject::TestCase | |
| 8 8 | 
             
              end
         | 
| 9 9 |  | 
| 10 10 | 
             
              test 'save clears dirty' do
         | 
| 11 | 
            -
                record = TestRecord.new | 
| 11 | 
            +
                record = TestRecord.new name: 'foo'
         | 
| 12 12 | 
             
                assert record.changed?
         | 
| 13 13 |  | 
| 14 | 
            -
                record.save
         | 
| 14 | 
            +
                record.save!
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                assert !record.changed?
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              test 'reload clears dirty' do
         | 
| 20 | 
            +
                record = TestRecord.create! name: 'foo'
         | 
| 21 | 
            +
                record.name = 'bar'
         | 
| 22 | 
            +
                assert record.changed?
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                record.reload
         | 
| 15 25 |  | 
| 16 26 | 
             
                assert !record.changed?
         | 
| 17 27 | 
             
              end
         | 
| @@ -1,8 +1,9 @@ | |
| 1 1 | 
             
            require 'test_helper'
         | 
| 2 2 |  | 
| 3 3 | 
             
            class CassandraObject::Types::BaseTypeTest < CassandraObject::Types::TestCase
         | 
| 4 | 
            -
              test ' | 
| 5 | 
            -
                assert_equal  | 
| 4 | 
            +
              test 'default' do
         | 
| 5 | 
            +
                assert_equal nil, coder.default
         | 
| 6 | 
            +
                assert_equal '5', CassandraObject::Types::BaseType.new(default: '5').default
         | 
| 6 7 | 
             
              end
         | 
| 7 8 |  | 
| 8 9 | 
             
              test 'encode' 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: 2. | 
| 4 | 
            +
              version: 2.7.0
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -14,7 +14,7 @@ date: 2011-08-30 00:00:00.000000000Z | |
| 14 14 | 
             
            dependencies:
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 16 | 
             
              name: activemodel
         | 
| 17 | 
            -
              requirement: & | 
| 17 | 
            +
              requirement: &70185349554920 !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: * | 
| 25 | 
            +
              version_requirements: *70185349554920
         | 
| 26 26 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 27 27 | 
             
              name: cassandra
         | 
| 28 | 
            -
              requirement: & | 
| 28 | 
            +
              requirement: &70185349554140 !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: * | 
| 36 | 
            +
              version_requirements: *70185349554140
         | 
| 37 37 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 38 38 | 
             
              name: bundler
         | 
| 39 | 
            -
              requirement: & | 
| 39 | 
            +
              requirement: &70185349553500 !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: * | 
| 47 | 
            +
              version_requirements: *70185349553500
         | 
| 48 48 | 
             
            description: Cassandra ActiveModel
         | 
| 49 49 | 
             
            email: gems@gotime.com
         | 
| 50 50 | 
             
            executables: []
         |