sessionm-cassandra_object 2.2.55 → 2.3.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/lib/cassandra_object.rb +1 -0
- data/lib/cassandra_object/async_connection.rb +11 -4
- data/lib/cassandra_object/base.rb +2 -1
- data/lib/cassandra_object/configuration.rb +29 -0
- data/lib/cassandra_object/connection.rb +12 -4
- data/lib/cassandra_object/consistency.rb +19 -8
- data/lib/cassandra_object/migrations.rb +1 -1
- data/lib/cassandra_object/schema/migration.rb +1 -1
- data/lib/cassandra_object/tasks/column_family.rb +9 -3
- data/lib/cassandra_object/tasks/keyspace.rb +9 -2
- data/sessionm-cassandra_object.gemspec +1 -1
- data/test/consistency_test.rb +1 -5
- metadata +3 -2
    
        data/lib/cassandra_object.rb
    CHANGED
    
    
| @@ -42,11 +42,18 @@ module CassandraObject | |
| 42 42 | 
             
                module ClassMethods
         | 
| 43 43 | 
             
                  DEFAULT_OPTIONS = {
         | 
| 44 44 | 
             
                    servers: "127.0.0.1:9160",
         | 
| 45 | 
            -
                    thrift: {}
         | 
| 46 45 | 
             
                  }
         | 
| 47 | 
            -
                   | 
| 48 | 
            -
                     | 
| 49 | 
            -
             | 
| 46 | 
            +
                  DEFAULT_THRIFT_OPTIONS = {
         | 
| 47 | 
            +
                    exception_class_overrides: [],
         | 
| 48 | 
            +
                  }
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  # This doesn't open a connection. It merely conifgures the connection object.
         | 
| 51 | 
            +
                  def establish_connection(config)
         | 
| 52 | 
            +
                    spec = config.reverse_merge(DEFAULT_OPTIONS)
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                    spec[:thrift] = (spec[:thrift] || {}).reverse_merge(DEFAULT_THRIFT_OPTIONS)
         | 
| 55 | 
            +
                    spec[:thrift][:exception_class_overrides] = spec[:thrift][:exception_class_overrides].map(&:constantize)
         | 
| 56 | 
            +
             | 
| 50 57 | 
             
                    self.connection_spec = spec
         | 
| 51 58 | 
             
                  end
         | 
| 52 59 | 
             
                end
         | 
| @@ -29,7 +29,8 @@ module CassandraObject | |
| 29 29 | 
             
                extend ActiveModel::Naming
         | 
| 30 30 | 
             
                include ActiveModel::Conversion
         | 
| 31 31 | 
             
                extend ActiveSupport::DescendantsTracker
         | 
| 32 | 
            -
             | 
| 32 | 
            +
             | 
| 33 | 
            +
                include Configuration
         | 
| 33 34 | 
             
                include Fiber.respond_to?(:current) ? AsyncConnection : Connection
         | 
| 34 35 | 
             
                include Consistency
         | 
| 35 36 | 
             
                include RowTTL
         | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            module CassandraObject
         | 
| 2 | 
            +
              module Configuration
         | 
| 3 | 
            +
                extend ActiveSupport::Concern
         | 
| 4 | 
            +
                
         | 
| 5 | 
            +
                module ClassMethods
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  def recursive_symbolize_keys!(hash)
         | 
| 8 | 
            +
                    hash.symbolize_keys!
         | 
| 9 | 
            +
                    hash.values.select{|v| v.is_a? Hash}.each{|h| recursive_symbolize_keys!(h)}
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  @@config = nil
         | 
| 13 | 
            +
                  def config=(config)
         | 
| 14 | 
            +
                    raise('attempt to set config multiple times') if @@config
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                    recursive_symbolize_keys!(config)
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                    (@@config = config).tap do
         | 
| 19 | 
            +
                      set_default_consistencies(@@config)
         | 
| 20 | 
            +
                      establish_connection(@@config)
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                  def config
         | 
| 24 | 
            +
                    @@config
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
            end
         | 
| @@ -9,11 +9,19 @@ module CassandraObject | |
| 9 9 | 
             
                module ClassMethods
         | 
| 10 10 | 
             
                  DEFAULT_OPTIONS = {
         | 
| 11 11 | 
             
                    servers: "127.0.0.1:9160",
         | 
| 12 | 
            -
                    thrift: {}
         | 
| 13 12 | 
             
                  }
         | 
| 14 | 
            -
                   | 
| 15 | 
            -
                     | 
| 16 | 
            -
             | 
| 13 | 
            +
                  DEFAULT_THRIFT_OPTIONS = {
         | 
| 14 | 
            +
                    exception_class_overrides: [],
         | 
| 15 | 
            +
                  }
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  # This doesn't open a connection. It merely conifgures the connection object.
         | 
| 18 | 
            +
                  def establish_connection(config)
         | 
| 19 | 
            +
                    spec = config.reverse_merge(DEFAULT_OPTIONS)
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    spec[:thrift] = (spec[:thrift] || {}).reverse_merge(DEFAULT_THRIFT_OPTIONS)
         | 
| 22 | 
            +
                    spec[:thrift][:exception_class_overrides] = spec[:thrift][:exception_class_overrides].map(&:constantize)
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                    self.connection = Cassandra.new(spec[:keyspace], spec[:servers], spec[:thrift])
         | 
| 17 25 | 
             
                  end
         | 
| 18 26 | 
             
                end
         | 
| 19 27 | 
             
              end
         | 
| @@ -3,29 +3,40 @@ module CassandraObject | |
| 3 3 | 
             
                extend ActiveSupport::Concern
         | 
| 4 4 |  | 
| 5 5 | 
             
                included do
         | 
| 6 | 
            -
                  cattr_accessor :consistency_levels
         | 
| 7 | 
            -
                  self.consistency_levels = [:one, :quorum, :all]
         | 
| 8 | 
            -
             | 
| 9 6 | 
             
                  class_attribute :write_consistency
         | 
| 10 7 | 
             
                  class_attribute :read_consistency
         | 
| 11 | 
            -
                  self.write_consistency  = :quorum
         | 
| 12 | 
            -
                  self.read_consistency   = :quorum
         | 
| 13 8 | 
             
                end
         | 
| 14 9 |  | 
| 15 10 | 
             
                module ClassMethods
         | 
| 16 11 | 
             
                  THRIFT_LEVELS = {
         | 
| 17 12 | 
             
                    :one    => Cassandra::Consistency::ONE,
         | 
| 18 13 | 
             
                    :quorum => Cassandra::Consistency::QUORUM,
         | 
| 14 | 
            +
                    :local_quorum => Cassandra::Consistency::LOCAL_QUORUM,
         | 
| 19 15 | 
             
                    :all    => Cassandra::Consistency::ALL
         | 
| 20 16 | 
             
                  }
         | 
| 17 | 
            +
                  
         | 
| 18 | 
            +
                  DEFAULT_OPTIONS = {
         | 
| 19 | 
            +
                    :read_default => :quorum,
         | 
| 20 | 
            +
                    :write_default => :quorum,
         | 
| 21 | 
            +
                  }
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  @@default_read_consistency
         | 
| 24 | 
            +
                  @@default_write_consistency
         | 
| 25 | 
            +
                  def set_default_consistencies(config)
         | 
| 26 | 
            +
                    config = (config[:consistency] || {}).reverse_merge(DEFAULT_OPTIONS)
         | 
| 27 | 
            +
                    @@default_read_consistency = config[:read_default].to_sym
         | 
| 28 | 
            +
                    @@default_write_consistency = config[:write_default].to_sym
         | 
| 29 | 
            +
                  end
         | 
| 21 30 |  | 
| 22 31 | 
             
                  def thrift_read_consistency
         | 
| 23 | 
            -
                     | 
| 32 | 
            +
                    consistency = read_consistency || @@default_read_consistency
         | 
| 33 | 
            +
                    THRIFT_LEVELS[consistency] || (raise "Invalid consistency level #{consistency}")
         | 
| 24 34 | 
             
                  end
         | 
| 25 35 |  | 
| 26 36 | 
             
                  def thrift_write_consistency
         | 
| 27 | 
            -
                     | 
| 37 | 
            +
                    consistency = write_consistency || @@default_write_consistency
         | 
| 38 | 
            +
                    THRIFT_LEVELS[consistency] || (raise "Invalid consistency level #{consistency}")
         | 
| 28 39 | 
             
                  end
         | 
| 29 40 | 
             
                end
         | 
| 30 41 | 
             
              end
         | 
| 31 | 
            -
            end
         | 
| 42 | 
            +
            end
         | 
| @@ -23,7 +23,7 @@ module CassandraObject | |
| 23 23 | 
             
                  end
         | 
| 24 24 |  | 
| 25 25 | 
             
                  def attribute_will_change!(attribute)
         | 
| 26 | 
            -
                    logger.warn "#{self.class}##{attribute} added/removed/changed and attribute_will_change! not implemented."
         | 
| 26 | 
            +
                    Rails.logger.warn "#{self.class}##{attribute} added/removed/changed and attribute_will_change! not implemented."
         | 
| 27 27 | 
             
                  end
         | 
| 28 28 | 
             
                end
         | 
| 29 29 |  | 
| @@ -45,7 +45,7 @@ module CassandraObject | |
| 45 45 | 
             
                  # Scroll down to the CfDef definition.
         | 
| 46 46 | 
             
                  def self.create_column_family(name, &block)
         | 
| 47 47 | 
             
                    say_with_time("create_column_family #{name}") do
         | 
| 48 | 
            -
                      column_family_tasks.create(name, &block)
         | 
| 48 | 
            +
                      column_family_tasks.create(name, CassandraObject::Base.config[:column_family_defaults], &block)
         | 
| 49 49 | 
             
                    end
         | 
| 50 50 | 
             
                  end
         | 
| 51 51 |  | 
| @@ -21,12 +21,18 @@ module CassandraObject | |
| 21 21 | 
             
                    connection.schema.cf_defs.find { |cf_def| cf_def.name == name.to_s }
         | 
| 22 22 | 
             
                  end
         | 
| 23 23 |  | 
| 24 | 
            -
                  def create(name, &block)
         | 
| 24 | 
            +
                  def create(name, options={}, &block)
         | 
| 25 | 
            +
                    options = {
         | 
| 26 | 
            +
                      :comparator_type => 'BytesType',
         | 
| 27 | 
            +
                      :column_type => 'Standard',
         | 
| 28 | 
            +
                    }.merge(options)
         | 
| 29 | 
            +
             | 
| 25 30 | 
             
                    cf = Cassandra::ColumnFamily.new
         | 
| 26 31 | 
             
                    cf.name = name.to_s
         | 
| 27 32 | 
             
                    cf.keyspace = @keyspace.to_s
         | 
| 28 | 
            -
                     | 
| 29 | 
            -
             | 
| 33 | 
            +
                    options.each do |option, value|
         | 
| 34 | 
            +
                      cf.send("#{option}=", value)
         | 
| 35 | 
            +
                    end
         | 
| 30 36 |  | 
| 31 37 | 
             
                    block.call cf if block
         | 
| 32 38 |  | 
| @@ -18,9 +18,16 @@ module CassandraObject | |
| 18 18 | 
             
                  end
         | 
| 19 19 |  | 
| 20 20 | 
             
                  def create(name, options = {})
         | 
| 21 | 
            +
                    options = options.symbolize_keys
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                    replication_opts = {
         | 
| 24 | 
            +
                      :strategy => 'org.apache.cassandra.locator.SimpleStrategy',
         | 
| 25 | 
            +
                      :factor => 1,
         | 
| 26 | 
            +
                    }.merge(options[:replication].symbolize_keys || {})
         | 
| 27 | 
            +
             | 
| 21 28 | 
             
                    opts = { :name => name.to_s,
         | 
| 22 | 
            -
                             :strategy_class =>  | 
| 23 | 
            -
                             :replication_factor =>  | 
| 29 | 
            +
                             :strategy_class => replication_opts[:strategy],
         | 
| 30 | 
            +
                             :replication_factor => replication_opts[:factor],
         | 
| 24 31 | 
             
                             :cf_defs => [] }.merge(options)
         | 
| 25 32 |  | 
| 26 33 | 
             
                    ks = Cassandra::Keyspace.new.with_fields(opts)
         | 
    
        data/test/consistency_test.rb
    CHANGED
    
    | @@ -4,10 +4,6 @@ class CassandraObject::ConsistencyTest < CassandraObject::TestCase | |
| 4 4 | 
             
              class TestModel < CassandraObject::Base
         | 
| 5 5 | 
             
              end
         | 
| 6 6 |  | 
| 7 | 
            -
              test 'consistency_levels' do
         | 
| 8 | 
            -
                assert_equal [:one, :quorum, :all].to_set, TestModel.consistency_levels.to_set
         | 
| 9 | 
            -
              end
         | 
| 10 | 
            -
             | 
| 11 7 | 
             
              test 'thrift_write_consistency' do
         | 
| 12 8 | 
             
                TestModel.write_consistency = :all
         | 
| 13 9 | 
             
                assert_equal Cassandra::Consistency::ALL, TestModel.thrift_write_consistency
         | 
| @@ -17,4 +13,4 @@ class CassandraObject::ConsistencyTest < CassandraObject::TestCase | |
| 17 13 | 
             
                TestModel.read_consistency = :all
         | 
| 18 14 | 
             
                assert_equal Cassandra::Consistency::ALL, TestModel.thrift_read_consistency
         | 
| 19 15 | 
             
              end
         | 
| 20 | 
            -
            end
         | 
| 16 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: sessionm-cassandra_object
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2. | 
| 4 | 
            +
              version: 2.3.0
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -11,7 +11,7 @@ authors: | |
| 11 11 | 
             
            autorequire: 
         | 
| 12 12 | 
             
            bindir: bin
         | 
| 13 13 | 
             
            cert_chain: []
         | 
| 14 | 
            -
            date: 2012- | 
| 14 | 
            +
            date: 2012-11-01 00:00:00.000000000 Z
         | 
| 15 15 | 
             
            dependencies:
         | 
| 16 16 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 17 17 | 
             
              name: rails
         | 
| @@ -85,6 +85,7 @@ files: | |
| 85 85 | 
             
            - lib/cassandra_object/batches.rb
         | 
| 86 86 | 
             
            - lib/cassandra_object/callbacks.rb
         | 
| 87 87 | 
             
            - lib/cassandra_object/collection.rb
         | 
| 88 | 
            +
            - lib/cassandra_object/configuration.rb
         | 
| 88 89 | 
             
            - lib/cassandra_object/connection.rb
         | 
| 89 90 | 
             
            - lib/cassandra_object/consistency.rb
         | 
| 90 91 | 
             
            - lib/cassandra_object/cursor.rb
         |